- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录
运行环境分类
QEMU简介
QEMU核心部件——TCG
可能的捕获机制
两个设计的例子
QEMU源码架构
系统安全基本测试环境——运行环境
一 攻击库的运行环境选择
1 沙箱/影子系统: 本地系统中进行操作;
(安全) 记录操作记录;
结束就恢复(沙箱是倒沙,影子是重启) √
2 虚拟机: VMware, ×
(部分物理) Parallels Desktop, ×
VirtualBox-ose, √
3 模拟器: Bochs, Qemu(模拟更多的指令架构和硬件平台)√
(纯软件)
要求: 开源(增删功能模块—防御机制)
隔离(安全—保护宿主机)
系统安全基本测试环境——Qemu
Qemu开源,Bochs也开源,但是支持的系统只有X86。 Virtualbox-ose也开源,但是灵活性和开放程度没有 Qemu好。Qemu可以模拟cpu也可以模拟外设。可以随意修改源代码,添加对自己的系统的支持。
两篇硕士学位(西安电子科大)论文:
基于Qemu的恶意程序行为捕获软件研究与实现.2014
基于Qemu的进程检测工具的设计与实现.2013
QEMU
整体架构示意图:
QEMU—模式选择
QEMU
开源模拟器软件
使用可移植的动态二进制翻译器的模拟器软件
实现了多源多目标的仿真
Qemu的运行就是不断地取指、翻译、执行
取指:取得源指令体系结构的指令
翻译:把源指令翻译成目标指令
执行:在本机上执行目标指令
Qemu系统由解释器、翻译器、翻译缓存、控制核心等几部分组成
多种优化技术:基本块、缓存翻译块
QEMU—指令翻译模块(TCG)
QEMU—指令翻译模块(TCG)
例如一条源指令: jmp f000:e05b
gen_opc_buf,存储操作码的缓冲区;
gen_opparam_buf,存储参数的缓冲区;
gen_code_buf,存储翻译后指令的缓冲区;
gen_opc_ptr、gen_opparam_ptr、gen_code_ptr 这三个指针
变量依次指向上述缓冲区。
disas_insn()函数扫描解析这段指令编码,扫描到的第 1 个字节是 0xEA,可知这是一条 16 位无条件跳转指令。对这条指令的后续处理是从后续字节中得到 offset 和 selector,至此本指令执行所需的操作数已经解析完成。
可能的捕获机制
收集程序行为的可能架构:
一是:在虚拟机内部进行监控,利用客户机操作系统的接口或是修改客户机操作系统内核,构建监控单元。
(缺点:处在底层的恶意程序有可能绕过检测单元)
二是:在虚拟机外部,即虚拟机监控VMM(Virtual Machine Monitor),进行监控。
(缺点:数据来自于VMM,而不是操作系统层次,存在恶意程序的语义鸿沟)
QEMU-捕获机制
QEMU开源
监控系统位于 qemu 进程内部,它在指令翻译部分插入监控代码。
弥补语义鸿沟:进程识别、API 捕获、行为分析等。
两个例子
QEMU-API监控系统架构
QEMU-进程监控系统架构
第二个例子—模块化设计
CPU信息提取
内存读写
进程监测模块
Qemu-源码架构
QEMU的主要功能就是不断提取客户机代码并且转化成主机指定架构的代码。
整个翻译任务分为两个部分:第一个部分是将做目标代码(TB)转化成TCG中间代码,然后再将中间代码转化成主机代码。
Qemu-源码架构
/vl.c:最主要的模拟循环,虚拟机机器环境初始化,和CPU的执行。
/target-arch/translate.c :将客户机代码转化成不同架构的TCG操作码。
/tcg/tcg.c:主要的TCG代码。
/tcg/arch/tcg-target.c : 将TCG代码转化生成主机代码
/cpu-exec.c:主要寻找下一个TB(翻译代码块),如果没找到就请求得到下一个TB,并且操作生成的代码块。
Qemu-TCG代码分析
函数 路径 注释
main_loop(...) {/vl.c} //some条件的不断判断,eg.电源是否断电
qemu_main_loop_start(...) {/cpus.c} //分时运行CPU核,cpu_exec_all()
struct CPUState {/targ
文档评论(0)