应急响应-隧道篇
字数 1904 2025-08-22 12:22:36

SSH隧道技术详解与应急响应指南

一、SSH隧道基础

1.1 SSH常用参数

  • -C:压缩传输,提高传输速度
  • -f:将SSH传输转入后台执行,不占用当前shell
  • -N:静默连接,连接后看不到具体会话
  • -g:允许远程主机连接本地用于转发的端口
  • -L:本地端口转发
  • -R:远程端口转发
  • -D:动态转发(SOCKS代理)
  • -p:指定SSH端口

1.2 隧道类型

  1. 本地端口转发(Local Port Forwarding)

    • 命令格式:ssh -L <本地端口>:<目标主机>:<目标端口> <跳板机用户>@<跳板机IP>
    • 特点:从本地端口通过跳板机转发到目标主机端口
  2. 远程端口转发(Remote Port Forwarding)

    • 命令格式:ssh -R <远程端口>:<目标主机>:<目标端口> <攻击机用户>@<攻击机IP>
    • 特点:将远程端口通过跳板机转发到目标主机端口
  3. 动态转发(Dynamic Forwarding)

    • 命令格式:ssh -D <本地端口> <跳板机用户>@<跳板机IP>
    • 特点:建立SSH加密的SOCKS代理通道

二、Windows环境搭建与隧道技术

2.1 环境配置

  • 攻击机:Ubuntu22.04 | 192.168.174.128
  • 跳板机:Windows11 | 192.168.174.1/192.168.44.1
  • 目标机:win10 | 192.168.44.128

Windows SSH服务端配置

  1. 在"应用-可选功能"里安装OpenSSH服务器
  2. 启动服务:Start-Service sshd

2.2 隧道建立示例

  1. 本地转发(攻击机执行):

    ssh -Cg -L 2333:192.168.44.128:3389 lenovo@192.168.174.1
    
  2. 远程转发

    ssh -CfNg -R 2333:192.168.44.128:3389 hackme@192.168.174.128
    
  3. 动态转发

    ssh -CfNg -D 2333 lenovo@192.168.174.1
    

