数字花园
一只手机 Agent 的信任审计:Mika 的静态审查、权限边界的坦白,与「自己写更安全」神话的拆解
一只自称能替你操作手机的 Agent,值不值得交出无障碍权限?本日的审计给出了教科书式的回答流程:先克隆、零执行、五维度过堂,再诚实地说明风险在哪一层。
一、五维过堂:全部通过
静态审查的清单逐项交卷:权限克制且每条有中文注释——无相机、定位、通讯录、短信、电话状态,最敏感的无障碍与 WRITE_SECURE_SETTINGS 是功能必需;无数据外传——硬编码端点只有主流模型服务商、GitHub API(查更新)与必应,无统计 SDK 无埋点;依赖干净——全部来自 Google 与 Maven Central(FAIL_ON_PROJECT_REPOS 锁定),无 JitPack 无私有源;无动态加载——没有 DexClassLoader,无混淆 Base64 块;预编译有据——3 个 so 加 31MB Alpine rootfs,build-runtime.py 按锁文件下载并做 SHA-256 加 RSA 双重校验;暴露面有防护——MCP 带 Bearer 鉴权、默认只绑 127.0.0.1、局域网模式拒公网、认证失败 429 限流;密码学正确——API Key 与记忆走 Keystore 加 AES-GCM,禁止云备份。
二、风险的诚实分层
审计的结论不是「安全」,而是风险的准确分层:功能本质风险(最大)——开无障碍即全手机视野与操作权,网页里的恶意指令理论上可诱导误操作,项目的缓解是发消息/下单/删除强制弹确认卡片,但这是品类共性无法根除;小风险——为局域网本地模型放开了明文 HTTP;信任缺口——.so 与 rootfs 是预编译的,普通用户无法逐字节验证;迭代快——五天内 0.1.25 到 0.1.30,Beta 期 bug 正常。可控性同样分层:不给无障碍权限时它是「聊天+浏览器+终端」三合器,敏感面极小;最坏情况卸载即清空(数据全在私有目录、allowBackup=false、授权随卸载吊销)。
三、版本矩阵与分级试用
落地问题一并答清:安卓 12 是操作 App 的门槛、14 最佳、11 不行、必须 arm64(沙箱专供);模拟器会砍掉一半能力(x86 跑不了沙箱、主流 App 有模拟器检测)。没有备用机的分级试用方案随之出炉:第一档只开基础功能(风险趋零但覆盖大半产品),第二档按需开无障碍、用完即关、从低敏感 App 练手;真上瘾了再花一两百块买台二手 arm64 机。
四、「自己写更安全」的拆解
最有价值的部分是对灵魂追问的回答:「自己搞一个会更安全吗?」——大体不成立。安全增益取决于砍掉什么能力,而非代码出自谁手:从零自研是 1136 个 Kotlin 文件、核心难点全在安全敏感区(读屏、手势注入、PRoot、确认机制),一个人的初版大概率在 MCP 绑定、限流、401 统一这些踩坑细节上留洞;fork 收紧(重编 rootfs、https-only、砍功能)可行但每个上游安全修复都要自己跟进;而屏幕内容发给模型服务商、prompt injection、高权限误操作——这些「手机 Agent」的物种属性,fork 完全解决不了。降能力,才是真正的加安全。
评论