当前,最热门的技术非 AI 莫属,事实上,AI 已经在一些领域上展示了自身的应用潜力,在美国国防部高级研究计划局举办的“网络安全挑战赛”上,我们已经看到 AI 在网络安全上的应用,那么在移动端的安全方面,AI 可以发挥怎样的效力呢?蚂蚁金服巴斯光年安全实验室技术专家仲花和此彼就在本次先知创新大会上发表了《漏洞挖掘的工业时代尾声,Android 系统代码审计新思路与 AI 漏洞挖掘的结合》的主题演讲,介绍了一种批量挖掘 Android 系统漏洞的全新角度,关注被忽视的底层数据结构,以及通过代码审计发现 Android 系统中攻击面的方法,并展示相关实例。本文是对两位老师演讲后的专访整理。
仲花 (温瀚翔),专注于 AOSP 漏洞挖掘与制作提权漏洞利用。发现并报告 CVE-2017-0418,CVE-2017-0665, CVE-2017-0681,CVE-2017-0737 等多个 Android 系统漏洞并获得 Google 致谢。现于蚂蚁金服巴斯光年安全实验室从事 Android 漏洞挖掘及利用相关研究。
此彼 (吴潍浠) ,专注于研究 Android 安全。第一位 Google Android 安全奖金获得者。2016 年用自己发现的 Android 漏洞成功 root 当时 Google 官方搭载最新的 Android 系统的手机 Nexus 6 。曾从事 Android 恶意软件分析、反混淆、加密和漏洞挖掘利用等,现于蚂蚁金服巴斯光年安全实验室从事 Android 漏洞挖掘及利用相关研究。
仲花和此彼两位老师主要从 Android 漏洞的类型、高发点和触发途径为我们介绍了当前 Android 系统中的安全问题。
Android 系统常规漏洞类型有内存拷贝不当导致的堆栈溢出、计数器溢出导致的整形溢出、越界的读和写、UAF、类型混淆、TOCTOU 等,还有一种是缺少权限检查,不过这种漏洞一般出现在 framworks 层的代码中,让我们比较容易地以高权限执行代码。
Android 系统漏洞的高发点一般在系统服务进程如 system_server 或 mediaserver 中;应用所依赖的一些 framework 层调用比如 WiFi 的 API 调用,跨平台的第三方库如 Skia,以及各种多媒体解码库,还有厂商的一些硬件相关的音视频编解码以及图形图像加速解决方案的支持库。
触发路径主要有以下三种:
浏览器中的漏洞。这是最具有攻击性的,可以远程触发还可以造成代码执行。
文件解析漏洞。这种漏洞在 stagefright 后已经被 Android 系统的安全策略不断削弱,会造成影响但却不容易进行远程代码执行。
在手机本地的提权。应用程序通过与高权限的进行进行 Binder 通信,从而尝试以高权限进程的上下文执行代码。
AI 用于漏洞挖掘是基于遗传算法,遗传算法需要找到一个用例,能触发漏洞。首先,有一个用例的集合,变异函数就是先把一个或一个以上用例拿出来变异,放到适应函数里面进行运算,看这个新变异出来的用例是否是有价值的,如果有价值,就放到用例集合里面去,这是模拟生物进化的原理,通过变异和适应函数来筛选用例,即生物繁殖和适应环境。变异筛选逐渐把用例演化成能走入未走过的代码的用例,我们直接就相当于攻击者,就像军事演习一样,自己攻击自己的代码,模拟攻击者,攻击自己的软件,找出薄弱点即安全漏洞。
传统的漏洞挖掘其实就是人盯着源代码看,通过反汇编别人编译已经完成的产品,分析运行原理,推算在哪种情况下可能会出现问题,然后试着去实践一下看看是否会真的产生问题,如果会,说明这有安全问题,从而达到发现漏洞的目的。
而 AI 是基于遗传算法、进化算法,它是根据程序内部的反馈运行的。如果发现当前用例促使程序内部在工作流程上有新的动作,从而推测新的动作可能会发生一些问题,那么我就重复进行这样的动作,并在这种动作的基础上稍加修改,其实就是自我尝试改进的过程。
由于 AI 在每秒中都会尝试成百上千次,并且可以快速地进行迭代,而人在跟踪代码执行的过程是很缓慢的,人为了弥补这样的不足,一般会通过类似符号类符号执行来猜测,必须进行高度抽象地猜测,就像下围棋一样,要在很高的层次上进行判断,是自我感觉的过程。而 AI 不一样,它可以把全部可能走入分支都尝试去走。再者,AI 可以全天候地工作,这是人无法做到的。
虽然在苹果系统和 Android 系统上的漏洞挖掘大体上没有什么区别,但目前来看,在实践和适配的过程中,由于苹果有一些黑盒的程序,还是需要大量的人工参与的,而因为 Android 是开放的,而且文档很丰富,操作起来更方便。而且由于 Android 一直开源,文档也多,所以攻击 Android 的成本要比 iOS 低,所以大家都比较热衷于攻击 Android,Android 上的安全问题也就更加险峻,所以目前暂时选择在 Android 上用 AI 进行漏洞挖掘。
所有的攻击都是有场景的,逃逸攻击也不例外,逃逸攻击的场景一般指存在一个判别网络,逃逸攻击就是欺骗这个判别网络,让他识别成另一个东西。而漏洞挖掘是挖掘自己产品的漏洞,在这个场景中攻击者并没有参与来进来,也没有使用神经网络的判别,所以就没有逃逸攻击的问题。
机器漏洞挖掘还将在 PC 端和服务器上进行大规模训练。还有就是 Google 在手机上引入的 TensorFlow——手机上用的训练网络, 可能会产生新的安全问题,因为 AI 本身也是一个系统,它本身也会产生安全问题,就像上文提到的逃逸攻击那样。AI 经过大量训练之后,它内部会有训练出来的类似于算法的一个东西,然后可以通过生成对抗网络,训练出这个算法的逆算法去跟它进行对抗。
目前的算力已经达到了一个瓶颈,摩尔定律已经可能不起作用了,过去,算力在疯狂地膨胀,代码可以随便写写,可以不注重效率的方式,但是现在很多问题已经无法用算力解决,只能通过人工智能的方式,像经验主义,向实际的解决方法逼近,在这种情况下去近似地解决一个问题,不可能是完美解决。
从国家的层面上来讲,现在人工智能已经成为了国家的战略,这是一个新的时代方向,是一个大趋势,大家都在投入。一个新的技术的投入会导致什么呢?这个技术的门槛会大大降低,为什么这么说呢?众所周知,现在很多框架都有了,直接调算法就行了,你只需要判断这个环境是否适用于这个算法,然后再调参数就 OK 了,所以说它的门槛已经被大大降低了。
从行业的角度来看,谷歌、微软和国内互联网巨头 BAT 起到了很好的带头作用,他们搭建了一些好的平台给一些创业型企业使用,不仅打开自己的知名度,也培养了大量的 AI 人才,在这一点上,我们国家的人才实力是有机会超越美国的。
未来既懂传统技术又懂人工智能技术的开发人员将会很受市场欢迎,在现实中,我们需要专精于一个技术,但同时是我们还需要了解人工智能技术,因为了解人工智能的某些算法在将来可能会在你这个领域派上用场。
虽然很多人工智能技术会取代人类之前低效的工作,但是它毕竟还没有发展到超过人类智慧的程度,人类看事情的纬度会比机器多,我们知道这个东西什么时候该适用于什么经验,然后调到一个合适的点让机器去学习经验而不是完全地委派出去。所以机器还不能完全取代人,开发人员能做的就是保持一颗积极向上的心态,继续学习,跟紧时代的步伐,而不是过多地忧虑。
「移动开发前线」是 InfoQ 旗下关注移动开发技术的垂直社群。投稿请发邮件到 editors@cn.infoq.com,注明“移动开发前线投稿”。
QCon 北京 2018 全新开启,聚焦最新技术热点,沉淀最优实践经验。多位主题演讲嘉宾已确认,C# 编程语言的 Program Manager、Netflix 工程总监等国际大咖共呈技术盛宴,现在报名享 7 折优惠,立减 2040 元。有任何问题可咨询购票经理 Hanna,电话:15110019061,微信:qcon-0410。