指纹识别零日攻击的仿真器

筅森魡賤 提交于 2020-02-04 07:14:12

摘要

当现代操作系统和软件变得越来越大也越来越复杂时,它们也更有可能包含bug,可能会允许攻击者获取非法途径。对于成功的网络或者系统保护来说,一种能够识别攻击并且快速产生策略的快速并且可靠的机制是至关重要的。在本文中我们提出了Argos,对于蠕虫和人们精心设计的攻击来说的一个封闭环境。Argos是建立在一个快速的x86模拟器上,它能够在整个执行过程中追踪网络数据来识别其无效用作跳转目标,函数地址,指令等。此外,系统调用规则不允许网络数据作为特定调用的参数来使用。当一个攻击被发现时,我们对相应的模拟器状态执行“智能的”进程或者内核感知日志来进行更进一步的离线处理。此外,我们注入自己的取证溢出代码来取代恶意的溢出代码,来收集被攻击进程的信息。通过将模拟器记录的数据和从网络上收集的数据相关联,我们能够为免于负载编译影响的漏洞利用生成精准的网络入侵检测签名。整个过程能够自动化的完成,并且几乎没有任何误报,因此签名的全球化规模的快速部署能够实现。

随着现代操作系统和软件变得越来越大,越来越复杂,它们更可能包含漏洞,这可能使攻击者获得非法访问权。快速,可靠的机制来识别和生成针对此类攻击的疫苗,对于成功保护网络和系统至关重要。在本文中,我们介绍了Argos,一种用于蠕虫以及人类精心策划的攻击的遏制环境。 Argos建立在快速的x86仿真器上,该仿真器在整个执行过程中跟踪网络数据,以识别其无效用作跳转目标,函数地址,指令等。此外,系统调用策略不允许将网络数据用作某些调用的参数。当检测到攻击时,我们对相应的仿真器状态执行“智能”过程感知或内核感知日志记录,以进行进一步的在线处理。此外,我们还插入了自己的取证shellcode,代替了恶意的shellcode,以收集有关被攻击进程的信息。通过将仿真器记录的数据与从网络收集的数据相关联,我们能够为不受有效载荷突变影响的漏洞利用产生准确的网络入侵检测签名。整个过程可以自动化,并且几乎没有误报,因此可以在全球范围内快速部署签名。

简介

对自我传播攻击在网络上传播速度的评估,促使了对自动响应系统的大量研究。我们已经遇到过能够在短短十分钟内在网络上传播的蠕虫,并且研究员宣称更快的蠕虫也是存在的。对于这种爆发速度来说,人类的干预太慢了,因此自动化的响应系统是必不可少的。在实践中,这些系统的重要标准是:(a)能够可靠的检测各种零日漏洞,(b)能够可靠的产生能够被用于阻止攻击的签名,(c)方便部署

自传播攻击在Internet上的传播速度促使人们对自动响应系统进行了大量研究。 我们已经遇到了仅在十分钟之内传播到Internet的蠕虫,而且研究人员声称,甚至更快的蠕虫也指日可待[40]。 对于此类爆发,人为干预太慢,需要自动响应系统。 在实践中,此类系统的重要标准是:(a)可靠地检测各种各样的零时差攻击;(b)可靠地生成可用于停止攻击的签名;以及(c)具有成本效益的部署。

现有的自动化响应系统在攻击检测中倾向于导致相当大概率的误报,并使用签名[43,37,23,15,27]。大规模的误报违反了一二条件。尽管这些系统可能在入侵检测系统中扮演了一个重要角色,但他们并不适合全自动响应系统。

现有的自动响应系统在攻击检测和签名使用中往往会产生相当大的误报率[43、37、23、15、27]。 大量的误报违反了前两个标准。 尽管这些系统可能在入侵检测系统(IDS)中发挥重要作用,但它们不适合用于全自动响应系统

众所周知的一个能够尝试避免误报的方法是动态污点分析。简单来说,来自互联网的不被信任的数据会被标记,当进行漏洞利用时(比如来自网络的数据被执行时),将会生成一个警报。这种技术被证明是可靠的,并且几乎不会产生误报。当前项目使用的能够被分为(1)面向硬件的全系统保护,(2)特定于操作系统和进程的软件解决方案。这里有两个不同的方式,并且每一个方法都有重要的意义。对我们的目的来说,这些方法中最重要的就是Minos和Vigilante。

一种尝试完全避免误报的方法称为动态污点分析。 标记来自网络的贿赂,不受信任的数据,并且仅在发生漏洞利用时(例如,当执行来自网络的数据时)才会生成警报(仅)。 事实证明,该技术是可靠的,几乎不会产生误报。 它在当前项目中使用,可以归类为(i)面向硬件的完整系统保护,以及(ii)软件中的OS和特定于过程的解决方案。 这是两种不同的方法,每种方法都有重要的含义。 就我们的目的而言,这些方法的两个最重要的代表分别是Minos [12]和Vigilante [28]。

