解读4篇混合类型文件Polyglot相关的论文

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文件的四种方法:

  1. Stack:把第二个文件直接放到第一个文件的末尾

pdf无法用stack的方式,因为:pdf只接受magic-num位于头1024个字节。 zip没有上面pdf的这个限制。所以zip很适合作为stack。

  1. Parasite:寄生虫

把第二个文件加到第一个文件的comment部分,这种模式适用于对magic number没有严格偏移限制的格式。

  1. Zippers

两个文件都互相包括再另一个文件的comment部分。 只有少量类型的文件能做到这个。

  1. 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 两类逃逸方式

重点是这一节:

  1. chameleon attack

chameleon是变色龙的意思。
这种攻击指的是,让杀毒引擎无法准确检测出文件类型。比如同一个文件,对引擎来说是A类型,对真实OS来说是B类型。
最简单的Chameleon攻击,就是把病毒文件放到压缩包中。

  1. 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造成伤害。

参考

  1. https://blog.csdn.net/ybdesire/article/details/132925927?spm=1001.2014.3001.5501
  2. Luke Koch etc. Toward the Detection of Polyglot Files. 2022
  3. DETECTION OF MALICIOUS POLYGLOT. US11386205B2. 2019
  4. Suman Jana and Vitaly Shmatikov. Abusing File Processing in Malware Detectors for Fun and Profit. 2012
  5. https://github.com/mindcrypt/polyglot
  6. Jonas Magazinius etc. Polyglots: Crossing Origins by Crossing Formats. CCS2013
  7. https://ruanyifeng.com/blog/2016/04/same-origin-policy.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++核心编程:文件操作 笔记

5.文件操作 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦允许结束都会被释放。通过文件可以将数据持久化 C中对文件操作需要包含头文件<fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本…

openssl3.2 - .pod文件的查看方法

文章目录 .pod文件的查看方法概述笔记初步的解决方法备注 - pod2html.bat的详细用法好像Perl就自带这个BATEND .pod文件的查看方法 概述 看到openssl源码目录下有很多.pod文件, 软件发布的帮助内容都在里面. 当make install后, 大部分的.pod都会转成html文件, 但是有一部分…

【Java程序设计】【C00215】基于SSM的勤工助学管理系统(论文+PPT)

基于SSM的勤工助学管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这个一个基于SSM的勤工助学管理系统&#xff0c;本系统共分为三种权限&#xff1a;管理员、教师和学生 管理员&#xff1a;首页、个人中心、教师管理、学生管理…

逆置字符串

