黑客大佬:我是如何让50个文件一起骗过AI安防系统的?

全世界只有3.14 % 的人关注了

爆炸吧知识


转自:大数据文摘

编译:邢畅、张睿毅、钱天培

你有没有想过当黑客呢?

破解手机密码,黑入公司系统,甚至…控制全球电脑。

打住打住!违法犯罪的念头显然不能有。再退一步讲,咱也不一定有这本事。

尤其是在今天,AI安防早已司空见惯,想要当黑客的难度也越来越高了。

有趣的是,网络安全平台Endgame,MRG-Effitas和VM-Ray在近日联手发起了一场“黑客征集”大赛。号召机器学习工程师们一起来攻击他们的安防系统。

比赛的目标是,让50个恶意Windows可移植可执行文件(PE)逃避三个机器学习恶意软件分类器的检测。这些文件不仅需要躲避检测,而且还能实现它们原来的功能和行为。

在这场比赛中,一位名叫William Fleshman的小哥拔得头筹——他成功让所有50个文件都逃过了AI模型的过滤。

他是怎么做到的呢?让我们一起来听听他的分享。

知己知彼

这是一场白盒比赛,这意味着我可以访问所有模型的参数和源代码。因此,要做的第一件事就是看看模型后台发生了什么。

MalConv

第一个模型是基于Windows可执行文件的原始字节训练的神经网络。

表示文件字节的整数序列(0-255)被传递给MalConv。MalConv中的嵌入层将每个字节映射到一个数字向量。然后通过另外的神经网络层处理向量序列。该模型输出两个数字,分别表示输入是良性和恶意的概率。

关于MalConv的研究早已层出不穷。最简单的攻击就是在可执行文件的末尾添加一些字节。这是一个特别好的技巧,因为添加的数据(即Overlay)不会在恶意软件执行时加载到内存中。因此,我们可以在不改变文件功能的情况下在Overlay中放入任何我们想加的内容。

MalConv同时查找良性和恶意字节的不同模式,以便做出决策。Overlay攻击的目的是用与良性文件相关的模式包装它。

非负MalConv

第二个模型实际上与第一个模型相同,但分配给各层的权重不同。

顾名思义,非负MalConv在训练过程中被限制为具有非负权重矩阵。这样做是为了防止针对MalConv创建的攻击。如果处理得当,非负权重使二元分类器单调;这意味着添加新内容只会增加恶意得分。这将使规避模型变得非常困难,因为大多数规避攻击确实需要向文件添加内容。

“幸运”的是,非负MalConv的实现有一个微小但关键的缺陷。

非负防御只适用于二分类器,其输出分数表示样本的恶意程度。然而,这个版本将输出分成两个分数,分别表示恶意和良性。之后,一个softmax函数将每个类的分数转换为概率。这种结构使得非负权重的训练变得毫无意义。附加内容仍然可以将良性评分推到任意高。当良性评分越高,即使存在相同数量的恶意内容,softmax函数也会将把恶意评分推得越低。因此所有针对MalConv的攻击在这里也会起作用。

论文:

http://ci.louisville.edu/zurada/publications/chor-zur-tnnls.pdf

Ember

Ember其实是Endgame维护的一个数据集。和数据集一起发布的还有一个训练好的基准模型,也称为Ember。Ember是一个lightgbm模型(增强决策树的集合),它根据Windows PE文件解析的几个特征训练得到。

Ember特征解析的源代码在GitHub上可以找到。

代码链接:

https://github.com/endgameinc/ember/blob/master/ember/features.py

了解如何解析特征对制造攻击非常有用。提取的特征包括:

  • 字节直方图

  • 字节熵

  • Section信息(名称、大小、熵、属性)

  • 导入表库及入口信息

  • 导出函数

  • 一般文件信息(各种文件的大小和数量)

  • 文件头信息(机器码、结构、链接器、版本号)

  • 字符串信息(文件中字符串的各种统计信息)

  • 数据目录

数值特征可以直接使用,其他特征(如p的名称)可用哈希转换为数值向量。乍一看,Ember似乎难以愚弄,它解析的许多特征都与文件结构,或者与我们无法更改的特征相关。我们必须在维持原功能的同时还要避免被检测到!

Ember的漏洞是攻击者可以任意控制某些特征。lightgbm模型在集成树的多个位置使用这些特征。我们可以利用模型的复杂性,通过操纵特征来推动导致逃避的决策。

