周末抽空学习下BlackHat USA 2021的议题,对自己感兴趣的议题学习下。经常记录下,保持对行业动态的关注,有时突然想起来某个思路在外部会议上见过,可以回头查阅下,好多次遇到这种情况。打算先分析议题,再洞察行业。话不多说,直接进入正题。
1、利用JSON反序列化0day盗取区块链货币
议题名:How I use a JSON Deserialization 0day to Steal Your Money On The Blockchain
腾讯玄武的议题,fastjson解析json的第三方库,以前也出过一些反序列化漏洞,漏洞原理与利用我倒不太感兴趣,主要比较关心的是盗取区块链货币的这个攻击场景。
他们最后是以“波场”(TRON,基于区块链技术的分布式操作系统,在其基础上内生的虚拟货币,称为TRX)为攻击演示场景,有个开源项目叫java-tron,是tron协议的java实现,支持创建与区块链交互的HTTP服务,它刚好使用到fastjson,这样就可以对开启了HTTP 服务的TRON 节点发动远程攻击。在TRON HTTP节点上有一些API调用接口支持钱包操作,如发起交易、签名和广播交易等,此时借助漏洞就有可能伪造交易、劫持私钥和拒绝服务攻击。攻击者可以通过该漏洞进一步劫持所有连接到被攻击 HTTP 节点的浏览器插件钱包、DApp、以及第三方钱包的转账功能,窃取用户所转账的虚拟货币。比如TronLink钱包就支持Android、iOS和Chrome扩展插件3个版本,玄武直接用Chrome插件版本作为攻击演示。
个人认为,在漏洞研究领域,技术影响力的价值排序是这样的:
分析漏洞 < 挖掘漏洞 < 利用漏洞 < 大众化/热门场景的危害演示+PR
所以说,对攻防场景的理解和实践也很重要,最后一点又至少基于前面的部分工作。
2、macOS ARM 64位恶意软件分析
议题名:Arm’d & Dangerous: analyzing arm64 malware targeting macOS
Apple M1是苹果公司第一款基于ARM架构的自研处理器单片系统(SoC),正式抛弃使用多年的Intel芯片。
这里讨论M1恶意软件是因为即使是同款恶意软件,Intel版本的大多可以被杀软检测到,而Arm却检测不出来。
作者介绍了ARM64下的汇编基础,以及几种分析M1恶意软件(以GoSearch22为例)的方法和工具:
1、FileMonitor:监控文件操作
2、进程和网络监控
3、反调试:修改eip跳过ptrace系统调用,以此绕过ptrace+PT_DENY_ATTACH反调试;
4、SIP状态检测:恶意软件通过csrutil status命令查看SIP状态,关闭则退出;
5、虚拟机检测:恶意软件直接通过搜索虚拟机产品的相关字符串来检测是否位于虚拟机中
3、利用符号执行检测Excel恶意宏
议题名:Symbexcel: Bringing the Power of Symbolic Execution to the Fight Against Malicious Excel 4 Macros
现在搞恶意软件的不加点混淆都显得不专业,但这对于反病毒人士分析恶意软件时就有点费劲了,而且混淆技术层出不穷,变个花样,你就得分析半天,是个体力活。为了减少分析成本,更加自动化地提取IOCs检测特征,作者应用了符号执行技术,再结合宏语法缩小求解范围,提高求解速度。
里面的符号执行示例,很好地解释了符号执行的基本原理和应用,对这块感兴趣的可以看下。
看他们最后解混淆出来的样本分析效果对比看,还不错的样子,很多样本在VirusTotal上的检测率比较低。
4、零点击远程攻击华为智能手机
议题名:How To Tame Your Unicorn: Exploring And Exploiting Zero-Click Remote Interfaces of Huawei Smartphones
来自西班牙TASZK安全实验室的分享,对方研究麒麟芯片是因为之前华为公开了麒麟980和970设备的内核源码,因此对方通过代码审计,在基带CSN.1(GSM信令消息编解码语法)处理代码上发现了几个内存越界漏洞,然后通过Osmocom 2G装置+开源项目OsmoMSC发送payload去远程触发漏洞。
然后又在Bootloader(BootROM & Xloader)中挖到4个漏洞,对方就是通过分析旧版本源码来挖掘新版设备的漏洞,并用它解锁最新华为设备,dump和解密出固件,刷入自定义内核,帮助建立起与基带系统之间的调试逆向通道,用来进一步挖掘和利用基带漏洞。
基带漏洞是在modem(基带调制解调器)执行的,它跑在cellular core(CCORE)上面,而Android内核运行在应用处理器ACORE上,两者通过ICC在共享内存中实现通讯,所以作者又挖了2个ICC漏洞用于逃逸出基带,达到远程get root shell。手上有Bootloader漏洞,不仅可以搞Android内核,连TEEOS也一锅端了。
5、利用eBPF编写rootkit及其检测方法
议题名:With Friends like eBPF, who needs enemies ?
eBPF(extended Berkeley Packet Filter) 是一种可以在 Linux 内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术,可用于内核性能追踪、网络安全监控和运行时安全监控等等。
现在不少厂商也在研究eBPF在安全防御上的应用,同样的,攻击者也可滥用eBPF进行恶意攻击或绕过检测,比如隐藏rootkit进程,拦截kill系统调用,隐藏和读写敏感文件,劫持网络通讯实现C&C,容器逃逸等等,作者把rookit也开源了:https://github.com/Gui774ume/ebpfkit。
检测上,作者推荐了一款开源工具ebpfkit-monitor:https://github.com/Gui774ume/ebpfkit-monitor,用于解析ELF文件,提取eBPF相关信息,它可以列出eBPF程序中敏感的eBPF helpers,以及可疑的跨程序类型通讯。还有签名eBPF程序、加密内部网络通讯等等应用对方案,利用eBPF程序去检测恶意的内核行为,以毒攻毒。
6、跨仓库跨语言的静态代码分析
议题名:Do you speak my language? Make Static Analysis Engines Understand Each Other
比如下面的代码示例,PHP远程调用python的方法执行SQL查询,外部输入参数是由php代码引入的,如果按传统方式,只对PHP代码或python代码作静态审计,并不能确认是否存在SQL注入,必须两者同时分析,并追踪它们之间交互的数据流才行。
这种情况对于跨部门开发的复杂项目,就比较常见,不同的功能模块需要采用不同的开发语言,不同的团队创建不同的仓库,在编译或运行测试时再下载集成。所以跨语言、跨仓库的代码审计技术也是未来应对大规模代码研发、跨团队协作会面临的问题。
跨语言分析倒容易一些,像CodeQL这种框架就可以实现,打造一个通用框架,再根据不同语言的特性提供不一样检测策略,或者将其它语言转换成统一的中间语言,这就完全屏蔽掉不同语言的情况。
关键难点在于跨仓库的污点分析,作者将所有RPC调用标记为sinks,然后定义一些规范连接点,比如Fbthrift、Thrift、gRPC等,不同语言正常进行数据流分析并各自存储到db中,然后允许引擎去存储和提取上面这种不完整的局部数据流到CRTEX(跨仓库污点交换),最后交由引擎去查询匹配,再按规则进行检测。
未完待续……