学习下 BlackHat Asia 2021 大会议题

2021-05-20 10:28:53 浏览数 (1)

BlackHat Asia 2021会议已经结束,相关议题资料也放出,刚好这两天周末抽空学习下,共39个议题,覆盖范围还是比较广的,虽然议题质量不如USA主会场,但多少还是有一些值得学习的内容,我只挑了一些感兴趣的议题做些介绍,更多内容可以上官方下载(https://www.blackhat.com/asia-21/briefings/schedule/index.html)。

1、A New Era of One-Click Attacks: How to Break Install-Less Apps

‍‍‍OPPO子午实验室分享的议题,主要针对一些免安装应用的攻击分析,比如Instant App、AppClips和快应用,其中个人比较感兴趣的是快应用的漏洞分析,由于快应用中的一些文件访问API存在目录遍历漏洞,通过漏洞远程下载恶意so库到快应用的 lib-main目录下实现任意代码执行,可以通过DeekLink去远程触发,这个利用思路挺好的。

2、THE COST OF COMPLEXITY: Different Vulnerabilities While Implementing the Same RFC

物联网企业安全公司Forescout和以色列安全研究小组JSOF的共同发现的NAME:WRECK是TCP/IP协议栈中的DNS协议上的9个漏洞,影响很多物联网设备。议题集中介绍DNS消息压缩功能上的漏洞,并列举了近20年来一些关于消息压缩的漏洞,重点还是介绍他们发现的NAME:WRECK漏洞,其中有好几个是RCE漏洞。他们把导致这些漏洞的问题称为anti-patterns:

  • 缺少TXID(Transaction ID)验证,随机TXID和源UDP端口不足,比如CVE-2010-17439、CVE-2010-17470、CVE-2021-25667;
  • 缺少标签和名称长度验证,比如CVE-2020-15795;
  • 缺少NULL终止符验证,比如CVE-2020-27736;
  • 缺少计数(record count)字段校验,比如CVE-2020-27737
  • 缺乏域名压缩指针和偏移验证,比如CVE-2020-27009、CVE-2020-25795、CVE-2021-25667

对方给出了几种应对方案:

  • 优化RFC文档,指导如何避免此类问题,毕竟这文档过于陈旧;
  • 开源Joern工具进行C/C 代码的静态分析,帮助检测代码漏洞
  • 设备指纹识别易受影响的设备,进行补丁安装或隔离,做好资产风险管控;
  • 流量入侵检测

3、The Price of Compatibility: Defeating macOS Kernel Using Extended File Attributes

介绍macOS上的文件扩展属性xattr,在FAT文件系统中,居然是在内核中解析xattr的,解析不当就是一个内核提权漏洞。相关解析代码在XNU中开源了,位于bsd/vfs/vfs_xattr.c中,设置扩展属性后,会在相同目录下,生成前缀"._"的隐藏文件,即是在FAT中存储xattr的位置。刚好相关的解析代码也就是几百行,因此作者是代码审计漏洞的。估计这一攻击面曝露后,就没啥可玩的了。议题中也介绍了相关漏洞的利用方式,有兴趣的同学可以看下。

4、(Un)protected Broadcasts in Android 9 and 10

介绍Android广播组件上的系统应用漏洞,在当前四大组件被玩烂的情况下,找出此类漏洞需要更加全面和细心的分析,虽然就单点技术而言比较简单。作者发现只有驻留在priv-app目录(例如/system/priv-app/SystemUI/SystemUI.apk)中的预安装应用才能在系统中注册受保护的广播,这使得其它系统应用可能缺乏对protected broadcast Intent消息的保护,在这种情况下,可以发送欺骗性消息执行相应的功能,可能导致代码执行或者敏感信息泄露。

5、Scavenger: Misuse Error Handling Leading To QEMU/KVM Escape

蚂蚁光年实验室在去年天府杯上用的QEMU逃逸漏洞,更多的还是成果的展示,缺乏授渔之技,主要介绍大赛上所用漏洞的成因和利用技巧,并开源了利用代码。他们通过静态分析收集虚拟设备代码中涉及错误处理的goto语句以及调用方信息,然后同步给aflgo进行Fuzzing,就一页PPT,隐藏太多细节了。

6、Mining and Exploiting (Mobile) Payment Credential Leaks in the Wild

关于批量挖掘和利用移动支付凭证漏洞的议题,由于开发大意,将一些支付凭证开源到GitHub或者GitLab,或者通信数据中包含一些URL进行泄露的密钥文件地址。通过这些支付凭证可能接管他人的帐号,有点oauth认证绕过的味道,还有一些跨应用通用消息伪造用于钓鱼欺骗。作者设计了一款针对支付凭证泄露的自动化挖掘工具,整体设计架构如上图所示。先通过网络爬虫收集代码、APK、支付SDK,然后针对支付凭证特征进行扫描检测,最终输出测试报告。对方共检测了14万个git开源项目,其中10.3%存在支付凭证泄露,其中7.8%只存在于历史提交中,而后开发者共花了51天时间去提交仓库以隐藏泄露的凭证,gitlab上的项目大多是外包公司的。

7、New Attack Surface in Safari:Using Just one Web Audio vulnerability to rule the Safari

蚂蚁光年实验室在苹果系统上的音频解析模块的漏洞,大多是CoreAudio模块的,后来他们针对Safari的WebAudio模块进行Fuzz,其中以CAF文件解析漏洞为例,介绍了在safari中的漏洞利用场景,建议大家还是直接看paper,ppt写得太零稀了。作者使用TrapFuzz,编写一些音频解析的harness去做Fuzz,跟我以前思路差不多,只是之前我没用TrapFuzz,发现里面还截图我博客了。其实这议题更多的还是成果展示,没太多技术细节。看在帮我打广告的份上,我也回敬一下吧^_^

8、Give Me a SQL Injection, I Shall PWN IIS and SQL Server

Access与SQL Server在解析数据库mdb文件时存在很多漏洞,此类漏洞在最近两年经常被刷,很容易撞洞,好在微软也不给奖金,某些人应该也就释怀了吧。这可能是因为被大量刷洞导致的,微软可没少干这种事,之前360狂刷windows服务提权漏洞,就更新漏洞奖励计划,降低此类漏洞奖金了。像这类漏洞还很好利用,在页面中嵌入即可实现IE浏览器RCE,连个CFG保护都没有,但edge不支持这些模块。作者从另一个角度,提供一个攻击场景,那就是结合SQL注入漏洞,使用unc路径指定远程的mdb文件,借助SQL语句令其加载解析,从而触发内存破坏漏洞,实现代码执行的目的。针对此类漏洞的Fuzz,都是基于一些数据库模块(比如msjet40.dll、msrd3x40.dll、acecore.dll等等)的API写hareness,然后用winafl跑跑足矣,不过看作者介绍的,他应该还做了SQL查询语句的变异。按作者说的,他们在这数据库解析上挖了上百个漏洞,产出颇丰。

9、Wideshears: Investigating and Breaking Widevine on QTEE

Widevine是一套DRM(数字版本管理)解决方案,运行在QTEE中,本议题就介绍如何利用漏洞从QTEE可信存储中窃取敏感数据。推荐阅读paper,信息相对完整一些,而ppt大多是图,文字解释太少。通过代码审计,作者分析了Widevinedash DRM命令分发对应的回调处理函数,跟进找到一处位于wv_dash_core_decrypt_cenc函数的漏洞,该函数负责解密被Widevine加密的DRM内容,作者手工逆向还原出一些相应的command buffer的字段,其中存储着元数据的subsample_meta_t中的subsample_offset代表subsample相对data_buf(存储输入的加密数据)的偏移,但对subsample_offset未作校验,导致过大时造成内存越界,并且解密后,会再使用memcpy拷贝到outbuf。作者最后使用开源播放器Exoplayer来演示漏洞触发场景,然后在kernel ioctl之前通过hook QSEECom_send_modified_cmd_64函数去修改subsample_offset以触发TA崩溃,paper中有提供相应代码,看着像是用frida写的。接着又介绍TA内存分布范围,CA与TA间的共享内存实现,如何利用另一漏洞泄露物理地址,绕过ASLR等等,整体过程还挺复杂。最后,利用漏洞读取出存储在TEE中Keybox,它是Android密钥箱,用于解密受DRM保护的内容。

paper中刚好总结了整体漏洞利用过程,这里也一并整理出来,方便理解:

  1. 使用Exoplayer打开DRM视频URL进行播放;
  2. CA完成上述步骤后, 调用CENC通用加密功能对内容进行加密;
  3. 从系统堆中获取所有合适的buffer;
  4. 启动一个UNIX domain socket服务以保存所有耗时的中间资源;
  5. 快速重复1、2步骤,直到SMC调用不再崩溃;
  6. 匹配页面签名以获取TA基址并绕过ASLR;
  7. 将文件路径写入g_wv_dash_keybox_file_path;
  8. 编写可读的缓冲区地址,以便get_robustness_ver可以平稳运行;
  9. 劫持qsee_malloc与qsee_free以避免崩溃;
  10. 调用SMC以执行wv_dash_core_get_deviceid函数,以便使keybox在内存中泄露出来;
  11. 从缓冲区中读取keybox;
  12. 重储上下文。

总结

发现涉及漏洞攻防的议题都有一个特点:不分享如何挖掘的,要么蜻蜓点水,要么闭口不谈。大家还是有所保留的,除了那些完全人肉审计代码挖洞的就没话说了,很多搞Fuzz就基本都省略,对技术内容还是有所保留的。不少议题更多的是展示团队的研究成果,毕竟也是为了帮助提升团队影响力,也是可以理解的。议题一多,水平参差不齐也难避免,但也不影响好学者从中拾得些许思路心得,扩展下眼界也是极好的。

0 人点赞