Minos并不产生签名,并且通过硬件来实现高效的调用。除此之外,它能够仅仅通过查看物理地址检测出漏洞利用攻击,例如寄存器扩展攻击,但是这还需要一个笨拙的黑客来攻击。同样,他也不能直接处理从物理地址到虚拟地址的转换。

Minos根本不生成签名,而有效部署依赖于硬件实现。 而且,仅通过查看物理地址,它可以检测到某些漏洞利用,例如寄存器弹簧攻击[39],但需要笨拙的黑客来确定攻击的起源[13]。 而且,它根本无法直接处理物理地址到虚拟地址的转换。

与之相反,Vigilante代表一个处理虚拟地址的每个进程的解决方案。同时,这也限制了它的灵活性,正如它无法处理DMA或者内存映射。同样,由于Vigilante必须检测单个服务并且根本不保护OS内核,因此出现了效率问题。不幸的是内核攻击已经变成了现实,并且预计在未来会成为常态。对于签名生成,它依赖于重播攻击,由于与特定场景、随机数等的挑战/响应交互,这通常是不可能的。

相比之下,Vigilante代表一种使用虚拟地址的按进程解决方案。 同样,这是一个设计由于它无法处理DMA或内存映射,因此限制了其灵活性的决定。 同样,由于Vigilante必须检测单个服务并且根本不保护OS内核,因此出现了成本有效的问题。 不幸的是,内核攻击已成为现实,并有望在未来变得更加普遍[26]。 对于签名生成,它依赖于重放攻击,由于与随机数,随机数等的质询/响应交互,通常是不可能的

我们相信面向硬件的全系统解决方案和特定于操作系统和进程的软件解决方案在这部分的开始时都受限于上述的三个条件。我们设计提出一个第三方案,结合了两个世界的优点并且满足所有的要求。

我们认为,面向硬件的完整系统解决方案以及特定于操作系统和过程的软件解决方案在本节开头提到的所有三个方面都太受限制。 我们的设计提出了第三种方法,该方法结合了两个方面的优点并满足所有标准

在本文中我们提到了Argos,它探索了自动化响应系统设计领域的另一个极端。首先,就像Minos,我们通过修改运行我们自己版本的动态污点分析的x86模拟器来在软件中实现全系统的保护。换句话说,我们自动化的保护任何(未被修改的)操作系统和它所有的进程、驱动等。第二,Argos考虑到了复杂的内存操作,比如内存映射和DMA(通常被其他项目忽视),同时相当有能力处理复杂的exploit(比如寄存器爆发)。这有很大概率是因为我们处理虚拟地址和物理地址的能力。第三,自动化产生签名是基于漏洞利用中内存足迹的相关性以及网络追踪,作为结果:缓冲区溢出和格式化字符串或者代码注入的漏洞利用将会触发警报。第四,当系统是操作系统和应用时,如果检测到攻击,我们会注入特定于操作系统的取证shellcode。换句话说,在攻击发生时,我们利用被攻击的代码来提取关于攻击的额外信息,这些信息后来会被用于签名的生成。第五,通过对比不同网站的签名,我们优化了Argos的自动生成的签名。第六,签名会自动分发到远程入侵检测和防御系统。(IDS和IPS)

我们专注于那些被远程精心设计(就像蠕虫)并且不需要使用者操作的攻击。利用错误设置的安全策略的方法不能被解决。虽然那些攻击构成了一个充足的安全问题,但是他们是在我们研究的另一边,需要一个不同的方法。特别的,我们专注于exploit而不是攻击的payload,也就是说,我们捕捉那些能够触发缓冲区溢出和注入代码的代码是为增加对机器的掌控,而不是捕获攻击行为。在我们看来,捕获或者阻止exploit会更加的有用,因为离开了exploit实际的攻击永远不能执行。更多的是,在实际中相同的exploit经常使用不同的payload,所以阻止exploit的收益可能是巨大的。此外,exploit相比于攻击的payload更不易改变,并且即使是已经发生了改变,也更加容易捕获。

Argos被设计作为‘广告蜜罐’,也就是说,是一个运行真实服务的蜜罐,与普通蜜罐不同的是他并未被隐藏。而且,我们积极的链接它并且公布他的IP地址,让利用命中访问表的攻击者(而不是随机IP扫描来识别攻击目标的攻击者)能够访问。我们为此付出的代价不同于传统的蜜罐,我们希望收到一定数量的合法流量(例如网络爬虫)。从另一个角度,既然Argos的目标是最为一个蜜罐,我们不需要表现得像是没有被保护的系统。然而,他应该足够的快来运行真实的服务,同时有合理的响应时间。

本文余下的内容如下:本文讨论了相关工作,我们总结了各种方法在Section2,在Section3我们介绍了Argos的设计。实现的细节在Section4中讨论。在Section5中评估这个系统。在Section6中总结。

2.背景和相关工作

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!