十年Android,十年漏洞史。
关注移动安全一直以来都是MOSEC的初心。7月24日,MOSEC 2020在疫情背景下依然如期和大家见面,而FreeBuf作为老朋友同样出现在了现场。
王铁磊主持,毛叔实时更博,还有来自盘古实验室的技术大佬、大厂的安全研究员,或是一言不合直接越狱,或是喝着茅台侃技术,都让今年的MOSEC一如既往地有看点。
有趣的是,在会议前,一位演讲嘉宾还收到了来自Apple产品安全的邮件,邮件里写着:“Are you willing to share with us a draft of your slides?”
究竟是什么议题,哪位大佬,引起了苹果产品安全的注意,甚至会前要资料?
何淇丹,或者你更习惯叫他Flanker。年少有为,是大多数人对他的评价:蓝莲花战队早期核心成员,前腾讯科恩实验室高级研究员,Pwn2Own 2016和Mobile Pwn2Own 2016冠军,曾在BlackHat USA、DEFCON发表演讲……说起Flanker的经历,很难想到这是一个仅二十来岁的年轻人。
当然,网络安全的世界里用实力说话,而非年龄。
“授人以鱼不如授人以渔”
此次,Flanker的分享主题是《DroidCorn: 无源码Android Binary Fuzzing新实践》。
面对一个复杂的软件时,Fuzzing(模糊测试)是一个非常有效的发现问题的自动化工具。而Flanker认为,这个工具更大的意义在于,授予技术人以“渔”。
众所周知,Fuzzing是通过随机数据输入直至程序崩溃,以此测试程序的健壮性。发展至今,已然成为安全测试与漏洞挖掘的重要工具。
惊人的是,距离Fuzzing技术被应用在网络协议的安全测试中已经将近20年。而直至现在依然有人在用的Peach也是沿用了16年之久的“老伙计”,至于流行的AFL则是在2013年底就发布了,采用源码编译插桩和QEMU模式实现代码覆盖引导Fuzzing的方式可以说是揭开了Fuzzing新的征途。
随着Fuzzing的流行,使用者对于Fuzzing的能力自然也有了更高的需求。时下流行的Fuzzing会根据每次运行时的覆盖率反馈信息动态调整输入,以达到更好的覆盖效果。而不同于开源代码有很多获取覆盖率的方法,闭源项目上的Fuzzing实践相对罕见,也少有公开讨论与研究公布。
因此,当Flanker介绍自己开发了一款Fuzzing工具:DroidCorn,确实让人意外与惊喜。DroidCorn为闭源Fuzzing实践提出了一些新的方法与思路,这应该也是议题引起Apple产品安全团队注意的原因。
本质上,DroidCorn是一个基于Qemu Unicorn的模拟执行框架,能够直接在X86服务器/PC平台上跑Android平台ARM32/64的代码,配合修改后的AFL就能在服务器上进行大规模测试。
DroidCorn框架的实现包括:修改AFL取得Qemu的覆盖率信息,支持T32指令、ELF加载、初始化堆栈、优化内存分配器,增加Page Guard,利用Unicorn构建简单的Kernel层,参考linuxbochs/usercorn自行实现一些基本的syscall,减少不必要的库函数调用等。
在Flanker的介绍里,DroidCorn执行效率相比qemu-user有了30%的提升,而在Fuzzing三星Quram图形库的过程中,更是跑出来7000多个crash,其中不乏可以利用的远程代码执行漏洞,影响数十亿的三星移动设备。
可以说,DroidCorn的数据再次证明了工具的重要性。
随着软件系统的规模越来越大,复杂度越来越高,编译出来的文件可能有数十M甚至更大,这样的趋势下仅依靠人工审计、人工逆向不仅非常耗费精力,而且也会存在人为误差。因此,对于自动化工具的需求是必然的,基于机器的Fuzz集群+人工也是Flanker看好的趋势。
“Al可能还远,但Fuzz可以faster”
如果说,在过去,Fuzzing更多的是在软件交付前的一种测试手段,那么现在,“Fuzzing的触角正在从传统的软件延伸到全链路的各个环节”。
对于软件开发组织而言,基于丰富、灵活的计算资源,在Fuzzing引擎技术支持下,他们对Fuzzing的期待也转向了自动集成、自动测试的完整的能力发展,让Fuzz对象不再局限于传统的软件,还将涵盖业务逻辑以及各种各样的输入,也就是万物可Fuzz。
与此同时,万物可Fuzz,碰上Al+万物,也让很多安全人员和企业开始思索Al与Fuzz是否能够碰撞出更好的结果。
Flanker对此则有自己的看法:Al或许是有一定前景的,但是目前来说投入产出比不高,依然还需要长时间的积累与发展。
目前,类似谷歌的ClusterFuzz、微软的 Security Risk Detection等也给模糊测试的优化提出了思路,不过距离真正的落地实践还为时尚早(目前国内只有少数几家在研究),但也可以预想,Al在Fuzzing中主要可以在3个部分发挥作用:
1、收集/创建测试样例
2、确定测试入口,触达更多的代码分支,在遗传算法上有新的突破
3、对测试产生的结果智能化评估分类,自动给出优先级和威胁程度建议
最后,Fuzzing怎么用?Flanker给出了一些建议:
对于企业安全防御人员来说:Fuzzing可以成为一个集成工具,被集成到企业DevSecOps工具链中,提高测试效率,弥补人力的不足。
对于研究人员或白帽子来说,Fuzzing意味着更好的产出,而要实践这一点,必须要找到其他人没有研究过的领域,或者在某一领域相较其他人有更深的理解(比如在开源Fuzzing的主流下,研究闭源Fuzzing实践)。“人无我有,人有我优”这句话在研究领域同样适用。
用一句话来说,对目标系统有更深入的理解+更好的工具(效率跨级别提升or切入点的改变)=更好的测试。
最后,Flanker和FreeBuf也聊到了移动安全。可以发现,在大众关注移动安全的同时,大多数人包括监管机构更多地将目光聚焦到上层的安全问题,比如移动App的数据和隐私安全。
此外,传统的攻防领域中面临的恶意软件威胁、漏洞利用、接口安全(和云端交互的安全问题)等问题依然存在,并且随着IoT规模化发展、5G普及,很多设备联网后首次暴露在网络威胁下,成为新的攻击对象。这种边界的潜移默化又飞速的拓展,势必会将移动安全的关注点从传统攻防、隐私问题等进一步拓展到物理安全。
企业不仅面临威胁的加剧与变化,同时也需要解决和应对安全更新周期长,涉及面广的问题。因此,“尽可能把问题消灭在发布前”,借助于虚拟化、AI、弹性云计算的东风,用一些新的方式来测试之前难以触及或是被忽略的问题,是企业优化安全能力的一大重点,或许,这也是Flanker致力于Fuzzing研究的重要原因。