Blue Pigeon: 基于蓝牙的数据外泄与代理工具(红队专用)
Blue Pigeon 是一款基于蓝牙的数据外泄与代理工具,用于在远程命令与控制(C2)服务器与被入侵主机之间建立通信。
受到 岩鸽 携带信息返回家园的能力启发,Blue Pigeon 模拟了这种归巢行为,在代理(被入侵主机)与它的巢穴(移动应用,随后代理到 C2 服务器)之间传递消息/负载。
Blue Pigeon 以 Android 应用的形式开发,供红队成员在被入侵主机附近部署,尤其在传统通信渠道(如网页、电子邮件、DNS)不可用的红队行动中特别有用。
基于 MITRE AT&CK 框架中“外泄战术”下的“通过替代协议外泄”技术(ID: T1048),Blue Pigeon 利用蓝牙文件共享作为外泄媒介,提供了一种新颖的命令与控制建立方式,并作为网络杀伤链中的“目标行动”执行数据外泄。
Blue Pigeon 由 @mahchiahui、@jingloon 和 @cloudkanghao 创建。
(来源:https://spectrum.ieee.org/tech-history/silicon-revolution/consider-the-pigeon-a-surprisingly-capable-technology)
建立命令与控制以及执行数据外泄是网络杀伤链中的关键阶段,但如果操作不当,往往伴随着复杂的后果和严重的隐患。在红队行动中,一次失误的尝试可能会在网络活动日志中留下永久痕迹,并触发检测机制。
在我们的一些红队演练中,我们发现需要一种方式来外泄数据并与被入侵主机通信,而无需经过传统渠道(即网页、电子邮件、DNS)。
由于满足这一需求的解决方案很少,我们探索了基于无线/无线电通信向量的各种外泄思路。因此,Blue Pigeon 应运而生,以扩充我们的红队工具集。
Blue Pigeon 在 Android 手机中作为前台服务运行。当红队成员/恶意内部人员将手机部署到被入侵主机(已感染 Blue Dispatcher 负载)附近时,Blue Pigeon 可以充当外泄点和命令中继代理,连接远程 C2 服务器(即 Blue Coop)。
Blue Pigeon 的设计遵循以下关键需求:
Blue Pigeon 必须能在多个层面规避检测:
规避网络流量检测: 从被入侵主机外泄数据不能经过传统通信渠道,因为这些渠道很可能被标准的端点检测与响应系统记录和监控。(况且,已经有很多更好的选择了,何必重新发明轮子,对吧?)
规避人类检测: 数据外泄必须在受害者的机器上没有任何视觉迹象,因为在最坏的情况下,受害者可能仍在使用被入侵的机器。
Blue Pigeon 必须在部署时保持隐秘,即在现场不引人注目。
笨重的笔记本电脑、树莓派和自制的黑客套件是绝对不被允许的,因为它们限制了部署的可能性和可行性。我们需要一只小巧且看起来无害的鸽子,而不是一只该死的孔雀!
Blue Pigeon 隐藏在一部普通的 Android 手机中,红队成员/恶意内部人员可以将其带入现场。没有人会怀疑一部手机……
在极少数情况下,红队成员被要求检查,Blue Pigeon 可以伪装成一个不起眼的应用,以适应行动环境。在基础的概念验证中,移动应用被伪装成一个电池优化应用。欢迎 Fork 本仓库,给 Blue Pigeon 做个外观改造!
Blue Pigeon 应避免红队成员在部署手机时暴露出外泄尝试的痕迹。
红队成员只需启动应用,然后将手机带至被入侵机器附近即可。
Blue Pigeon 在手机后台运行,无需屏幕保持开启。
Blue Pigeon 自动处理传入的消息,无需红队成员手动接受文件传输请求的弹出窗口(实际上它甚至不会弹出)。
Blue Pigeon 在部署期间必须对(且仅对)被入侵主机保持最大可用性。
Blue Pigeon 必须能够保持活动状态以接收传入消息,无需红队成员频繁干预。
Blue Pigeon 必须能够抵御恶意请求/拒绝服务攻击,并保持对目标主机的可用性。
Blue Pigeon 能够永久处于可发现模式,以便被入侵主机扫描并连接。
采用基于 HMAC 的身份验证和文件名随机化来缓解拒绝服务和重放攻击。Blue Pigeon 仅在使用可配置的密钥短语进行身份验证后才会接受文件传输请求。
Blue Pigeon 设计为包含以下组件的三部分框架:
Blue Pigeon 是 Android 移动应用,充当被入侵主机与 C2 服务器(即 Blue Coop)之间的中间代理。Blue Pigeon 通过传统的蓝牙文件共享(使用 OBEX)与被入侵主机(已感染 Blue Dispatcher 负载)通信。数据以 JSON 对象形式通过文本文件从主机外泄。可以通过编辑 com.csg.bluepigeon.pigeon 包中的 BluePigeonListener 类来自定义,并随后中继到远程 Blue Coop。收到后,消息的副本也会保存在 /sdcard/blue_pigeon/backup 目录中。
在此仓库中,Blue Pigeon 以看起来像电池优化应用的形式提供。不过,它可以改装成其他 UI 风格。欢迎通过编辑 com.csg.bluepigeon.ui 包来定制 Blue Pigeon 的 UI,以满足您的行动需求。
没什么好看的……只是一个无辜的电池优化应用!
Blue Beak 包包含一组自定义 EdXposed 框架 钩子*,用于绕过现代 Android(Android 9/10)的蓝牙 API 限制:
BlueBeakHook - 检查传入的文件传输请求,并决定是否接受它。使用可配置的密钥短语进行身份验证,确保传入消息来自可信源。我们不希望它意外接受一个恶意的大文件请求(通过占据资源实现的拒绝服务攻击缓解)。它还会拒绝已被消费过的文件名(通过重放攻击缓解)。(见 安全考虑)
CooCooHook - 绕过默认的 Android 蓝牙可发现模式超时,确保手机在现场部署时持续广播发现数据包。这是必需的,以便被入侵主机随时可以扫描并连接到 Blue Pigeon。
NoPopupHook - 绕过 Android 操作系统上的蓝牙文件传输弹出窗口生成,允许通过代码接受或拒绝请求。这是为了防止红队成员一直盯着手机来接受传入消息。可疑啊兄弟,可疑……
BirdIsAliveHook - 在系统时钟旁提供一个简洁的小视觉指示器,表示一切正常,可以部署。
概念图非常贴切!
*为什么选择 EdXposed?嗯……我们在概念设计阶段遇到了两个主要问题:
1. 出于安全考虑,现代 Android 操作系统不再允许应用以编程方式接受或过滤传入的蓝牙文件传输请求。这对于 Blue Pigeon 的操作方式来说是个问题,因为它需要能够检查传入请求并实时接受或拒绝。
2. Android 蓝牙可发现模式超时的默认最长时间为 3600 秒(1 小时)。坚持这个限制意味着红队成员需要频繁地手动刷新 Blue Pigeon,这几乎不可行,并且可能妨碍行动的执行。
为了有效解决这些问题,我们决定使用 EdXposed 框架,它提供 Android 运行时(ART)钩子,并以模块化方式编写我们的自定义钩子以绕过操作系统级别的限制。
Blue Dispatcher 包含用于生成、发送和接收负载的 .NET 模块,通过 Windows 蓝牙堆栈与 Blue Pigeon 通信。该模块允许在 Blue Pigeon 与被入侵主机之间进行文件传输,而无需进行蓝牙安全身份验证,即设备配对。这有助于保持隐蔽性(关键需求),因为受害者机器上不会出现视觉弹出窗口,从而避免引起怀疑。
开发人员对因视觉破坏而导致操作失败的想象图。
Blue Dispatcher 使用的大多数底层蓝牙模块来自广为人知且非常强大的 32feet 库。
Blue Dispatcher 提供了允许用户输入标志进行传输的选项。
| 标志 | 描述 |
|---|---|
| --device, -d | 发送到的移动设备 |
| --message, -m | 要发送的文本字符串 |
C:\Users\user>.\BlueDispatcher.exe
Usage: BlueDispatcher [options]
Options:
-m|--message Message to send to server
-d|--device Device to send to
C:\Users\user>.\BlueDispatcher.exe -d "Pixel 3 XL" -m "fly pigeon fly"
注意:如有需要,请在 Blue Dispatcher 中实现自己的应用层加密,因为负载通过 RFCOMM 以明文传输。
要部署 Blue Pigeon 满足您的数据外泄需求,需要以下条件:
Blue Pigeon 需要一部已 root 的 Android 手机 + Magisk。
通过 Magisk 安装 riru-core 和 riru-edxposed。安装模块后重启 Android 设备。