• 0
  • 2
分享

摘要:当前,人脸识别技术已经在诸多领域取得广泛应用,但其风险也一直为外界关注,尤其是对风险容忍度较低的金融行业来说,用户验证环节如果出现漏洞,就可能造成巨大损失。本文将以一个项目实例出发,分享在测试人脸识别技术时遇到的问题和取得的经验,并对如何测试人工智能提出几点思考。


人脸识别技术测试实例——从一个项目谈起

近期,我司测试部门在承接某项目时,发现了该项目在用户活体验证出现的一个业务安全漏洞。活体验证是该项目服务流程中的一个必经步骤,验证的方式是由用户以手机设备录制阅读随机数字的视频,与后台人脸数据比对后,判断当前操作用户是否为本人。在此环节,测试人员发现,通过在电子设备上进行图片翻拍和视频翻拍,非本人也同样能够通过该验证。随后,项目组联系活体验证技术提供方,调整相关参数,又进行了人脸识别的专项测试,但在该专项测试中仍有一定比例的静态图片攻击成功,骗过模型。鉴于测试结果,项目组经过研究讨论,决定该项目延期投产,集中解决人脸识别模型相关问题。


常用人脸识别/活体检测技术简介

人脸识别是人工智能领域应用较为广泛,发展也相对成熟的技术。静态的图片人脸识别安全性较低,因此多采用活体检测技术,下面对常见的活体检测技术进行介绍。

动作配合式活体检测:算法给出随机动作指令,用户配合完成动作,如点头、眨眼、摇头、唇语等,该类算法当前应用最为广泛。

静默活体检测:顾名思义,相较动作活体检测,静默活体检测不需要用户进行配合动作,而是让用户正对着摄像头几秒即可完成检测,其检测的要素包括了眼皮和眼球的律动、面部肌肉的收缩等。

红外活体检测:即利用红外成像原理进行活体检测,该算法安全性较高,但需要额外配置红外摄像头。

3D结构光活体检测:能够根据反射光线识别3D的人脸结构,安全性较高,但需要深度图像镜头模组配合,目前只在部分高端旗舰手机上有所配置。


常见人脸识别攻击方式简介

在对人脸识别/活体验证环节的测试过程中,测试人员尝试了多种攻击方式,从介质上分类,基本的思路包括图片攻击和视频攻击。

图片攻击:即以静态图片欺骗人脸识别算法,应用于静态图片人脸识别。图片展示介质包括了电子屏幕(考虑不同分辨率,不同成像原理的电子屏幕),纸质图片(彩色和黑白)等。

1.png

图1 基本的照片攻击方式,看看我是谁?

视频攻击:翻拍或制作视频以欺骗人脸识别算法,主要用来对动作配合式活体检测进行攻击。最直接的攻击方式为播放对应客户本人预先根据指令而录制的短视频,但现实中伪造成本较高。随着图像处理技术、人工智能技术的发展,出现了一些根据静态照片生成动态视频的软件,仅需要一张人像照片,就可以生成该人像摇头、点头、眨眼,甚至阅读各种文字口型的视频。

2.png

图2 使用软件生成了彦祖读一串数字的视频,右下为原图

考虑上述两种攻击方式,准备的影像素材通常需要依赖电子屏幕作为介质进行输出,这就可以通过识别摩尔纹等方式进行判别。而单纯的静态图片人脸识别应用场景也较少。下面介绍两类进阶的攻击方式。

实体攻击:该攻击方式的形式较为多元化,主要思路是避免将电子屏幕或者单纯的平面照片作为验证图像展示方式。例如,打印一张人体照片,将照片按照一定弧度弯折,配合活体验证指令活动,对于向眨眼这样的指令,可将照片的眼部图像减掉,非本人的真人在后方配合眨眼。而较为高级的攻击方式还包括了制作3D脸部模型等。


3.png

图3半张脸攻击

4.png

图4扣嘴攻击

应用破解/注入攻击:该攻击方式需要一定技术手段,思路包括埋点监测人脸识别触发流程,修改程序绕过该步骤,或抓包后重组数据报文,将前述图片攻击和视频攻击中准备的影响不通过其他介质转录,直接发送给后台,以及修改报文中的阈值等关键指标后再进行检验等。


浅谈如何测试人工智能软件

人工智能软件的测试,可以分为两个部分:一,对软件的测试。二,对算法的测试。而本次测试的特殊性就在于对算法的测试。

对于测试人员来说,由于当前最广泛应用的深度学习算法(神经网络)是一种黑盒算法,测试人员难以像传统的功能测试一样提出规则性的功能缺陷,且缺陷难以稳定复现,因此测试人员最终所提供的测试结果往往是提供正向及反向用例的通过率,作为参考。

