Airgorah源码剖析:Rust手工构造802.11 Deauth帧的34字节奥秘
【免费下载链接】airgorahA WiFi security auditing software项目地址: https://gitcode.com/gh_mirrors/ai/airgorah
Airgorah 是一款用 Rust 编写的 WiFi 安全审计软件,能捕获附近 WiFi 流量、发现连接客户端、发起 Deauth(去认证)攻击并抓取握手包。它的 Deauth 功能不依赖任何第三方协议库,而是手工拼装一个仅34 字节的 802.11 帧,通过原始套接字直接注入到监控模式的无线网卡上。本文带你逐字节拆解这个 802.11 Deauth 帧的构造奥秘。
Airgorah 图形界面:上方为扫描到的热点(含 BSSID、加密方式、是否抓到握手包),下方为可发起攻击的客户端列表
🏗️ 攻击链路:从按钮到网卡
Airgorah 采用「GUI + 特权代理」双进程架构:图形界面以普通用户运行,需要提权的操作通过polkit拉起特权代理airgorah-agent。一次 Deauth 攻击的完整链路是:
- 用户在界面上勾选目标客户端、设置速率,点击 Attack
- GUI 侧 crates/gui/src/frontend/connections/deauth.rs 收集选中的 MAC 地址
- 通过 IPC 转发到特权代理 crates/agent/src/server.rs
- 核心逻辑落在 crates/agent/src/backend/deauth.rs —— 手工构造帧并注入
真正"有奥秘"的,就是第 4 步里build_mgmt_frame函数拼出来的 34 个字节。
📦 34 字节 = 8 字节 Radiotap + 26 字节 802.11 帧
在 crates/agent/src/backend/deauth.rs 中,帧的组装分为两段:
Radiotap 头部(8 字节)
0x00 0x00 0x08 0x00 0x00 0x00 0x00 0x00这是注入时网卡驱动要求的"元数据头":版本号 0、填充 0、长度 8、字段标志位为 0(不携带任何额外字段)。标志位全 0 的含义是:发射参数(速率、功率等)全部交给驱动自行决定,应用层无需关心。
802.11 管理帧(26 字节)
| 偏移 | 字节数 | 字段 | 值 |
|---|---|---|---|
| 8 | 2 | 帧控制(Frame Control) | 0xC0(去认证)或0xA0(去关联) |
| 10 | 2 | Duration | 全 0 |
| 12 | 6 | Address 1(目的地址) | 目标 MAC 或广播地址 |
| 18 | 6 | Address 2(源地址) | 源 MAC |
| 24 | 6 | Address 3 | BSSID(AP 的 MAC) |
| 30 | 2 | 序列号 | 全 0 |
| 32 | 2 | 原因码 | 7(去认证)/8(去关联),小端序 |
0xC0的二进制是11_000_000:高 2 位11表示 Management 类型,后 6 位000000即 subtype 12(Deauthentication)。管理帧没有加密、没有认证信息,这正是它能被任意伪造的根本原因。
🎯 广播还是点名:两种攻击模式
crates/agent/src/backend/deauth.rs 的launch_deauth_attack函数支持两种目标:
- 全员模式:目的地址填
0xFF:FF:FF:FF:FF:FF(BROADCAST常量,一行定义搞定),AP 会踢掉所有连接的客户端——这是最容易触发握手包重连的模式 - 点名模式:对每个选中客户端构造AP→客户端和客户端→AP两个方向各一帧,双向同时攻击
发射速率被限制在 1~1000 帧/轮/秒,攻击线程按间隔循环发送,直到用户停止。
🔌 原始套接字:帧怎么飞出去
构造好的 34 字节交给 crates/agent/src/backend/raw_socket.rs:创建一个AF_PACKET类型的SOCK_RAW原始套接字,绑定到监控模式的网卡索引,之后send()出去的每个字节都原样变成无线信号——不经过协议栈任何处理。这也是为什么网卡必须支持监控模式和包注入(注入通常只在 2.4GHz 频段可靠)。
✅ 单元测试:34 字节一个都不能少
作者在 crates/agent/src/backend/deauth.rs 的测试里对每段字节都做了断言:
assert_eq!(frame.len(), 34); // 总长 34 assert_eq!(&frame[0..4], &[0x00,0x00,0x08,0x00]); // radiotap: v0, len 8 assert_eq!(frame[8], SUBTYPE_DEAUTH); // 0xC0 assert_eq!(&frame[32..34], &REASON_DEAUTH.to_le_bytes());MAC 解析的边界情况(段数不足、非法十六进制、超长)也在 parse_mac 测试 中覆盖。这种"字节级"的测试正是手工构造协议帧的可靠保障。
📚 小结
Airgorah 用不到 20 行核心代码揭示了 Deauth 攻击的本质:一帧 34 字节的管理帧,伪造 3 个 MAC 地址 + 一个原因码,即可让客户端掉线。理解这 34 个字节,你就理解了 802.11 管理帧为何缺乏认证保护——这也正是现代 WPA3 引入对管理帧进行 PMF 保护的意义所在。
⚠️法律提示:Deauth 攻击仅可用于审计你自己拥有或获授权测试的无线网络。在绝大多数国家和地区,对非自有网络发起此类攻击均属违法行为。
想继续深入?可以从这两个入口读起:
- 帧构造与攻击线程:crates/agent/src/backend/deauth.rs
- 原始套接字收发:crates/agent/src/backend/raw_socket.rs
【免费下载链接】airgorahA WiFi security auditing software项目地址: https://gitcode.com/gh_mirrors/ai/airgorah
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考