前期准备

竞赛代码附带了一个脚本,用于在一个文件中运行三个模型。我修改了脚本以评估整个恶意软件目录,并使用altair添加了一个有趣的可视化记分板:

原始恶意软件文件的初始扫描。

表情符号骷髅代表模型检测到恶意软件,而笑脸则代表一次躲避。有趣的是,49号文件本身就躲过了MalConv,所以我们免费得到1分。

计划

棘手的部分是,找到同时影响三个模型的有效操作,或者至少影响一个模型,而不挑战其他模型。我决定专注于有望同时影响三个模型的攻击。

附加数据(Overlay)

如上所述,PE文件可以附加任意内容。这些额外的字节被称为Overlay,当Windows执行文件时,它们不会被加载到内存中。因此,在这里添加字节不会改变恶意软件的功能。

冗余空间(Slack Space)

除了Overlay之外,每个p的末尾还有空间来添加额外的字节。PE p需要与2的幂次方的内存空间对齐。当实际内容没有填满整个空间时,该p将被Slack Space填充。这部分内存不会被可执行文件访问,所以我们也可以自由地改变它。

新的p

我们不仅可以向现有p添加字节,也可以创建新的p。新的p不会破坏文件的功能,因为现有代码没有引用它们。这给了我们足够的空间来添加任何我们想要的任何内容。

重点关注的特征

因为MalConv模型将所有内容都视为字节(不考虑上下文),所以,我们只需要专注于它们归因良性文件的模式,以压倒它们的决定。然而,Ember特征的结构要求我们仔细思考可能会阻碍它的细节。

我们可以操作的最明显的特征是字节直方图和字节熵。字节直方图只计算文件中每个字节值的归一化频率。因为我们可以添加包含任何内容的p,所以可以很简单将字节分布强制改为按任何目标的分布。

我们也可以很好地控制Section Info特征。我们可以利用slack space来改变p的熵。我们还可以更改p的名称,使得我们在Ember的决策树中可以删除不同的分支。

最后,处理字符串特征也非常容易。同样也是因为我们可以添加包含任何内容的新p,所以我们可以自由更改字符串的统计数据。

开始攻击!

我的计划是从简单开始并根据需要增加复杂性。增加新的p似乎是最有希望的攻击途径,因为它使我们能够对Ember的功能以及文件的原始字节进行更大的更改。

我在每个部分添加之后重建了PE,以便lief为我处理所有的寻址,也可以手动分配地址。

作为一个实验,我在每个文件中添加了一个带有100000个常量字节的新部分,并在迭代常量(0-255)时监视逃逸率。几个不同的值已成功,但值169(0xA9)导致最大的逃避:

通过向每个文件添加一个填充100,0000xA9的部分来成功逃避。

这种简单的攻击破坏了两种神经网络检测模型。如果我们没有弄清楚非负模型中的bug,那么这个结果应该会让我们非常惊讶。照理说,单调分类器不应受这种简单添加的影响。多亏了这个bug…

Ember很好地防御这种朴素的攻击。我必须想出一个更聪明的方法来改变它的分数。

加料

接下来,我去了微软的下载页面并抓取了一份随机的良性的可执行文件。我用模型检测了文件,以确认它的评分非常低。我的计划是模仿这个文件的功能,希望能够避免对Ember的躲避。

我在文件上运行了命令行实用程序字符串。该实用程序从二进制文件中解析出所有可打印的字符串。我发现了大量的字符串似乎包含微软的最终用户许可协议(EULA)。我抓住这部分并将其保存到文本文件中。

显然,一些最常见的Windows PE文件碰巧是由微软制作的。因此,在训练恶意软件分类器时,训练集可能有一堆标记为良性的Microsoft文件。我的想法是通过将我下载的文件中的内容添加到我们的恶意软件中来利用这种可能性。Microsoft EULA之类的东西可能出现在许多良性文件中。这应该使字符串统计结果,字节分布和信息熵更像是良性文件。

我使用此攻击为每个文件添加了75个新部分(比赛有一个文件大小限制,我必须保持数量不高)。结果显示非常好:


Evasion是由“字符串攻击”和“常规攻击”组合而成的。

最后一击

还剩几个文件没有逃过检测。

