☰
Airgorah安全设计清单:Unix Socket权限、输入验证与提权边界的10道防线
2026/9/27 3:01:01 网站建设 项目流程

Airgorah安全设计清单:Unix Socket权限、输入验证与提权边界的10道防线

【免费下载链接】airgorahA WiFi security auditing software项目地址: https://gitcode.com/gh_mirrors/ai/airgorah

Airgorah是一款用 Rust 编写的开源 WiFi 安全审计工具,可以捕获周边 WiFi 流量、发现连接到接入点的客户端、执行去认证攻击并捕获握手包。它的核心安全设计是「GUI 普通用户 + airgorah-agent 特权代理」的双进程分离:通过 Unix Socket 权限、内核级对端认证、白名单式输入验证和自动提权回收,构建了 10 道防线,确保 root 权限永远不会直接碰到不可信输入。

架构速览:提权边界的起点

Airgorah 采用典型的最小权限拆分架构,这也是全部 10 道防线的基础:

进程权限职责
GUI 主进程普通用户界面展示、设置、握手解析、以普通用户身份写捕获文件
特权代理airgorah-agentroot(经 polkit 认证启动)监控模式、扫描、去认证攻击、读取捕获数据
  • 只有当用户执行需要特权的操作时,GUI 才通过pkexec启动 agent,polkit 弹窗认证一次(见 client.rs)
  • 若 GUI 本身以 root 运行,启动时会被明确警告并提示这不建议在 Wayland 下使用
  • 所有高风险操作都收敛在 agent 一侧,GUI 进程本身不持有 root 能力

10道防线一览表

#防线位置关键点
1进程权限分离crates/gui/crates/agent只有 agent 提权,GUI 保持普通用户
2每实例独立 Socketipc.rs按 uid + pid 隔离,只接受单一连接
3Socket 文件 0600 + chownmain.rs仅启动用户可连接
4SO_PEERCRED 对端认证server.rs内核提供的 uid 校验,不符即拒绝
50700 根专用捕获目录main.rs捕获数据对其他用户不可读
6网卡名白名单验证validate.rs杜绝网卡名注入命令
7MAC 地址格式验证validate.rs严格xx:xx:xx:xx:xx:xx十六进制
8信道过滤器白名单channel.rs只收合法信道号,拒绝重复与尾逗号
9消息帧 64MB 上限ipc.rs防止伪造长度前缀引发内存耗尽
10版本握手 + 自动清理server.rs版本不符即拒绝,断开即还原网卡状态

防线 1–5:提权边界与 Unix Socket 权限

1️⃣ 进程权限分离:仅在需要时提权

agent 启动时先检查自己是否真的以 root 运行,否则直接退出(main.rs)。GUI 侧则刻意保持普通用户,把「提权」变成一次性的、用户可见的 polkit 认证动作,而不是常驻 root 进程。

2️⃣ 每实例独立的 Unix Socket

Socket 路径按「启动用户的 uid + GUI 进程号」生成(/run/airgorah/{uid}-{pid}.sock),因此可以为每张无线网卡各开一个 GUI 实例而互不冲突。agent 侧用父进程号推导同一实例号,两边无需传递敏感信息。更重要的是:agent 只接受一个客户端——就是启动它的那个 GUI,其余连接一律不被处理。

3️⃣ Socket 文件权限 0600 + chown 给启动用户

绑定监听后,agent 立刻把 socket 文件权限收紧为0600,并chown给启动它的用户(secure_socket)。这样即使其他进程能枚举/run/airgorah,也根本无法建立连接。

4️⃣ SO_PEERCRED 内核级对端认证

文件权限是第一层,但真正的裁决来自内核:agent 对每个已接受的连接读取SO_PEERCRED,校验对端 uid 是否等于启动时通过PKEXEC_UID解析出的目标用户,不符立即拒绝(authorized)。没有这一步,本机任何用户都可能借道 socket 驱动去认证攻击等特权操作。

5️⃣ 捕获目录设为 0700 根专用

