- 网络安全
- 应用安全
- 隐私合规
- CLI
- 静态分析
- 逆向工程
- 移动开发
【免费下载链接】NOIR
手机隐私审计:用 adb 扫出 Android 应用的权限、上报端点与数据流向,并给出可回滚的处置。Desktop Android leak audit: permissions, endpoints, data flows, reversible fixes.
NOIR 是一款跑在电脑上的手机隐私审计工具,通过 adb 扫描 Android 应用的权限、上报端点与数据流向,生成可复现的隐私报告。每份报告里的核心数字就是风险评分(score)。本文带你完整看懂 NOIR 风险评分是如何计算的,以及 Rules、Classifier、Exposure 三大核心组件各自承担"打分、归类、串数据流"的分工。🔍
一、扫描流水线:风险评分从哪里来?
NOIR 先筛选出「有网络权限 + 敏感权限」的候选应用,然后对每个应用并行做三件事(Main.kt):
| 组件 | 职责 | 回答的问题 |
|---|---|---|
| Rules | 风险打分 | "这个应用有多可疑?" |
| Classifier | 类别 + 厂商识别 | "它是谁、干什么用的?" |
| Exposure | 数据流关联 | "哪类数据可能流向哪个域名?" |
评分算出后,NOIR 用--min <score>参数过滤低分应用,并按分数降序排列——仪表盘里的 TOP FINDINGS 榜单就是这么排出来的。
二、Rules 打分规则拆解:基础分 + 加权分
评分逻辑完全写在 Rules.kt 的score()函数里,没有机器学习、没有黑盒权重——每一条结论都能追溯到 APK 里真实存在的权限或字符串。
1. 基础分:敏感权限数量
应用声明的权限先过一遍敏感权限清单(Rules.kt),包括ACCESS_FINE_LOCATION(精确定位)、READ_CONTACTS(通讯录)、READ_SMS(短信)、RECORD_AUDIO(麦克风)、CAMERA(相机)等 20 多项。
每命中一个敏感权限,基础分 +1。
2. 加权项:高危信号额外加分
| 信号 | 加分 | 为什么高危 |
|---|---|---|
QUERY_ALL_PACKAGES | +2 | 可以枚举你手机上的全部应用列表 |
READ_PRIVILEGED_PHONE_STATE | +3 | 特权级设备标识权限 |
FOREGROUND_SERVICE_MEDIA_PROJECTION | +4 | 录屏能力,常被滥用做屏幕监控 |
| 系统应用(isSystem) | +2 | 权限更多、无法卸载,需重点审视 |
| 可调试(debuggable) | +2 | 生产环境不该开,易被利用 |
| 存在命令型端点 | +2 | 应用能远程执行指令 |
| 存在上报型端点 | +3 | 数据确实有出口 |
3. 端点如何判定:两条正则说了算
NOIR 从 APK 的 dex 里提取 URL,用两条正则区分用途(Rules.kt):
上报型 /upload、/collect、/track、/stat、/beacon、/log、/report 命令型 /command、/cmd、/dispatch、/execute、/script注意正则要求这些词出现在路径段的开头(前面是/,后面是/、?或结尾),所以普通文本里偶然出现 "track" 一词不会误报。
4. 算分示例:10 分是怎么来的
假设一个系统应用声明了 3 个敏感权限(CAMERA、READ_CONTACTS、ACCESS_FINE_LOCATION),代码里有一个/report端点和一个/cmd端点:
| 信号 | 得分 |
|---|---|
| 3 个敏感权限 | 3 |
| 系统应用 | +2 |
| 1 个上报型端点 | +3 |
| 1 个命令型端点 | +2 |
| 合计 | 10 |
三、Classifier 分类识别:它是谁、干什么用的?
类别和厂商信息不参与分数计算,但它们决定了处置建议和报告的可读性,实现都在 Classifier.kt。
1. 类别识别 category():三层判断
- 白名单直查:KNOWN 映射表 里预置了
com.miui.analytics → 遥测/统计、com.tencent.mm → 社交等常见包,命中直接返回; - 关键词匹配:按包名和端点 URL 里的关键词打分,例如包名含
market/vending判为「应用商店」,URL 里出现analytics/telemetry/beacon判为「遥测/统计」,出现ads/pangle/sigmob判为「广告」; - 兜底:系统应用归「系统」,其余归「其他」。
共 17 个类别(Category 枚举):遥测/统计、广告、安全/杀毒、AI/语音、定位/地图、推送、应用商店、输入法、支付、金融、购物、影音、社交、游戏、工具、运营商、系统。
2. 厂商识别 vendor():两轮归因
厂商识别采用「两轮走」策略(vendor() 函数):
- 第一轮看包名:
com.tencent.mm就是腾讯,不管它内嵌了哪些 SDK 域名——包名是权威证据; - 第二轮看域名投票:包名对不上时,统计上传 host 里有多少个匹配各厂商域名后缀(VENDOR_DOMAINS 表 覆盖小米、OPPO、华为、腾讯、字节、阿里等 24 家),得票最高的厂商胜出。
一个关键细节:schemas.android.com、github.com这类基础设施域名会被忽略(Domains.kt),否则每个 APK 都会因为内嵌的schemas.android.com/aapt被误判成 Google。
四、Exposure 数据流关联:从权限到"数据流向"
这是 NOIR 最有价值的一环,回答的不是"它申请了什么权限",而是"什么数据能离开这台设备"。
1. 权限 → 数据类型
Exposure.kt 内置了一张映射表,把权限翻译成 12 种用户数据类别:
| 数据类型 | 对应权限(示例) |
|---|---|
| 位置 | ACCESS_FINE_LOCATION、ACCESS_BACKGROUND_LOCATION |
| 通讯录 / 短信 / 通话记录 | READ_CONTACTS、READ_SMS、READ_CALL_LOG |
| 麦克风 / 相机 / 屏幕 | RECORD_AUDIO、CAMERA、FOREGROUND_SERVICE_MEDIA_PROJECTION |
| 应用列表 | QUERY_ALL_PACKAGES、PACKAGE_USAGE_STATS |
| 设备标识 | READ_PHONE_STATE、READ_PRIVILEGED_PHONE_STATE |
| 文件/相册 / 日历 / 账号 | READ_MEDIA_IMAGES、READ_CALENDAR、GET_ACCOUNTS |
2. 能力 × 出口 = 泄露路径
leaks() 函数 的关联规则很克制:
没有上报端点的应用,leaks 直接为空——只有能力、没有出口,不算泄露。
一旦存在上报型端点,就输出「数据类型 → 可上传的 host 列表」的配对结果,例如位置 → a.stat.example.com, b.report.example.com。报告里的 "leak paths" 一栏就来自这里。
上图中com.miui.securitycenter风险分 36:它是系统应用(+2)、声明了大量敏感权限、同时存在 12 个上报型端点(+3)和 3 个命令型端点(+2)——多类加权项叠加,最终登顶榜单。
五、评分如何用:过滤、排序与处置建议
- 过滤与排序:
noir scan --min 15只保留分数 ≥ 15 的应用;报告 report.md 的 Overview 表格首列就是 score; - 驱动处置建议:Advisor.kt 依赖分类结果生成动作——遥测/广告类应用进入「人工复核」,系统组件若同时具备录屏能力和上报端点则建议「禁止录屏」(appops 级别,可回滚),多上报端点的应用给出「DNS 拦截」候选;
- 导出域名清单:上报域名还会被 Domains.kt 分成三档——可直接拦截的追踪域名、需人工判断的域名、千万别拦的功能域名(推送/登录/更新/支付),避免一拦就断推送。
六、核心文件索引
| 文件 | 说明 |
|---|---|
| Rules.kt | 敏感权限清单、端点正则、score() 打分函数 |
| Classifier.kt | 17 类别识别与 24 厂商归因 |
| Exposure.kt | 权限→数据类型映射、泄露路径关联 |
| Models.kt | AppEntry 数据模型(score、leaks 字段) |
| Advisor.kt | 由分类与端点生成处置建议 |
| Report.kt | JSON / Markdown 报告渲染 |
| Main.kt | 三组件的调用与排序入口 |
总结
NOIR 风险评分的设计哲学是简单且可解释:敏感权限计基础分,高危权限、系统属性、命令端点与上报端点按固定规则加权;Classifier 补充"它是谁"的上下文;Exposure 把静态证据串成"数据 → 出口"的泄露路径。没有黑盒模型,每一分都能追到 APK 里的具体权限或字符串——这也是审计工具该有的样子。✅
- 网络安全
- 应用安全
- 隐私合规
- CLI
- 静态分析
- 逆向工程
- 移动开发
【免费下载链接】NOIR
手机隐私审计:用 adb 扫出 Android 应用的权限、上报端点与数据流向,并给出可回滚的处置。Desktop Android leak audit: permissions, endpoints, data flows, reversible fixes.
相关推荐
JTAppleCalendar隐私影响评估:识别与缓解iOS日历库的隐私风险
JTAppleCalendar隐私影响评估:识别与缓解iOS日历库的隐私风险 JTAppleCalendar作为iOS平台最受欢迎的第三方日历库之一,为开发者提
移动开发UI组件SpoofDPI安全评估:隐私保护与潜在风险分析
还在为网络访问限制困扰?SpoofDPI可以帮你绕过DPI(深度包检测)技术,但使用前你需要了解它的安全特性。读完本文,你将全面了解这款工具的安全机制、隐私保护
网络安全为什么选择 GitHub Action for Serverless Framework?5大核心优势解析
为什么选择 GitHub Action for Serverless Framework?5大核心优势解析 GitHub Action for Serverle
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考