新闻动态
Simics使能DAPRA CGC安全攻防大赛

在正文开始之前,我们先来简单解释以下文中会多次出现词汇的意义
CGC: Cyber Grand Challenge 计算机挑战大赛
CRS: Cyber Reasoning System计算机推理系统
CB: Challenge Binaries 目标二进制程序
PoV: proof of vulnerability 攻击程序
IDS: Intrusion Defense System 入侵防御系统
CFE: CGC Final Event  CGC决赛
DARPA: Defense Advanced Research Projects美国国防高级研究计划局
ROP: return oriented programming 反向执行 
DECREE: DARPA Experimental Cyber Research Evaluation Environment
IDA: The IDA Disassembler and Debugger is an interactive, programmable, extendible, multi-processor disassembler hosted on Windows, Linux, or MacOS X.

在2010年之后,DARPA(美国国防高级研究计划局)的专家们提出,有必要在计算机科学的关键领域对软件进行自动化的分析和修补。2014年,DARPA宣布了一项两年一次的计算机系统安全攻防大赛(CGC)。值得注意的是,这是一个人工智能和网络安全相结合的大胆设想,DARPA试图为人工智能机器开发一个“架构”,被称作是“计算机推理系统(CRS)”。系统必须集成自主分析、自动打补丁、自动漏洞扫描、自主服务弹性和自主网络防御等功能。

为了保证比赛过程的公平性,DARPA要求参赛队提交的参赛代码不应该包含恶意破坏对方系统的代码,不允许对系统OS进行恶意攻击。此外,为保证比赛进程可以实时监控,比赛进程可以回溯,以及快速分析攻击漏洞产生破坏的根原因,DARPA采用风河公司著名的指令级全仿真平台Simics,开发了一套被称之为CGC Monitor的实时监控系统,实现了上述功能,确保比赛公平进行。CGC Monitor不仅可以审查参赛代码是否存在恶意破坏,同时还可以对比赛过程和运行环境进行实时备份,以及对攻防漏洞进行事后辅助分析和总结,CGC Monitor发挥了关键作用。

CGC Monitor 的设计和实现

CGC Monitor的设计目标是监控CGC基础设施软件,以保障其不被参赛选手的恶意代码带来破坏,包括提供对参赛的CRS可执行文件操作系统的监控。理论上来讲,DARPA的CGC竞赛完全可以在全模拟环境下进行,同时进行实时检测记录,这样可以在赛后通过回放或截取某一片段来验证比赛的有效性。但因为运行程序的复杂性,全部使用模拟环境会导致一定程度上的性能下降耗时延长,从而影响比赛进程。但如果仅仅采用硬件设备运行竞赛来保障比赛进程,又不能实现对竞赛的实时监控记录,并对任意单独会话事件进行回放调取和印证,会在发生争议时难以判断,从而影响赛事公平。权衡利弊,DARPA采用了CGC Monitor的策略,赛事运行在实际的硬件服务器上的同时,在全模拟环境实现的竞赛CB上同步模拟竞赛全战况,并进行检测记录以备赛后所用,Simics全系统仿真正是CGC Monitor策略的核心。作为指令级全系统仿真平台,参赛的二进制代码可以直接运行在CGC Monitor中同时,仿真系统在不需要额外打桩或嵌入代码的前提下记录下系统运行的轨迹,并利用Simics的OS感知能力,监控参赛代码是否有对系统的恶意破坏。对于不可感知的OS,如FreeBSD,可以采用断点和基本的回调函数来实现检查是否对系统的破坏。
CGC Monitor操作系统感知实现

一个完整的系统仿真环境(例如:Simics),它允许开发人员在特定的内存访问处设置断点,并将开发人员编程的回调与每个断点相关联。CGC monitor 并没有使用这种断点回调,而是使用三种类型的Smics回调函数:Processor exceptions, Mode change, Simulation stopped。

处理器异常回调 用于监视CPU引发的事件。 监视页面错误异常为分析函数提供发生段错误的地址。 内核的信号处理程序中的执行断点在内核生成信号时生成回调。 如果信号类型反映发生了段错误,则假定该过程的先前页面故障导致的该信号。 分析函数还监视页错误,以识别物理内存何时将映射到进程的地址空间,就可以在用户模式下在物理内存上设置断点。 非法指令(SIGILL)故障由这些回调直接记录。

