0. 引入
Polyglot文件指的是混合类型文件,关于混合类型文件的基础,请参考文末给出的第一个链接(参考1)。
1. Toward the Detection of Polyglot Files
1.1 主题
这篇2022年的论文,提出了Polyglot文件的检测方法。虽然检测方法比较粗糙,但也解决了该领域数据获取困难的问题。
作者mitra工具建立了一个数据集,并用file命令和其他ML/DL模型进行检测与比较,最终得出调优后的Catboost比Malconv2,RandomForest,LightGBM,SVM效果好的结论。
1.2 特征工程
作者对机器学习模型,使用的特征比较简单,输入特征是256个字节出现的次数。对于深度学习模型(Malconv2,这是一个一维CNN),直接输入固定长度的字节流。
1.3 数据集
Polyglot领域比较缺数据集。作者的数据集是用mitra工具建立的。
mitra只能融合两种文件类型,并且不是所有类型都能支持的。所以作者实验了如下21种组合:
DCM+GIF, DCM+JAR, DCM+ISO, DCM+PDF, DCM+ZiP, GIF+ISO, GIF+JAR, GIF+Zip, JPG+JAR, JPG+Zip,
PE+ISO, PE+JAR, PE+Zip, PNG+ISO, PNG+JAR, PNG+PDF, PNG+Zip, TIFF+ISO, TIFF+JAR, TIFF+PDF, TIFF+Zip
1.4 Polyglot原理
文章描述了生成Polyglot文件的四种方法:
- Stack:把第二个文件直接放到第一个文件的末尾
pdf无法用stack的方式,因为:pdf只接受magic-num位于头1024个字节。 zip没有上面pdf的这个限制。所以zip很适合作为stack。
- Parasite:寄生虫
把第二个文件加到第一个文件的comment部分,这种模式适用于对magic number没有严格偏移限制的格式。
- Zippers
两个文件都互相包括再另一个文件的comment部分。 只有少量类型的文件能做到这个。
- Cavities
第二个文件藏在第一文件的null-padded空间部分。只有第一个文件是可执行文件或者是ISO类型才能做到。
1.5 file命令检测polyglot
file命令通过magic bytes匹配来实现文件类型检测,加上 --keep going 参数就能让file检测混合类型文件
2. Detection of malicious polyglot
2.1 主题
这是Mcafee在2019年写的专利,做混合类型文件的恶意软件检测。
其中检测混合类型的部分,大概思路是根据文件类型数据结构的分析(特定段中是否有异常数据,比如丢失数据/数据重复),结合机器学习(文本类型检测),sandbox(能运行就增加score)的结果,来打分并根据阈值判断是否属于混合类型。
2.2 检测思路
目前的文件类型检测模块,都是根据文件的结构,来检测的。比如GIF文件,含有SoF结构,调色盘,SoF尾。根据上面说的这种文件结构分析,检测出文件类型后,就要执行下面的步骤:依次扫描文件的各个其他子结构,判断子结构中是否有异常,比如发现内容重复、丢失,缺少某些子结构等等,这样就要增加 混合类型文件的score。
如果扫描到两次EoF标记,就要把这中间的内容提取出来,单独作为一个新的临时文件,再去分析这个临时文件是否是某种独立的文件类型。
从文件头20个字节中找到“编程语言注释开始”的标记。再从文件最末尾的20个字节中找到“注释结束”的标记。如果两个标记都能找到,就用114从这两个标记之间找到 reasonable-string:至少有10给字符长度,符合能被打印的字符。用ML对这些reasonable-string进行分类:某种编程语言(专注某些可执行的脚本),可执行代码,某种类型的代码(base64)。分类为某种变成语言后,就用沙箱把整个文件当作这种语言的文件去运行。如果这样运行没有报错,就给定一个最高的score,并把文件判断为polyglot。如果报错,则不改变score的值。。
一个文件的score是他的临时文件的score之和。哪怕score不足够高,没有超过阈值,也值得去monitor。或者阻止这个文件被某种命令运行起来。
3. Abusing File Processing in Malware Detectors for Fun and Profit
3.1 主题
2012的这篇文章,算是对恶意混合类型文件研究的开山鼻祖。
作者定义了两类Polyplot相关的逃逸方式,并通过模糊测试,挖出了36个杀毒引擎的45个漏洞,还都申请了CVE。
3.2 精确解析文件类型的挑战
精确解析文件类型是很复杂的:
(1)很多格式没有明确的格式说明文档
(2)复现某些格式的解析器是不可能的,比如OpenOffice有上百种解析器
(3)不同格式不同版本
因为杀毒引擎都是先确定文件类型,再去解析文件和做signature匹配,所以确定文件类型对后续的检测是影响很大的。
3.3 杀毒影响判断文件类型的方法
杀毒引擎的文件类型推理,都不是根据扩展名来判断的。
作者研究了开源的杀毒引擎,ClamAV判断文件类型的方法:
(1)对于大部分文件类型,使用固定偏移的字节(magic-number)
(2)对于HTML之类的,用正则表达式
3.4 模糊测试的过程
作者用python实现的模糊测试框架,可以在框架上使用不同类型的插件(parser+validator+fuzzer)。基本原理:parser会把header转换为多个array,fuzzer会改变内容,validator检查程序是否能正确处理改变后的文件。
3.5 两类逃逸方式
重点是这一节:
- chameleon attack
chameleon是变色龙的意思。
这种攻击指的是,让杀毒引擎无法准确检测出文件类型。比如同一个文件,对引擎来说是A类型,对真实OS来说是B类型。
最简单的Chameleon攻击,就是把病毒文件放到压缩包中。
- werewolf attack
利用不同解析器的解析差异,不同解析器在解析文件时,得到的文件数据结构可能会不同。
werewolf攻击,通过修改meta-data中的某些字节,就能实现。还有如下其他方式来实现:
(1)让tar包中产生一个错误的checksum。
(2)让tar包头部的length值比真实的压缩包的size大
(3)在zip头部增加无意义的字节
还有比如说修改ELF文件头部的大端小端字段等方式。
4. Polyglots: Crossing Origins by Crossing Formats
4.1 主题
2013的这篇文章,主要探讨了通过Polyglot来实现跨域的网络攻击方式。
4.2 基础
要理解这篇文章,得先理解同源策略。根据参考7,它的最初含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同":
- 协议相同
- 域名相同
- 端口相同
同源策略:只有来自同源(协议、域名、端口)的两个网页,才能互相访问对方的资源(比如cookie)。
但是,并不是所有资源都受同源策略的限制。比如,从其他源加载过来的脚本(js),也继承了这个网页的源,变为和网页同源。
本文就重点讲解通过Polyglot来实现跨域的攻击。
4.3 Polyglot
实现A和B两种类型混合的polyglot,需要避免文件结构解析时的异常。所以通常把A隐藏在B的注释中来实现。
某些特定的语言适合于create polyglots:比如C语言,因为他和其他语言有很多一样的结构;比如HTML因为他容错能力较高。
4.4 核心的思想
整个攻击的过程,看下图会更容易理解:
(1)Attacker释放一个polyplot到vulnerable.com,让这个服务器上有一张看上去是白样本的图片;
(2)victim访问了 attacker.com;
(3)attacker.com使用plug-in去去vulnerable.com加载这个polyglot并加载为恶意文件的类型;
(4)这个polyglot就会在vulnerable.com执行,就能对vulnerable.com造成伤害。
参考
- https://blog.csdn.net/ybdesire/article/details/132925927?spm=1001.2014.3001.5501
- Luke Koch etc. Toward the Detection of Polyglot Files. 2022
- DETECTION OF MALICIOUS POLYGLOT. US11386205B2. 2019
- Suman Jana and Vitaly Shmatikov. Abusing File Processing in Malware Detectors for Fun and Profit. 2012
- https://github.com/mindcrypt/polyglot
- Jonas Magazinius etc. Polyglots: Crossing Origins by Crossing Formats. CCS2013
- https://ruanyifeng.com/blog/2016/04/same-origin-policy.html