Att&ck框架_提权

ID 名称 描述
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/以实现用户级的持久性。
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操作来连续执行恶意有效负载。
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。
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 ListPlanting 攻击者可能滥用列表视图控件将恶意代码注入被劫持的进程中,以逃避基于进程的防御并可能提升权限。ListPlanting是一种在单独的活动进程的地址空间中执行任意代码的方法。通过ListPlanting执行的代码也可以逃避安全产品的检测,因为执行操作隐藏在合法的进程之下。列表视图控件是用于显示项目集合的用户界面窗口。应用程序的列表视图设置信息存储在进程内存中的SysListView32控件内。ListPlanting(一种消息传递的“破碎攻击”形式)可以通过将代码复制到使用列表视图控件的进程的虚拟地址空间中,然后将该代码用作对列出的项目进行排序的自定义回调来执行。攻击者必须首先将代码复制到目标进程的内存空间中,这可以通过多种方式完成,包括直接获取受害者进程窗口的SysListView32子项的句柄(通过Windows API调用,如FindWindow和/或EnumWindows)或其他进程注入方法。ListPlanting的一些变体可能会在目标进程中分配内存,但随后使用窗口消息来复制有效负载,以避免使用高度监控的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注入执行还可以避开安全产品的检测,因为执行操作隐藏在合法的进程之下。
T1611 Escape to Host 攻击者可能会突破容器以访问底层主机。这可以使攻击者从主机级别访问其他容器化资源或直接访问主机本身。原则上,容器化资源应明确分离应用程序功能,并与主机环境隔离。攻击者有多种方法可以逃到主机环境。例如,创建一个配置为使用bind参数挂载主机文件系统的容器,这允许攻击者在主机上放置有效负载并执行控制实用程序(如cron);利用特权容器在底层主机上运行命令或加载恶意内核模块;或滥用系统调用(如unsharekeyctl)来提升权限并窃取机密。此外,攻击者可能能够利用挂载了容器管理套接字(如docker.sock)的受感染容器,通过容器管理命令突破容器。攻击者还可能通过利用漏洞提升权限来逃脱,例如利用全局符号链接中的漏洞以访问主机的根目录。获得对主机的访问权可能为攻击者提供实现后续目标的机会,例如建立持久性、在环境中横向移动或在主机上设置命令和控制通道。
T1089 账号操作 攻击者可能会操纵账户以维持和/或提升对受害系统的访问权限。账户操纵可能包括任何保留或修改攻击者对受感染账户的访问权限的操作,例如修改凭证或权限组。这些操作还可能包括旨在破坏安全策略的账户活动,例如执行迭代密码更新以绕过密码有效期策略并保护受感染凭证的使用寿命。 为了创建或操纵账户,攻击者必须已拥有系统或域的足够权限。但是,账户操纵也可能导致特权升级,即修改账户可授予对其他角色、权限或更高特权的有效账户的访问权限。
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和sudo缓存机制来提升权限,例如监测/var/db/sudo的时间戳是否在timestamp_timeout范围内,若在此范围内,恶意软件可执行sudo命令且无需密码;还可能通过禁用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特权的程序是否来自可信的来源还是被恶意修改过。
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 利用有效账户:本地账户 攻击者通过获取本地用户的访问凭证后,通过滥用这些默认用户凭证达到获取初始访问权限、持久化、提权、免杀的目的。本地账户一般是企业中的用户在系统或服务中创建的,用于远程支持、服务、或管理的账户。 本地帐户也可能被滥用,通过操作系统凭据转储来提升权限和获取凭据。密码重用可能允许在网络上的一组计算机上滥用本地帐户,以实现权限提升和横向移动。
T1068 利用漏洞进行权限提升 软件的漏洞可以存在于程序、服务或操作系统软件或内核本身中,攻击者通过利用漏洞来触发软件错误来执行攻击者控制的代码时,就利用了软件漏洞。 因为系统的安全机制,比如:权限划分等,会限制攻击者进行信息获取或者某些利用失败,因此,攻击者需要升级执行特权来绕过系统这些限制。 最初获得系统访问权时,攻击可能处在权限较低的进程中进行操作,这会阻止他们访问系统上的某些资源。对于可利用的通常存在于较高权限运行的操作系统组件和软件中的漏洞,可以获得系统上更高级别的访问权限。这样可以使一些用户利用存在漏洞的组件,从非特权或用户级别的权限转移到SYSTEM或root权限。
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格式文件触发的恶意内容来建立持久化。在macOS\OS X环境中,二进制文件Mach – O格式的定义字段有一些字段用于定义在加载二进制文件时执行某些操作,其中LC_LOAD_DYLIB头字段告诉macOS和OS X系统在执行应用之前要加载哪些动态库(dylib)。 攻击者如果通过一些工具,对Mach – O格式应用文件中动态库依赖项进行调整,就可以将攻击者准备好的恶意动态库临时添加到已编译的二进制文件中。当然,因为二进制文件的修改,会导致二进制文件上的数字签名无效,但是攻击是可以通过简单地从二进制文件中删除LC_CODE_SIGNATURE来指定系统执行应用时不检查签名。
T1546.011 事件触发执行:应用 Shimming 攻击者可以通过执行由应用程序填充触发的恶意内容来建立持久化和/或提升特权。创建 Microsoft 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系统有部分辅助功能可在登录前通过组合键启动,攻击者可修改其启动方式,用恶意程序替代,无需登录系统即可执行恶意代码。常见可利用的辅助功能程序有粘滞键(sethc.exe)、轻松访问(utilman.exe)等,还存在其他可利用的辅助功能程序。攻击者可能替换二进制文件或修改注册表指针/引用,在较新版本系统中,部分操作需考虑数字签名等条件。
T1546.009 事件触发执行:AppCert DLLs 攻击者可以通过执行由加载到进程中的AppCert DLL触发的恶意内容来建立持久化或提升特权。在Windows下,若进程调用特定API,系统会加载AppCertDLLs项中指定的DLL,攻击者可利用此机制进行恶意DLL加载和权限提升,实现攻击持久化。
T1546.003 事件触发执行:WMI事件订阅 攻击者可以通过Windows内置的WMI事件订阅机制触发恶意代码执行,以建立持久化和提权。WMI事件订阅功能可安装事件过滤器,在定义的事件发生时执行绑定的代码。攻击者可配置WMI订阅来执行任意代码,通常将WMI脚本编译成MOF文件创建恶意订阅,执行由WMI提供程序主机进程代理,可能导致SYSTEM特权。
T1546.001 事件触发执行:更改文件默认关联程序 攻击者可以通过修改文件默认关联程序来触发恶意内容执行以建立持久化。Windows系统中,可通过修改注册表中相关项,使特定文件打开时执行恶意程序,从而实现持久化和权限提升。
T1546.014 事件触发执行:Emond 攻击者可以利用Emond服务,在定义的事件发生时执行恶意命令,实现持久化和提权。Emond是macOS/OS X环境下的启动守护程序,通过执行规则文件中的脚本,在系统启动或用户认证等事件发生时执行命令,可能以root权限运行。
T1546.004 事件触发执行:.bash_profile 和 .bashrc文件 攻击者在Linux/类Unix环境下,可通过用户Shell触发的恶意内容执行来建立持久化。.bash_profile和.bashrc文件是包含Shell命令的脚本,在新的Shell程序打开或用户登录时会自动执行其中的命令。
T1546.015 事件触发执行:COM劫持 攻击者可能利用Windows系统的COM系统插入恶意代码,通过劫持COM引用和关系,在合法软件执行时触发恶意内容,实现持久化和提权。
T1546.010 事件触发执行:AppInit DLLs 攻击者可以通过执行由加载到进程中的AppInit DLL触发的恶意内容来建立持久化或提升特权。在Windows系统下,若程序加载user32.dll,会加载注册表AppInit_DLLs项指定的DLL,攻击者可利用此机制加载恶意DLL进行提权和持久化攻击。
T1546.002 事件触发执行:屏幕保护 攻击者可通过屏幕保护程序设置,在用户不活动特定时间段后运行恶意软件,实现持久化。
T1546.016 Installer Packages 攻击者可能通过安装程序包触发恶意内容执行来建立持久化和提权。安装程序包包含安装前后运行的脚本,这些脚本执行时可能继承提升的权限,攻击者可利用此特性执行恶意代码。
T1546.007 事件触发执行:Netsh Helper DLL 攻击者可以通过持久化劫持Netsh的帮助程序DLL方式触发恶意代码的执行。Netsh.exe支持对扩展功能添加帮助DLL文件,已注册的netsh.exe帮助程序DLL的路径记录在Windows注册表中,攻击者可利用此进行持久化攻击。
T1134 操纵访问令牌 Windows使用访问令牌来确定正在运行进程的所有权。操作访问令牌致使正在运行的进程看起来像是其它进程的子进程,或者好像属于启动该进程的用户之外的其他人。攻击者可以使用内置的windows API函数来复制现有进程中的访问令牌,即“令牌窃取”,然后将这些令牌用于现有进程或创建新的进程,可能在管理员权限下窃取令牌,还可将管理员权限提升至system权限,可使用令牌向远程系统进行身份认证。任何用户都可创建模拟令牌,还有其它机制可用于修改访问令牌。 攻击者可以使用内置的windows API函数来复制现有进程中的访问令牌,然后将这些令牌用于现有进程或创建新的进程。 操纵访问令牌子技术包括使用令牌创建进程、模拟或窃取令牌、制作和模拟令牌、父进程ID欺骗以及SID历史注入等。
T1134.002 操纵访问令牌:使用令牌创建进程 攻击者使用DuplicateToken(Ex)复制所需的访问令牌,并将其与CreateProcessWithTokenW一起使用创建在模拟用户的上下文中运行新进程,可用于在其他用户的安全上下文中创建新进程。
T1134.001 操纵访问令牌:模拟或窃取令牌 攻击者可以使用DuplicateToken复制现有令牌来创建一个新的访问令牌,该令牌可以与ImpersonateLoggedOnUser一起使用,以调用线程模拟已登录的用户上下文,或者与SetThreadToken一起使用,将模拟令牌分配给线程。当目标用户在系统中不具备网络登录会话时,可将新令牌分配给现有进程。
T1134.003 操纵访问令牌:制作和模拟令牌 攻击者若拥有用户名和密码但用户未登录系统,可使用LogonUser函数为用户创建登录会话,返回新会话的访问令牌副本,再用SetThreadToken将令牌分配给线程。
T1134.004 操纵访问令牌:父级进程ID欺骗 攻击者可能滥用机制逃避防御,例如阻止异常/恶意进程直接由Office文档的PPID产生,将其欺骗成正常进程(如explorer.exe)。给PPID分配权限还能实现提升权限,通过将父进程分配为SYSTEM权限的进程,使进程通过继承而来的令牌提升权限。
T1134.005 操纵访问令牌:SID历史注入 攻击者借助域管理员权限,将收集到的已知SID值插入SID历史中,以模仿任何用户/组,实现对本地资源或跨域的高权限访问。
T1484 组策略修改 组策略允许集中管理Active Directory(AD)中的用户和计算机设置。GPO是用于组策略设置的容器,由存储在可预测网络路径中的文件组成。默认情况下,域中的所有用户帐户都具有读取GPO的权限,可将GPO访问控制权限委派给特定用户或组。恶意GPO修改可用于实施计划任务、禁用安全工具等,可能导致大量潜在攻击,攻击者可能修改特定用户权限以实现对域的控制。
T1484.002 Domain Trust Modification 攻击者可能会添加新的域信任或修改现有域信任的属性,以逃避防御和/或提升权限。域信任细节允许在域之间应用身份验证和授权属性,以访问共享资源。操纵域信任可能使攻击者通过修改设置添加他们控制的对象来提升权限和/或逃避防御。例如,可用于伪造SAML令牌,还可将域转换为联合域,进行恶意信任修改。
T1484.001 Group Policy Modification 攻击者可能会修改组策略对象(GPO),以颠覆域的预期自由访问控制,通常旨在提升域上的权限。组策略允许集中管理Active Directory(AD)中的用户和计算机设置。GPO由存储在可预测网络路径中的文件组成,默认情况下,域中的所有用户帐户都有读取GPO的权限,可将GPO访问控制权限委派给特定用户或组。恶意GPO修改可用于实施多种恶意行为,由于GPO可控制AD环境中的许多用户和计算机设置,这种滥用可能导致大量潜在攻击。例如,可利用公开脚本通过修改GPO设置自动执行恶意计划任务,在某些情况下,攻击者可能修改特定用户权限以实现对域的完全控制的微妙AD后门。