模式更改回调 在Simics Hindsight产品的操作系统感知功能中得到广泛使用,从而导致上述性能下降。使用这些回调会导致Simics禁用其“VMP”内核模块,该模块使用硬件虚拟化在主机处理器上本地化运行大部分模拟工作。 CGC monitor谨慎地使用这些回调,例如,在execve的窗口期间捕获第一次返回用户模式。如上所述,还可对物理内存映射到进程地址空间时发生页错误后返回到用户模式时进行捕获。

模拟停止回调 例如,因为执行到到了没有相应回调的断点。这些回调在分析函数中使用,以支持反向执行。当反向执行时,Simics断点和模式更改回调通常不常用。如果设置断点处没有相应的回调,则反向执行找到最近的断点,在该点停止执行,并执行相应的“模拟停止”回调。这样做可以代替断点回调。

CGC Monitor监控哪些异常目标

CGC Monitor在整个竞赛过程中,不仅对竞争者提供的软件进行检测,包括PoV投掷者发出的攻击程序、防御主体发出的漏洞修补以及调用IDS子系统对竞赛者进行的筛选;同时还会对如下情况的发生进行主动检测记录,以便后续审查:

  • Kernel ROP –内核退出
  • Page tables allocated to the kernel-配置表修改
  • Process credentials -- e.g., effective user ID-进程安全设置,例如用户账号有效性变更
  • Unexpected code sections –未知代码段出现

为何需要分析功能

开发分析功能的目标是帮助确定违规和PoV的根本原因。 CFE中成功的PoV仅仅反映了CB存在漏洞,但并未表明漏洞产生的根源所在(例如,某些PoV具有多个漏洞)或者利用漏洞所遵循的路径。

捕获会话事件

捕获会话事件启用后,分析功能会记录在DECREE上执行的二进制文件所做的所有系统调用。 CGC Monitor记录所有参数,包括使用接收和发送呼叫读取和写入的数据。系统可以选择为任何会话生成完整的指令跟踪,包括数据访问。特定的CGC事件会在发生时被自动捕获并记录,包括:

  1. 产生操作系统信号
  2. PoV的判定,包括此时内存读取的执行位置
  3. ret的目标地址没有和call对应
  4. 指令地址超出了代码段或者在指令位置在堆中

逆向执行的交互式分析

借助IDAPython 脚本可以实现IDA和CGC-monitor的交互,从而实现对断点和特定会话事件的反向执行。CGC监视器执行会话并在可疑的点处自动暂停模拟,IDA Pro交互式反汇编程序启动并连接到CGC Monitor的GDB server,显示模拟暂停的执行点。分析人员可通过标准IDA调试器命令设置标签并可以跳转到会话的任何位置与程序进行交互。当会话成功进行一次PoV 时,也会自动生成一些列的标签用于后续的分析。

分析功能也可在不连接IDA时实现自动的PoV分析。分析功能会在成功进行POV时生成相关报告。
调试器实现注意事项

Simics包含一个GDB服务器功能,远程GDB客户端可以通过该功能控制进程的模拟执行。当用于分析应用程序时,GDB服务器通常与Simics OS感知功能结合使用,以维护目标进程的上下文。如前所述,CGC Monitor不使用Simics OS感知功能,因此它维护必要的进程上下文信息,以确保将正确进程的状态返回给GDB客户端。 Simics反向执行支持减慢了模拟速度,仅对IDA Client会话启用。一旦目标进程开始执行,CGC Monitor就会启用该功能...

总结

CGC-monitor 基于simics回调函数实现并替代了simics本身的操作系统感知功能,实现了对系统中基础软件的实时监控。同时引入对漏洞的分析和定位功能,当确认漏洞存在时,能够对漏洞发生时的上下文进行保存用于进一步分析。 借助IDA工具,可以在CGC -monitor中对漏洞发生现场进行回溯。或者重新进行这个会话也可重放漏洞的发现过程。

更多详细内容技术分析请见阅读原文 https://www.dfrws.org/sites/default/files/session-files/paper_cyber_grand_challenge_cgc_monitor_-_a_vetting_system_for_the_darpa_cyber_grand_challenge.pdf