发明名称 |
一种Shellcode的动态检测方法 |
摘要 |
一种Shellcode的动态检测方法,首先抓取网络数据流并进行划分,得到多个执行链;然后触发一个操作系统breakpoint异常,将异常触发时的寄存器值和内存内容作为初始寄存器值和内存内容并存储;最后依次执行执行链,同时在每一执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环或系统异常,则当前执行链没有Shellcode,否则使用启发式方法检测当前执行链是否含有Shellcode,完成检测。本发明方法不仅能够检测到使用了代码混淆技术的Shellcode,而且未采用虚拟化技术、易于部署,能有效检测到可发现虚拟化环境的Shellcode,大大降低了Shellcode检测暴露的可能性。 |
申请公布号 |
CN104731708A |
申请公布日期 |
2015.06.24 |
申请号 |
CN201510134654.8 |
申请日期 |
2015.03.25 |
申请人 |
北京信息控制研究所;中国工程物理研究院计算机应用研究所 |
发明人 |
陈漠;刘渊;王潇茵;李宁 |
分类号 |
G06F11/36(2006.01)I;G06F21/56(2013.01)I;G06F9/455(2006.01)I |
主分类号 |
G06F11/36(2006.01)I |
代理机构 |
中国航天科技专利中心 11009 |
代理人 |
陈鹏 |
主权项 |
一种Shellcode的动态检测方法,其特征在于包括步骤如下:(1)令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器值和内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;(2)从待检测主机的网络通信信道中抓取网络数据流,并存储至待检测主机的内存中;(3)对抓取的网络数据流进行划分,得到多个执行链,并使用初始寄存器值和内存内容开始执行第一个执行链;(4)执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果出现操作系统异常,则当前执行链没有Shellcode且当前执行链检测完成,在产生对应的操作系统异常处理信号并送至操作系统内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果没有出现死循环或者操作系统异常,则转入步骤(5);(5)使用Heuristics方法检测当前执行链,如果检测到Shellcode,则输出检测到Shellcode信号,转入步骤(6),否则输出未检测到Shellcode信号,转入步骤(6);(6)重复步骤(4)‑步骤(5)执行下一执行链直至网络数据流划分得到的所有执行链被遍历。 |
地址 |
100037 北京市海淀区阜成路14号 |