百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

无线安全的高级利用:隔离网络里你不知道的Wi-Fi隐蔽传输通道

haoteby 2025-05-21 13:49 29 浏览


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)是一种用于保护特定网络的物理隔离安全措施,被用来防止利用网络连接实施入侵行为的发生。

隔离网闸的常见原理为:① 切断网络之间的通用协议连接;② 将数据包分解或重组为静态数据;③ 对静态数据进行安全审查,包括网络协议检查和代码扫描等;④ 确认后的安全数据流入内部单元; ⑤ 内部用户通过严格的身份认证机制获取所需数据。隔离网闸经常被使用在涉密网与非涉密网之间。

攻击者无论是想利用操作系统、应用软件还是想利用通信协议的漏洞,都需要通过网络触碰目标主机,因此攻击者在网络隔离的环境中就很难实施攻击了。不过凡事没有绝对,利用恶意 USB 就是一种具有可操作性的攻击方式,如震网病毒(Stuxnet Worm)、水蝮蛇一号(COTTONMOUTH-I)就是针对隔离网攻击的经典案例。

(1) 震网病毒

著名的震网病毒利用 USB 将病毒传入隔离网络。病毒随后会逐渐传播到网络中的其他设备上,并在适当的时候给工控设备(用于工业自动化控制的设备)下发错误指令,导致设备异常直至报废。据相关媒体披露,震网病毒导致伊朗的核计划被迫延迟至少两年。

(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 数据收发功能,以及Kismet 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;

USB 攻击平台——P4wnP1 项目(
https://github.com/mame82/P4wnP1)受到了Ghost Tunnel 启发,在新版本种加入了类似的利用方式,如图2-131 所示。

本文节选自《黑客大揭秘:近源渗透测试》

本书主要讲解了当渗透测试人员靠近或位于目标建筑内部,如何利用各类无线网络、物理接口、智能设备的安全缺陷进行近源渗透测试。书中首先以Wi-Fi举例,介绍基于无线网络的安全攻防技术及实例测试,包含对家庭、企业级无线环境的常见渗透测试方法,无线入侵防御解决方案等。

相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...