将字符串逆序,比如输入abcd,返回dcba void reverse(char*left,char *right) { while (right>left) { char temp *left; *left *right; *right temp; right--; left; } } int main() { char arr[100] { 0 };//定义…

gdp调试—Linux

目录 介绍 使用 介绍 代码分为debug模式和release模式 如果一份代码要被调试&#xff0c;这份代码必须是debug Linux下编译代码默认是是release模式 如果你想代码是debug模式 必须加上 - g 小提&#xff1a; vim默认&#xff1a;命令模式 gcc默认&#xff1a;releas…

操作系统--进程、线程基础知识

一、进程 我们编写的代码只是一个存储在硬盘的静态文件&#xff0c;通过编译后就会生成二进制可执行文件&#xff0c;当我们运行这个可执行文件后&#xff0c;它会被装载到内存中&#xff0c;接着 CPU 会执行程序中的每一条指令&#xff0c;那么这个运行中的程序&#xff0c;就…

ModelArts加速识别,助力新零售电商业务功能的实现

前言 如果说为客户提供最好的商品是产品眼中零售的本质&#xff0c;那么用户的思维是什么呢&#xff1f; 在用户眼中&#xff0c;极致的服务体验与优质的商品同等重要。 企业想要满足上面两项服务&#xff0c;关键在于提升效率&#xff0c;也就是需要有更高效率的零售&#…

C++ //练习 3.8 分别用while循环和传统的for循环重写第一题的程序,你觉得哪种形式更好呢?为什么?

C Primer&#xff08;第5版&#xff09; 练习 3.8 练习 3.8 分别用while循环和传统的for循环重写第一题的程序&#xff0c;你觉得哪种形式更好呢&#xff1f;为什么? 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********…

【三】【C++】类与对象(二)

类的六个默认成员函数 在C中&#xff0c;有六个默认成员函数&#xff0c;它们是编译器在需要的情况下自动生成的成员函数&#xff0c;如果你不显式地定义它们&#xff0c;编译器会自动提供默认实现。这些默认成员函数包括&#xff1a; 默认构造函数 (Default Constructor)&…

C++ 数论相关题目 博弈论:拆分-Nim游戏

给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以取走其中的一堆石子&#xff0c;然后放入两堆规模更小的石子&#xff08;新堆规模可以为 0 &#xff0c;且两个新堆的石子总数可以大于取走的那堆石子数&#xff09;&#xff0c;最后无法进行操作的人视为失…

PMP中的数据收集工具:打开项目成功的钥匙

在项目管理中&#xff0c;数据收集是关键的一环。准确、及时的数据能够为项目决策提供可靠的依据&#xff0c;帮助项目经理更好地监控项目进展、识别潜在风险&#xff0c;并制定有效的应对措施。本文将深入探讨PMP&#xff08;项目管理专业&#xff09;中常用的数据收集工具&am…

二层环路和三层环路

环路的原因&#xff1a;二层环路是由于物理拓扑出现环路&#xff0c;如3台交换机3角形连接。 三层环路一般物理拓扑有环路&#xff0c;并且设备之间路由表形成互指。(物理拓扑不成环&#xff0c;2台设备使用静态路由互指也可能成环&#xff0c;这种特殊情况除外)。 二层设备和三…

力扣题目训练(6)

2024年1月30日力扣题目训练 2024年1月30日力扣题目训练367. 有效的完全平方数374. 猜数字大小383. 赎金信99. 恢复二叉搜索树105. 从前序与中序遍历序列构造二叉树51. N 皇后 2024年1月30日力扣题目训练 2024年1月30日第六天编程训练&#xff0c;今天主要是进行一些题训练&…

I2C 设备驱动

V5.10 参考文档&#xff1a;Documentation/i2c/writing-clients.rst static struct i2c_device_id foo_idtable[] {{ "foo", my_id_for_foo },{ "bar", my_id_for_bar },{ }};MODULE_DEVICE_TABLE(i2c, foo_idtable);static struct i2c_driver foo_drive…

在ubuntu上在安装Squid代理服务器

Squid 是一个代理和缓存服务器&#xff0c;它将请求转发到所需的目的地&#xff0c;同时保存请求的内容&#xff0c;当你再次请求相同内容时&#xff0c;他可以向你提供缓冲内容&#xff0c;从而提高访问速度。Squid代理服务器目前支持的协议有&#xff1a;http、SSL、DNS、FTP…

App测试中ios和Android有哪些区别呢?

App测试中&#xff0c;大家最常问到的问题就是&#xff1a;ios和 Android有什么区别呢&#xff1f; 在Android端&#xff0c;我们经常会使用 JavaScript、 HTML、 CSS等技术来编写一些简单的 UI界面。而 iOS端&#xff0c;我们经常会使用到 UI设计、界面布局、代码结构、 API等…

C++——特殊类

特殊类 文章目录 特殊类一、请设计一个类&#xff0c;不能被拷贝二、请设计一个类&#xff0c;只能在堆上创建对象方案一&#xff1a;析构函数私有化方案二&#xff1a;构造函数私有化 三、请设计一个类&#xff0c;只能在栈上创建对象四、请设计一个类&#xff0c;不能被继承五…

Linux系统MySQL重置root密码

MySQL是一种开源的关系型数据库管理系统&#xff0c;广泛用于Web应用程序的后台数据存储。在MySQL中&#xff0c;root是默认的超级用户&#xff0c;具有最高权限。然而&#xff0c;有时候我们可能会遇到忘记root密码的情况&#xff0c;或者需要重置root密码以增加数据库的安全性…

微软Office Plus与WPS Office的较量:办公软件市场将迎来巨变?

微软Office Plus在功能表现上远超WPS Office&#xff1f; 微软出品的Office套件实力强劲&#xff0c;其不仅在办公场景中扮演着不可或缺的角色&#xff0c;为用户带来高效便捷的体验&#xff0c;而且在娱乐生活管理等多元领域中同样展现出了卓越的应用价值 作为中国本土办公软…

Flyway数据库迁移工具入门教程

前言 在现代应用程序开发中&#xff0c;数据库架构的管理和版本控制是一个至关重要的环节。Flyway是一款流行的开源数据库迁移工具&#xff0c;它为开发者提供了一种简单、可预测的方式来管理数据库变更&#xff0c;确保数据库架构与应用代码同步更新。本文将引导您快速入门Fl…