2.3 Windows应急响应

  1. 日志检查

    • 跳板机查看OpenSSH/Operational日志
    • 目标机检查RDP相关日志:
      • Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational
      • Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
  2. 网络连接检查

    netstat -ano | find "ESTABLISHED"
    
    • 注意SSH服务的PID
  3. 流量分析

    • 跳板机与目标机之间:TPKT协议(RDP基于TPKT)
    • 攻击机与跳板机之间:明显的SSH流量
    • 注意RDP流量中的mstshash参数(如mstshash=hackme

三、Linux环境搭建与隧道技术

3.1 环境配置

  • 攻击机:Ubuntu22.04 | 192.168.174.128
  • 跳板机:ubuntu20.04 | 192.168.44.130/192.168.174.129
  • 目标机:kali | 192.168.44.129

3.2 隧道建立示例

远程转发

ssh -CfNg -R 2333:192.168.44.129:22 hackme@192.168.174.128

3.3 Linux应急响应

  1. 进程检查

    pstree -agplU | grep ssh
    
    • 查找反向连接的命令
  2. 日志检查

    • 检查/var/log/auth.log
    • 注意:远程隧道转发不会在跳板机留下SSH登录日志
  3. 历史命令检查

    history
    
    • 远程转发时,目标机的history会记录在攻击机连接时执行的命令
  4. 登录日志检查

    last
    
    • 会留下登录日志(显示登录的是跳板机的IP)

四、SSH流量分析与解密

4.1 流量分析难点

现代OpenSSH高版本流量中不再包含秘钥、IV等值,需要在内存中获取

4.2 密钥恢复工具

  1. OpenSSH-Session-Key-Recovery

    • 从内存中提取SSH会话密钥
    • 安装:
      git clone https://github.com/fox-it/OpenSSH-Session-Key-Recovery.git
      sudo apt-get install python3-ptrace
      python3 key.py
      
  2. OpenSSH-Network-Parser

    • SSH流量解析器
    • 安装步骤:
      git clone https://github.com/fox-it/OpenSSH-Network-Parser.git
      # 修改setup.py,删除setup_requires=['setuptools_scm']
      pip2 install dissect.cstruct==1.0.0
      pip2 install psutil
      pip2 install tabulate
      pip2 install libnacl
      pip2 install cryptography
      sudo apt-get install python2.7-dev
      pip2 install gevent-1.2.0-cp27-cp27mu-manylinux1_x86_64.whl
      git clone https://github.com/MITRECND/pynids
      cd pynids/dist/
      tar zxvf pynids-0.6.2.tar.gz
      sudo apt-get install libnet-dev
      sudo apt-get install libpcap-dev
      sudo apt-get install libnids-dev
      cd pynids-0.6.2/
      sudo python2 setup.py install
      cd OpenSSH-Network-Parser
      sudo python2 setup.py install
      

4.3 解密流程

  1. 使用OpenSSH-Session-Key-Recovery获取密钥信息
  2. 将输出保存到/OpenSSH-Network-Parser/example/keys.json
  3. 捕获的流量放在同一目录
  4. 执行example.sh
  5. 解密后的流量查看tmp/ssh目录

示例密钥输出格式:

{
  "pid": 21359,
  "proc_name": "sshd",
  "sshenc_addr": 93956943803936,
  "cipher_name": "chacha20-poly1305@openssh.com",
  "key": "3a065eca4ae68ef8b6db218c417b0a363891255e4af3411714a269f9a0617c63c18eec809ce2dc5dd94a649662acea93d082fea03f3a89c5bfce2c8de92a8a01",
  "iv": "",
  "sshenc": {
    "name": 93956943831104,
    "cipher": 93956921986280,
    "enabled": 0,
    "key_len": 64,
    "iv_len": 0,
    "block_size": 8,
    "key": 93956943762240,
    "iv": 93956943863360
  },
  "network_connections": [
    {
      "family": 2,
      "fd": 4,
      "laddr": ["192.168.44.129", 22],
      "raddr": ["192.168.44.130", 47772],
      "status": "ESTABLISHED",
      "type": 1
    }
  ]
}

五、总结与防御建议

5.1 隧道检测关键点

  1. Windows环境

    • 跳板机的SSH日志(不明IP连接)
    • 网络连接(监听转发式的连接)
    • 流量特征(不明IP和mstshash)
  2. Linux环境

    • 进程树中的SSH命令
    • 历史命令记录
    • 登录日志

5.2 防御措施

  1. 限制SSH访问IP
  2. 监控异常端口转发
  3. 定期检查网络连接
  4. 启用详细的SSH日志记录
  5. 对SSH服务进行行为监控

5.3 应急响应流程

  1. 检查网络连接和进程
  2. 分析相关日志
  3. 捕获网络流量
  4. 必要时进行内存取证获取SSH会话密钥
  5. 解密分析SSH流量内容
SSH隧道技术详解与应急响应指南 一、SSH隧道基础 1.1 SSH常用参数 -C :压缩传输,提高传输速度 -f :将SSH传输转入后台执行,不占用当前shell -N :静默连接,连接后看不到具体会话 -g :允许远程主机连接本地用于转发的端口 -L :本地端口转发 -R :远程端口转发 -D :动态转发(SOCKS代理) -p :指定SSH端口 1.2 隧道类型 本地端口转发(Local Port Forwarding) 命令格式: ssh -L <本地端口>:<目标主机>:<目标端口> <跳板机用户>@<跳板机IP> 特点:从本地端口通过跳板机转发到目标主机端口 远程端口转发(Remote Port Forwarding) 命令格式: ssh -R <远程端口>:<目标主机>:<目标端口> <攻击机用户>@<攻击机IP> 特点:将远程端口通过跳板机转发到目标主机端口 动态转发(Dynamic Forwarding) 命令格式: ssh -D <本地端口> <跳板机用户>@<跳板机IP> 特点:建立SSH加密的SOCKS代理通道 二、Windows环境搭建与隧道技术 2.1 环境配置 攻击机 :Ubuntu22.04 | 192.168.174.128 跳板机 :Windows11 | 192.168.174.1/192.168.44.1 目标机 :win10 | 192.168.44.128 Windows SSH服务端配置 : 在"应用-可选功能"里安装OpenSSH服务器 启动服务: Start-Service sshd 2.2 隧道建立示例 本地转发 (攻击机执行): 远程转发 : 动态转发 : 2.3 Windows应急响应 日志检查 : 跳板机查看 OpenSSH/Operational 日志 目标机检查RDP相关日志: Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational Microsoft-Windows-TerminalServices-LocalSessionManager/Operational 网络连接检查 : 注意SSH服务的PID 流量分析 : 跳板机与目标机之间:TPKT协议(RDP基于TPKT) 攻击机与跳板机之间:明显的SSH流量 注意RDP流量中的 mstshash 参数(如 mstshash=hackme ) 三、Linux环境搭建与隧道技术 3.1 环境配置 攻击机 :Ubuntu22.04 | 192.168.174.128 跳板机 :ubuntu20.04 | 192.168.44.130/192.168.174.129 目标机 :kali | 192.168.44.129 3.2 隧道建立示例 远程转发 : 3.3 Linux应急响应 进程检查 : 查找反向连接的命令 日志检查 : 检查 /var/log/auth.log 注意:远程隧道转发不会在跳板机留下SSH登录日志 历史命令检查 : 远程转发时,目标机的history会记录在攻击机连接时执行的命令 登录日志检查 : 会留下登录日志(显示登录的是跳板机的IP) 四、SSH流量分析与解密 4.1 流量分析难点 现代OpenSSH高版本流量中不再包含秘钥、IV等值,需要在内存中获取 4.2 密钥恢复工具 OpenSSH-Session-Key-Recovery : 从内存中提取SSH会话密钥 安装: OpenSSH-Network-Parser : SSH流量解析器 安装步骤: 4.3 解密流程 使用 OpenSSH-Session-Key-Recovery 获取密钥信息 将输出保存到 /OpenSSH-Network-Parser/example/keys.json 捕获的流量放在同一目录 执行 example.sh 解密后的流量查看 tmp/ssh 目录 示例密钥输出格式: 五、总结与防御建议 5.1 隧道检测关键点 Windows环境 : 跳板机的SSH日志(不明IP连接) 网络连接(监听转发式的连接) 流量特征(不明IP和mstshash) Linux环境 : 进程树中的SSH命令 历史命令记录 登录日志 5.2 防御措施 限制SSH访问IP 监控异常端口转发 定期检查网络连接 启用详细的SSH日志记录 对SSH服务进行行为监控 5.3 应急响应流程 检查网络连接和进程 分析相关日志 捕获网络流量 必要时进行内存取证获取SSH会话密钥 解密分析SSH流量内容