扫描与捕获的临时文件放在 root 拥有的0700目录中(prepare_capture_dir),其他用户既读不到进行中的捕获数据,也无法篡改或替换捕获文件。

防线 6–8:提权边界上的白名单输入验证

源码注释里写得很直白:一旦提权边界存在,GUI 就降级为"低信任调用方"——凡是会变成 root 命令行参数的字符串,都在 agent 内再验证一次。这套验证逻辑是纯函数、两侧共享,GUI 提前校验改善用户体验,agent 复检兜底安全(见 server.rs 中每个分支的前置校验)。

6️⃣ 网卡名白名单验证

合法的网卡名必须满足:长度不超过 15、只含 ASCII 字母数字及_.-、不以-开头、且不是.或..。这一条直接封死了通过网卡名拼接命令注入的可能。

7️⃣ MAC 地址严格格式验证

SetMac指定的 MAC、StartDeauth的客户端列表、目标 BSSID 都必须通过xx:xx:xx:xx:xx:xx六组两位十六进制校验,任何一项不合格整个请求被拒。

8️⃣ 信道过滤器白名单验证

扫描信道过滤器是逗号分隔的信道号,验证规则相当严格:

  • 每个信道必须落在 2.4 GHz / 5 GHz 的已知信道白名单中
  • 信道必须属于用户勾选的频段(2.4G 未开启时禁止信道 1)
  • 不允许重复、不允许尾逗号、不允许空项

完整规则与边界用例可参考 channel.rs 中的测试。

防线 9–10:消息协议与生命周期收尾

9️⃣ 长度前缀消息帧 + 64MB 上限

GUI 与 agent 之间的 IPC 采用「4 字节大端长度前缀 + JSON」的帧格式。写入前和读取前都会把长度与MAX_MSG_LEN(64 MB)比较,伪造或损坏的长度前缀会被立刻判为InvalidData拒绝,防止恶意或错误帧触发巨型内存分配(write_msg / read_msg)。

🔟 版本握手与断开即清理

连接建立后第一条消息是Hello:agent 比对协议版本,不一致立即报错终止;同时顺带回报缺失的依赖工具(依赖清单由 deps.rs 统一管理,两侧各自在自己环境里检查)。

而生命周期收尾则是"绝不留下烂摊子":客户端断开(socket EOF)、收到Shutdown、甚至 SIGINT/SIGTERM,都会触发同一套 app_cleanup——停止扫描、终止所有攻击、退出监控模式、恢复网络管理器、删除临时文件,保证无线网卡永远不会被遗留在监控模式里。

两个加分项细节

  • 攻击速率强制钳制:去认证攻击的每秒轮次会被钳制在 1–1000 之间(deauth.rs),越界参数不会造成失控流量。
  • root 从不写用户路径:保存捕获文件时,agent 只以有界分块(GetCaptureChunk)把数据流给 GUI,由 GUI 以普通用户身份创建并写入用户自选路径(save_capture),root 进程不落笔到用户目录。

自检清单:想复用这套设计?

如果你也在做带提权操作的工具,可以对照检查:

  • 高风险功能是否与常规 UI 分进程、按需提权(polkit/pkexec)?
  • 特权 socket 是否同时用文件权限 + SO_PEERCRED 双重限定单一 uid?
  • 跨越提权边界的每个字符串是否都过白名单校验器?
  • 消息协议是否有长度上限,防止伪造长度前缀?
  • 断开连接、崩溃、收到信号时是否都有保证执行的清理路径?
  • root 进程是否避免直接向用户指定路径写文件?

Airgorah 这 10 道防线并非某一项特别复杂,而是把「谁拥有特权、谁能连上特权进程、哪些输入能变成命令、异常时谁来收拾」四个问题逐一封死——这正是安全工具自身值得被信任的关键。完整设计可对照 README 与 crates/agent/ 源码进一步阅读。

【免费下载链接】airgorahA WiFi security auditing software项目地址: https://gitcode.com/gh_mirrors/ai/airgorah

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询