凌晨两点,注入某金融APP的应用风控后台弹出一条告警:同一张身份证在四小时内完成了七次人脸核身,每次活体分数都超过0.98。绕过反欺诈工程师老周调出日志,活体发现第七次请求的检测device fingerprint是个刚出厂的红米手机——前六次用的却是iPhone 15 Pro Max。他骂了句脏话,注入把样本丢进逆向工程工具,应用三小时后在内存里翻出一段被混淆的绕过Lua脚本。
这就是活体注入攻击的典型路径。攻击者不碰你的检测摄像头,不伪造视频流,注入而是应用直接往活体检测SDK的进程空间里塞东西。Android的绕过zygote进程fork出应用后,ptrace附加进去,活体找到检测函数入口,检测hook掉返回值的校验逻辑。更土的办法也有——用Frida把so文件里的`is_live`函数直接patch成`return 1`,连特征都不用藏。
iOS那边麻烦点,但越狱设备上照样能玩。Cydia Substrate加载一个dylib,把`LivenessDetector`的`result`属性用KVC强制设成`@YES`。人脸框都没对准屏幕,活体分数已经写死在内存里。
你以为这就完了?最阴的是改底层相机数据。有个团队做过测试,在Pixel 6上刷了定制内核,把Camera HAL层的`processFrame`回调替换成预录的3D扫描模型——注意,不是视频,是带深度信息的点云。活体检测算法要求用户眨眼、转头,攻击者就用Unity实时驱动那个3D模型,每帧都带正确的视差和反光。检测方看到的是一张会动、有立体感、甚至能应对随机指令的脸。
这种攻击的可怕之处在于,它绕过了所有“行为分析”。你让用户笑,模型就咧嘴;你让用户向左转头,骨骼动画就带动颈部旋转。算法检测微表情?模型连瞳孔缩放都能模拟。有个金融科技公司做过内部红队,用这套方案在15分钟内过了包括某大厂“安全版”在内的四家活体SDK,其中两家还有动作指令随机化。
防御端也不是没动静。有些厂商开始做内存完整性校验,定期对比so文件的hash,但这招防不住拿到root权限的对手——他们能直接改内核的`sys_open`返回值,让读取的hash永远“正确”。还有人用服务端二次验证,把采集到的深度图上传云端重新跑一遍检测模型。但延迟一高,用户体验就崩,业务部门天天来骂。
说到底,纯软件层的活体检测就是一场不对称战争。攻击者只需要找一个绕过点,防御者得堵住所有口子。那些标榜“金融级安全”的SDK,真要对抗专业团队,撑不过一个迭代周期。唯一的安慰是,大部分黑产团伙水平没那么高,他们还在用屏幕翻拍和硅胶面具,这两招在带红外活体的设备上已经失效了。
所以别迷信“活体检测”这四个字。它防的是路过的小偷,不是持械的劫匪。真要保护高价值资产,还是得叠加设备指纹、行为序列、历史信用分这些维度。毕竟,当攻击者都能往你进程里注入代码了,那张脸是谁的,还重要吗?
顶: 51495踩: 57






评论专区