前沿拓展:
2018 年 4 月,在荷兰阿姆斯特丹 Hack In The Box 安全会议上,我们分享了一个关于隔离网攻击技术的议题——Ghost Tunnel: Covert Data Exfiltration Channel to Circumvent Air Gapping(适用于隔离网络的 Wi-Fi 隐蔽传输通道)。
Ghost Tunnel 是一种可适用于隔离环境下的后门传输方式。一旦 payload(攻击载荷)在目标设备释放,Ghost Tunnel 可在用户无感知情况下对目标进行控制并将信息回传到攻击者的设备。相比于现有的其他类似研究(如 WHID,一种通过 Wi-Fi 进行控制的 HID 设备),Ghost Tunnel 不创建或依赖于任何有线、**网络,甚至不需要外插任何硬件模块。
继该会议上分享后,同年 8 月 Ghost Tunnel 再次入选了 Black Hat USA 2018 Arsenal。
1. 常见的远控木马上线方式
说起远控木马,大家可能会想到一串耳熟能详的名称,如灰鸽子、冰河、byshell、PCShare、gh0st等。在此,我们以上线方式的不同来对远控木马进行简单分类,详见《木**前世今生:上线方式的发展及新型上线方式的实现》(网址为 http://www.freebuf.com/articles/terminal/77412.html)。
主动连接型。被控端开启特定端口,主控端通过被控端的 IP 及端口连接到被控端,该类型有3389 远程桌面、VNC 远程桌面等远控方式。反弹连接型。由于主动连接方式不适用于许多攻击目标所处的内网环境,因此许多木马采用反弹连接的方式进行上线。与主动连接的方式相反,反弹连接是由主控端**特定端口,被控端执行木马后反向连接主控端。由于该方式的适用性更广,因此大部分木马都采用这种方式上线,如利用 FTP 上线、DNS 上线等,如图 2-118 所示。
通过第三方域名型。出于隐蔽性或反**的目的,有些新型木马采用第三方网站来进行上线,例如将知名博客类网站的文章内容及评论区、QQ 空间、微博、推特的推送内容甚至 QQ 个性签名作为上线地址,如图 2-119 所示。利用知名网站的好处是可以绕过某些防火墙的白名单限制。
其实,Ghost Tunnel 也可以理解为一种木**上线方式,只是它更针对于隔离网络的场景。
2. 什么是隔离网闸
简单来说,隔离网闸(air gapping)是一种用于保护特定网络的物理隔离安全措施,被用来防止利用网络连接实施入侵行为的发生。
隔离网闸的常见原理为:① 切断网络之间的通用协议连接;② 将数据包分解或重组为静态数据;③ 对静态数据进行安全审查,包括网络协议检查和代码扫描等;④ 确认后的安全数据流入内部单元; ⑤ 内部用户通过严格的身份认证机制获取所需数据。隔离网闸经常被使用在涉密网与非涉密网之间。
攻击者无论是想利用**作系统、应用软件还是想利用通信协议的漏洞,都需要通过网络触碰目标主机,因此攻击者在网络隔离的环境中就很难实施攻击了。不过凡事没有绝对,利用恶意 U** 就是一种具有可**作性的攻击方式,如震网**(Stuxnet Worm)、水蝮蛇一号(COTTONMOUTH-I)就是针对隔离网攻击的经典案例。
(1) 震网**
著名的震网**利用 U** 将**传入隔离网络。**随后会逐渐传播到网络中的其他设备上,并在适当的时候给工控设备(用于工业自动化控制的设备)下发错误指令,导致设备异常直至报废。据相关媒体披露,震网**导致伊朗的核计划被迫延迟至少两年。
(2) 水蝮蛇一号
在**登披露的 NSA 秘密武器中包含了该工具,水蝮蛇一号的内部包含了一套 ARMv7 芯片和**收发装置。当它插入目标主机后会植入恶意程序并创建一个**网桥,配套的设备可通过 RF 信号与其进行交互并传输命令和数据。同样,它被 NSA 用于攻击伊朗的秘密机构,从物理隔离的设备中窃取数据长达数年。
3. Ghost Tunnel 的应用
对于隔离网络的攻击一般有两个步骤:
① 在目标系统中植入恶意软件;
② 建立数据通道(infiltrate 和exfiltrate),以便执行命令和窃取数据。
根据之前的案例可以知道,任何可承载数据的媒介都可以用来建立数据通信的通道。Ghost Tunnel便是一个利用 Wi-Fi 信号的隐蔽传输通道。
以 HID 攻击为例,可以使用 BashBunny 或 DuckHunter 等 HID 工具(将在 6.1 节中介绍)将恶意程序植入受害者设备,随后恶意程序将使用受害者设备的内置**通信模块与另一台由攻击者控制的设备建立端到端的 Wi-Fi 传输通道。此时,攻击者就可以远程执行命令并窃取数据。
值得注意的是,Ghost Tunnel 并不仅局限于使用 HID 攻击来植入恶意程序,用其他方式植入也是可行的。
Ghost Tunnel 的实现方式具有以下几个优势。
HID 设备只用于植入攻击代码,当植入完成后就可以移除了(HID 攻击外的其他植入形式也是可以的)。没有正常的网络连接,可以绕过防火墙。不会对现有的网络通信及连接状态造成影响。跨平台支持。该攻击可用于任何拥有Wi-Fi 模块的设备,已在Windows 7、Windows 10、Mac OS X上进行测试。可在几十米内工作,配合信号桥接设备后,理论上可做到无限远。
(1) 原理
在正常的 Wi-Fi 通信中,一个站点必须经历 Beacon、Probe、Authentication 及 Association 等过程后才能建立与接入点的连接,其整个流程如图 2-120 所示。
Ghost Tunnel 并没有使用正常的 Wi-Fi 连接,而只用到了其中前三步,如图 2-121 所示。
为什么用这 3 个帧呢?在 802.11 的状态机中,取决于认证和关联所处的状态一共分为 3 个阶段,如图 2-122 所示。
在阶段 1(State 1)时,客户端处于 unauthenticated 和 unassociated 状态。而该阶段可以使用的 802.11 帧有如图 2-123 列举的几种,其中就包括了 Probe Request 帧、Probe Response 帧和 Beacon 帧。
总而言之,Ghost Tunnel 通过 Probe 帧和 Beacon 帧进行通信,并不建立完整的 Wi-Fi 连接。第一攻击者创建一个具有特殊 SSID 的 AP,攻击者和受害设备都使用它作为通信的标识符(而不是常规Wi-Fi 通信中的 MAC)。此时,攻击者通过解析受害者设备所发出的 Probe Request 帧得到数据,受害者设备上的恶意程序将解析攻击者发出的 Beacon 帧及 Probe Response 帧来执行命令并返回数据,如图 2-124 所示。这便是 Ghost Tunnel Wi-Fi 隐蔽传输通道的秘密。
(2) 实现
前面提到,控制端与被控端采用 Beacon 帧和 Probe Request 帧进行通信,通信数据嵌入到 Information Elements 的 SSID 或 Vendor Specific 元素中,使用 1 字节的标识符进行数据识别,如图 2-125 和图 2-126所示。
在控制端,使用了 Aircrack-ng 项目中的 osdep 模块,并利用一块具有“**模式”和“包注入” 功能的**网卡进行数据收发。相关底层原理可参考图 2-127。
在 Windows 被控端,通过 Windows Native WiFi API 来**作 Windows 设备的**网卡进行数据收发。关于 Windows 的 802.11 软件架构可参考图 2-128。
(3) 代码架构设计
配合着在 Black Hat 会议上的分享,我们将 Ghost Tunnel 的服务端与 Windows 受控端进行了开源(地址为 https://github.com/PegasusLab/GhostTunnel),读者可自行下载、编译、安装并搭建实验环境,命令行界面如图 2-129 所示。
控制端和被控端依照数据的流向按照模块化的方式进行设计,如图 2-130 所示。
控制端和被控端的代码文件及目录说明如下:
控制端
gt_common.h:负责数据格式等相关定义。gt_server 类:负责初始化及总体功能控制。gt_console 类:负责控制台的输入输出。edit 目录:hostapd 项目关于console 的**作功能。packet 目录:mdk4 项目关于802.11 数据帧组装部分的功能。libwifi 目录:Aircrack-ng 中osdep 数据收发功能,以及Ki**et WiFi 网卡控制功能。
Windows 被控端
wtunnel 类:数据收发功能。data_handler 类:数据处理功能。
通信数据格式如下:
typedef struct _tunnel_data_header
{
unsigned char flag; // 数据标志
unsigned char data_type; // 数据类型
unsigned char seq; // 发送数据包编号
unsigned char client_id; // 被控端ID
unsigned char server_id; // 控制端ID
unsigned char length; // 数据长度
}tunnel_data_header;
基于传输效率的考虑,代码中并没有对数据进行确认及校验,只是对重复的数据进行了过滤。数据类型定义如下:
#define TUNNEL_CON 0x10 // 建立连接
#define TUNNEL_SHELL 0x20 // shell 功能
#define TUNNEL_FILE 0x30 // 文件下载功能
#define DATA_IN_VENDOR 0x80 // 发送数据不超过32 字节,只填充SSID
typedef enum _TUNNEL_DATA_TYPE
{
TUNNEL_CON_CLIENT_REQ = 0x11,
TUNNEL_CON_SERVER_RES,
TUNNEL_CON_HEARTBEAT,
TUNNEL_SHELL_INIT = 0x21,
TUNNEL_SHELL_ACP,
TUNNEL_SHELL_DATA,
TUNNEL_SHELL_QUIT,
TUNNEL_FILE_GET = 0x31,
TUNNEL_FILE_INFO,
TUNNEL_FILE_DATA,
TUNNEL_FILE_END,
TUNNEL_FILE_ERROR,
}TUNNEL_DATA_TYPE;
U** 攻击平台——P4wnP1 项目(https://github.com/mame82/P4wnP1)受到了Ghost Tunnel 启发,在新版本种加入了类似的利用方式,如图2-131 所示。
本文节选自《黑客大揭秘:近源渗透测试》
本书主要讲解了当渗透测试人员靠近或位于目标建筑内部,如何利用各类**网络、物理接口、智能设备的安全缺陷进行近源渗透测试。书中第一以Wi-Fi举例,介绍基于**网络的安全攻防技术及实例测试,包含对家庭、企业级**环境的常见渗透测试方法,**入侵防御解决方案等。
拓展知识:
原创文章,作者:九贤生活小编,如若转载,请注明出处:http://www.wangguangwei.com/128567.html