恶意代码简介
恶意代码(malware)指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。恶意代码主要包括:计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸网络和内核套件等。
- 计算机病毒:是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。
- 蠕虫:可自我复制,通过不需要将自身嵌入到其他宿主程序中,一般不需要人工干预。
- 恶意移动代码:移动代码指可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少的人为干预。移动代码通常在Web服务器端实现。恶意移动代码是指在本地系统执行一些用户不期望的恶意动作的移动代码。
- 后门:指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制。
- 特洛伊木马:一类伪装成有用的软件,但隐藏其恶意目标的恶意代码。
- 僵尸网络:攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制程序所组成的攻击网络。僵尸网络区别 于其他攻击方式的基本特性是使用一对多的命令与控制机制,此外也具有恶意性和网络传播特性。
- 内核套件:是在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权的一类恶意代码,又分为用户态Rootkit和内核态Rootkit两种。
恶意代码类型 | 计算机病毒 | 网络蠕虫 |
复制性 | 自我复制,感染性 | 自我复制,感染性 |
定义特性 | 感染宿主文件/扇区 | 通过网络,自主传播 |
宿主 | 需要寄生宿主 | 不需要宿主,独立程序 |
传播路径 | 感染文件或扇区,通过文件交换或共享传播 | 直接通过网络传播,包括内网和互联网 |
传播是否需要用户交互 | 通过需要用户交互,如运行一个程序或打开文档 | 一般来说,不需要用户交互,通过目标系统上的安全漏洞或错误配置进行传播。但对于一小部分蠕虫,如邮件蠕虫,用户交互是必要的 |
恶意代码分析主要有静态分析和动态分析两大类技术方法。
恶意代码静态分析技术主要包括:反病毒软件扫描(https://www.virustotal.com/zh-cn/)、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
- 反病毒软件扫描:使用现成的反病毒软件来扫描待分析的样本,以确代码是否含有病毒。
- 文件格式识别:恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式,对于二进制可执行文件而言,了解样本的格式也意味洋 我们获知了恶意代码所期望的运行平台。在Windows平台上,二进制可执行yywrexe和dll都是以pe文件格式组织的,而在linux平台上,可执行文件格式则是elf。
- 字符串提取分析:有时恶意代码的作者会在自己的作品中放入某个特定的url或email地址,或者恶意代码会使用到某个特定的库文件和函数。利用字符串提取技术,可以帮助我们分析恶意代码的功能和结构。
- 反汇编、反编译:可根据二进制文件最大限度地恢复出源代码,帮助分析代码结构。
- 加壳识别和代码脱壳:恶意代码的加壳会对深入的静态分析构成阻碍,因此对加壳进行识别以及代码脱壳是支持恶意代码静态分析一项关键性的技术手段。
恶意代码的动态分析技术手段主要有:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试等。
- 快照比对:对原始的“干净”系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间,如5分钟,之后我们再对恶意代码运行后“脏”的系统资料列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响。常使用的工具有:FileSnap,RegSnap,完美卸载等
- 系统动态行为监控:是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。
- 网络协议栈监控方法:可从本地网络上的其他主机来检测承受恶意代码攻击的机器的行为,如恶意代码所开放的TCP或UDP端口,对外发起的网络连接和通信会话等。
- 沙箱技术:沙箱是不项安全技术,它提供了受限制的执行环境,使得在沙箱中运行的代码不能修改用户系统,从而提供了一个用于运行不可信程序的安全环境。