5.2.2 恶意代码分析
恶意代码分析技术可分为静态分析和动态分析两类。
1.恶意代码静态分析技术
恶意代码的静态分析是指在程序未执行的状态,通过分析程序指令与结构来确定程序功能,提取特征码的工作机制。
目前,静态分析技术最大的挑战在于代码采用了加壳、混淆等技术阻止反汇编器正确反汇编代码,因此对加壳的恶意代码正确脱壳是静态分析的前提。对于一些通用的软件壳,通用脱壳软件就可以方便地将其还原为加壳前的可执行代码,但是对于自编壳或者是专用壳,就需要人工调试和分析后最终实现脱壳。
手工脱壳过程一般分为查找 OEP(入口点)、转储进程内存和重建导入表等具体的步骤。
2.恶意代码动态分析技术
恶意代码的动态分析则是将代码运行在沙盘、虚拟机等仿真环境中,通过监控运行环境的变化、代码执行的系统调用等来判定恶意代码及其原理。
动态分析技术面临的挑战之一在于反调试技术的引入及代码中加入条件分支隐藏的恶意行为,前者会阻止代码被动态调试器调试,后者则在代码运行过程中故意设置不满
足的条件从而让系统无法监控到恶意行为。因此如何构造和真实主机相似的虚拟环境从而让恶意代码误认为运行在目标主机中就成为了关键。
5.2.3 恶意代码的检测和防范
当前,绝大多数用户依赖安全公司生产的各类安全软件来防止被恶意代码入侵。对于企业用户来说,具有防病毒功能的网关防火墙可以成为阻止外来攻击的第一道关口。由于网关防火墙架设在网络边界,能够对所有进出局域网的数据进行检测,因此可以将恶意代码的数据包拒绝在内网之外。对于普通的计算机用户,在主机上安装主机防火墙(Windows 系统自带)和具