Exp3 免杀原理与实践
1、实验内容
1.1、使用msf
1.1.1、 确定基准线
首先看kali的ip
直接msfvenom的结果,不加其他的东西:
使用VirusTotal得到的检测这个程序得到的结果:
所以最终结果是69款软件中有49款检测出来了,49/69是基准线。
1.1.2、使用编码器
输入如下的命令使用e参数对生成的文件内容进行编码,再使用b参数设置规避字符集来去除代表字符串结束的\x00字符(也可以理解成一直编码直到里面没有了指定的字符)。
将编码之后的结果上传到virusTotal检测:
这,应该可以被理解成不变了。
然后,加入i参数增加迭代次数,下面指定为50次:
可以看到迭代编码50次的输出结果中因为遇到编码错误,迭代到了12次就终止了,因此这个5207_3.exe的实际迭代了12次。
迭代编码次数虽然不够但还是有的,再放进virusTotal里面检测一下:
这?!(不是说好了怎么编码都不管用的么,难道我做出来了??)
诶!
怎么只有0kb,还是我太naive了
果然,第13次编码迭代遇到的错误导致了5207_3.exe变成了空文件。
哎,我没有搜到为啥,就,先减少一下编码次数试一下吧,改成迭代10次:
然后,我们来检测一下迭代十次的结果:
网络不太好,有几个检测超时了,37/57和49/69相比变化应该不算大。
1.1.3、msfvenom生成jar之类的其他文件
用msfvenom的-l参数瞅瞅都能生成啥样的payload:
第一次用的时候没有分页或者像上图一样把输出重定向到另一个文件里,结果500多个结果把滚动条都搞崩溃了
打开输出重定向的文件payloadlist,前方高能:
上面肉眼可见的payload的取值就有安卓平台的,实验要求了jar文件,先搜个jar呗:
当然了,我搜jar没有搜到,搜Java才搜出来这么一大堆payload的取值:
再研究一下f参数后面可不可以接jar格式
哇晒,除了我要的jar之外,什么vb脚本asp啥的都可以啊
然后来实践一下:
这样,一个用Java反向tcp的payload生成的jar类型的可执行文件就新鲜出炉了
经过刚才的搜索,可选的其他类型的攻击载荷以及其他类型的可执行文件格式都出来了,想要生成别的就只是一个搜索再输入的过程了:
比如,生成一个dll:
其他的就,搜索,输入,
对了,把这个jar和dll测上一测
嘿嘿,比37低上了一点
那dll呢
妈耶,dll好惨
1.2、使用veil-evasion
在宿舍感人的网速下,下了好久才:
然后选个y开始装:
后面出来了一堆不知道咋回事的问题,主要就是要我安装东西(Python和Ruby之类的,但是指定的路径又不对,指定完了又会卡死)
只好重新开始选择s进行静默安装,好处就是,它知道自己要咋设置可以不出错,不会再问我问题了
在可用的payload列表里找到我们要的,因为我之前的shellcode是c写的,而且是tcp反弹连接,所以use7
用set来设置端口和ip
设置好之后,generate生成
生成好了之后来测一测veil的效果:
1.3、shellcode编程
在装veil的时候这边试一下shellcode编程
用C语言的格式生成一段shellcode代码的数组:
然后可以交叉编译也可以用Windows里的visualStudio
1.3.1、交叉编译
先编写一个C语言程序,加入shellcode,具体操作就是,把shellcode赋给一个全局变量数组,然后再将数组首地址强转为一个函数指针的指向,然后就可以通过函数名来调用shellcode了
调用mingw交叉编译:
检测一下交叉编译的结果:
1.4、vs、加壳、实现免杀
打开我尘封多年的vs,新建项目(还好当初计算机实习做完mfc之后没有卸载)
然后,用_asm格式来在c源代码里加入汇编
以及实验指导里这个位置我觉得不应该有分号:
vs生成的exe文件:
放到kali里面加壳
激动人心的时刻到了,360杀毒
怎么说呢,这个免杀的结果,我高兴了两秒,然后
这是因为360联网了吗,然后把我的程序上传了????????
上传了之后,我就从识别不出来变成有毒了????????
关闭了云上传功能之后360杀毒还是认识这个东西,好吧……
见了一面就记住我了……
让我再试一次另一款360,要是再不行,就得回去重新来了
目前没有扫描出来(关掉了云上传)但这样肯定还不算免杀,我想拿没见过我程序的杀软试一下,是不是真的是360杀毒的云安全计划杀的我。
运行文件,反弹回连kali试试
这里,360的“实时防护”是开着的,运行met5207upx没有检测出来,Kali那边:
成了
所以说如果360不开那个云安全计划,还是可以免杀的
啧,360这个云上传还是有点厉害的(想起来了当初我做实验编的人畜无害的程序都可以给我杀没)。
所以,免杀目前还是没有做出来,关了个功能也不算免杀我觉得。
1.5、用另一台电脑反弹
用我的旧电脑,打开360安全卫士,关掉360云安全计划
旧电脑的内网ip是10.1.1.137和kali在同一个网段上
它虽然没修好但是运行个exe还是可以的
但是,这个云安全计划,还是很常见的,我一会再试试再加一个加密壳看看。
1.6、加加密壳
自带的加密壳出问题了,缺少解释器……
把这个目录丢进Windows10里面试一下,诶不缺解释器了
试一下按照说明的办法运行
最后怎么还是不行啊,是不是和之前加的压缩壳有关系呢,找出来没有加压缩壳的exe文件
再在powershell里面运行一下
还是一样的结果……
怎么办呢,回到kali里用wine吧
用wine居然做出来了
那能不能给那个带压缩壳的套上一个加密壳呢
没问题
我要拿着这个去给360杀毒查杀了
打开刚才杀掉我文件的360杀毒
加压缩壳然后加加密壳的率先阵亡
查一下只有加密壳的
再次阵亡,360云安全计划之下,免杀与我无缘
只用vs编译的也不用说了。
2、问题回答
2.1、杀软是如何检测出来恶意代码的
基于特征码或者基于哈希:
比如一些早期病毒,编写者会署上自己的名字向大家展示自己的技术,比如CIH、Brain病毒
基于启发式检测:
有基于静态特征、基于代码仿真和基于行为的等等几种,总的来说就是通过判断程序的行为与恶意代码行为的相似程度。
我还听说过有基于机器学习的方法来检测的,但是我不太了解。
2.2、免杀是做什么的
让恶意代码不被杀毒软件查杀出来
2.3、免杀的基本方法有哪些
有改变特征码和改变行为两种,改变特征码可以用加壳、编码、用其他语言重写重编译来进行,如果要改变行为可以做反弹连接、附加在大段的正常代码上、利用内存操作等等
3、总结与体会
这次免杀实验之后,我了解到了要刻意做一个杀毒软件杀不出来的恶意代码其实很容易。所以,以后假期打游戏打不过去,就查查攻略了,修改器什么的就算了,下别的东西也是这样,要谨慎。360云安全计划很强大,被上传了,就会被全国联保……,后面多加几个壳都会被查出来
不过,我用vs编译+压缩壳实现了短短两秒钟的免杀,还是有一点点成就感的。