HITB AMS 2021 议题分析与学习,感叹华人真多

2021-07-05 15:34:59 浏览数 (1)

最近也看到一些微博或公众号提到HITB会议的一些议题,就是分享链接,但还没人聊过里面的议题,今天我又批量下载议题pdf学习下。老规矩,聊聊一些自己感兴趣的话题。

抛开COMMSEC这些免费议题,整体的议题质量还行,有些可圈可点的技术可以学习下,个人比较喜欢安恒的office fuzz,以及长亭的两个虚拟机逃逸议题,推荐给大家。中议题的华人也是够多的,估计占了1/3,看到国内的相关安全门户网站也跟HITB合作宣传。

1、macOS local security: escaping the sandbox and bypassing TCC

介绍了macOS各个版本发展起来多项安全机制,包括签名、seatbelt(sandbox profile)、SIP,以及TCC(Transparency, Consent, and Control ),它是自从 macOS Mojave 开始引入的一个系统级别的安全概念。TCC的理念是,在没有用户明确同意之前,一个 app 不准许访问用户资源,包括硬件资源:摄像头、麦克风、定位、屏幕录制、蓝牙、HomeKit等,或者软资源:照片库、日历,文件夹、辅助功能、以及牵扯到包含个人隐私的第三方应用库文件等等。如下面看到的提示一样,正是TCC导致的。

同时也介绍最新系统引入的Separate System Volume,为系统卷上的数据添加签名,用于保护macOS系统文件,防止被篡改。

看苹果官方对TCC的漏洞奖励计划,给的奖金也不低。

最后作者介绍了一些漏洞案例,比如CVE-2020-10009 macOS System Preferences 沙盒逃逸漏洞,System Preferences是系统设置应用,位于沙盒之中,通过中断应用去修改cache文件指向恶意app来实现逃逸。另外也介绍了Adobe、Electron相关漏洞,里面的一些截图好像是演示,可惜官方只放出pdf,没法看到演示。

2、A Journey into Synology NAS

用Synology官方对NAS(网络附加存储)的介绍,可以理解为个人私有云盘,同时提供虚拟机管理,可以SSH远程连接管理。作者研究它可能是因为它是Pwn2Own的目标之一。

作者通过监听端口找到一些NAS开启的服务,然后抓包分析通信消息格式,借助Wireshark插件syno_finder(作者开源在github上,用lua写的)可以帮助快速分析协议格式。除了发现其中的密码泄露外,还使用Kitty & Scapy进行协议Fuzzing,Fuzz过程偶然导致DS918plus服务被重置,在管理员重置设备时可以窃取到管理员密码。

后面作者又通过IDA与GDB去逆向其它服务进行挖洞,同时去挖掘一些远程CGI接口的漏洞,搞一些内存破坏漏洞和常见的WEB漏洞。这种测试目标比较考验web和二进制方面的综合能力。

3、X-in-the-Middle : Attacking Fast Charging Piles and Electric Vehicles

Tencent Blade Team分享的攻击充电桩的议题,之前在BlackHat也分享过,议题方向比较新颖。借助XCharger设备篡改车辆识别码VIN,令绑定VIN自动支付的用户被“偷电”,达到免费给汽车充电的效果。VIN都是写在车窗前,去停车场逛逛可以收集到一大堆。研究过程中,他们租了5辆电动车和相关设备,估计也花了不少钱,靠“偷电”可能不好回本。

4、5G mobile networks and interconnects threats

借此议题聊下5G。作者使用free5gc开源核心网项目、gnbsim RAN模拟器、5GC_API搭建5G研究环境,然后去挖掘这些开源项目中5GC网元的漏洞,但这不代表在实际5G产品中存在相同漏洞,因为不同的厂商实现上会有差异。

