一、引言
在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第31-36种子技术,后续会介绍防御规避其他子技术,敬请关注。
二、ATT&CK v13简介
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战术全景图(红框为防御规避战术)
三、防御规避战术
3.1 概述
防御逃避包括攻击者在攻击过程中用来避免被发现的技术,包括禁用安全软件、加密数据和脚本、利用可信进程来隐藏或伪装恶意软件。
防御规避战术包括42种技术,本期介绍第31-36种技术,逐一介绍如下:
3.2 破坏信任控制(T1553)
攻击者可能会破坏安全控制,这些安全控制警告用户不受信任的活动或阻止执行不受信任的程序。
攻击者可以进行文件和目录权限修改或修改注册表以破坏信任控制,攻击者还可能创建或窃取代码签名证书以获取对目标系统的信任。
破坏信任控制技术包含6项子技术,介绍如下:
3.2.1 Gatekeeper绕过(T1553.001)
攻击者可能会修改文件属性并颠覆Gatekeeper功能,以逃避用户提示并执行不受信任的程序。Gatekeeper是一组充当Apple安全模型层的技术,以确保仅在主机上执行受信任的应用程序。
攻击者可以通过逻辑错误(例如利用防御逃避),未检查的文件类型和外部库来破坏Gatekeeper检查中的一个或多个安全控制。例如,在Macos13Ventura之前,代码签名和公证检查仅在首次启动时进行,允许攻击者将恶意可执行文件写入之前打开的应用程序,以绕过Gatekeeper安全检查。
3.2.2 代码签名(T1553.002)
攻击者可能会创建、获取或窃取代码签名文件以对其恶意软件或工具进行签名。代码签名提供了来自开发人员的二进制文件的真实性级别,并保证二进制文件未被篡改。操作过程中使用的证书可能会被攻击者创建、获取或窃取。代码签名证书可用于绕过需要在系统上执行签名代码的安全策略。
3.2.3 SIP和信任提供程序劫持(T1553.003)
在进行签名验证检查时,攻击者可能会篡改SIP和信任提供程序组件以误导操作系统和应用程序控制工具。
由于可执行文件类型和相应的签名格式各不相同,Microsoft创建了称为主题接口包(SIPs)的软件组件,以在API函数和文件之间提供一层抽象。SIPs负责使API函数能够创建、检索、计算和验证签名。大多数文件格式(可执行文件、PowerShell、安装程序等)都存在唯一的Sip。
与代码签名类似,攻击者可能会利用此体系结构来颠覆信任控制并绕过仅允许合法签名的代码在系统上执行的安全策略。
3.2.4 安装ROOT证书(T1553.004)
在受损系统上安装根证书将为攻击者提供降低该系统安全性的方法。当被入侵的系统通过HTTPS连接到欺骗网站以收集登录凭据的攻击者控制的web服务器时,攻击者使用此技术来避免安全警告提示用户。
ROOT证书也可以克隆并重新安装。克隆的证书链将携带源的许多相同元数据特征,并可用于对恶意代码进行签名,这些恶意代码可能会绕过签名验证工具。
3.2.5 MOTW绕过(T1553.005)
攻击者可能会利用特定的文件格式来修改Web标记(MOTW)控件。在Windows中,当文件从互联网上下载时,它们被标记为一个名为Zone的隐藏NTFS备用数据流(ADS)。具有称为MOTW的特定值的标识符。使用MOTW标记的文件受到保护,无法执行某些操作。
攻击者可能会利用容器文件来传递可能未使用MOTW标记的恶意有效负载。
3.2.6 代码签名策略修改(T1553.006)
攻击者可以修改代码签名策略以启用未签名或自签名代码的执行。代码签名提供了来自开发人员的程序的真实性级别,并保证程序未被篡改。安全控制可以包括强制机制,以确保只有有效的签名代码才能在操作系统上运行。
攻击者可以通过多种方式修改代码签名策略,包括通过使用命令行或GUI实用程序,修改注册表,以调试或恢复模式重新启动计算机,或通过更改内核内存中可以修改系统的代码签名策略的命令。
3.2.7 缓解措施
ID | 缓解措施 | 描述 |
M1038 | 执行预防 | 系统设置可以阻止异常应用程序运行,以阻止恶意内容的加载。 |
M1028 | 操作系统配置 | Windows组策略可用于管理证书,以防止非管理员用户越权安装。 |
M1024 | 限制注册表配置 | 确保为注册表配置单元设置了适当的权限,以防止用户修改与SIP和信任提供程序组件相关的密钥。 |
M1054 | 软件配置 | HTTP公钥固定(HPKP)通过强制使用预期证书来拦截加密通信。 |
3.2.8 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 命令监控发现修改信任设置的恶意行为,例如安装根证书或修改应用于文件的信任属性或策略。 |
DS0022 | 文件 | 文件元数据 | 收集和分析在环境中执行的软件上的签名证书元数据,以查找异常证书特征和异常值。 |
文件修改 | 定期设置已注册的Sip和信任提供程序,专门查找新的、已修改的或非Microsoft项。 | ||
DS0011 | 模块 | 模块负载 | 监控和分析与失败的信任验证相关的错误事件,包括事件ID81和 ID3033等。 |
DS0009 | 进程 | 进程创建 | 监控恶意尝试修改信任设置的进程和参数。 |
DS0024 | Windows注册表 | Windows注册表创建 | 监控Windows注册表中子项的创建可能会揭示修改信任设置的恶意行为。 |
Windows注册表项修改 | 监控对Windows注册表的更改可能会发现恶意尝试修改信任设置。 |
3.3 执行签名的二进制文件代理(T1218)
攻击者可以通过使用签名或受信任的二进制文件代理执行恶意代码来绕过基于进程或签名的防御。此技术中使用的二进制文件通常是Microsoft签名的文件,表示它们已从Microsoft下载或已在操作系统中。使用受信任数字证书签名的二进制文件通常可以在受数字签名验证保护的Windows系统上执行。
同样,在Linux系统上,攻击者可能会利用可信二进制文件(如split)来代理执行恶意命令。
执行签名的二进制文件代理技术包含13项子技术,介绍如下:
3.3.1 编译的HTML文件(T1218.001)
攻击者可能会利用已编译的HTML文件(.chm)来隐藏恶意代码。CHM文件是各种内容的压缩编译,如HTML文档,图像和脚本、web相关的编程语言,如VBA,JScript,Java和ActiveX。CHM内容使用HTML帮助可执行程序加载的Internet Explorer浏览器的底层组件显示。嵌入恶意负载的自定义CHM文件可以传递给受害者,然后由用户执行触发。
3.3.2 控制面板(T1218.002)
Windows控制面板进程处理控制面板项目的执行,这些项目是允许用户查看和调整计算机设置的程序。
控制面板项目通常包括在注册并加载到控制面板后可供用户使用的图形菜单,同时可以直接从命令行执行,也可以通过应用程序编程接口(API)调用以编程方式执行,或者只需双击文件即可。
攻击者可能重命名恶意DLL文件与控制面板文件扩展名,恶意控制面板项目可以通过网络钓鱼活动传递,可能绕过应用程序或文件扩展名允许列表。
3.3.3 CMSTP(T1218.003)
Microsoft连接管理器配置文件安装程序(CMSTP.exe)是用于安装连接管理器服务配置文件的命令行程序。CMSTP.exe接受安装信息文件(INF)作为参数,并安装用于远程访问连接的服务配置文件。
CMSTP.exe可能被攻击者利用来从远程服务器加载和执行Dll,可能绕过应用程序控制防御,exe是可能由Microsoft签名的合法二进制文件。CMSTP.exe可以被利用以绕过用户帐户控制,并通过自动提升的COM接口从恶意信息执行任意命令。
3.3.4 InstallUtil(T1218.004)
攻击者可以使用InstallUtil通过受信任的Windows程序代理执行代码。InstallUtil是一个命令行程序,允许通过执行.NET二进制文件中指定的特定安装程序组件来安装和卸载资源。InstallUtil可用于通过使用二进制文件中的属性来绕过应用程序控制。
3.3.5 Mshta(T1218.005)
Mshta.exe是执行Microsoft HTML应用程序(HTA)文件的程序。HTA是独立的应用程序,它们使用相同的IE模型和技术执行,但在浏览器之外。
Mshta.exe可用于绕过不考虑其潜在用途的应用程序控制解决方案。Mshta.exe在Internet Explorer的安全上下文之外执行,可以绕过浏览器安全设置。
3.3.6 Msiexec(T1218.007)
攻击者可能会利用msiexec.exe到代理执行恶意有效载荷。Msiexec.exe是Windows安装程序的命令行程序,也可能由Microsoft进行数字签名。
攻击者可能会利用msiexec.exe启动本地或网络可访问的媒体文件或Dll。由于它可能在Windows系统上签名,因此可用于绕过应用程序控制解决方案。Msiexec.exe如果启用了AlwaysInstallElevated策略,exe执行也可能提升为系统特权。
3.3.7 Odbcconf(T1218.008)
攻击者可能会利用odbcconf.exe到代理执行恶意有效载荷。Odbcconf.exe是一个Windows程序,允许用户配置开放数据库连接(ODBC)驱动程序和数据源名称,可能由Microsoft进行数字签名。
攻击者可能会利用odbcconf.exe绕过不考虑其潜在利用的应用程序控制解决方案。类似于Regsvr32,odbcconf.exe有一个REGSVR标志,可以被误用来执行Dll。
3.3.8 Regsvcs/Regasm(T1218.009)
攻击者可能会利用Regsvcs和Regasm来通过受信任的Windows程序代理执行代码。Regsvcs和Regasm是用于注册.NET组件对象模型(COM)程序集的Windows命令行程序,两者都是可能由Microsoft进行数字签名的二进制文件。
这两个程序都可以通过使用二进制文件中的属性来绕过应用程序控制,具有registration和unregistration属性的代码将被执行。
3.3.9 Regsvr32(T1218.010)
攻击者可能会利用Regsvr32.exe以代理执行恶意代码。Regsvr32.exe是一个命令行程序,用于在Windows系统上注册和取消注册对象链接和嵌入控件,包括动态链接库Dll。Regsvr32.exe二进制文件也可能由Microsoft签名。
恶意使用Regsvr32.exe可以避免触发安全工具,这些工具可能不会监视regsvr32的执行和加载的模块。Regsvr32.exe也可以用来注册一个COM对象,用于通过组件对象模型劫持来建立持久性。
3.3.10 Rundll32(T1218.011)
攻击者可能会利用rundll32.exe以代理执行恶意代码。Rundll32.exe也可用于执行控制面板项文件或JavaScript等脚本。攻击者也可能试图通过利用rundll32的方式来掩盖恶意代码的分析。攻击者可能会通过创建多个相同的导出函数名并将w或A附加到无害的函数名来掩盖恶意代码。此外,攻击者可能会使用伪装技术(例如更改DLL文件名、文件扩展名或函数名)来进一步隐藏恶意负载的执行。
3.3.11 Verclsid(T1218.012)
攻击者可能会利用verclsid.exe以代理执行恶意代码。Verclsid.exe被称为扩展CLSID验证主机,负责在Windows资源管理器或Windows Shell使用之前验证每个shell扩展。由verclsid执行的COM有效载荷.exe可能能够执行各种恶意操作,例如从远程服务器加载和执行COM scriptlet等。
3.3.12 Mavinject(T1218.013)
攻击者可能会利用mavinject.exe以代理执行恶意代码。mavinject.exe是Microsoft应用程序虚拟化注入器,这是一个Windows程序,可以将代码注入外部进程,作为Microsoft应用程序虚拟化的一部分。
攻击者可能会利用mavinject.exe将恶意Dll注入正在运行的进程(即动态链接库注入),允许任意代码执行,也可以通过命令行参数执行注入。
3.3.13 MMC(T1218.014)
攻击者可能会利用mmc.exe到代理执行恶意.msc文件。Microsoft管理控制台(MMC)是一个二进制文件,可以由Microsoft签名,并以多种方式在其GUI或命令提示符中使用。MMC可用于创建、打开和保存包含Microsoft创建的管理工具的自定义控制台,这些管理单元可用于本地或远程管理Windows系统。
3.3.14 缓解措施
ID | 缓解措施 | 描述 |
M1042 | 禁用或删除功能或程序 | 在给定的环境中禁用或删除不必要的本机二进制文件。 |
M1038 | 执行预防 | 使用应用程序控制来预防风险。 |
M1050 | 漏洞保护 | EMET攻击面减少ASR功能可用于阻止使用受信任二进制文件绕过应用程序控制的方法。 |
M1026 | 特权帐户管理 | 将特别易受攻击的二进制文件执行限制为需要使用它的特权帐户或组。 |
3.3.15 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控执行的命令和参数。 |
DS0022 | 文件 | 文件创建 | 监控文件活动(创建、下载、修改等),特别是对于环境中不典型的文件类型,可能表示攻击者活动。 |
DS0011 | 模块 | 模块负载 | 监控DLL/PE文件事件,特别是这些二进制文件的创建以及将Dll加载到进程中,查找无法识别或通常未加载到进程中的Dll。 |
DS0029 | 网络流量 | 网络连接创建 | 监控由不受信任的主机发送或接收的新构造的网络连接。 |
DS0009 | 进程 | OS API执行 | 监控api调用,这些API调用通过使用签名或受信任的二进制文件代理恶意内容的执行来绕过基于进程或签名的防御。 |
进程创建 | 监控可能用于代理执行恶意文件的已签名二进制文件的进程和命令行参数。以可疑方式使用的合法程序,如msiexec.exe从互联网上下载MSI文件,可能表示入侵。 | ||
DS0024 | Windows注册表 | Windows注册表项修改 | 监控对Windows注册表项或值所做的更改,这些更改可能伪造用于访问web应用程序或Internet服务的凭据材料。 |
3.4 执行签名的脚本代理(T1216)
攻击者可能使用受信任的脚本(通常使用证书签名)来执行恶意文件。已从Microsoft下载或在Windows安装上默认的几个Microsoft签名脚本可用于执行其他文件。攻击者可能会利用此行为来执行可能绕过系统上的应用程序控制和签名验证的恶意文件。
执行签名的脚本代理技术包含1项子技术,介绍如下:
3.4.1 PubPrn(T1216.001)
攻击者可以使用PubPrn代理执行恶意远程文件。PubPrn.vbs是将打印机发布到AD域服务的Visual Basic脚本。该脚本可能由Microsoft签名,通常通过Cscript以Windows命令Shell执行。攻击者可能会利用PubPrn来执行远程站点上托管的恶意有效负载。
3.4.2 缓解措施
ID | 缓解措施 | 描述 |
M1038 | 执行预防 | 禁用不必需的执行其他程序的签名脚本。 |
3.4.3 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控pubprn等脚本的执行命令和参数,可能用于代理执行恶意文件的vbs。 |
DS0009 | 进程 | 进程创建 | 监控脚本进程,例如可能用于代理执行恶意文件的脚本。 |
DS0012 | 脚本 | 脚本执行 | 监控可疑脚本执行。 |
3.5 模板注入(T1221)
攻击者可以在用户文档模板中创建或修改引用,以隐藏恶意代码或强制身份验证尝试。
注入到文档中的模板引用可能使恶意有效负载能够在加载文档时获取并执行。这些文件可以通过其他技术(如网络钓鱼或污染共享内容)传递,并且由于没有典型的指标(VBA宏、脚本等),可能会逃避静态检测。还可以通过注入SMB/HTTPS URL并触发身份验证尝试来启用强制身份验证。
3.5.1 缓解措施
ID | 缓解措施 | 描述 |
M1049 | 防病毒/反恶意软件 | 网络或主机入侵防御系统、防病毒软件可以用来防止文件获取或执行恶意有效载荷。 |
M1042 | 禁用或删除功能或程序 | 考虑禁用Microsoft Office宏或活动内容以防止在文档中执行恶意有效负载。 |
M1031 | 网络入侵防御 | 网络或主机入侵防御系统、防止文件获取或执行恶意有效载荷。 |
M1017 | 用户培训 | 培训用户识别可用于传递恶意文档的社交工程技术和鱼叉式网络钓鱼电子邮件,加强安全意识。 |
3.5.2 检测
ID | 数据源 | 数据组件 | 检测 |
DS0029 | 网络流量 | 网络连接创建 | 监控由不受信任的主机发送或接收的新创建的网络连接。 |
网络流量内容 | 监控和分析异常流量模式和数据包内容。检测异常进程执行和与流量模式相关的命令行参数。 | ||
DS0009 | 进程 | 进程创建 | 分析进程行为以确定Office应用程序是否正在执行异常操作,例如打开网络连接、读取文件、生成异常子进程等。 |
3.6 使用流量(T1205)
攻击者可以使用流量隐藏开放端口或其他恶意功能,例如打开封闭端口或执行恶意代码,在打开一个端口之前发送一系列恶意数据包,攻击者可以使用该端口进行命令和控制。
攻击者也可能与已经打开的端口通信,但在该端口上侦听的服务只会响应命令或触发其他恶意功能。
在网络设备上,攻击者可以使用精心设计的数据包来为设备提供的标准服务启用网络设备身份验证,还可以用于打开诸如telnet的封闭服务端口,或者用于触发设备上的恶意软件能力。
攻击者也可以使用LAN唤醒功能来打开已关闭电源的系统。LAN唤醒是一种硬件功能,它允许断电系统通过向其发送数据包来打开或唤醒它。一旦系统通电,它可能成为横向移动的目标。
利用流量技术包含2项子技术,介绍如下:
3.6.1 端口试探(T1205.001)
攻击者可以使用端口试探来隐藏打开端口。为了启用端口,攻击者向预定义的关闭端口程序发送一系列尝试连接,程序完成后,打开端口通常由基于主机的防火墙完成,但也可以通过自定义软件实现。
端口试探技术既用于动态打开侦听端口,也用于启动不同系统到侦听服务器的连接。
3.6.2 Socket过滤器(T1205.002)
攻击者可以将过滤器连接到网络套接字,可监控并激活后门。通过提升权限,攻击者可以使用libpcap库等功能打开套接字并安装过滤器,以确定某些类型的数据是否可以通过套接字。过滤器可能适用于通过指定的网络接口的所有流量,当网络接口接收到匹配过滤条件的数据包时,可以在主机上触发操作,例如激活反向shell。
3.6.3 缓解措施
ID | 缓解措施 | 描述 |
M1042 | 禁用或删除功能或程序 | 禁用不必要的功能或程序。 |
M1037 | 过滤网络流量 | 可通过防火墙过滤网络流量。 |
3.6.4 检测
ID | 数据源 | 数据组件 | 检测 |
DS0029 | 网络流量 | 网络连接创建 | 监控不受信任的主机发送或接收的新的网络连接。 |
网络流量内容 | 监控和分析网络数据包内容。 | ||
网络流量 | 监控和分析与不遵循标准协议的网络通信流。 | ||
DS0009 | 进程 | 进程创建 | 使用原始套接字识别正在运行的进程。 |
3.7 利用受信的开发工具执行(T1127)
攻击者可以利用受信任的开发人员程序来执行恶意有效负载。有许多用于软件开发相关任务的程序,可用于以各种形式执行代码,以协助开发,调试和逆向工程。这些程序通常可能使用合法证书进行签名,这些证书允许它们在系统上执行,并通过绕过应用程序控制执行恶意代码。
利用受信的开发工具执行技术包含1项子技术,介绍如下:
3.7.1 MSBuild(T1127.001)
攻击者可以使用MSBuild通过受信任的Windows程序代理执行代码。MSBuild.exe是Visual Studio使用的软件构建平台。它处理XML格式的项目文件,这些文件定义了加载和构建各种平台和配置的要求。
MSBuild.exe是一个签名的Microsoft二进制文件,因此当它以这种方式使用时,它可以执行任意代码并绕过应用程序控制防御。
3.7.2 缓解措施
ID | 缓解措施 | 描述 |
M1042 | 禁用或删除功能或程序 | 禁用或删除不必需的功能或程序。 |
M1038 | 执行预防 | 应阻止或限制某些不需要的开发人员程序。 |
3.7.3 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控调用程序之前和之后使用的已执行命令和参数。 |
DS0009 | 进程 | 进程创建 | 监控异常的进程创建。 |
四、总结
本期主要介绍了防御规避战术(六)及技术/子技术原理,下期将给大家介绍防御规避战术(七)涉及的技术原理。敬请关注。