注入,动态生成及混淆的恶意代码的检测

DOME(Detection of Maliciious Executables)

它是一种检测宿主可执行文件中的恶意代码的技术。DOME通过表态分析确定软件中产生系统调用的位置(虚拟地址),然后再监视软件运行并难所有观察到的系统调用都是从静态分析时获得的地址处产生的。这种技术简单,易行,实用,而且对注入,动态生成以及混淆的恶意代码都非常有效。

 

1. 注入式的代码 - 运行期间注入某个进程地址的代码;

2. 动态生成的代码 - 运行期间才生成的代码;

3. 混淆代码 -  在进程的原始代码中就已经存在,但是代码的真实目的却通过混淆计算和数据加工隐藏起来了。

 

大部分使用缓冲溢出漏洞将自己注入到程序进程的蠕虫都属于第1类。

将自己的代码加密并嵌入磁盘上的可执行文件中的多态病毒属于第2类。

与动态代码生成类似,代码混淆经常用于病毒和朩马,而不是蠕虫,但是下一代的蠕虫很有可能通过这些复杂的技术来防止自己被检测和分析。

 

检测技术

DOME核心分两步防止受保护的软件被恶意代码破坏。

Step 1: 处理所有的可执行文件,确定其中的Win32 API调用指令,并将它们的虚拟地址和函数名称存储起来;

Step 2: 在软件运行期间监视软件对Win32API的调用,当一个API被调用时,确定产生调用的指令和该指令在文件中的地址,然后难这个指令的地址和所调用的API函数名称是否与初步处理过程中得到的地址一致。如果发现不一致,则发出警告。这时,系统就可以通过阻挡该API调用保护宿主。

 

细说Step 1

 

初步处理,DOME对软件反汇编,然后分析确定调用WIN32 API的指令。这些指令的地址和API函数名会被记录下来。因某些原因(下部分会讲),我们还WIN32 API调用那句指令的地址,也就是调用的返回地址,当调用要返回时,这些地址应该出现在堆栈的最顶端。

 

在编译器生成的正常代码中,WIN32API的调用是通过引用输入地址表(IAT)中的相应适配卡来实现的。

 

细说Step 2

 

逻辑上分为两部分:监视WIN32API调用和将该调用的信息和初步处理中所记录的信息相比较。

监视:

请见附件

验证:

如图示,WIN32 API调用的验证是在API的Detour外壳初步处理代码段中完成的。Win32调用一发生,初步处理代码就会首先取得控制权,此时堆栈的顶端应该是该调用返回地址。要验证该调用,DOME首先看这个返回地址和函数名称在初步处理步骤中存在否。

 

微软研究院Detour开发包之API拦截技术

 

我们截获函数执行最直接的目的就是为函数增添功能,个性返回什,或者为调试以及性能测试加入附加的代码,或者截获函数的输入输出作研究,破解使用。

 

Detours是一个在x86平台上截获WIN32函数调用的工具库。中断代码可以在运行时动态加载。Detours使用一个无条件转移指令来替换目标函数的最初几条指令,将控制流一个用户提供的截获函数。而目标函数中的一些指令被保存在一个称为“trampoline”(其实是目标函数的部分拷贝)。而截获函数可以替换目标函数,或者通过执行“trampoline”函数的时候将目标函数作为子程序来调用的办法来扩展功能。

 

拦截WIN32 API的原理

 

 

<!--[if !vml]-->微软研究院Detour开发包之API拦截技术(图一)

注入,动态生成及混淆的恶意代码的检测

 

注入,动态生成及混淆的恶意代码的检测

 

 

区分概念:

目标函数 Trampoline函数 Detour函数

 

from: http://bbs.pediy.com/showthread.php?t=35766

from: http://www.qqread.com/dotnet/y396675.html

你可能感兴趣的:(PHP,软件测试,嵌入式,bbs)