此种情况代表着当前研究人员对于5G研究资源的匮乏,没有真实5G环境能够研究,毕竟这种只有像华为这种自研5G才具备此条件,中兴也在搞,但肯定没有华为搞得好,应用广度也不是一个量级的。之前在MOSEC上一韩国教授搞4G通讯安全,还去相关部门申请对实际通讯设备的测试,这种一般人很难搞到。如果未经报备,直接对相关通讯设备进行测试,也可能面临扰乱或破坏国家基础设施的法律问题。据说,绿盟从运营商那里搞到了5G设备用于安全研究,不知真假,仅当八卦。

5、Exploiting QSEE, the Raelize Way!

QSEE是高通的TEE方案,看到标题原以为是要搞手机,后来才发现是搞路由器上的QSEE。作者通过IDA逆向SMC回调例程,从中找到一些漏洞,主要还是对输入参数过滤不严导致的,允许写数据到安全内存,只是写入值比较受限,比如0、1、2这种,但可以通过它来关闭security range检测,即安全内存范围的检测,这样所有的SMC处理例程都能够接收指向QSEE内存的参数,即原来仅限REE内存地址参数,现在可以直接读写QSEE安全内存的数据了,然后在REE内存放shellcode,修改MMU配置(MMU负责虚拟地址到物理地址的转换,在其转换表中有个XN位代表内存是否可执行,类似Windows上的DEP)去清除XN位令shellcode可执行,再利用漏洞去执行shellcode。这些都是软件层面的漏洞,当漏洞都被修复后,作者又提出通过电磁故障注入EMFI的硬件攻击方式来关闭security range check,然后就可以重复利用前面介绍的软件漏洞利用技巧来达到代码执行,像这种硬件层面的攻击就无法修复了。不过,按作者说的,这种故障注入攻击方式成功率才5%,低得可怜,在实际场景中应用的话就比较困难了。

6、How I Found 16 Microsoft Office Excel Vulnerabilities in 6 Months

来源安恒的分享,之前在公众号上见过他们发过中文版的文章介绍这个议题。不得不说Excel确实是Microsoft Office中漏洞最多的一个,Fuzzing时也是崩溃最多的一个应用,空指针、内存不足的buf非常多,所以想fuzz office,Excel确实是首选。不过由于office自身沙盒的保护,利用起来比较困难,有时微软又不认一些漏洞,有时又认,我也有点搞不清楚他们的标准了。如果你经常报office漏洞,可能你会对MSRC这句回复不陌生:

“It is a Low/Moderate bug, which would require significant effort to exploit. You may disclose at this time if you wish.”

回到议题本身,作者提供了一些自己使用的excel种子来源(我以前是自己利用搜索引擎爬虫收集的,搞了上百G),并移植honggfuzz变异算法(我比较懒,直接拿radamas变异,不过之前我也用riufuzz跑过doc的公式编辑器漏洞),另外用IDA收集BBL,再用0xCC插入BBL起始地址并执行来收集覆盖率,从而实现语料库蒸馏的目的(这种方式太麻烦了,以前我用过,速度很慢,操作麻烦,后来我用pin动态插桩去实现),最后就是开页堆+虚拟机群去批量Fuzzing,解决弹提示框的问题,跟作者的方式差不多,我主要用3种方式:删注册表、删临时文件、模拟点击。之前我都是在实体机上跑的,因为虚拟机老是跑着跑着就卡死了,一直也没去解决,因为office漏洞没奖金就没动力。看作者6个月挖掘了16个漏洞,效果还算不错了。

7、Attack Cloud Native Kubernetes

