在当今数字化时代,人脸识别技术广泛应用于各个领域,为我们的生活带来诸多便利的同时,也面临着日益严峻的安全挑战。近期,团队群里提及的通过 AI 利用一张照片制造视频以绕过人脸识别功能的话题,引发了深入的思考与研究,这无疑开启了新一代社会工程学攻击的篇章。
0x00 人脸识别技术基础
0x000 人脸识别原理
人脸识别(Face Recognition)作为一种基于人脸特征的生物识别技术,其工作流程宛如一场精密的科学探索。它借助摄像头或图像采集设备获取人脸图像,随后如同一位技艺精湛的工匠,精心提取其中关键特征信息,诸如眼睛间距、鼻梁形状、脸型轮廓等。最后,将这些特征与已知人脸数据库进行细致比对,从而实现“识别谁”或“确认是不是某人”的目标。
0x001 人脸识别核心流程详解
-
人脸检测:此乃人脸识别的第一步,如同在茫茫图像或视频海洋中精准定位宝藏。常用算法如 Haar Cascade、MTCNN、RetinaFace、YOLO - face 各显神通,从复杂的背景中敏锐地定位出人脸区域。例如,Haar Cascade 作为经典级联分类器,以其快速检测的优势在一些对速度要求较高的场景中发挥重要作用;而 MTCNN 作为多任务 CNN,虽速度相对一般,但检测效果颇佳,能更准确地定位人脸。 -
人脸对齐(人脸校正):检测出人脸后,就像为照片中的人物整理姿态,对人脸进行旋转、缩放、剪裁,使人脸处于统一姿态,为后续特征提取奠定良好基础。这一步骤确保了不同角度、不同大小的人脸在后续处理中有统一的标准,提高识别的准确性。 -
特征提取:这是人脸识别的关键环节,如同从宝藏中提炼最核心的价值。常用模型如 FaceNet、ArcFace、Dlib 大展身手,提取出高维的人脸特征向量,像 128 维或 512 维向量。这些向量犹如每个人脸的独特“数字指纹”,蕴含着人脸的关键特征信息。例如,FaceNet 生成的 128 维特征,在人脸比对中发挥着重要作用;ArcFace 凭借高精度,常用于训练商用级别的识别系统。 -
特征比对 / 分类识别:将提取的人脸特征与数据库中的已知人脸特征进行匹配,就像在庞大的指纹库中寻找匹配的指纹。使用欧氏距离、余弦相似度等方法,判断两张人脸是否属于同一人。若相似度达到一定阈值,则认定为同一人,反之则不是。
0x002 常用人脸识别模型与算法特点
-
OpenCV HaarCascade:专注于检测领域,作为经典的级联分类器,其优势在于能够快速检测人脸,适用于对检测速度要求较高的场景,如一些实时监控系统,能在短时间内快速定位人脸位置。 -
Dlib:功能较为全面,不仅能进行人脸检测,还可实现特征提取。其内含 68 个关键点检测和 128 维人脸编码,为后续的识别和分析提供了丰富的数据支持,常用于一些对人脸特征分析要求较高的应用中。 -
MTCNN:在检测和对齐方面表现出色,多任务 CNN 的特性使其能够同时处理人脸检测和对齐任务。虽然速度一般,但检测和对齐的效果良好,对于一些对人脸姿态要求较高的场景,如人脸认证系统,能提供较为准确的人脸姿态调整。 -
FaceNet:专长于特征提取,生成的 128 维特征在人脸比对中具有较高的准确性,广泛应用于各种人脸比对相关的场景,如门禁系统中的人脸比对。 -
ArcFace:以高精度著称,常用于训练商用级别的识别系统,能够满足对识别准确性要求极高的场景,如金融领域的人脸认证等。
0x01 人脸识别绕过攻击手段
0x010 展示攻击概述
通过一张图片绕过人脸识别系统,这一攻击技术被统称为 Presentation Attack(展示攻击),其中“照片攻击”是最基础的类型。不同的攻击方法各有特点,在成功率和检测难度上呈现出不同的表现。
-
静态照片攻击:用打印好的照片面对摄像头,这种方式成功率较低,因为大部分现代人脸识别系统已对其进行有效防御。同时,由于缺少深度和动态信息,很容易被检测出来。例如,一些人脸识别系统通过检测人脸的深度信息,能够轻易识别出打印照片的平面特性。 -
屏幕回放攻击:在手机、平板播放人脸照片或视频,对一些旧系统仍有一定效果,成功率中等。不过,系统有可能识别出屏幕边框等特征,从而检测到攻击行为,因此检测难度也为中等。 -
3D 头模攻击:使用人脸 3D 模型(如硅胶面具),由于其外形更拟真,可骗过部分深度检测,成功率较高。同时,由于其更接近真实人脸的外形,检测难度较大,一些简单的检测手段难以察觉。 -
眼镜纸片攻击:将人脸照片贴在纸眼镜上配合穿戴,可欺骗特定角度的识别器,成功率中等。但这种攻击方式需要特定条件,例如识别器的角度和位置等,局限性较大。 -
对抗样本攻击:利用特定算法修改图片,使识别结果偏离真实,成功率较高,但需要算法支持,技术门槛高。同时,由于这种攻击方式对图像的修改较为隐蔽,难以察觉。
0x011 绕过现代主流活体检测机制
-
眨眼/张嘴检测绕过 -
眨眼检测(Blink Detection)原理:当 EAR(Eye Aspect Ratio,眼部纵横比)降低到一定阈值时,意味着眼睛闭合,进而判定为眨眼。通过检测眼睛在“睁开 → 闭合 → 睁开”过程中眼部特征的变化来实现眨眼检测。这一检测方式旨在防止使用静态照片或屏幕截图蒙混过关。 -
张嘴检测(Mouth Open Detection)原理:检测嘴部高度变化,常用指标为 MAR(Mouth Aspect Ratio,嘴部纵横比),通过监测上下唇之间距离的变化来判断是否张嘴。 -
基于 First Order Motion Model(FOMM)的绕过方法:在当今技术快速发展的背景下,无需通过欺骗受害者录制眨眼或张嘴视频,借助 FOMM 项目(https://github.com/AliaksandrSiarohin/first - order - model/),只需一张照片即可生成受害者眨眼以及张嘴的视频。具体操作是将静态照片与自己录制的眨眼视频进行合成。FOMM 模型默认使用 256x256 分辨率,若想让生成的视频更真实,可通过 fine - tune 调整到 512x512。执行命令 python demo.py --config config/vox - 256.yaml --driving_video blink.mp4 --source_image victim.jpg --checkpoint checkpoints/vox - cpk.pth.tar --result_video result.mp4
,最终得到的result.mp4
即为victim.jpg
的眨眼视频。 -
Deepfake + 眨眼控制的高难度攻击方式:首先利用 DeepFaceLab 或 FaceSwap 之类的开源项目进行 DeepFake 模型训练。通过收集大量目标人脸视频和图片数据,让模型学习目标人脸的细节以及运动规律。在训练过程中,模型可借助原始视频中的自然眨眼和张嘴信息,学习到面部肌肉运动规律;也可利用附加的动作驱动器,通过其他视频(驱动视频)来控制输出视频中假人脸的眨眼或张嘴动作。例如,使用 DeepFaceLab 项目(https://github.com/iperov/DeepFaceLab),针对受害者进行素材收集以及数据提取与对齐后,启动训练脚本 python DeepFaceLab/main.py train --training - data - src_dir data_src --training - data - dst_dir data_dst --model - dir model
,模型会不断学习目标人脸特征。当训练效果达到预期,即模型收敛,输出换脸视频足够自然后,使用转换脚本python DeepFaceLab/main.py convert --input - video driving_video.mp4 --output - video result_deepfake.mp4 --model - dir model
,此时输出的视频result_deepfake.mp4
就是目标人脸带有假转换后,并保留驱动视频中眨眼、张嘴动作的视频。还可通过视频编辑软件对生成视频做颜色校正、帧率调整等后处理,进一步提升自然性和细节效果,以此迷惑使用静态检测技术的活体检测系统。 -
头部动作检测绕过:头部动作检测用于活体检测,通过连续帧中关键点位置变化计算欧拉角(pitch/yaw/roll)来判断是否完成动作,同时借助人脸关键点跟踪(如 Dlib、MediaPipe)和头部姿态估计(Head Pose Estimation)技术,确保操作的真实性,防止照片或视频等静态攻击。针对这种检测机制,可采用 3D 建模 + 骨骼动画的攻击方法。具体技术步骤如下: -
构建 3D 模型:使用 FaceGen 或 Blender 的 Photogrammetry 技术,将照片建成 3D 模型。例如,FaceGen 可根据照片生成较为逼真的 3D 人脸模型,Blender 的 Photogrammetry 技术则能利用多张照片构建更精确的 3D 模型。 -
绑定骨骼(Rig):为模型添加头部、眼球、下巴等骨骼,使模型具备可动性。这些骨骼的添加为后续动作模拟提供了基础。 -
制作动作动画:通过添加关键帧的方式,实现各种动作模拟,如头部从正面到左转 30°。在 Blender 中,可通过调整 Yaw 轴实现左看或右看动作,通过联合控制 Pitch 与 Roll 实现点头或摇头动作,利用 Blend Shape 或 Morph Target 实现微表情模拟。 -
渲染视频或导入 Unity/Unreal 实时驱动:将制作好的动画渲染成视频,或导入 Unity/Unreal 等游戏引擎进行实时驱动,生成动态视频。 -
通过虚拟摄像头或投影进行攻击:将生成的视频通过虚拟摄像头输入到人脸识别系统,或通过投影的方式展示给识别设备,以此绕过检测。 -
红外检测绕过:红外检测旨在识别“是否为真实人脸”,通过检测红外波段下的温度分布和材质特征,判断面前是否是活人。针对这种检测机制,可采用 IR LED 面具攻击技术。这是一种较为实用的动态红外绕过方式,利用不可见红外 LED 光源(850nm 或 940nm)照射人脸特定区域,模拟“热发射效果”。具体布置如下: -
核心材料和组件:选择 940nm(对绝大多数 IR 摄像头不可见)或 850nm(略微可见红光)的红外 LED 作为光源;电源可根据实际情况选择 5V 18650 锂电池、9V 电池盒,或 USB 供电;控制器推荐使用 Arduino Nano 或 ESP32;每颗 IR LED 需串接电阻(如 100 - 220Ω)以防止烧毁;若要模拟动态温度变化,可通过 PWM 控制模块控制 IR LED 的亮度变化;使用眼镜/帽子外壳隐藏 IR LED 及电路部分;在多个 IR LED 同时开启时,可使用散热片进行散热。 -
面部仿真热斑区域布置:在鼻梁中线布置 2 - 3 颗、两眼下方各布置 2 颗、额头中部布置 2 颗、颧骨各布置 1 颗、下巴正中布置 1 颗红外 LED,使照射区域均匀,模拟出“自然发热”的红外图像效果。同时,可加入 MOSFET(如 IRF520)做为控制开关,由 MCU 控制其 PWM,所有 LED 最好并联控制、个别限流。通过模拟出“呼吸热动效”,让 IR 图像呈现出动态热流变化,可绕过部分“温度静态检测”。 -
3D 结构光检测绕过:3D 结构光检测用于判断被识别对象是否为真实三维人脸结构,防止照片、视频、平面屏幕等“2D”攻击。绕过这种活体检测属于高难度操作,需要使用高仿硅胶面具(可穿戴 3D 突变仿生攻击)。对硅胶面具的要求如下: -
几何形状精准:精确模拟目标人脸的 3D 几何形状,确保与真实人脸在外形上高度相似。 -
皮肤表面质感强,含毛孔、汗腺模拟:使面具不仅在外形上相似,在皮肤质感上也更接近真实人脸,增加欺骗性。 -
可选择内嵌五官“可动”版本(眼皮、嘴唇):进一步增强面具的拟真度,使其在动作表现上更像真实人脸。 -
增加红外表现力:为了更好地绕过检测,可在面具内嵌红外反射层,或通过上色调整 IR 漫反射,以及在额头、鼻梁、颧骨等部位加涂 IR 粉末/硅胶混合色剂。若系统无材质分析功能,这种面具易被识别为“真实人脸”。 -
深度学习活体检测绕过:深度学习活体检测目前属于最前沿的活体检测方法,基于 CNN 或 Transformer 识别“照片攻击”、“视频播放攻击”等非活体人脸行为。然而,可通过对抗样本攻击进行绕过。其原理是在不引人注意的前提下修改输入图像 𝑥 为 𝑥∗ = 𝑥 + δ,使模型 𝑓 输出错误类别或通过活体检测将攻击图像识别为指定人,让模型误判照片或屏幕为“真人”或“活人”。这里可使用 PGD(Projected Gradient Descent),这是一种用于生成对抗样本的攻击方法,是对基本方法 FGSM(Fast Gradient Sign Method)的多步迭代扩展版本。示例代码如下:
for i in range(num_steps):
image.requires_grad = True
output = model(image)
loss = loss_fn(output, label)
model.zero_grad()
loss.backward()
data_grad = image.grad.data
adv_image = image + alpha * data_grad.sign()
# 投影回合法定义的扰动范围
eta = torch.clamp(adv_image - original_image, min=-epsilon, max=epsilon)
image = torch.clamp(original_image + eta, 0, 1).detach()
其中,𝜖 表示最大扰动,建议取值在 0.03 - 0.1 之间;𝛼 表示每步扰动强度,建议取值在 0.005 - 0.01 之间;step 为 PGD 步数,建议取值在 10 - 40 之间;mask 用于选定对抗区域(眼、鼻、嘴部等人脸 ROI 区域);Loss 目标可选择 CrossEntropy / Feature loss,也可组合使用;输入图尺寸在活体检测中常使用 112×112 - 224×224,需保持一致。此外,还有另一种对抗方式——Adversarial Patch(对抗贴纸)。将一个具有欺骗力的局部图案贴到图像中任意位置,不依赖图像整体扰动,适合打印出来贴在脸上。通常使用 Expectation Over Transformation (EOT) 训练可迁移补丁,以此绕过深度学习活体检测。
0x02 关于安全服务的拓展
承接红蓝对抗、安全众测、安全培训、CTF 代打、CTF 培训、PHP / JAVA / GO / Python 代码审计、渗透测试、应急响应、免杀/远控开发、二进制漏洞挖掘、Web3 安全服务、智能合约代码审计等一系列安全项目,如有需求可联系下方微信。这一系列服务涵盖了网络安全领域的多个重要方面,反映了当前网络安全环境下多样化的安全需求,也凸显了在人脸识别等技术广泛应用背景下,保障网络安全的复杂性和重要性。
人脸识别技术在不断发展的同时,其面临的绕过攻击挑战也日益严峻。了解这些攻击手段,不仅有助于人脸识别技术开发者针对性地加强安全防护,也提醒广大用户在使用人脸识别相关应用时保持警惕,共同维护数字世界的安全与稳定。
原文始发于微信公众号(网络侦查研究院):探秘新一代社会工程学:人脸识别绕过攻击技术解析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论