ATT&CK-CN V1.0 Last Update: 2019-03 [返回索引页]

译者: 林妙倩(清华大学网络研究院网络空间安全实习生) 原创翻译作品,如果需要转载请取得翻译作者同意。

数据来源:ATT&CK Matrices

原文: https://attack.mitre.org/techniques/T1055

术语表: /attack/glossary

进程注入

进程注入是一种在独立活动进程的地址空间中执行任意代码的方法。在另一个进程的上下文中运行代码会允许代码访问进程的内存、系统/网络资源,以及可能提升的特权。由于合法进程掩盖了(注入进程的)执行,因此通过进程注入执行也可规避对安全产品的检测。

Windows

将代码注入实时进程有多种方法。Windows 下的实现包括: - 动态链接库 (DLL) 注入涉及在进程中写入恶意 DLL 的路径,然后通过创建远程线程调用执行。 - 可移植性可执行注入包括将恶意代码直接写入进程(磁盘上没有文件),然后使用附加代码或创建远程线程调用执行。注入代码的替换要求重新映射内存引用。这种方法的变体,如反射 DLL 注入(将自映射 DLL 写入进程)和内存模块(写入进程时映射 DLL),解决了了地址重定位问题。 - 线程执行劫持涉及将恶意代码或 DLL 路径注入进程的线程。与进程镂空类似,首先必须挂起线程。 - 异步过程调用 (APC) 注入涉及将恶意代码附加到进程线程的 APC 队列 。当线程进入可变状态时,执行在 APC 队列的函数。APC 注入的一种变体为"Early Bird 注入",它涉及到创建一个挂起的进程,在进程的入口点(以及可能随后的反恶意软件钩子)之前,通过 APC 编写和执行恶意代码。 AtomBombing 是另一种变体,它利用 APC 调用以前编写到全局原子表的恶意代码。 - 线程本地存储 (TLS) 回调注入涉及操作可移植性可执行文件 (PE) 中的指针,以便在到达代码的合法入口点之前将进程重定向到恶意代码。

Mac 和 Linux

Linux 和 OS X/macOS 系统的实现包括: - LD_PRELOADLD_LIBRARY_PATH (Linux)、DYLD_INSERT_LIBRARIES (Mac OS X) 环境变量或 dlfcn 应用程序编程接口 (API) 可用于动态加载进程中的库(共享对象),该库可用于拦截运行进程中的 API 调用。 - Ptrace 系统调用可用于附加到正在运行的进程并在运行时修改它。 - /proc/[pid]/mem 提供对进程内存的访问,可用于对进程读写任意数据。因其复杂性,该技术十分少见。 - VDSO 劫持通过操作 linux-vdso.so 共享对象映射的桩代码,在 ELF 二进制文件上执行运行时注入。 恶意软件通常利用进程注入来访问系统资源,通过这些资源可以获得持久性和修改其他环境。 更复杂的示例:使用命名管道或其他进程间通信 (IPC) 机制作为通信通道,执行多进程注入来分割模块并进一步规避检测。

缓解

这种类型的攻击技术不能简单通过预防性控制缓解,因为它基于滥用操作系统设计功能。 例如,减少特定的 Windows API 调用可能会产生意料外的副作用,比如阻止合法软件(即安全产品)正常运行。 应该集中精力防止攻击者工具在活动链中更早地运行以及识别后续恶意行为。

在适当的情况下使用白名单 工具(如 AppLocker、 或软件限制策略 ) 识别或拦截可能包含进程注入功能的潜在恶意软件。

使用 Yama 限制特权用户只能使用 ptrace,从而缓解基于 ptrace 的进程注入。 其他缓解控制包括部署提供高级访问控制和进程限制的安全内核模块,如 SELinux、grsecurity 和 AppAmour。

检测

监控各种类型代码注入的 Windows API 调用可能产生大量的数据,并且对防御可能没有直接用处,除非是在特定情况下针对已知的错误调用序列收集,因为良性的 API 函数调用可能是常见的,难以将其与恶意行为区分开。 诸如 CreateRemoteThread,SuspendThread / SetThreadContext / ResumeThread,QueueUserAPC / NtQueueApcThread 之类的 API 调用以及可用于修改另一个进程内的内存的 API 调用(例如 WriteProcessMemory)可用于此技术。

监测 Linux 特定的调用,如 ptrace 系统调用,LD_PRELOAD 环境变量的使用,或 dlfcn 动态链接 API 调用,由于其专业特性,它们不会产生大量数据,可以非常有效地检测一些常见的进程注入的方法。

监视命名管道的创建和连接事件(事件 ID 17 和 18),以获取外部模块感染进程的潜在标志。

监视可以在代码注入前后完成的进程和命令行参数操作,并将信息与相关的事件信息关联起来。 代码注入也可以通过 PowerShell 和 PowerSploit 等工具执行, 因此可能需要额外监控 PowerShell 来覆盖这种行为的已知实现。