T1037 |
引导或登录初始化脚本 |
攻击者可以使用在引导或登录初始化时自动执行的脚本来建立持久性。初始化脚本可以用于执行管理功能,这些功能通常可以执行其它程序或向内部日志服务器发送信息。这些脚本会根据操作系统以及本地应用程序还是远程应用程序而有所不同。 攻击者可以使用这些脚本来维护单个系统上的持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。 由于某些引导或登录初始化脚本使用更高的特权运行,因此攻击者也可以升级其特权。 |
T1037.002 |
引导或登录初始化脚本:登录脚本(Mac) |
攻击者可以使用在登录初始化时自动执行的macOS登录脚本来建立持久性。macOS允许在特定用户登录到系统时执行登录脚本(称为登录挂钩)。登录钩告诉用户在登录时Mac OS X执行某个脚本,但是与启动项不同,登录钩以提升的root用户身份执行。 攻击者可以使用这些登录挂钩来维护单个系统上的持久性。访问登录钩子脚本可能允许攻击者插入额外的恶意代码。但是,一次只能有一个登录挂钩,并且根据登录钩的访问配置,可能需要使用本地凭据或管理员帐户。 |
T1037.005 |
引导或登录初始化脚本:启动项 |
攻击者可以使用在启动初始化时自动执行的启动项来建立持久性。启动项在引导过程的最后阶段执行,包含shell脚本或其它可执行文件,以及系统用来确定所有启动项的执行顺序的配置信息。 从技术上讲,这是一种过时的技术(被Launch Daemon所取代),因此适当的文件夹/Library/StartupItems不能保证默认存在于系统中,但是在macOS Sierra上似乎默认存在。 启动项是一个目录,其可执行文件和配置属性列表(plist)位于顶层目录中,StartupParameters.plist。 攻击者可以在StartupItems目录中创建适当的文件夹/文件来注册自己的持久性机制。此外,由于StartupItems在macOS的启动阶段运行,因此它们将以提升的root用户身份运行。 |
T1037.003 |
引导或登录初始化脚本:网络登录脚本 |
攻击者可以使用在登录初始化时自动执行的网络登录脚本来建立持久性。可以使用Active Directory或组策略对象来分配网络登录脚本。这些登录脚本以分配给它们所述用户的特权运行。根据网络中的系统,初始化其中一个脚本可以应用于多个系统,甚至可能应用于所有系统。 攻击者可以使用这些脚本来维护网络上的持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。 |
T1037.004 |
引导或登录初始化脚本:Rc.common |
攻击者可以使用在启动初始化时自动执行的rc.common来建立持久性。在引导过程中,macOS执行source /etc/rc.common,这是一个包含各种实用程序功能的shell脚本,该文件还定义了用于处理命令行参数和收集系统设置的例程,因此建议启动项脚本中包含这些例程。在macOS和OS X中,这个机制现在已被弃用,取而代之的是Launch Agent和Launch Daemon,但目前仍在使用。 攻击者可以使用rc.common文件作为隐藏持久性代码的一种方式,该代码在每次重新启动时将以root用户身份执行。 |
T1037.001 |
引导或登录初始化脚本:登录脚本(Windows) |
攻击者可以使用在登录初始化时自动执行的Windows登录脚本来建立持久性。Windows允许在特定用户或用户组登录系统时运行登录脚本,这是通过将脚本的路径添加到HKCU\Environment\UserInitMprLogonScript注册表项来完成的。 攻击者可以使用这些脚本来维护单个系统上的持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。 |
T1543 |
创建或更改系统进程 |
攻击者可通过创建或修改具有系统权限的进程以执行恶意程序实现持久化。当操作系统在启动时,启动系统功能的进程。在Windows或Linux系统中,这些系统进程一般由服务启动。在mac操作系统则由启动的守护进程(类似系统启动时启动的服务)或代理(用户登陆时启动的服务)来完成系统的初始化或加载特定的用户参数。 攻击者可通过创建新服务、守护进程、代理的方式配置重复或定时执行的方式建立持久化。也可通过修改已有的服务、守护进程、代理达到持久化目的。 服务、守护进程、代理的创建仅需要管理员权限,但可执行具有root/SYSTEM权限进程。攻击者可以利用此功能创建或修改系统进程,以提升权限。 |
T1543.003 |
创建或更改系统进程:Windows服务 |
攻击者通过创建或修改Windows服务的方式重复执行可疑程序以达到持久化目的。当Windows启动时,以后台形式启动的程序或者应用称为服务。Windows服务的配置信息,包括服务执行的文件路径及保存在Windows注册表中的程序命令。服务的配置可通过sc.exe或reg.exe工具进行修改。 攻击者可能会利用系统工具修改注册表或调用Windows API创建一个新服务或者修改已有的服务。通过该方式,攻击者可创建在系统启动时随之启动的服务,进而达到持久化。 为增加被检测的难度,攻击者还可以通过伪装操作系统或可信的服务名称,甚至修改已有的服务。修改已有服务可能会中断其功能,或者启用已禁用或不常用的服务。 服务可以在拥有管理员权限的情况下创建,但可运行具有系统权限的进程。所以攻击者也可能通过某个服务进行从管理员到系统的权限提升。攻击者也可能直接启动服务。 |
T1543.004 |
创建或更改系统进程:启动守护进程 |
攻击者通过创建或修改守护进程的方式重复执行恶意程序实现持久化。苹果的开发者文档,当启动macOS和OS X时会通过守护进程完成系统初始化,守护进程都会加载一些参数,这些参数是从属性列表文件中获取(/System/Library/LaunchDaemons, /Library/LaunchDaemons)。这些属性列表配置信息指向的是可执行文件的路径,将被守护进程启动。 攻击者可能会安装新的启动守护程序,该启动守护程序可以配置为在启动时执行,方法是使用launchd或launchctl将plist加载到适当的目录中。可以通过使用相关操作系统或良性软件名称来伪装守护程序名称。启动守护程序可以使用管理员特权创建(是在root特权下执行),因此攻击者还可以使用服务将特权从管理员升级到root。 plist文件的权限必须是root:wheel,但是它指向的脚本或程序没有这样的要求。因此,不良的配置可能允许攻击者修改当前的启动守护程序的可执行文件并获得持久性或特权升级。 |
T1543.001 |
创建或更改系统进程:启动代理 |
攻击者通过创建或修改代理的方式重复执行恶意程序实现持久化。苹果的开发者文档,每个用户的桌面进程启动、用户登录时都会加载一些参数,这些参数是从属性列表文件中获取(/System/Library/LaunchAgents, /Library/LaunchAgents, $HOME/Library/LaunchAgents)。这些代理所加载的配置文件指向的可执行文件都会被创建为进程。 攻击者可能会安装新的启动代理,该启动代理可以配置为在登录时执行,方法是使用launchd或launchctl将plist加载到适当的目录中。可以使用相关操作系统或良性软件中的名称来伪装代理名称。启动代理是使用用户级特权创建,并在他们登录时以用户特权执行。可以将它们设置为在特定用户登录时(在特定用户的目录结构中)或任何用户登录时(需要管理员权限)执行。 |
T1543.002 |
创建或更改系统进程:系统服务 |
系统服务可用于在Linux系统上建立持久性。systemd服务管理器通常用于管理后台守护程序进程(也称为服务)和其它系统资源。Systemd是许多Linux发行版中的默认初始化(init)系统,从Debian 8,Ubuntu 15.04,CentOS 7,RHEL 7,Fedora 15开始,它取代了包括SysVinit和Upstart的旧式初始化系统,同时保持了向后兼容前述的初始化系统。 Systemd利用称为服务的配置文件来控制服务的启动方式和条件。默认情况下,这些文件存储在/etc/systemd/system和/usr/lib/systemd/system目录中,文件扩展名为.service。每个服务文件可能包含许多可执行系统命令的指令。 ExecStart、ExecStartPre和ExecStartPost指令涵盖了当通过“systemctl”手动启动服务时或在系统启动时(若将服务设置为自动启动)执行的命令。 ExecReload指令涵盖了服务重新启动的时间。 ExecStop和ExecStopPost指令涵盖何时停止服务或由“ systemctl”手动停止服务。 攻击者已使用systemd功能通过创建和/或修改服务文件来建立对受害系统的持久访问,这些服务文件使systemd以周期性间隔(例如系统启动)执行恶意命令。 攻击者通常需要root特权才能在根目录中创建/修改服务文件,如/etc/systemd/system,而/usr/lib/systemd/system低特权用户可以在目录中创建/修改服务文件,~/.config/systemd/user/以实现用户级的持久性。 |
T1133 |
外部远程服务 |
诸如 vpn、Citrix 和其它访问机制等远程服务允许用户从外部连接到企业内部的网络资源。 通常由远程服务网关来管理这些服务的连接和凭据验证。 Windows 远程管理 (Windows Remote Management) 等服务也可以在外部使用。 攻击者可以使用远程服务来获取对网络的访问权并维持访问权限。 使用该服务通常需要有效帐户的访问权,可以通过凭证嫁接 (Pharming) 获取或在攻击企业网络后从用户处获得凭证。 访问远程服务可以用作冗余访问的一部分。 也可以通过不需要身份验证的公开服务获得访问权限。在容器化环境中,这可能包括暴露的 Docker API、Kubernetes API 服务器、kubelet 或 Web 应用程序,例如 Kubernetes 仪表板。 |
T1547 |
滥用开机或登录自启动程序 |
操作系统可能在系统启动或账户登录时自动允许程序运行的机制,这些机制可能包括自动执行在指定目录中或Windows注册表之类的存储配置信息的存储库引用的程序。攻击者可通过修改或扩展内核的功能来实现相同的目标。 由于某些开机或登录自动启动程序会以高权限运行,因此攻击者可能利用这些特权程序提权。 |
T1547.014 |
Active Setup |
攻击者可能通过在本地计算机的Active Setup中添加注册表项来实现持久化。Active Setup是一种Windows机制,用于在用户登录时执行程序。存储在注册表项中的值将在用户登录计算机后执行。这些程序将在用户的上下文中执行,并具有该账户关联的权限级别。攻击者可能会滥用Active Setup,通过在HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\下创建一个键,并为StubPath设置一个恶意值。这个值将作为用户登录计算机时执行的程序。攻击者可以滥用这些组件来执行恶意软件,如远程访问工具,以通过系统重启保持持久化。攻击者还可能使用伪装技术使注册表项看起来与合法程序相关联。 |
T1547.012 |
滥用开机或登录自启动程序:打印处理器 |
打印处理器是在启动过程中由打印后台处理程序服务spoolsv.exe加载的DLL文件。攻击者可能会通过添加在启动时加载恶意DLL的打印处理器来滥用打印后台处理程序服务。可以通过启用了SeLoadDriverPrivilege的帐户通过AddPrintProcessor API调用来安装打印处理器。可以通过添加HKLM\SYSTEM[CurrentControlSet or ControlSet001]\Control\Print\Environments[Windows 架构: 如, Windows x64]\Print Processors[用户定义]\Driver 指向DLL的驱动程序注册表项将打印处理器注册到打印后台处理程序服务。为了正确安装打印处理器,它必须位于可通过GetPrintProcessorDirectory API调用找到系统打印处理器目录。在安装了打印处理器之后,必须重新启动在启动过程中启动的打印后台处理程序服务,以使其运行。后台打印程序服务在系统级别的权限下运行,因此,攻击者安装的打印处理器可能会在提升的特权下运行。 |
T1547.010 |
滥用开机或登录自启动程序:端口监控器 |
可以通过AddMonitor API调用来设置端口监测器,以设置要在启动时加载的DLL。该DLL可以位于C:\Windows\System32中,并且在启动时由后台打印程序服务spoolsv.exe加载。 spoolsv.exe进程也将在系统级别权限下运行。,或者,如果权限允许将该DLL的标准路径名写入HKLM\SYSTEM\CurrentControlSet\ Control\Print\Monitors,则可以加载任意DLL。 |
T1547.009 |
滥用开机或登录自启动程序:快捷方式修改 |
快捷方式或符号链接是引用其它文件或程序的方式,这些文件或程序在系统启动过程中单击或执行快捷方式时将被打开或执行。 |
T1547.005 |
滥用开机或登录自启动程序:安全支撑程序 |
Windows security support providers(SSP) DLL在系统启动时被加载到本地安全机构(LSA)进程中。一旦加载到LSA中,SSP DLL便可以访问Windows中存储的加密和明文密码,例如任何已登录用户的域密码或智能卡PIN。SSP配置存储在两个注册表中:HKLM \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ Security Packages和HKLM \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ OSConfig \ Security Packages。攻击者可能会修改这些注册表项以添加新的SSP,这些SSP将在系统下次启动时或在调用AddSecurityPackage Windows API函数时加载。 |
T1547.003 |
滥用开机或登录自启动程序:时间同步程序 |
Windows时间服务(W32Time)启用跨域和域内的时间同步,时间同步程序以加载DLL的形式实现,它们在HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ W32Time \ TimeProviders \的子项中被注册。在服务启动管理器的指导下,时间同步程序在系统启动时和更改参数时加载并启动。 攻击者可能滥用此体系结构来建立持久性,特别是通过将恶意的DLL文件加载到时间同步程序中,这需要管理员特权,尽管程序执行在本地服务账户的上下文中运行的。 |
T1547.004 |
滥用开机或登录自启动程序:Winlogon 辅助程序加载DLLs |
Winlogon.exe是Windows组件,负责登录/注销时的操作以及由Ctrl – Alt – Delete的安全关注序列(SAS),HKLM\Software[\ Wow6432Node]\Microsoft\Windows NT\CurrentVersion\Winlogon\和HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\中的注册表项用于管理支持Winlogon的其它帮助程序和功能。对这些注册表项的恶意修改可能导致Winlogon加载并执行恶意DLL和/或可执行文件。 例如:Winlogon\Shell 指向explorer.exe,即用户登录时执行的系统shell。Winlogon\Userinit指向userinit.exe,即用户登录时执行的用户初始化程序。Winlogon\Notify指向处理Winlogon事件的通知包DLLs. 攻击者可以利用这些功能重复执行恶意代码并建立持久性。 |
T1547.015 |
Login Items |
攻击者可能会添加登录项,以便在用户登录时执行,从而获得持久性或提升权限。登录项是在用户登录时自动启动的应用程序、文档、文件夹或服务器连接。登录项可以通过共享文件列表或服务管理框架添加。使用服务管理框架安装的登录项利用launchd,在系统偏好设置中不可见,只能由创建它们的应用程序删除。使用共享文件列表创建的登录项在系统偏好设置中可见,可以在启动时隐藏应用程序,并通过LaunchServices而不是launchd执行,以打开应用程序、文档或URL而不使用Finder。攻击者可以利用AppleScript和原生API调用来创建登录项以生成恶意可执行文件。在macOS 10.5之前的版本中,攻击者可以使用AppleScript向“System Events”进程发送Apple事件来添加登录项。攻击者可以使用诸如“tell application “System Events” to make login item at end with properties /path/to/executable”之类的命令。此命令将恶意可执行文件的路径添加到位于~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm的登录项文件列表中。攻击者还可以使用登录项来启动可用于远程控制受害者系统或作为提升权限的手段的可执行文件,通过提示用户输入凭据。 |
T1547.001 |
滥用开机或登录自启动程序:注册表运行项/启动文件夹 |
在注册表的RUN Keys或启动文件夹中添加一个条目可以使引用的程序在用户登录时执行。这些程序将在用户的上下文中执行,并将具有与该账户关联的权限等级。 将程序放在启动文件夹中还会使该程序在用户登录时执行。有一个用于单个账户的启动文件夹位置,以及一个系统范围的启动文件,无论使用哪个用户账户登录,都将启动。当前用户启动文件夹路径:C:\Users[Username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,所有用户的启动文件夹路径:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp |
T1547.006 |
滥用开机或登录自启动程序:内核模块和扩展 |
可加载内核模块(LKM)是按需加载和卸载内核中的代码段。LKM扩展了内核的功能,而无需重新引导系统。例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。恶意使用时,LKM可以是一种以最高操作系统特权(Ring 0)运行的内核模式Rootkit。基于LKM的rootkit的常见功能包括:隐藏自身,选择性隐藏文件,进程和网络活动以及日志篡改,提供经过身份验证的后门并允许对非特权用户的root访问。 内核扩展(也称为kext)用于macOS,以将功能加载到类似于Linux的LKM的系统上。它们是通过kextload和kextunload命令加载和卸载的。 攻击者可以使用LKM和Kext秘密地保留在系统上并提升特权。 |
T1547.002 |
滥用开机或登录自启动程序:身份认证程序包 |
Windwos身份验证程序包DLL由系统启动时的本地安全机构(LSA)进程加载。它们为操作系统提供了多种登录过程和多种安全协议的支持。 攻击者可以将LSA身份验证程序包提供的自动启动机制用于持久性,方法是在Windows注册表位置中将对二进制文件的引用放置为HKLM\SYSTEM\CurrentControlSet\Control\Lsa\键值”Authentication Packages”=。加载身份验证包后,二进制文件将由系统执行。 |
T1547.013 |
XDG Autostart Entries |
攻击者可能会修改XDG自动启动项,以便在系统启动期间执行程序或命令。符合XDG标准的Linux桌面环境实现了XDG自动启动项的功能。这些项将允许应用程序在用户登录后桌面环境启动期间自动启动。默认情况下,XDG自动启动项存储在/etc/xdg/autostart或~/.config/autostart目录中,文件扩展名为.desktop。在XDG自动启动项文件中,Type键指定该项是应用程序(类型1)、链接(类型2)还是目录(类型3)。Name键表示创建者分配的任意名称,Exec键表示要执行的应用程序和命令行参数。攻击者可能会使用XDG自动启动项在桌面环境启动期间执行恶意命令和有效负载,如远程访问工具,以维持持久性。包含在XDG自动启动项中的命令将在用户登录后以当前登录用户的上下文执行。攻击者还可能使用伪装技术使XDG自动启动项看起来与合法程序相关联。 |
T1547.007 |
滥用开机或登录自启动程序:自启动的应用程序 |
从Mac OS X 10.7(Lion)开始,用户可以指定重新启动后用户登录其计算机时要重新打开的应用程序。尽管通常情况下用户是通过图形界面来完成操作,但是在~/Library/Preferences/com.apple.loginwindow.plist和~/Library/Preferences/ByHost/com.apple.loginwindow.* .plist中都有包含此信息的列表文件(plist)。 攻击者可以直接修改这些文件,目的是指向其恶意可执行文件,以在用户每次重启计算机时获得持久性。 |
T1547.008 |
滥用开机或登录自启动程序:LSASS驱动程序 |
攻击者可能会修改或添加LSASS驱动程序,以在受感染的系统上获得持久性。 Windows安全子系统是一组组件,它们管理和实施计算机或域的安全策略。本地安全机构(LSA)是负责本地安全策略和用户身份验证的主要组件。 LSA包含与其它各种安全功能关联的多个动态链接库(DLLs),所有这些功能均在LSA子系统服务(LSASS)lsass.exe进程的上下文中运行。 攻击者可能以LSASS驱动程序为目标获得持久性。通过替换或添加非法驱动程序(例如,劫持程序),攻击者可以使用LSA操作来连续执行恶意有效负载。 |
T1137 |
Office应用启动程序 |
攻击者可能利用基于Microsoft Office的应用程序来维持持久性。Microsoft Office是企业网络中基于Windows操作系统上的一个相当普遍的应用,当基于Office的应用启动时,Office有多种机制来实现持久化,还可以使用Office宏和加载项来实现持久化。 早期Outlook中可以发现多种被用来实现持久化的功能,例如:Outlook规则、窗体和主页。这些持久化机制可以在Outlook或Office 365 中使用。 |
T1137.006 |
Office应用启动程序:加载项 |
攻击者可能利用Microsoft Office加载项在一个被侵害的系统中获得持久性。Office加载项可以用于向Office程序中添加功能,各种不同的Office产品可以用不同类型的加载项,包括Word/Excel的加载项(WLL/XLL)、VBA的加载项、Office组件对象模型(COM)加载项、自动化加载项、VBA编辑器(VBE)、Visual Studio Tools for Office (VSTO)加载项和Outlook加载项。 由于加载项可以被设置为在Office应用程序启动时执行代码,因此加载项可用于获得持久性。 |
T1137.005 |
Office应用启动程序:Outlook 规则 |
攻击者可能利用Microsoft Outlook 规则在一个被侵害的系统中获得持久性。Outlook规则允许用户自定义自动化行为以管理邮件信息,例如:如果正常规则包含来自特定发件人的特定单词,则该规则将自动将该电子邮件移动到Outlook的特定文件夹下。可以创建恶意的Outlook规则,以便攻击者发送特制邮件给用户时触发代码执行。 一旦恶意规则被添加到用户的邮件中,将在启动Outlook时加载该恶意规则,当攻击者发送特制的电子邮件时,就会执行恶意规则。 |
T1137.001 |
Office应用启动程序:Office模板宏 |
攻击者可能在一个被入侵的系统中利用Microsoft Office模板实现持久化,Microsoft Office包含的模板是常见Office应用程序的一部分,且用于自定义样式。在每次启动应用程序时,都会使用该应用程序中的基本模板。 可以将Office的Visual Basic for Applications(VBA)宏插入到基本模板中,并在相应的Office应用程序启动时执行宏代码以获取持久性。已经发现并发布了Word和Excel的示例,在默认情况下,Word中会创建一个Normal.dotm模板,该模板可被修改为包含恶意宏代码的模板。Excel默认情况下不会创建模板,但可以添加一个自动加载的模板文件,共享模板可以被存储和提取。 Word中Normal.dotm的位置: C:\Users\\AppData\Roaming\Microsoft\Templates\Normal.dotm。 Excel中Personal.xlsb的位置: C:\Users\\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB。 攻击者也可以通过劫持应用程序的搜索顺序将基本模板的位置更改为攻击者指定的位置,例如:Word 2016将首先在C:\Program Files (x86)\Microsoft Office\root\Office16\下查找Normal.dotm,或通过修改GlobalDotName注册表项来查找Normal.dotm。通过修改GlobalDotName注册表项,攻击者可以指定一个任意位置、文件名和文件扩展名,以用于在应用程序启动时加载。利用GlobalDotName,攻击者可能首先需要将模板注册为受信任的文件并将其放置在一个受信任的位置。 攻击者可能需要使宏不受限制的执行,具体取决于使用宏的系统或企业安全策略。 |
T1137.003 |
Office应用启动程序:Outlook 表单 |
攻击者可能利用Microsoft Outlook表单在一个被侵害的系统中获得持久性。Outlook表单经常用于Outlook邮件中的演示文稿和功能的模板,可以创建自定义Outlook表单,当攻击者使用相同自定义Outlook表单发送特制电子邮件时,该表单将执行代码。 一旦恶意的表单添加到用户的邮件中,将会在Outlook启用时被加载,当攻击者给用户发送特制的电子邮件时,将执行恶意代码。 |
T1137.004 |
Office应用启动程序:Outlook 主页 |
攻击者可能利用Microsoft Outlook主页功能在一个被侵害的系统中获得持久性。Outlook主页是一种被用于自定义Outlook文件夹外观的功能,这个功能允许在打开一个文件夹的时候加载并显示内部或外部的URL,可以先制作一个恶意的HTML页面,该页面将在Outlook主页加载后执行代码。 一旦恶意主页被添加到用户的邮箱中,将在启动Outlook时加载该恶意主页,当Outlook文件夹被加载或重新加载时,将执行恶意主页。 |
T1137.002 |
Office应用启动程序:Office 测试 |
攻击者可能会利用Microsoft Office的“Office Test” 注册表项在受侵害的系统上获得持久性。存在Office 测试注册表项位置,该位置允许用户指定每次Office应用程序启动时执行的任意DLL文件,在开发Office应用程序时,该注册表项被Microsoft用于加载DLL文件以进行测试和调试,在Office安装过程中,默认情况下不会创建该注册表项。 Office测试功能存在用户和全局注册表项: HKEY_CURRENT_USER\Software\Microsoft\Office test\Special\Perf HKEY_LOCAL_MACHINE\Software\Microsoft\Office test\Special\Perf。 攻击者可以添加一个注册表项并指定一个恶意DLL,以便该恶意DLL在每次Office应用程序(如Word和Excel)启动时执行。 |
T1053 |
计划任务/工作 |
攻击者可能滥用任务计划功能来促进恶意代码的初始或重复执行。所有主要操作系统中都存在实用程序,用于安排在指定日期和时间执行的程序或脚本。也可以在远程系统上调度任务,只要满足适当的身份验证(例如:Windows环境中的RPC和文件和打印机共享)。在远程系统上调度任务通常需要成为远程系统上的管理员或特权组的成员。 攻击者可以在系统启动时使用任务调度来执行程序,也可以在计划的基础上执行程序以实现持久性。这些机制也可能被滥用,以在指定帐户的上下文中运行进程(例如具有更高权限/特权的帐户)。 |
T1053.005 |
计划任务/工作:计划任务 |
攻击者可能滥用Windows任务调度程序来执行任务调度,以初始或重复执行恶意代码。在Windows中有多种访问任务计划程序的方法。schtasks可以直接在命令行上运行,也可以通过控制面板的管理员工具部分中的GUI打开任务调度程序。在某些情况下,攻击者使用.net包装器来执行Windows任务调度程序,或者攻击者使用Windows netapi32库来创建计划任务。 废弃的at工具也可能被攻击者滥用(例如:at (Windows)),尽管at.exe不能访问由schtasks或控制面板创建的任务。 攻击者可以在系统启动时使用Windows任务调度程序执行程序,或者在计划的基础上执行程序以实现持久性。Windows任务调度程序也可以作为横向移动的一部分被滥用来进行远程执行,或者在指定帐户(例如系统)的上下文中运行进程。 |
T1053.007 |
Container Orchestration Job |
攻击者可能会滥用容器编排工具(如Kubernetes)提供的任务调度功能,以调度配置为执行恶意代码的容器的部署。容器编排作业类似于Linux系统上的cron作业,在特定日期和时间运行这些自动化任务。这种类型的部署还可以配置为随着时间的推移维持一定数量的容器,从而自动在集群中维持持久性。在Kubernetes中,可以使用CronJob来调度运行一个或多个容器以执行特定任务的作业。攻击者可以利用CronJob来调度部署在各个节点内执行恶意代码的作业。 |
T1053.003 |
计划任务/工作:Cron |
攻击者可能滥用cron实用程序来执行任务调度,以初始或重复执行恶意代码。cron实用程序是用于类似Unix的操作系统的基于时间的作业调度程序。crontab文件包含要运行的cron条目的时间表以及指定的执行时间。任何crontab文件都存储在特定于操作系统的文件路径中。 攻击者可能会在Linux或Unix环境中使用cron在系统启动时执行程序,或者定期执行程序以实现持久性。cron也可能被滥用为横向移动的一部分来执行远程执行,或在指定帐户的上下文中运行流程。 |
T1053.006 |
计划任务/工作:Systemd 计时器 |
攻击者可能滥用Systemd 计时器来执行任务调度,以初始或重复执行恶意代码。Systemd计时器是控制服务的文件扩展名为.timer的单元文件。计时器可以设置为在日历事件上运行,也可以设置为在相对于起点的时间跨度之后运行。在Linux环境中,它们可以作为Cron的替代品。 每个.timer文件必须有一个对应的同名的.service文件,例如example.timer和example.service,.service文件是由Systemd系统和Service manager管理的Systemd服务单元文件。特权定时器写入/etc/systemd/system/和/usr/lib/systemd/system,用户级别写入~/.config/systemd/user/。 攻击者可能使用systemd计时器在系统启动时或在计划的基础上执行恶意代码以实现持久性。使用特权路径安装的计时器可以用来维护根级别的持久性。攻击者也可以安装用户级别的计时器来实现用户级别的持久性。 |
T1053.002 |
计划任务/工作:At (Windows) |
攻击者可能滥用at.exe实用程序来执行任务调度,以初始或重复执行恶意代码。at实用程序作为Windows中的可执行程序,用于在指定的时间和日期调度任务。使用at要求Task Scheduler服务正在运行,并且该用户必须作为本地Administrators组的成员登录。 在Windows环境中,攻击者可以使用at.exe在系统启动时或在计划的基础上执行程序以实现持久性。at也可以作为横向移动的一部分被滥用来进行远程执行,或者在指定帐户(例如系统)的上下文中运行进程。 注意:at.exe命令行工具在Windows的当前版本中已被弃用,取而代之的是schtasks。 |
T1176 |
浏览器扩展程序 |
攻击者可能滥用Internet浏览器扩展程序来建立对受害者系统的持久化访问。浏览器扩展程序或插件是小程序,可以添加功能并自定义浏览器的各个方面,这些扩展程序或插件可以通过浏览器的应用程序商店安装,并且通常具有浏览器可以访问的所有内容的访问权限。 恶意扩展程序可以通过伪装成合法扩展程序在恶意应用商店中下载并安装到浏览器中,也可以通过社工或由已经攻入系统的攻击者进行安装。浏览器应用商店的安全性可能受限,因此恶意扩展程序绕过自动扫描程序可能并不困难。一旦安装了该恶意扩展程序,该恶意程序可以在后台浏览网页,并窃取用户输入到浏览器中的所有信息(包括凭据),并可以作为RAT病毒的安装程序以实现持久化。 有的僵尸网络通过恶意Chrome扩展程序使用持久化后门的例子,也有类似的扩展程序用于执行命令和控制。 |
T1205 |
端口试探 |
攻击者可能使用流量信令来隐藏开放端口或其他用于持久性或C&C的恶意功能。流量信令涉及必须使用能够触发系统特殊响应的魔法值(magic value)或序列值,例如打开封闭端口或执行恶意任务。 在打开端口之前,发送一系列具有某些特征的数据包,序列包发送完成后,可以通过基于主机的防火墙或定制软件来打开端口。攻击者可以与已经打开的端口进行通信,但是侦听该端口的服务仅在传递了适当的魔法值后才响应命令或触发其他恶意功能。 |
T1205.002 |
Socket Filters |
攻击者可能会在网络套接字上附加过滤器,以监控并激活用于持久化或命令与控制的后门。具有提升权限的攻击者可以使用诸如libpcap库之类的功能来打开套接字并安装过滤器,以允许或禁止某些类型的数据通过套接字。过滤器可能适用于通过指定网络接口(如果未指定,则适用于每个接口)的所有流量。当网络接口接收到与过滤器标准匹配的数据包时,可以在主机上触发额外的操作,例如激活反向shell。为了建立连接,攻击者会向目标主机发送一个与安装的过滤器标准匹配的特制数据包。攻击者使用这些套接字过滤器来触发植入物的安装、进行ping回显以及调用命令shell。与这些套接字过滤器的通信也可以与协议隧道结合使用。过滤器可以安装在任何安装了libpcap的类Unix平台上,或者在使用Winpcap的Windows主机上。攻击者可以使用libpcap和pcap_setfilter,或者使用标准库函数setsockopt和SO_ATTACH_FILTER选项。由于套接字连接在接收到数据包之前处于非活动状态,因此由于主机上缺乏活动、CPU开销低以及对原始套接字使用的可见性有限,这种行为可能难以检测。 |
T1205.001 |
端口试探:端口敲门 |
攻击者可以使用端口敲门技术来隐藏用于持久化或C&C的开放端口。为了启用端口,攻击者将访问一系列预先设定好的顺序端口,在完成顺序端口访问后,基于主机的防火墙将会打开对应端口。 可以通过不同的方法来分析信号包以触发通信。最初由Cd00r实现的是使用libpcap库来嗅探相关数据包;另一种方法是利用原始套接字,该套接字使恶意软件能够使用已打开供其他程序使用的端口。 |
T1525 |
注入容器镜像 |
攻击者可能在云容器中注入恶意代理以建立持久性。亚马逊web服务(AWS)使用亚马逊镜像(AMI),谷歌云平台(GCP)镜像和Azure云镜像,以及受欢迎的容器如Docker,也可以被植入后门。根据基础架构的配置方式,如果基础工具要求总是使用最新的镜像,则可以利用这个实现持久性访问。 目前已经有为了方便在云容器中植入后门的工具,如果攻击者有权访问一个受感染的AWS实例,并有权限列出可用的容器镜像,攻击者将植入后门,如:Web Shell。攻击者还可以在云上部署一个无意中使用的Docker镜像,这在某些加密挖矿僵尸网络案例中已经有过报道。 |
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,从而建立对系统的持久性,且难以被检测。 |
T1653 |
电源设置 |
攻击者可能会削弱系统休眠、重启或关机的能力,以扩大对受感染机器的访问。当计算机进入休眠状态时,部分或全部软件和硬件可能会停止运行,从而破坏恶意活动。 攻击者可能会滥用系统实用程序和配置设置来阻止机器进入可终止恶意活动的状态(如待机),从而保持访问权限。 例如,powercfg控制 Windows 系统上所有可配置的电源系统设置,并可能被滥用来阻止受感染的主机锁定或关闭。攻击者还可以延长系统锁定屏幕超时设置。其他相关设置(如磁盘和休眠超时)也可以被类似地滥用,以使受感染的机器即使在没有用户活动的情况下也能继续运行。 攻击者意识到某些恶意软件无法在系统重启后存活,因此可能会完全删除用于调用系统关闭或重启的文件。 |
T1554 |
入侵客户端二进制软件 |
攻击者可以修改客户端软件二进制以建立对系统的持久化访问。客户端软件二进制使用户可以访问服务器提供的服务,常见的客户端软件类型有SSH客户端、FTP客户端、电子邮件客户端和web浏览器。 攻击者可以通过对客户端软件二进制文件进行修改,以便在该客户端软件运行时执行恶意任务。例如:攻击者可能会复制客户端软件的源码,安装后门,编译程序,甚至用带有后门程序的二进制文件去替换合法程序的二进制文件(或支持文件),由于这些程序可以由用户例行执行,因此攻击者可以对其进行持久化访问受害主机。 |
T1098 |
账户操纵 |
账户操纵包括对已失陷账户保留对攻击者访问权限的任何操作,例如修改凭据或权限组。这些操作还包括意图破坏安全策略的账户活动,例如执行迭代的密码更新以绕过密码超时保护策略并长时间保留受到破坏的凭据的寿命,为了创建和操纵账户,攻击者必须对系统或域拥有足够高的权限。 |
T1098.003 |
账户操纵:添加Office365账户的全局管理员角色 |
具有全局管理员角色的账户可几乎无限制地访问数据和设置,包括重置其他管理员密码的能力。 此账户修改可能会在创建账户或其他恶意账户活动之后执行。 |
T1098.004 |
账户操纵:SSH授权密钥 |
Linux和macOS通常使用基于密钥的身份验证来保护SSH会话的身份验证过程。SSH中的authorized_keys文件指定了某些已配置账户的密钥,该文件通常位于用户的主目录下/.ssh/authorized_keys,用户可以编辑系统的SSH配置文件,将PubkeyAuthentication和RSAAuthentication的值修改为“yes”来启用公钥和RSA身份验证。SSH配置文件通常位于/etc/ssh/sshd_config。 攻击者可以直接使用脚本或Shell命令修改SSH authorized_keys文件来添加攻击者可使用的公钥,此举可保证拥有相应私钥的攻击者可以通过现有账户登录。 |
T1098.005 |
Device Registration |
攻击者可能会将设备注册到由攻击者控制的账户。设备可以在多因素身份验证(MFA)系统中注册,该系统处理对网络的身份验证,或者在设备管理系统中注册,该系统处理设备访问和合规性。MFA系统(如Duo或Okta)允许用户将设备与他们的账户关联,以完成MFA要求。攻破用户凭据的攻击者可能会注册新设备,以绕过初始MFA要求并获得对网络的持久访问。同样,已经访问网络的攻击者可能会将设备注册到Azure AD和/或其设备管理系统Microsoft Intune,以便在绕过条件访问策略的情况下访问敏感数据或资源。在Azure AD中注册的设备可能能够通过组织内的电子邮件进行内部鱼叉式网络钓鱼活动,这些电子邮件不太可能被电子邮件客户端视为可疑。此外,攻击者可能能够通过注册大量设备对Azure AD租户执行服务耗尽洪水攻击。 |
T1098.001 |
账户操纵:添加云账户凭据 |
攻击者除了可以向受害Azure帐户添加现有的合法凭据之外,还可以为Azure服务主体添加凭据。Azure服务主体同时支持密码和证书凭据。具有足够的权限,可以使用多种方法添加凭据,包括Azure门户,Azure命令行界面以及Azure或Az PowerShell模块。 通过云账户获得访问权限后,攻击者可以使用AWS中的CreateKeyPair或ImportKeyPair API或GCP中的gcloud compute os – login ssh – keys add命令生成或导入自己的SSH密钥。这可以保持持久访问云环境中的实例,而无需继续使用已失陷的云帐户。 |
T1098.002 |
账户操纵:Exchange邮箱委托权限 |
在本地Exchange和基于云的服务Office365中可以用 PowerShell 的cmdlet命令Add – MailboxPermission将权限添加到邮箱。这用于持续威胁以及BEC事件(企业邮件妥协),在这些事件中,攻击者希望为已失陷的邮箱账户分配更多的权限,通过附加技术来获得对系统的访问。例如,受感染的企业账户在创建收件规则时,将恶意邮件发送给目标企业网络中的其他账户,以逃避邮件威胁检测系统。 |
T1574 |
劫持执行程序 |
攻击者可以通过劫持操作系统运行程序的方式去执行其恶意负载。由于劫持的程序会随着时间再次发生,因此该技术可用于持久化,此外,攻击者还可以使用这些技术达到提升权限和躲避检测的目的,例如,劫持执行中的应用控制程序或其它限制条件。 攻击者可能采用多种方式劫持执行的程序,比如通过控制操作系统如何定位要执行的程序,也可以拦截操作系统定位程序使用库的方式,定位操作系统查找程序或资源的位置,例如文件目录和已经包含恶意载荷的Windows的注册表。 |
T1574.007 |
劫持执行程序:劫持环境变量Path路径 |
攻击者可以通过劫持用于加载库的环境变量来执行其恶意载荷。攻击者可以将一个程序放在环境变量Path列表中较前的位置,当Windows依次在环境变量Path列表中查找脚本或命令行调用的二进制文件时,攻击者添加的脚本将比所需要的合法二进制文件先执行。 环境变量Path中包含一系列目录,某些程序的执行方法(如使用cmd.exe 或命令行),完全依赖Path变量来确定未提供程序路径时搜索程序的位置。如果在Windows环境目录%SystemRoot%\system32(例如:C:\Windows\system32)之前的Path列表中可以列出任意目录,则可以在之前目录中放置一个与Windows程序相同的程序(如: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 |
利用有效账户:本地账户 |
攻击者通过获取本地用户的访问凭证后,通过滥用这些默认用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。本地账户一般是企业中的用户在系统或服务中创建的,用于远程支持、服务、或管理的账户。 本地帐户也可能被滥用,通过操作系统凭据转储来提升权限和获取凭据。密码重用可能允许在网络上的一组计算机上滥用本地帐户,以实现权限提升和横向移动。 |
T1546 |
事件触发执行 |
攻击者利用系统基于特定事件的触发机制执行命令或程序建立持久化或权限提升。各种操作系统都具有监测和订阅事件(例如登录)或其他用户活动(例如运行特定应用程序/二进制文件)的方式。 攻击者可能滥用这些机制,来重复执行恶意代码来保持对受害者的持久访问的一种手段。 在获得受害者系统的访问权限之后,攻击者可以创建/修改事件触发器,以指向每次调用事件触发器时都会执行的恶意内容。 由于通过具有较高权限的帐户(例如SYSTEM或服务帐户)代理执行,因此攻击者可能能够滥用这些触发的执行机制来提升权限。 |
T1546.013 |
事件触发执行:PowerShell配置文件 |
PowerShell配置文件(profile.ps1)是一个在PowerShell启动时运行的脚本,可以用作登录脚本来自定义用户环境。PowerShell根据用户或主机程序不同,支持多个配置文件。例如,PowerShell主机程序(例如PowerShell控制台,PowerShell ISE或Visual Studio Code)可以有不同的配置文件。管理员还可以配置一个配置文件,该配置文件适用于本地计算机上的所有用户和主机程序。 攻击者可能会修改这些配置文件,以包括任意命令,功能,模块和/或PowerShell驱动器来获得持久性。每次用户打开PowerShell会话时,除非启动该 – NoProfile标志,否则将执行修改后的脚本。 如果PowerShell概要文件中的脚本由具有较高特权的帐户(例如域管理员)加载并执行,则攻击者也可能能够提升特权。 |
T1546.006 |
事件触发执行:新增LC_LOAD_DYLIB |
攻击者可以通过执行被恶意修改的Mach – O格式文件触发的恶意内容来建立持久化。在macOSOS X环境中,二进制文件Mach – O格式的定义字段有一些字段用于定义在加载二进制文件时执行某些操作,其中LC_LOAD_DYLIB头字段告诉macOS和OS X系统在执行应用之前要加载哪些动态库(dylib)。 攻击者如果通过一些工具,对Mach – O格式应用文件中动态库依赖项进行调整,就可以将攻击者准备好的恶意动态库临时添加到已编译的二进制文件中。当然,因为二进制文件的修改,会导致二进制文件上的数字签名无效,但是攻击者可以通过简单地从二进制文件中删除LC_CODE_SIGNATURE来指定系统执行应用时不检查签名。 |
T1546.011 |
事件触发执行:应用 Shimming |
rosoft Windows 应用程序兼容性基础架构/框架 (Application Shim) 是为了在操作系统代码库随时间变化的同时保持软件的向后兼容性。 例如,应用程序 shimming 特性允许开发人员将补丁应用于为 Windows XP 创建的应用程序(不需要重新编写代码),这样它就可以兼容 Windows 10。 在框架中,创建 shims 作为程序(或更具体地说,导入地址表)和 Windows 操作系统之间的缓冲区。 在执行程序时,将引用 shim 缓存来确定程序是否需要使用 shim 数据库 (.sdb)。 如果需要,shim 数据库使用 Hooking 根据需要重定向代码,以便与 OS 通信。 当前由默认 Windows 安装程序 (sdbin.exe) 安装的所有 shim 的列表保存在: – %WINDIR%\AppPatch\sysmain.sdb – hklm\software\microsoft\windows nt\currentversion\appcompatflags\installedsdb 自定义数据库存储在: %WINDIR%\AppPatch\custom & %WINDIR%\AppPatch\AppPatch64\Custom hklm\software\microsoft\windows nt\currentversion\appcompatflags\custom 为了保证 shim 的安全,Windows 将它们设为在用户模式下运行,这样它们设为在用户模式下运行,这样它们就无法修改内核,您必须具有管理员权限才能安装 shim 。 但是,某些 shim 可以用来绕过用户帐户控制 (UAC) (RedirectEXE)、将 DLL 注入进程 (InjectDLL)、禁用数据执行保护 (DisableNX) 和结构异常处理 (DisableSEH) 以及截获内存地址 (GetProcAddress)。 与 hook 类似,使用这些 shim 可能允许攻击者执行一些恶意行为,如提升权限、安装后门、禁用如 Windows Defender 的防御等。 |
T1546.005 |
事件触发执行:系统自陷 |
攻击者在Linux环境可以通过由中断信号触发的恶意内容执行来建立持久化。trap命令允许程序和Shell指定收到系统中断信息后执行的命令。常见情况这些指定的命令是一个脚本用来从错误中正常终止程序和处理ctrl+c和ctrl+d等键盘事件。 攻击者可以通过trap将进行持久化的恶意代码注册为特定的事件响应程序来达到事件触发执行持久化。trap命令为trap ‘command list’ signals,其中’command list’为收到signals时执行的命令列表。 |
T1546.012 |
事件触发执行:Image File Execution值注入 |
注册表IFEO(Image File Execution Options)允许开发者将调试器附着到应用进程。系统创建进程后,应用程序IFEO中配置的调试器以应用的进程名启动,同时快速的启动新的应用子进程(例如C:\dbg\ntsd.exe -g notepad.exe)。 IFEO可以通过注册表直接设置,也可以通过GFlags工具在全局标志中设置。 IFEO在HKLM\SOFTWARE{{\Wow6432Node}}\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\下的注册表中表示为调试器值,其中指定被调试器附着的二进制文件。 与系统辅助工具的利用相似,在Windows Vista、Windows Server 2008和更高版本上,可以修改注册表项,将“cmd.exe”或其他提供后门访问的程序配置为可访问性程序的“调试器” (例如:utilman.exe),这样在系统登陆界面或者远程连接的界面上通过特定的组合建就可以触发替换的程序(cmd.exe)以系统特权执行。 恶意软件还可能通过注册无效的调试器来重定向并有效禁用各种系统和安全应用程序,从而利用IFEO破坏系统防御。 |
T1546.008 |
事件触发执行:系统辅助功能 |
攻击者可以通过劫持系统辅助功能来触发恶意代码执行来进行攻击持久化或者权限提升。Windows系统包含一些系统辅助功能,这些功能可以在用户登录之前通过组合键启动(例如:当用户在Windows登录屏幕上时)。攻击者可以通过修改这些程序的启动方式,以获系统控制台或后门程序,而无需登录系统。 两个常见的辅助程序是C:\Windows\System32\sethc.exe(在按住shift键五次时启动)和C:\Windows\System32\utilman.exe(在按Windows + U组合键时启动)。sethc.exe程序通常称为“粘滞键”,在已发现的利用中,它已经在一些攻击中被用于通过远程桌面登录屏幕进行未经身份验证的访问。 根据Windows的版本,攻击者可能会以不同方式利用这些功能。攻击者使用的常见方法包括替换可访问性功能二进制文件或注册表中对这些二进制文件的指针/引用。在Windows的较新版本中,对于x64系统,需要对替换的二进制文件进行数字签名,该二进制文件必须驻留在%systemdir%\中,并且必须由Windows文件或资源保护(WFP / WRP)保护。 修改应用程序注册表中Image File Execution项也是一种有效的绕过上面检测的利用方式,因为它并不需要替换原有二进制文件 。 比较简单的一种在Windows XP或者Windows Server 2003/R2系统上二进制制替换利用方式,直接将C:\Windows\System32\utilman.exe替换为cmd.exe程序,这样在系统登陆界面或者远程连接的界面上通过特定的组合建就可以触发替换的程序(cmd.exe)以系统特权执行。 系统上还存在其他类似可利用辅助功能: 1. 屏幕键盘:C:\ Windows \ System32 \ osk.exe 2. 放大镜:C:\ Windows \ System32 \ Magnify.exe 3. 讲述人:C:\ Windows \ System32 \ Narrator.exe 4. 显示切换器:C:\ Windows \ System32 \ DisplaySwitch.exe 5. 应用切换器:C:\ Windows \ System32 \ AtBroker.exe |
T1546.009 |
事件触发执行:AppCert DLLs |
攻击者可以通过执行由加载到进程中的AppCert DLL触发的恶意内容来建立持久化或提升特权。在Windows下的进程如果调用如下API:CreateProcess,CreateProcessAsUser,CreateProcessWithLoginW, CreateProcessWithTokenW或WinExec. 系统会加载在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\下的AppCertDLLs项中指定的动态链接库(DLL)。 与“进程注入”相似,注册表中的这项值可以被利用进行恶意DLL加载并在计算机上单独进程的上下文中运行和权限提升。 恶意的AppCert DLL会因为上面这些API的调用,不断被触发恶意攻击持久化。 |
T1546.003 |
事件触发执行:WMI事件订阅 |
攻击者可以通过执行Windows内置WMI事件订阅机制触发恶意代码来建立持久化和提权。WMI的事件订阅功能可以安装事件过滤器,在定义的事件发生时执行代码的绑定。 系统中使用的例子如:挂钟时间,用户登录或计算机的正常运行时间等场景。 攻击者可以配置WMI的功能来订阅事件并在事件发生时执行任意代码,从而在系统上维护自己的持久化。攻击者通常将WMI脚本编译成Windows管理对象(MOF)文件(扩展名.mof),通过该文件创建恶意订阅。 WMI订阅执行由WMI提供程序主机进程(WmiPrvSe.exe)代理,因此可能导致提高的SYSTEM特权。 |
T1546.001 |
事件触发执行:更改文件默认关联程序 |
攻击者可以通过执行由文件类型关联触发的恶意内容来建立持久性。打开文件时,系统将检查用于打开文件的默认程序(也称为文件关联或处理程序)。文件关联选择存储在Windows注册表中,并且可以由用户,管理员或具有注册表访问权限的程序进行编辑,也可以由管理员使用内置的assoc实用程序进行编辑。 应用程序可以修改给定文件扩展名的文件关联,以在打开具有给定扩展名的文件时调用任意程序。 系统文件关联列在HKEY_CLASSES_ROOT。[extension]下,例如HKEY_CLASSES_ROOT.txt。这些条目指向位于HKEY_CLASSES_ROOT [handler]的该扩展程序的处理程序。然后,各种命令在HKEY_CLASSES_ROOT[handler]\shell[action]\command的shell键下面作为子键列出。例如:HKEY_CLASSES_ROOT\txtfile\shell\open\command、HKEY_CLASSES_ROOT\txtfile\shell\print\command*、HKEY_CLASSES_ROOT\txtfile\shell\printto\ command 列出的键的值是在处理程序打开文件扩展名时执行的命令。攻击者可以修改这些值以连续执行任意命令。 |
T1546.014 |
事件触发执行:Emond |
在macOS/OS X环境上,Emond是一个启动守护程序,它接受来自各种服务的事件,通过简单的规则引擎运行它们并采取相应的操作。emond二进制文件/sbin/emond将加载/etc/emond.d/rules/目录中的所有规则,并在发生明确定义的事件后立即执行配置操作。规则文件是plist格式,定义了事件名称,事件类型和事件触发的操作。系统中几个事件类型的示例有:系统启动和用户身份验证;事件动作的示例:运行系统命令或发送电子邮件。 emond是一个普通的守护进程,每次系统启动时都会由launchd执行,其对于launchd的配置文件和其他系统守护进程在同一个地方:/System/Library/LaunchDaemons/com.apple.emond.plist,该配置文件决定了何时执行emond,并带有LaunchDaemons经常使用的任何期望的选项。 emond.plist配置文件位于/etc/emond.d/目录中。该文件定义了规则路径,UID/GID过滤,错误日志和事件日志路径以及一些其他选项。 攻击者可以通过编写规则在发生定义的事件(例如系统启动或用户身份验证)时执行命令来利用emond服务。当emond服务由启动守护程序服务以root特权执行时,攻击者也可以将特权从管理员升级到root 权限。 |
T1546.004 |
事件触发执行:.bash_profile 和 .bashrc文件 |
攻击者在Linux/类Unix环境通过执行由用户Shell触发的恶意内容来建立持久化。.bash_profile和.bashrc文件是包含Shell命令的shell脚本。当打开新的Shell程序或者在用户登陆到环境时,将会自动执行这些文件中的命令。 |
T1546.015 |
事件触发执行:COM劫持 |
攻击者可以利用Windows系统的COM系统插入恶意代码,这些代码可以通过劫持 COM 引用和关系作为持久化的手段来代替合法软件执行。组件对象模型 (COM) 是 Windows 中的一个系统,它支持软件组件之间通过操作系统交互。 COM组件的引用关系存在注册表中。 攻击者可以使用该系统插入恶意代码,这些代码可以通过劫持 COM 引用和关系作为持久化的手段来代替合法软件执行。 劫持 COM 对象需要更改 Windows注册表,以替换对合法系统组件的引用,这可能导致该组件在执行时无法正常工作。 当该系统组件通过正常的系统操作执行时,攻击者的代码将被执行。 攻击者很可能劫持那些经常使用的对象,以保持一致的持久性,但不太可能破坏系统中的明显功能,避免系统不稳定而触发检测。 |
T1546.010 |
事件触发执行:AppInit DLLs |
攻击者可以通过执行由加载到进程中的AppInit DLL触发的恶意内容来建立持久化或提升特权。在Windows系统下,如果程序中加载了user32.dll,那么user32.dll会加载在注册表AppInit_DLLs下的内容到程序中,与AppInit_DLLs相关的注册表项有: – HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows – HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows 而实际上Windows系统中几乎每个应用程序都会加载user32.dll这个通用库文件。 利用方式与进程注入类似,通过注册表项加载恶意DLL可以用来进行提权,另外,恶意AppInit DLL也可以通过API不断的调用来触发攻击持久化。 在Windows 8和后面更高的版本中,已经有安全启用开关,通过开关可以将AppLinit DLL功能禁用。 |
T1546.002 |
事件触发执行:屏幕保护 |
攻击者通过交互事件执行恶意程序构建持久化。屏幕保护是系统程序,它在配置的时间到达后执行,并且由带有.scr文件扩展名的可移植可执行(PE)文件组成。Windows屏幕保护程序应用程序scrnsave.scr与64位Windows系统上的C\Windows\System32 \和C\Windows\sysWOW64\一起位于基本Windows安装中。 以下屏幕保护程序设置存储在注册表(HKCU\Control Panel\Desktop\)中,可以利用这项配置实现持久化: SCRNSAVE.exe-设置为恶意PE路径 ScreenSaveActive-设置为”1″以启用屏幕保护程序 ScreenSaverIsSecure-设置为”0″不需要密码来解锁 ScreenSaveTimeout-在执行屏幕保护程序之前设置用户不活动超时。 攻击者可以通过将屏幕保护程序设置为在用户不活动的特定时间段后运行恶意软件来使用屏幕保护程序设置来保持持久性。 |
T1546.016 |
Installer Packages |
攻击者可以通过使用安装程序触发恶意内容的执行来建立持久性并提升权限。安装程序包是特定于操作系统的,包含操作系统在系统上安装应用程序所需的资源。安装程序包可以包括在安装之前和安装完成之后运行的脚本。安装程序脚本在执行时可能会继承提升的权限。开发人员经常使用这些脚本来准备安装环境,检查需求,下载依赖关系,并在安装后删除文件。(引文:安装程序包脚本Rich Trouton)使用合法应用程序,对手分发了带有修改后的安装程序脚本的应用程序来执行恶意内容。当用户安装应用程序时,他们可能需要授予管理权限以允许安装。在合法应用程序的安装过程结束时,可以使用继承的提升权限执行macOS“安装后”脚本等内容。攻击者可以使用这些脚本执行恶意可执行文件,或安装具有提升权限的其他恶意组件(如启动守护进程)。(引文:Application Bundle Manipulation Brandon Dalton)(引文:wardle evilquest parti)根据发行版的不同,Linux版本的软件包安装程序脚本有时被称为维护程序脚本或安装后脚本。这些脚本可以包括“pretest”、“postinst”、“prerm”、“post rm”脚本,并在执行时以root身份运行。对于Windows,Microsoft Installer服务使用“.msi”文件来管理应用程序的安装、更新和卸载。对手在安装.msi文件时,利用“预构建”和“后构建”事件在构建之前或之后运行命令。(引文:Windows AppleJeus GReAT)(引文:Debian手动维护程序脚本) |
T1546.007 |
事件触发执行:Netsh Helper DLL |
攻击者可以通过执行Netsh Helper DLL触发的恶意程序来建立持久化。Netsh.exe(也称为Netshell)是用于与系统的网络配置进行交互的命令行脚本执行程序。 它支持对扩展功能添加帮助DLL文件。已注册的netsh.exe帮助程序DLL的路径已在Windows注册表HKLM\SOFTWARE\Microsoft\Netsh中记录。 攻击者可以通过持久化劫持帮助程序DLL方式触发恶意代码的执行。这种执行可以在netsh.exe执行的做任意时间自动发生;另一种利用方式是netsh.exe作为其它正常软件(如:VPN)的一部分被调用,触发持久化的DLL恶意代码执行。 |
T1197 |
后台智能传输服务(BITS)滥用 |
Windows后台智能传输服务(BITS)是一种通过组件对象模型(COM)公开的低宽带异步文件传输机制。BITS通常由更新程序、信息传递程序和其它希望在后台允许的应用程序组成(使用空闲的宽带、不中断其它联网应用程序)。文件传输任务作为BITS作业实现,其中包含一个或多个文件操作队列。 攻击者可使用PowerShell和BITSAdmin工具来创建和管理BITS Jobs。运行恶意代码后可用BITS进行下载、执行甚至删除。BITS Jobs任务包含在BITS任务的数据库中,没有新文件创建或注册表修改,并通常被主机防火墙允许,启用BITS任务可长期执行(默认最大寿命为90天且可以扩展)或在作业完成或出错时,调用任意程序来重启持久性。 BITS的上传功能还可用于T1048(通过替代协议渗出数据) |
T1505 |
服务器软件组件 |
攻击者可能滥用服务器的合法可扩展开发功能来建立对系统的持久访问。企业服务器应用程序可能包括允许开发人员编写和安装软件或脚本来扩展主应用程序功能的特性。攻击者可能安装恶意组件来扩展和滥用服务器应用程序。 |
T1505.002 |
服务器软件组件:传输代理 |
攻击者可能滥用Microsoft传输代理来建立对系统的持久访问。Microsoft Exchange传输代理可以对通过传输管道的电子邮件进行操作,以执行各种任务,例如过滤垃圾邮件、过滤恶意附件、记录日志或在所有发出的电子邮件的末尾添加公司签名。传输代理可以由应用程序开发人员编写,然后编译为.NET程序集,这些程序随后向Exchange服务器注册。传输代理将在电子邮件处理的指定阶段被调用,并执行开发人员定义的任务。 攻击者可能注册了恶意的传输代理,以在Exchange Server中提供一种持久性机制,该机制可以由攻击者指定的电子邮件事件触发。尽管可以为通过Exchange传输管道传递的所有电子邮件调用恶意传输代理,但可以将代理配置为仅执行特定任务,以响应攻击者定义的条件。例如,如果收件人电子邮件地址与攻击者提供的列表中的条目匹配,则运输代理只能执行诸如复制运输中的附件并将其保存以供以后过滤的操作。 |
T1505.005 |
Terminal Services DLL |
攻击者可能会滥用终端服务的组件来实现对系统的持久访问。自2022年起,Microsoft终端服务在某些Windows Server操作系统中更名为远程桌面服务,可实现与主机的远程终端连接。终端服务允许服务器通过RDP向客户端传输完整的交互式图形用户界面。(引文:Microsoft远程桌面服务)作为“通用”进程运行的Windows服务(例如:svchost.exe )加载服务的DLL文件,该文件的位置存储在名为ServiceDll</code]的注册表项中。(引文:Microsoft系统服务基础)<code>termsrv.dll 文件通常存储在“%SystemRoot%\System32\”中,是“HKLM\System\CurrentControlSet\Services\TermService\Parameters”中终端服务的默认ServiceDll 值。对手可以修改和/或替换终端服务DLL,以实现对受害主机的持久访问。(引用:James TermServ DLL)可以修改此DLL以执行任意有效载荷(同时也可能保留正常的termsrv.DLL 功能),以及简单地启用终端服务的可滥用功能。例如,对手可以通过修补termsrv.dll 文件或修改ServiceDll 值以指向提供增强RDP功能的dll来启用并发远程桌面协议会话等功能。(引文:Windows OS Hub RDP)(引文:RDPWrap Github)在非服务器Windows操作系统上,这种增加的功能也可能使对手能够避免在创建新RDP会话时警告/注销系统用户的终端服务提示。 |
T1505.003 |
服务器软件组件:Web Shell |
攻击者可能会使用web shell从web服务器后门进入,以建立对系统的持久访问。Web Shell是放置在可公开访问的Web服务器上的Web脚本,以允许攻击者将Web服务器用作进入网络的网关。Web shell程序可以在托管Web服务器的系统上提供一组要执行的功能或一个命令行界面。 除了服务器端脚本之外,Web Shell可能还具有用于与Web服务器对话的客户端接口程序(例如:中国菜刀)。 |
T1505.004 |
IIS Components |
攻击者可能会安装在Internet Information Services(IIS)web服务器上运行的恶意组件,以建立持久性。IIS提供了多种机制来扩展web服务器的功能。例如,可以安装Internet服务器应用程序编程接口(ISAPI)扩展和过滤器来检查和/或修改传入和传出的IIS web请求。扩展和筛选器部署为DLL文件,导出三个函数:获取{扩展/筛选器}版本 、Http{扩展/筛选}Proc</code]和(可选)<code>终止{扩展/过滤器} 。还可以安装IIS模块来扩展IIS web服务器。(引文:Microsoft ISAPI扩展概述2017)(引文:微软ISAPI过滤器概述2017)。ISAPI扩展和筛选器可以访问所有IIS web请求和响应。例如,对手可能会滥用这些机制来修改HTTP响应,以便将恶意命令/内容分发到以前包含的主机。(引文:Microsoft ISAPI过滤器概述2017)(引文:微软ISAPI扩展概述2017)。IIS 7.0引入了模块,这些模块提供了与ISAPI扩展和过滤器相同的对HTTP请求和响应的无限制访问。IIS模块可以编写为导出RegisterModule 的DLL,也可以编写为。NET应用程序,与ASP。NET API访问IIS HTTP请求。(引文:微软IIS模块概述2007)(引文:Trustwave IIS模块2013)(引文∶ESET IIS恶意软件2021) |
T1505.001 |
服务器软件组件:SQL存储过程 |
攻击者可能滥用SQL存储过程来建立对系统的持久访问。SQL存储过程是可以保存和重用的代码,因此数据库用户不会浪费时间重写频繁使用的SQL查询。存储过程可以通过使用过程名称或定义的事件的SQL语句调用数据库(例如,当SQL server应用程序启动/重新启动时)。 攻击者可能制作恶意存储过程,这些存储过程可以在SQL数据库服务器中提供持久性机制。要通过SQL语法执行操作系统命令,攻击者可能必须启用其他功能,例如MSSQL Server的xp_cmdshell。 Microsoft SQL Server可以启用公共语言运行时(CLR)集成。启用CLR集成后,应用程序开发人员可以使用任何.NET Framework语言(例如VB .NET,C#等)编写存储过程。攻击者可以制作或修改链接到存储过程的CLR程序集,因为这些CLR程序集可以用来执行任意命令。 |
T1136 |
创建账户 |
攻击者可能通过创建一个账户来维持对受害者系统的访问。当创建的账户具有足够高的权限时,可以建立辅助的访问凭据,而不需要在系统上部署持久性远程访问工具。 可以在本地、域环境以及云上创建账户,在云环境中,攻击者可能创建只能访问特定服务的账户,这样可以减少被检测到的概率。 |
T1136.001 |
创建账户:本地账户 |
攻击者可以创建一个本地帐户来维护对受害者系统的访问。本地帐户是由组织配置的帐户,以满足用户使用、远程支持、服务使用或用于管理单个系统或服务而配置的账户。具有足够的权限时,可以使用net user / add命令创建本地帐户。 本地账户可以用于建立辅助凭据访问,而不需要在系统上部署持久性远程访问工具。 |
T1136.002 |
创建账户:域账户 |
攻击者可以创建域账户来维护对受害者系统的访问。域账户是域服务管理的账户,其中的访问和权限是跨域的系统和服务配置的。域账户包括普通用户、管理员和服务账户,当具有足够的权限时,可以使用net user /add /domain 命令来创建域账户。 域账户可以用于建立辅助凭据访问,而不需要在系统上部署持久性远程访问工具。 |
T1136.003 |
创建账户:云账户 |
攻击者可以创建一个云账户来维持对受害者系统的访问。当云账户具有足够高的权限时,该云账户可以用于建立辅助凭据访问,而不需要在系统上部署持久性远程访问工具。 攻击者可能创建只能访问特定云服务的云账户,这样可以减少被检测到的概率。 |
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 |
Hybrid Identity |
攻击者可能会修补、修改或以其他方式后门与本地用户身份绑定的云身份验证过程,以绕过典型的身份验证机制,访问凭据,并实现对帐户的持久访问。许多组织维护在本地和基于云的环境之间共享的混合用户和设备身份。这些可以通过多种方式进行维护。例如,Azure AD包括三个用于在Active Directory和Azure AD之间同步身份的选项(引用:Azure AD混合身份):密码哈希同步(PHS),其中特权本地帐户在Active Directory与Azure AD之间进行用户密码哈希同步,允许对Azure AD的身份验证完全在云中进行直通身份验证(PTA),其中Azure AD身份验证尝试被转发到本地PTA代理,该代理根据Active Directory验证凭据*Active Directory联合身份验证服务接收包含混合用户身份和特权的令牌。通过修改与混合身份相关的身份验证过程,对手可能能够建立对云资源的持久特权访问。例如,破坏运行PTA代理的本地服务器的对手可能会将恶意DLL注入到“AzureADConnectAuthenticationAgentService”进程中,该进程授权所有向Azure AD进行身份验证的尝试,并记录用户凭据。(引文:Azure AD Connect for Read Teamers)(引文:AAD内部Azure AD On Prem to Cloud)在使用AD FS的环境中,对手可能会编辑“Microsoft”。身份服务器。Servicehost配置文件,用于加载恶意DLL,该DLL为具有任何声明集的任何用户生成身份验证令牌,从而绕过多因素身份验证和定义的AD FS策略。(引文:MagicWeb)在某些情况下,对手可能能够从云端修改混合身份验证过程。例如,危害Azure AD租户中全局管理员帐户的对手可能能够通过web控制台注册新的PTA代理,同样允许他们获取凭据并作为任何用户登录Azure AD环境。(引文:Mandiant Azure AD后门) |
T1556.006 |
Multi-Factor Authentication |
攻击者可能会禁用或修改多因素身份验证(MFA)机制,以实现对受损帐户的持久访问。一旦对手通过破坏缺乏MFA的帐户或采用MFA绕过方法(如多因素身份验证请求生成)获得了网络访问权限,对手就可以利用他们的访问权限修改或完全禁用MFA防御。这可以通过滥用合法功能来实现,例如将用户排除在Azure AD条件访问策略之外,注册一种新的但易受攻击/对手控制的MFA方法,或者手动修补MFA程序和配置文件以绕过预期功能。(引文:Mandiant APT42)(引文:Azure AD条件访问排除)例如,修改Windows主机文件(“C:\Windows\system32\drivers\etc\hosts”)以将MFA调用重定向到localhost而不是MFA服务器可能会导致MFA进程失败。如果实施了“失败开放”策略,则任何其他成功的身份验证尝试都可以在不强制MFA的情况下被授予访问权限。(引用:俄罗斯人利用默认MFA协议-CISA 2022年3月)根据对手的范围、目标和权限,MFA防御可能会对单个帐户或与更大组相关的所有帐户禁用,例如受害者网络环境中的所有域帐户。(引用:俄罗斯人利用默认MFA协议-CISA 2022年3月) |
T1556.001 |
修改身份验证进程:域控身份验证 |
攻击者可能会在域控上修补身份验证过程,以绕过典型的身份验证机制并启用对账户的访问。 恶意软件可能被用于向域控上的身份验证过程中注入虚假凭据,以创建用于访问任意用户账户和凭据的后门(如万能钥匙)。万能钥匙通过企业域控身份验证过程(LSASS)上具有凭据的补丁来工作,该凭据可以使攻击者绕过标准的身份验证系统,一旦打上该补丁,攻击者可以使用注入的密码作为任何域用户账户成功进行身份认证(直到通过重启域控从内存中删除万能钥匙),认证访问可能在单因素环境下实现对主机或资源的不受限制的访问。 |
T1556.005 |
可逆加密 |
对手可能会滥用Active Directory身份验证加密属性来访问Windows系统上的凭据。AllowReversiblePasswordEncryption 属性指定是启用还是禁用帐户的可逆密码加密。默认情况下,此属性被禁用(而是将用户凭据存储为单向散列函数的输出),除非旧版或其他软件需要,否则不应启用。(引文:store_pwd_rev_enc)如果启用了该属性和/或用户在启用后更改了密码,对手可能能够获得启用该属性后创建/更改的密码的明文。要解密密码,对手需要四个组件:1。来自Active Directory用户结构userParameters 2的加密密码(G$RADIUSCAP )。16字节随机生成的值(G$RADIUSCHAPKEY )也来自userParameters 3。全局LSA机密(G$MSRADIUSCHAPKEY )4。远程访问子身份验证DLL(RASSFM.DLL )中硬编码的静态密钥。有了这些信息,对手可能能够复制加密密钥,并随后解密加密的密码值。(引文:how_pwd_rev_enc_1)(引文:how_pwd_rev-enc_2)对手可以通过本地组策略编辑器、用户属性、细粒度密码策略(FGPP)或通过ActiveDirectory PowerShell模块在各种范围内设置此属性。例如,如果域功能级别设置为“Windows Server 2008”或更高,对手可能会对用户或组实施并应用FGPP。(引文:dump_wd_dcsync)在PowerShell中,对手可以使用类似于Set ADUser-AllowReversiblePasswordEncryption$true 的命令对用户设置进行相关更改。 |
T1556.004 |
修改身份验证进程:网络设备认证 |
攻击者可能使用修补系统映像在操作系统中对密码进行硬编码,从而绕过网络设备上本地账户的本机身份验证机制。 修改系统映像可能包含将代码植入到操作系统中,以供攻击者使用特定的密码进行访问,修改包括特定密码,该密码通过补丁植入到操作系统的映像中。尝试进行身份验证时,插入的代码将首先检查用户输入的密码是否正确,如果正确则授予访问权限,否则植入的代码将传递凭据,以验证可能有效的凭据。 |