导语:现有的网络安全防御体系中,特别是威胁感知系统中,不仅要透视黑客使用哪些手段攻击你,还要知道谁在攻击你。
0x00、概述
现有的网络安全防御体系中,特别是威胁感知系统中,不仅要透视黑客使用哪些手段攻击你,还要知道谁在攻击你。对攻击者的溯源需要从两方面着手,第一,对黑客使用的攻击设备做准确的定位和关联分析。第二,在黑客实施攻击过程中drop的样本做相识度溯源分析。
0x01、设备追踪技术
1、设备指纹追踪发展历史
2、目前厂商使用的比较多的设备追踪技术
(1)图片渲染引擎的特征(显卡指纹)
深入研究了图片渲染引擎的特征:js没办法直接获取到显卡的设置和驱动,但是通过这种方法,当不同的显卡渲染同一张图片时,因设置不同,渲染出来的图片hash也不同,用这种图片hash作为特征,其实是从侧面得到机器显卡的特征,同一台机器在不同的浏览器上用到同一个显卡,WEBGL实现
(2)cpu内核数量
现代浏览器可以用navigator .hardware Concurrency来获取,增加Web Worker的数量时,可以监视payload的完成时间。当计算量达到一定的程度,Web Woker完成payload的时间显著增加,达到硬件并发的限制,从而判断核心的数量。一些浏览器(如Safari)会将Web Workers的可用内核数量减少一半,所以在获取跨浏览器指纹时,我们需要将获取到的核心数量加倍。
(3)写入语言特征(系统语言指纹)
js中并没有接口直接获取这种语言,但是这里作者想到了另一种方法,就是在页面中用所有的语言写两个字,如果系统支持该语言,那么就能正常写出来;如果不支持,显示出来的就是方框。通过这种方法获取系统支持的语言。
(4)AudioContext (音频指纹)
能熟悉设备指纹的同学都知道,AudioContext在很多设备指纹项目上都用到了。具体来说,现有的指纹识别工作使用OscillatorNode产生一个三角波,然后将波传Dynamics Compressor Node,一个调节声音的信号处理模块,产生压缩效果。 然后,经处理的音频信号通过Analyser Node转换为频率域。
(5)WebRTC
webRTC获取内网IP/外网IP/代理ip的信息
(6)被动指纹收集
SYN packets/Network Type/Carrier/HTTP Packet/Proxy Info
3、相似度分析
利用机器学习(KNN,K-D树)计算指纹相似度,确认跨浏览器指纹作为攻击者唯一设备ID
0x02、样本相似度分析技术
1、获取样本后的分析过程:
比如通过态势感知产品的网络入侵检测引擎的文件还原模块拿到新的样本,我们通常的做法是:
(1)上传到VirusTotal通过大约60哥杀软引擎扫描判断其恶意软件家族
(2)导入cuckoo或者其它linux沙箱运行,获取有限的报告,包括实时恶意/可疑/正常行为分析、APICall、文件释放、网络通讯行为、进程树和运行截图等
然而有时候他们不能提供足够信息,那么就要需要反编译这个样本,在这个阶段,共享代码分析,提升我们的工作效率。那么按照以上思路,我们需要:
(1)确认恶意软件病毒家族,判断是否属于相同的攻击者。
(2)确认代码相似程度,判断是否为同一作者所为。
(3)可视化恶意程序与已知的恶意软件关系,理解代码共享形式。
挑战:目前很多恶意软件家族分类都是很粗糙,我们这里提到的软件家族,是需要有明确的新特性的才归类到一个新的恶意软件家族。那种在分类中标签成 "unknown"、"generic"是需要丢弃的。
2、准备样本提取特征。
针对压缩的恶意软件我们提取动态沙箱日志,没有压缩的恶意软件我们可以使用strings.
分析对象
·基于操作码序列的相识度分析
·基于strings的相似度分析
·基于Import Address Table的相似度分析
·基于动态APICall的相似度分析
分析过程中使用的数学逻辑
@1、N-grams 这个就不介绍了,大家都懂。
@2、jaccard Index
杰卡德相似系数(Jaccard similarity coefficient),也称杰卡德指数(Jaccard Index),是用来衡量两个集合相似度的一种指标。Jaccard相似指数用来度量两个集合之间的相似性,它被定义为两个集合交集的元素个数除以并集的元素个数。
@3、相识度矩阵
3、图形化展示
graph LR A[是否压缩] A--> |压缩| B[sandbox提取APICall] B--> N[N-garm处理] N--> G[jaccard Index] G--> |num>=0.8|M[显示孤立点-graph中添加链接线] G--> |num<0.8|I[只显示孤立点] A--> |无压缩|C[获取strings] A--> |无压缩|O[反编译操作码] O --> U[N-garm处理] U--> W[jaccard Index] W--> |num>=0.8|L[显示孤立点-graph中添加链接线] W--> |num<0.8|P[只显示孤立点] A--> |无压缩|R[IAT提取] R --> T[N-garm处理] T--> V[jaccard Index] V--> |num>=0.8|Q[显示孤立点-graph中添加链接线] V--> |num<0.8|Z[只显示孤立点] C--> D[jaccard Index] D--> |num>=0.8|E[显示孤立点-graph中添加链接线] D--> |num<0.8|F[只显示孤立点]
通过可视化的图,我们可以看到很多很多相似的地方。
0x03、总结
本文介绍了从两个角度来做黑客溯源的事情,这些技术将来也会不断应用到态势感知系统中,溯源分析任重道远,我们会继续努力。