谷歌文档变身谷歌SOCKS:通过Google Drive实现C2通信
Luke Baggett //
如果您监控具有互联网访问权限的网络,几乎不可避免地会看到大量与谷歌服务器之间的流量。通过使用谷歌作为中继站混入谷歌流量,攻击者可能避免被检测。
攻击者如何利用谷歌作为中继?一种方法是使用Drive API,该API允许通过Google Drive自动化上传和下载数据。API简单快速,足以实现两个系统之间相对稳定的通信。SSH、Metasploit Meterpreter会话等均可通过此API中继传输。
我创建了一个名为google_socks.py的脚本作为概念验证。该脚本启动一个Python套接字对象,来自套接字的每组新数据都以特定名称作为新文件推送到Drive。每个脚本通过文件名知道要读取哪些文件。下图说明了两个系统如何通过此方法通信。
左侧客户端读取名为“File 2”的文件,并创建名为“File 1”的新文件。右侧客户端执行相反操作。使用此方法时,两个套接字应能像直接连接一样运行,但具有额外的延迟。
效果如何?让我们看几个演示:
基本数据传输和Shell
https://youtu.be/obtjoDRLcRs
在此视频中,两个google_socks.py脚本在本地端口监听Netcat客户端。脚本随后在套接字和Google Drive之间转发数据,允许Netcat客户端通信。
参数“-P 0.2”指定0.2秒的轮询间隔,“-j 0”指定0轮询随机化(即抖动),“-c 0”告诉脚本使用脚本中存储的第零组凭据。这些操作有助于防止API请求速率限制,当一个API客户端每秒向服务器发送超过10个查询时会发生此限制。
SSH
使用Google Drive作为中继涉及权衡。您获得高吞吐量,但延迟也高。当使用需要快速连续发送和接收小数据包的功能(如SSH)时,这一点变得更加明显。
https://youtu.be/oBCCU9al3Fs
在上述视频中,一个google_socks.py实例监听本地端口9090,另一个实例连接到端口22上的远程SSH服务器。SSH客户端随后连接到本地端口9090,流量通过Google Drive转发到远程SSH服务器。
Meterpreter
https://youtu.be/dF2DzehDeKo
Linux主机:192.168.56.1
Windows VM:192.168.56.101
Kali VM:192.168.56.102
在此演示中,Meterpreter通过Google Drive与多处理程序通信。Kali VM生成一个Meterpreter负载,连接到192.168.56.1端口9090的Linux主机。Linux主机监听192.168.56.1端口9090,然后将数据转发到Google Drive。另一个google_socks.py脚本将数据从Drive中继到Kali VM上192.168.56.102端口9090的多处理程序。
负载在Windows VM上执行,Meterpreter会话打开。需要一段时间才能完全加载以便meterpreter接受命令,这就是为什么进程列表命令最初失败。截图命令运行,完美工作。
想自己尝试吗?您可以在我的github上下载PoC脚本。
您需要运行–setup,它将解释如何为自己设置API访问。
以下是一些关于Python客户端库的有用资源: