1、下载器和启动器
下载器从互联网上下载其他的恶意代码,然后在本地系统中运行。下载器通常会与漏洞利用打包在一起。下载器常用Windows API函数URLDownloadtoFileA和WinExec,来下载并运行新的恶意代码。
1 | HRESULT URLDownloadToFile( |
启动器(加载器)是一类可执行文件,用来安装立即运行或者将来秘密执行的恶意代码。
2、后门
后门是一种能让攻击者远程访问一个受害者的机器。后门拥有一套通用的功能,例如操作注册表、列举窗口、创建目录、搜索文件,等等。
1、反向shell
反向shell是从被感染机器上发起一个连接,它提供攻击者shell访问被感染机器的权限。
1、Netcat反向shell
2、windows反向shell
2、远程控制工具
远程控制工具(RAT)被用来远程管理一台或多台计算机。
服务器端运行在一个被植入恶意代码的受害者主机上。客户端作为攻击者远程操作运行命令和控制单元。远程控制工具通常通过如80、443等常用的通信端口。
3、僵尸网络
僵尸网络是被感染主机的一个集合。它们由单一实体控制,通常由一个称为僵尸控制器的机器作为服务器。僵尸网络的目标是尽可能地多感染机器,来构建一个更大的僵尸主机网络,从而使僵尸网络传播其他的恶意代码或蠕虫,或者执行分布式拒绝服务攻击。
3、登录凭证窃密器
1、等待用户登录以窃取登录凭证的程序
2、转储Windows系统中存放信息的程序,例如密码哈希值,程序直接使用它,或者对它进行离线破解。
3、击键记录程序
4、存活机制
1、Windows注册表
恶意程序常用注册表存储它的配置信息、收集系统信息、永久得安装自己。
1、AppInit_DLL
恶意代码编写者可以通过一个名为AppInit_DLL特殊注册表项来让DLL获得加载。AppInit_DLL中的DLL程序会在进程加载User32.dll时加载。
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost |
2、Winlogon Notify
恶意代码编写者可以挂钩一个特殊的winlogon事件,如登录、注销、关机以及锁屏,等等。
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ |
当winlogon.exe产生一个事件时,Windows系统会检查Notify注册表键来查找处理这个事件的DLL程序。
3、SvoHost DLL
恶意代码经常作为一个服务安装,但是更多时候作为一个可执行文件使用。安装的恶意代码作为svchost.exe的DLL来存活,这使得恶意代码可以与其他进程混淆,且更像标准的服务。
每个svchost.exe实例都包含一组服务,定义在下列注册表中:
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvoHost |
服务被定义在下列注册表位置:
1 | HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ServiceName |
2、特洛伊木马化系统二进制文件
利用这种技术,恶意代码能够修改系统的二进制文件,当被感染的二进制文件下次运行或者加载时,将会强制运行恶意代码。
3、DLL加载顺序劫持
DLL加载顺序劫持是一种简单隐蔽的技术,它允许恶意代码编写者在不使用注册表或者特洛伊二进制文件的前提下创建一个存活的、恶意的DLL程序。
Windows XP中加载DLL的默认搜索顺序:
1、加载应用程序的目录。
2、当前目录
3、系统目录
4、16位子系统的系统目录
5、Windows目录
6、PATH环境变量里列出的目录
5、提权
恶意代码获得访问这些函数的权限的唯一方法是通过设置访问令牌的权限来开启SeDebugPrivilege。在Windows系统中,访问令牌(access token)是一个包含进程安全描述符的对象。
SeDebugPrivilege特权作为一个系统级别调试的工具被创建,但是恶意代码编写者用它来获取系统进程拥有的所有权限。默认情况下,SeDebugPrivilege只赋给本地管理员账户,基本可以认为赋予用户SeDebugPrivilege权限就等同于给予他们本地系统账户权限。
6、隐藏它的踪迹————用户态的Rootkit
常用来隐藏恶意代码行为的工具被称为RootKit。Rootkit有多种存在形式,但是大部分Rootkit通过修改操作系统内部的功能来工作。这种修改可以使恶意代码的文件、进程、网络连接以及其他资源对其他程序隐藏。
1、IAT Hook
IAT Hook是用户空间中一种经典的Rootkit方法,它隐藏本地系统中的文件、进程以及网络连接。这种方式修改导入地址表(IAT)或者导出地址表(EAT)。
2、Inline Hook
Inline Hook是通过覆盖导入DLL中API函数的代码来实现的,所以它必须等到DLL被加载后才能执行。