在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第25-30种子技术,后续会介绍防御规避其他子技术,敬请关注。
MITRE ATT&CK 是一个全球可访问的基于现实世界观察的攻防战术和技术知识库。ATT&CK知识库被用作在私营部门、政府以及网络安全产品和服务社区中开发特定威胁模型和方法的基础。2023年 4月25日,MITRE ATT&CK 发布了最新版本 V13,最大的变化是为ATT&CK中的一些技术添加了详细的检测指导,用于企业,移动数据源和两种新类型的更改日志(包括一个人类可读的详细更改日志,更具体地显示更新的ATT&CK对象中的更改,以及一个机器可读的JSON更改日志,其格式在ATT&CK的Github中描述)。ATT&CK for Enterprise v13 包含14个战术、196个技术、411个子技术、138个组织和740个软件。
ATT&CK战术全景图(红框为防御规避战术)
防御逃避包括攻击者在攻击过程中用来避免被发现的技术,包括禁用安全软件、加密数据和脚本、利用可信进程来隐藏或伪装恶意软件。防御规避战术包括42种技术,本期介绍第25-30种技术,逐一介绍如下:
攻击者可能会修改属性列表文件(plist文件)以启用其他恶意活动,以逃避和绕过系统防御。macOS应用程序使用plist文件,用于存储通知操作系统如何在运行时处理应用程序的属性和配置设置。Plist文件是基于Apple的Core Foundation DTD以XML格式格式化的键值对中的结构化元数据。Plist文件可以保存为文本或二进制格式。攻击者可以修改plist文件中的键值对以影响系统行为,例如隐藏应用程序的执行或运行其他持久性命令。
3.2.1 缓解措施
ID | 缓解措施 | 描述 |
M1013 | 应用开发者指南 | 确保应用程序使用开发人员指南。 |
3.2.2 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控用于修改plist文件的带有参数的命令(例如打开常用命令行编辑器) |
DS0022 | 文件 | 文件修改 | 监控plist文件的修改,修改后的plist中任何路径指针的重大更改。 |
DS0009 | 进程 | 进程创建 | 监控新执行的进程。 |
攻击者可能会利用操作系统前启动机制建立持久性。在计算机的启动过程中,固件和各种启动服务在操作系统之前加载,这些程序在操作系统控制之前控制执行流程。在操作系统前启动技术包含5项子技术,介绍如下:
3.3.1 系统固件(T1542.001)
攻击者可能会修改系统固件以建立持久性。例如BIOS(基本输入/输出系统)和统一可扩展固件接口(UEFI)或可扩展固件接口(EFI)等。系统固件削弱了计算机的功能,并且可能被攻击者修改以执行恶意活动。
3.3.2 组件固件(T1542.002)
攻击者可能会修改组件固件以建立持久性。攻击者可能会使用复杂的手段来破坏计算机组件并安装恶意固件,这些固件将在操作系统和主系统固件或BIOS之外执行恶意代码。
3.3.3 Bootkit(T1542.003)
攻击者可以使用bootkit来持久化系统。Bootkit是一种恶意软件变体,可修改硬盘驱动器的引导扇区,包括主引导记录(MBR)和卷引导记录(VBR)。MBR是BIOS完成硬件初始化后首先加载的磁盘部分,引导加载程序的位置。对启动驱动器具有原始访问权限的攻击者可能会覆盖此区域,从而将启动期间的执行从正常启动加载程序转移到恶意代码。MBR将引导过程的控制传递给VBR。与MBR的情况类似,对启动驱动器具有原始访问权限的攻击者可能会覆盖VBR以将启动期间的执行转移到恶意代码。
3.3.4 RommonKit(T1542.004)
攻击者可能会利用ROM监视器(ROMMON),通过加载带有恶意代码的未经授权的固件来提供持久访问。攻击者可以使用恶意代码在本地或远程升级ROMMON镜像,并重新启动设备,以覆盖现有的ROMMON镜像。
3.3.5 TFTP启动(T1542.005)
Netbooting是引导序列中的一个选项,可用于集中、管理和控制设备镜像。攻击者可能会利用Netbooting从TFTP服务器加载未经授权的网络设备操作系统。攻击者可以操纵网络设备上的配置,指定使用恶意TFTP服务器,该服务器可以与修改系统映像一起使用,以便在设备启动或重置时加载修改后的镜像。未经授权的镜像允许对手修改设备配置,向设备添加恶意功能,并引入后门以保持对网络设备的控制。
3.3.6 缓解措施
ID | 缓解措施 | 描述 |
M1046 | 启动完整性 | 使用受信任的启动过程,检查现有BIOS或EFI的完整性,以确定它是否容易被修改。 |
M1026 | 特权账户管理 | 确保具有适当的权限,防止特权帐户被利用。 |
M1051 | 更新软件 | 根据需要修补BIOS和EFI。 |
3.3.7 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控命令历史记录中执行的命令和参数,以确定是否使用了未经授权或可疑的命令来修改设备配置。 |
DS0016 | 驱动 | 驱动修改 | 监控MBR和VBR发生的变化,以确定可疑活动和进一步分析的指标。记录MBR和VBR的快照,并与已知的良好样本进行比较。 |
DS0027 | 驱动 | 驱动程序元数据 | 监控磁盘检查、取证实用程序和来自设备驱动程序(即进程和API调用)的数据。 |
DS0001 | 固件 | 固件修改 | 监控在操作系统前引导机制上所做的更改。 |
DS0029 | 网络流量 | 网络连接创建 | 监控新构建的网络设备配置和系统镜像,以发现对系统引导、启动配置或正在运行的操作系统的未经授权的更改。 |
DS0009 | 进程 | OS API执行 | 监控利用操作系统前引导机制的API调用。 |
攻击者可以将代码注入到进程中来提升特权。进程注入是一种在单独的活动进程的地址空间中执行任意代码的方法。进程注入技术包含12项子技术,介绍如下:
3.4.1 动态链接库注入(T1055.001)
攻击者可以将动态链接库Dll注入到进程中,DLL注入通常通过在调用新进程加载DLL之前将路径写入目标进程的虚拟地址空间中的DLL来执行。
3.4.2 可执行文件注入(T1055.002)
攻击者可将可执行文件PE注入到进程中,PE注入在通过新进程调用目标进程之前将代码复制到目标进程的虚拟地址空间来执行的。
3.4.3 线程执行劫持(T1055.003)
攻击者可能会将恶意代码注入被劫持的进程中来提升特权。线程执行劫持通常通过挂起现有进程,然后取消映射其内存来执行,然后可以用恶意代码或DLL的路径替换。
3.4.4 异步进程调用(T1055.004)
攻击者可以通过异步进程调用APC队列向进程注入恶意代码,排队的APC函数在进程进入可更改状态时执行。
3.4.5 线程本地存储(T1055.005)
攻击者可以通过线程本地存储(TLS)回调将恶意代码注入进程,TLS回调注入涉及操纵可移植可执行文件PE中的指针,以便将进程重定向到恶意代码。TLS回调通常由操作系统用于设置或清理线程使用的数据。
3.4.6 Ptrace系统调用(T1055.008)
攻击者可以通过ptrace进程跟踪系统调用将恶意代码注入进程,Ptrace系统调用注入涉及修改正在运行的进程。Ptrace系统调用使调试进程能够观察和控制另一个进程以及每个单独的线程,包括更改内存和寄存器值。
3.4.7 Proc内存(T1055.009)
攻击者可以通过proc文件系统向进程注入恶意代码,通过使用proc文件系统提供的内存映射覆盖目标进程的堆栈来执行。
3.4.8 EWM注入(T1055.011)
攻击者可以通过EWM将恶意代码注入进程,在创建窗口之前,基于windows的图形化进程必须注册一个windows类,新windows类的注册可以包括请求将最多40字节的EWM追加到该类的每个实例的分配内存中。EWM旨在存储特定于该窗口的数据,并具有特定的应用程序编程接口(API)函数来设置和获取其值。
3.4.9 Process Hollowing(T1055.012)
攻击者可能会将恶意代码注入暂停的进程中, 进程挖空通常是通过创建一个处于暂停状态的进程,取消映射它的内存来执行的,然后可以用恶意代码替换它。
3.4.10 Process Doppelgänging(T1055.013)
Process doppelgänging是一种在单独活动进程的地址空间中执行任意代码的方法。Process Doppelgänging分4步实现:使用合法的可执行文件创建TxF事务,然后用恶意代码覆盖该文件。创建内存的共享部分并加载恶意可执行文件。撤消对原始可执行文件的更改,有效地从文件系统中删除恶意代码。从内存的受污染部分创建一个进程并启动执行。
3.4.11 VDSO劫持(T1055.014)
攻击者可以通过vdso劫持向进程注入恶意代码,VDSO劫持涉及将调用重定向到动态链接的共享库。攻击者可能会劫持从vdso共享对象映射到进程的syscall接口代码存根,以执行syscall以打开和映射恶意共享对象。然后,可以通过通过存储在进程全局偏移表(存储映射库函数的绝对地址)中的修补内存地址引用重定向进程的执行流来调用此代码。
3.4.12 ListPlanting(T1055.015)
攻击者可利用列表视图控件将恶意代码注入被劫持的进程中,ListPlanting可以通过将代码复制到使用列表视图控件的进程的虚拟地址空间中来执行,使用该代码作为自定义回调来对列出的项目进行分类,然后可以执行邮件攻击。
3.4.13 缓解措施
ID | 缓解措施 | 描述 |
M1040 | 端点行为防御 | 在Windows10上,攻击面减少(ASR)规则可能会阻止Office应用程序进行代码注入。 |
M1026 | 特权账户管理 | 将ptrace的使用限制为特权用户来减轻基于ptrace的进程注入。其他控制涉及安全内核模块的部署,这些模块提供高级访问控制和进程限制,如SELinux,grsecurity和AppArmor。 |
3.4.14 检测
ID | 数据源 | 数据组件 | 检测 |
DS0022 | 文件 | 文件元数据 | 监控文件的标题,内容,所有者等信息。 |
文件修改 | 监控修改文件的事件。 | ||
DS0011 | 模块 | 模块加载 | 监控DLL/PE文件事件,特别是这些二进制文件的创建以及将Dll加载到进程中,查找无法识别或未加载到进程中的Dll。 |
DS0009 | 进程 | OS API执行 | 监控Windows API调用可能会生成大量数据,监控Linux特定的调用,如ptrace系统调用。 |
进程访问 | 监控进程访问事件。 | ||
进程元数据 | 监控进程和内存是否一致。 | ||
进程修改 | 监控进程修改事件。 |
攻击者可能会将代码加载到进程中,以隐藏恶意有效负载的执行。反射加载涉及直接在进程的内存中分配然后执行有效负载,或者创建由磁盘上的文件路径支持的线程或进程。反射加载的有效负载可以是编译的二进制文件,匿名文件(仅存在于RAM中),或者只是无文件可执行代码的缓冲(例如:与位置无关的shellcode)。反射代码注入与进程注入非常相似,只是将代码加载到进程自己的内存中,而不是单独的进程。反射加载可能会逃避基于进程的检测,因为任意代码的执行可能会在合法进程中被屏蔽。
3.5.1 检测
ID | 数据源 | 数据组件 | 检测 |
DS0011 | 模块 | 模块负载 | 监控异常进程执行。 |
DS0009 | 进程 | OS API执行 | 监控与反射加载代码相关联的代码执行。 |
DS0012 | 脚本 | 脚本执行 | 监控异常的脚本执行,识别任意代码执行行为。 |
攻击者可以注册恶意域控制器以启用对活动目录数据的操作。DCShadow可用于创建恶意域控制器(DC)。DCShadow是一种通过注册和模拟DC行为来操作活动目录(AD)数据的方法。一旦注册,恶意DC可能能够将更改注入并复制到任何域对象的AD基础结构中,包括凭据和密钥。注册恶意域控制器技术还可用于更改和删除复制和其他相关元数据,以阻碍检测分析。攻击者也可以利用该技术来执行SID-History注入或操纵AD对象(例如帐户,访问控制列表,模式)以建立用于持久化的后门。
3.6.1 检测
ID | 数据源 | 数据组件 | 检测 |
DS0026 | 活动目录 | 活动目录对象创建 | 基线和定期分析AD架构的配置分区,并在创建nTDSDSA对象时告警。 |
活动目录对象修改 | 监控AD目录状态的更改,对AD对象的复制行为进行监控和告警(审核详细的目录服务复制事件EventID为4928和4929)。 | ||
DS0029 | 网络流量 | 网络流量内容 | 监控和分析DC之间以及非DC主机之间与数据复制相关的网络流量。 |
DS0002 | 用户账户 | 用户账户认证 | 监控异常的用户账户对Kerberos服务主体名称(Spn)的使用情况,恶意DC必须使用这两个Spn作为服务进行身份验证,才能成功完成复制过程。 |
攻击者可以使用rootkit来隐藏程序、文件、网络连接、服务、驱动程序和其他系统组件。Rootkit是通过拦截和修改提供系统信息的操作系统API调用来隐藏恶意软件的程序。Rootkit可以驻留在操作系统、更低的用户或内核级别,以包括管理程序、主引导记录或系统固件。
3.7.1 检测
ID | 数据源 | 数据组件 | 检测 |
DS0016 | 驱动 | 驱动修改 | 监控对数据存储设备的驱动所做的更改,以获取rootkit可能用于隐藏程序、文件、网络连接、服务、驱动程序和其他系统组件的意外修改行为。 |
DS0022 | 文件 | 文件修改 | 监控异常的Dll、驱动程序、设备、服务和MBR的修改事件。 |
DS0001 | 固件 | 固件修改 | 监控对固件所做的更改,rootkit保护可能内置于防病毒或操作系统软件中。有专门的rootkit检测工具来查找特定类型的rootkit行为。 |
本期主要介绍了防御规避战术(五)及技术/子技术原理,下期将给大家介绍防御规避战术(六)涉及的技术原理。敬请关注。