经过进一步分析,我发现其中一些文件被打包,但是我的操作搞乱了他们的拆包程序,因此破坏了一些功能。

更糟糕的是,至少有一个文件似乎还有特定的代码来检测自己是否被操作过:


这个文件有代码检测自己是否被动过

我的第一个想法是在调试器中打开文件并修补程序集指令检查修改。不幸的是,该文件还具有反调试代码,基本的“反反调试程序”无法绕过。


这个文件也有反除虫机制

感觉我就像掉进了危险的深坑,所以我决定退一步重新思考。

天无绝人之路,我发现防篡改机制只是检查加载到内存中的PE部分。所以虽然我无法添加新的部分,但我仍然可以操作叠加层!

我已经发现我的字符串攻击不够强大,无法欺骗这些文件。我需要一种不同的方法来确定应该将哪些内容添加到叠加层以逃过检测。简单就是王道,所以我编写了以下代码来系统地尝试每个字节值的行,并将它们添加到文件中,如果它们降低了Ember的分数,那么就继续,直到文件成功躲避或变得太大。

我将Ember替换为其他两个模型,并使用相同的方法添加所需的字节以避开这些模型。同样,因为我在叠加层中添加了字节,然后打包,这样,功能或防篡改检查都没有受到影响!我回去对所有文件进行了这次攻击,发现它能够很好地躲避检测。

满分!全部拿下!

结论

把这些恶意软件都伪装起来并不容易。但“幸运”的是,所有模型都存在漏洞,而且可以被利用。如果非负MalConv模型真的实施成功,我可能就无法获得满分。

找到一组可以区分良性和恶意文件的功能,同时在对抗性威胁模型下也相对安全,这可能非常具有挑战性。一个有目共睹的事实是,小细节真的很重要。

最后,希望这些安防软件也能够从我的攻击中吸取教训,再接再厉,下次别再骗!

相关报道:

https://towardsdatascience.com/evading-machine-learning-malware-classifiers-ce52dabdb713

点「在看」的人都变好看了哦!

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

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

相关文章

WTM框架使用技巧之:CI/DI(持续集成/持续部署)

快点关注我们吧作者介绍王晓东,从事工业物联网行业多年,深入了解纺织、汽车零部件等制造业业务。开发过MES、WCS、SCADA、智能产线、质量追溯、工业通讯、linux网关等系统。对跨平台部署、运维有一定经验。使用WTM框架提高了40%的开发效率,WT…

php 建立自己的框架,利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备...

“一个时代结束了,另一个时代开始了。”Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年。FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和强健的体魄后,提出了 PSR-0 …

python3 UnicodeEncodeError: 'ascii' 错误

2019独角兽企业重金招聘Python工程师标准>>> python 3.4 使用urllib.request.urlopen() 打开url时候,如果url中包含中文,出现了“UnicodeEncodeError: ascii codec cant encode ”的错误,修复步骤如下 在url中有中文的地方加入…

女朋友的道歉方式

1 女朋友的道歉方式2 看吧,无聊的时候什么事都干得出来3 这猫太坏了!4 还以为是特效,原来是实物 5 叉子的妙用6 也太信任这块玻璃了吧……7 棉花糖炸酱面......大家感受一下你点的每个赞,我都认真当成了喜欢

单元测试(三)基本使用

介绍本文来演示一下同事教导后的写法,同样有些单元测试是为了演示而写的单元测试。本文使用组件:Xunit、Moq以及dotNet相关知识注:本文内容基于上一篇操作首先指定一个方法编写单元测试,并且要保证没有其他因素干扰的情况下去进行…

帆软帮助文档_帆软:像阿甘一样,奔跑在商业智能的赛道上

戳蓝字“CSDN云计算”关注我们哦!作者 | 晶少出品 | CSDN云计算(ID:CSDNcloud)故事开始于一片洁白的羽毛,从空中降落缓缓飘过房屋、街道、树梢,最终落在了主人公阿甘的脚旁,他没有过多思考就将羽毛轻轻收藏书中……这是…

叫板BBC!80后湖南姑娘,花3年首次拍出水下的中国,惊艳了全世界

全世界只有3.14 % 的人关注了爆炸吧知识众所周知,中国拥有约960万平方公里的陆地面积,我们生活在这片大地之上。但却鲜有人知道,中国的水下也有一座城。这是一座位于杭州千岛湖下的千年古城,历经61年,它们在水底&#…

