简单的活着

11.恶意代码行为

Posted on By Mista Cai

11. 恶意代码行为

11.1 下载器和启动器

下载器从互联网下载恶意代码到本地执行,通常和漏洞利用打包使用。下载器常用Windows API函数URLDownloadtoFileAWinExec,来下载并运行新的恶意代码。

启动器(加载器),可执行文件,安装立即运行或者之后执行的恶意代码,通常包含要加载的恶意代码。

11.2 后门

后门允许攻击者远程访问一个受害的机器。后门代码往往实现了全套功能,例如操作注册表,列举窗口,创建目录,搜索文件等等。

查看后门使用和导入的Windows函数,可以确定后门程序实现的功能。附录A有恶意代码常用函数列表。

11.2.1 反向shell

反向shell从被感染机器上发起连接,提供攻击者shell访问被感染机器的权限。攻击者能如同在本地上一样运行命令。

  • Netcat反向shell
  • Windows反向shell:使用cmd.exe作为反向shell
    • 基础方法:涉及CreateProcess函数的调用
    • 多线程技术:涉及CreateThread,CreatePipe

11.2.2 远程控制工具

RAT被用来远程管理多台机器。RAT: Remote Adiminstration Tool, Remote Access Trojan

11.2.3 僵尸网络

被感染主机(僵尸网络)的集合,由单一实体控制,僵尸控制器。传播恶意代码或蠕虫,或者执行DDoS攻击。

11.2.4 远程控制工具与僵尸网络的比较

  • 控住主机数量。僵尸网络以百万计,远程控制工具数量很少。
  • 僵尸网络同时控制所有主机。远程控制工具以每个受害者为单位,攻击者与受害主机交互更紧密。
  • RAT执行针对性攻击,僵尸网络进行大规模攻击。

11.3 登录凭证窃密器

窃取登录凭证

  • 等待用户登录窃取登录凭证的程序
  • 转储Windows中存放信息的程序,例如密码哈希值,程序直接使用或者离线破解。
  • 击键记录程序

11.3.1 GINA拦截

Graphical Identification and Authentication

11.3.2 口令哈希转储

转储Windows口令哈希,以便离线暴力破解或者进行Pass-the-Hash攻击。

11.3.2 击键记录

  • 基于内核的击键记录器
  • 用户空间的击键记录器:
    • 通过hook来实现,SetWindowsHookEx;
    • 通过轮询实现,GetAsyncKeyState识别一个按键是被按下还是弹起,GetForegroundWindows识别当前窗口,告诉击键记录器只在进行输入的应用程序.

11.4 存活机制

11.4.1 Windows注册表

  • AppInit_DLL:恶意代码编写者通过一个名为AppInit_DLL特殊注册表项加载DLL。AppInit_DLL中的DLL程序在进程加载User32.dll时被加载。
  • Winlogon Notify:hook一个特殊的Winlogon事件,如登录、注销、关机以及锁屏。winlogon.exe产生一个事件时,系统会检测Notify注册表键来查找处理事件的DLL程序。
  • SvcHost DLL:所有的服务都存在于注册表中,如果一个服务的注册表键被移除,则这个服务不能启动。安装恶意代码作为svchost.exe的DLL来存活,混淆恶意代码和其他进程。

11.4.2 特洛伊木马化(Trojanized)系统二进制文件

特洛伊木马化系统二进制文件,被感染二进制文件下次运行或加载时,将会强制运行恶意代码。

11.4.3 DLL加载顺序劫持

不需要注册表项或者特洛伊二进制文件。

11.5 提权

提权攻击利用漏洞进行攻击。

11.5.1 使用SeDebugPrivilege

以用户权限运行的进程并没有任意访问系统一切资源的权限,例如远程进程调用TerminateProcessCreateRemoteThread函数。恶意代码获得这些函数访问权限的唯一方法是设置访问令牌access token权限来开启SeDebugPrivilege.可以通过调整AdjustTokenPrivileges来调整访问令牌。

11.6 隐藏它的踪迹— 用户态的Rootkit

恶意代码隐藏它的生存机制和正在运行的进程,是恶意代码的文件、进程、网络连接以及其他资源对其他程序隐藏。隐藏恶意代码行为的工具被称为Rootkit。内核层的Rootkit比用户层更容易修改操作系统内部的功能。

两种用户态的Rootkit技术:

11.6.1 IAT Hook

经典的Rootkit方法,隐藏本地系统的文件、进程以及网络连接。修改导入或者导出地址表。

11.6.2 Inline Hook

覆盖导入DLL中的API函数。IAT Hook简单修改函数指针,Inline Hook修改实际的函数代码。