腾讯蓝军针对云原生中的k8s的攻防分享,分析K8s的攻击面,并结合实际案例进行演示。但是单纯看PPT的话,都是图片,没有文字描述的话,比较难理解,推荐他们之前的写博文“红蓝对抗中的云原生漏洞挖掘及利用实录”(https://security.tencent.com/index.php/blog/msg/183),内容写得比较详细完整。最后他们开源了一款叫CDK(https://github.com/cdk-team/CDK)的容器渗透测试工具,官方介绍是这样描述的:“在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。CDK集成Docker/K8s场景特有的逃逸、横向移动、持久化利用方式,插件化管理。”

下面是CDK当前支持一些Exploit模块:

用CDK在k8s&docker环境下进行渗透测试还是比较方便的,目前看到针对容器安全的渗透测试套件好像也不是很多。

8、LightBranch: Binary Fuzzing with Snapshot-Assisted-Driven Comparison Branches Analysis

在Fuzzing时,有时遇到复杂的分支比较就常常进不去,覆盖路径数就无法提升上去。在学术界常常借助符号执行来探索路径问题,但较难应用于复杂的软件环境中;另外基于静态分析的方式提取比较值也是一种不错的方式,实践证明它确实有效。这个议题的作者提出一种基于快照(snapshot)比较分支分析的方式进行输入学习,以进入更多的执行路径。

它实现的基本原理:先生成条件分支基本块作为CFG节点,每个节点就代表一个快照,同时包含相关信息,如执行上下文、内存状态、污点信息等,通过插桩的方式去收集和管理;接着通过动态污点分析,去标记出CFG上的污染节点,然后提取未被污染的节点的比较值,以及污染的比较操作中涉及内存偏移的偏移量,结合比较值和偏移量等信息作字节排序组合出字符串,然后将其添加到变异字典中。

说实话,其实我没有完全理解这种分支比较分析的思路的好处,与常规静态分析提取比较值添加到变异字典的优缺点差异,作者也没有给出其应用效果。所以,这种方式的实用价值如何还有点考证。

9、A QEMU Black Box Escape via USB Device

长亭的QEMU逃逸议题,介绍了QEMU-KVM架构,梳理出负责管理硬件虚拟化的开源API库libvirt的攻击面,最后他们选择从USB入手去挖掘漏洞,不过这里他们没有介绍挖掘方法,主要还是介绍CVE-2020-14364漏洞分析与利用,通过构造3个USB数据包来触发,原因是在拷贝数据作长度判断后,长度值未被清除,在另一数位置可以触发数据拷贝导致越界写漏洞。

下面介绍下漏洞利用思路:

  1. 在越界的缓冲区附近有个USBDesc结构指针,它包含USB设备的描述信息,比如USBDsecID就有设备厂商、版本号等信息可以被读取,这样通过覆写USBDesc指针再获取USBDesecID结构回来就实现内存任意读的效果。
  1. 通过读取USBEndpoint类型的变量值(ep_ctl, ep_in 或者ep_out任意选一个)来得到USBDevice地址,然后通过USBDevice->DeviceState->free函数指针就可以找到libc的地址,从而获取system函数地址。
  1. 为了控制PC,作者是通过劫持HIDState中的event方法来实现的,用system地址来覆盖event函数指针,执行的命令参数则传递给HIDMouseState指针,从而实现任意代码执行,达到虚拟机逃逸的效果。

10、Box Escape: Discovering 10 Vulnerabilities in VirtualBox

还是来自长亭的分享,介绍了VirtualBox架构以及主机与客机的交互方式,剖析其存在的攻击面,尤其是虚拟设备对应的后端服务存在较大风险,作者也正是从这个角度入手去挖洞的,从人工审计到基于CodeQL的自动化代码审计,专门针对urb参数(pUrb参数或变量)传递至memcpy的污点传播模型来检测代码,有没有借此挖到漏洞就不得而知了,看案例里面倒是有2个memcpy的漏洞。除此之外,作者还使用AFL 进行Fuzz,用afl-clang-fast编译VBox,使用VBoxHeadless作为目标程序,避免加载UI,然后为每个设备添加fuzz入口,即PDMDEVREG结构的回调函数指针,通过afl 提供的变异函数去构造输入数据进行Fuzz,然后借助__AFL_LOOP实现持久型Fuzz以提高效率。基于上述方法,最终挖到10多个漏洞。

议题资料下载:https://conference.hitb.org/hitbsecconf2021ams/materials/

0 人点赞