尽管算法的开发人员在建模时就需要输入大量的训练集与测试集,同时也需要评估大量的模型相关指标,但测试工作仍然是不能缺位的:开发人员更注重模型的正向通过率,而对多样性的反向场景设想不足。这就需要测试人员发挥想象力,提供更多反向场景。其意义在于,一方面对于算法较易失效的场景采取更加针对性的模型训练。另一方面,即便是黑盒的神经网络算法,也能够根据反向用例反推模型各个路径的权重,对模型参数调整提供参考。

另外,对于人脸识别算法,通常还要关注模型相似性阈值,即相似度大于X%后判定通过。该值过高,则增加了攻击通过的风险,该值过低,则会造成正向通过率偏低,影响正常用户体验。而采用何种阈值,还需要项目组权衡了风险和收益之后,综合考虑后决定。


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 命令执行漏洞一般查看home目录,挖掘用户信息:ls -alh /home查看具体用户的目录:ls -alh /home/用户名/查看系统信息:uname -a利用ssh命令执行root权限命令使用ssh 用户名@localhost通过ssh登录服务器是不需要身份验证的;比如查看bill用户sudo命令的权限:ssh bill@localhost sudo -lubuntu自带防火墙,所以关闭防火墙方便后面的操作。ssh bill@localhost sudo ufw disable反弹shell攻击机启动监听netcatnc -nlvp&nb...
            14 14 3333
            分享
          •   测试工作中,新人对于测试流程、测试方法都有可以直接拿来用的教材,但是对于回归测试中的bug处理的细节,往往需要我们更多的经历才能更好的完成自己的工作,下面我们来谈一谈回归测试bug的处理中需要关注的点:  一、什么是回归测试?  回归测试是指在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,对软件的任何新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再现,并确认曾经通过的功能不会出现问题。  二、回归测试做多少次?  很多资料都有具体指定回归的次数,在我看来,回归测试不能确却的给出一个项目具体做多少轮回归测试,因为,版本不可控的因素太多了,需求的更改、人员的...
            0 0 1077
            分享
          • 在上一个模块,我们从方法论层面讲了测试用例设计的方法,这一讲我们将会从实战的角度来讲,设计一个「好用例」的过程和方法。本模块的第一节,我们来看拿到需求后,如何开始着手用例设计。熟悉需求细节设计用例的根本,是对需求的了解和把握。只有清楚的理解了需求中的每一个细节,才能够让自己的用例足够得好。有些同学拿到需求后,还没有通读需求全文,就开始设计起用例了。在我看来,这样做是不可取的。要熟悉需求,我们建议要做到以下几点:充分阅读,透彻理解。拿到一个需求后,我建议大家先对需求文档做充分的阅读,通过至少三遍的阅读,来对需求有一个充分而透彻的理解,这里不仅包括对需求中细节的理解,还包括需求背景和目的的理解。只...
            0 0 76
            分享
          •   vivo和华为、中兴均签署了全球专利交叉许可协议。  华为与vivo宣布已签订全球专利交叉许可协议。该协议覆盖了包括5G标准在内的蜂窝通信标准基本专利。  华为知识产权部部长樊志勇表示:“华为很高兴与vivo通过友好协商达成协议,相互认可彼此的知识产权价值。这份许可协议体现了行业正在共同投资基础研究,并致力于将基础研究技术标准化以共享创新成果,为全球消费者提供更优质的产品和服务。”  同一天,中兴通讯宣布与vivo签订全球专利交叉许可协议,开启了双方在专利领域的战略合作。  官方表示,中兴通讯与vivo达成战略合作,体现双方对于知识产权的尊重,双方的交叉许可协议也体现了中国企业对彼此在通信...
            0 0 412
            分享
          • 状态码分类2XX 成功状态码2系状态码都是表示服务器收到客户端的请求并且正确处理。- 200 OK表示从客户端发来的请求在服务器端被正常处理了。在响应报文内, 随状态码一起返回的信息会因方法的不同而发生改变。 比如, 使用 GET 方法时, 对应请求资源的实体会作为响应返回; 而使用 HEAD 方法时, 对应请求资源的实体首部不随报文主体作为响应返回(即在响应中只返回首部, 不会返回实体的主体部分)- 204 No Content该状态码代表服务器接收的请求已成功处理, 但在返回的响应报文中不含实体的主体部分。 另外, 也不允许返回任何实体的主体。一般用于只需要从客户端往服务器发送信息, 而对...
            0 0 1491
            分享
      • 51testing软件测试圈微信