lua loadstring传递参数_lua学习之函数篇

函数函数是对语句和表达式进行抽象的主要机制两种用法一是可以完成特定的任务,一句函数调用被视为一条语句二是以只用来计算并返回特定的结果,视为一句表达式print("Hello, World")a math.sin(3) math.cos(10)print(os.date())​无论哪种用法…

EF Core 6 简化的数据库上下文注册

EF Core 6 简化的数据库上下文注册IntroEF Core 6 将简化现在的服务注册,DbContext 的服务注册将会更简单一些Sample直接来看示例代码吧:现在我们注册 EF Core 的 DbContext 通常是这样的:const string connectionString "DataSourcete…

快要“成精”的波士顿机械狗,开始卖了,价格不贵准备搞一只

全世界只有3.14 % 的人关注了爆炸吧知识重磅消息:这只全球著名的网红狗终于。。开!售!了!哦,不对,放错图了!应该是这只!一起来看看视频介绍——6月17日,据科技时报&#…

BeetleX.WebFamily文件图片管理集成

BeetleX.WebFamily在2.4.8版本中集文件管理功能,通过这一功能可以不写任何代码的情况即可集成文件和图片的上传管理功能。接下来详细介绍下如何引入这一功能组件。文件管理功能是基于Vue和Element,所以只有在BeetleX.WebFamily中使用Vue和Element模板才能…

怎么部署_2020怎么部署新零售商城?

移动电子商务的发展壮大,5g网络技术的扶持,新零售概念时代推动店家完成零售转型,网上零售商城,再加上线下与推广线下的玩法,带来了效率和效益的提升。一,运用社交媒介,大力发展新零售概念下的销…

python self 值自动改变,在python中对self的理解

在python中对self的理解 :一、self的位置是出现在哪里?首先,self是在类的方法中的,在调用此方法时,不用给self赋值,Python会自动给他赋值,而且这个值就是类的实例--对象本身。也可以将self换成别…

各种震撼的慢镜头,奇怪的知识又增加了!​

全世界只有3.14 % 的人关注了爆炸吧知识慢镜头(高速摄影)可能是现代最伟大的发明之一。从身边的日常到那些比较罕见的事物,慢镜头下看起来都比平时更酷!喵星人接球这行云流水的动作,秒杀国足!这是用多台风扇…

Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用

dpar在同一台电脑上不能run 相同appid,这个在上篇说过,所以就用外部负载均衡nginx来对应,那在不同的host中跑同一服务,看看dapr内部的负载均衡是怎么实现的。说说现有的服务,两个服务,订单服务,…

电脑编程教学_2020太原数控车床电脑编程一对一实操教学不限学时

2020太原数控车床电脑编程一对一实操教学不限学时石家庄工之艺数培训学校培训‘数控技术员’ 学生时,拿到图纸和毛坯,能够自己的在数控机床上做出成品。实行教学,“小班授课,一对一的教,理论实践相结合,随到随学&#…

多功能复合机基于用户认证功能的实现过程详解

多功能复合机基于用户认证功能的实现方法 -----网络设备共享案例分析 公司需求:***是一家租售写字楼的服务性企业,主要是针对小型企业进行出租,房间有大有小,大的可以容纳5-10人,小的可以容纳1-4人左右。由于都是一些小…

用python写简单爬虫,用Python写简单的爬虫

准备:1.扒网页,根据URL来获取网页信息importurllib.parseimporturllib.requestresponse urllib.request.urlopen("https://www.cnblogs.com")print(response.read())urlopen方法urlopen(url, data, timeout)url即为URL,data是访问U…

单元测试(二)基本使用争议篇

介绍常用的单元测试是测试方法、API等,下面我们来演示一下Xunit测试框架的简单使用,有些是为了演示而写的单元测试。最下面有反转,一定要看到最后操作创建单元测试项目本次文章还在原来项目的基础上进行操作,右键解决方案添加单元…

听说你趁我不在家,欺负我老婆?

1 听说你趁我不在家欺负我老婆了?▼2 当男生们聚在一起时他们都会做什么?▼3 其实我是广西人,每顿要嗦1吨粉▼4 山西人的饮水机里放的都是醋?▼5 可现实中又有几个总裁没有啤酒肚呢?▼6 开学考试,一考…