执行
攻击者试图在目标系统上运行恶意代码。
技术: 38
编号 | 名字 | 描述 |
---|---|---|
T1047 | Windows管理规范 | 对手可能会滥用Windows管理规范(WMI)来执行恶意命令和负载。WMI是为程序员设计的,是Windows系统上管理数据和操作的基础设施。(引用: WMI 1-3) WMI是一种管理功能,提供了一个统一的环境来访问Windows系统组件。 WMI服务支持本地和远程访问,后者通过远程服务如分布式组件对象模型和Windows远程管理来实现。(引用: WMI 1-3) 远程WMI通过DCOM使用135端口,而通过WinRM使用HTTP时使用5985端口,使用HTTPS时使用5986端口。(引用: WMI 1-3) (引用: Mandiant WMI) 对手可以使用WMI与本地和远程系统交互,并将其作为执行各种行为的手段,例如用于发现以及执行命令和负载。(引用: Mandiant WMI) 例如,可以通过命令wmic.exe Shadowcopy Delete (即抑制系统恢复)滥用wmic.exe 删除影子副本。(引用: WMI 6) 注意: wmic.exe 自2024年1月起已被弃用,WMIC功能在Windows 11+上“默认禁用”。WMIC将从后续的Windows版本中移除,并由PowerShell作为主要的WMI接口替代。(引用: WMI 7,8) 除了PowerShell和wbemtool.exe 等工具外,还可以通过C++、.NET、VBScript等编程语言使用COM API与WMI进行编程交互。(引用: WMI 7,8) |
T1053 | 计划任务/作业 | 对手可能会滥用任务调度功能来促进恶意代码的初始或定期执行。所有主要操作系统中都存在用于在指定日期和时间执行程序或脚本的实用程序。只要满足适当的身份验证要求(例如:Windows 环境中的 RPC 和文件及打印机共享),也可以在远程系统上调度任务。在远程系统上调度任务通常可能需要成为远程系统上管理员或其他特权组的成员。(引用: TechNet Task Scheduler Security) 对手可能会使用任务调度在系统启动时或定期执行程序以实现持久性。这些机制也可以被滥用以在指定账户(例如具有提升权限/特权的账户)的上下文中运行进程。类似于系统二进制代理执行,对手还滥用任务调度来潜在地掩盖受信任系统进程下的一次性执行。(引用: ProofPoint Serpent) |
T1053.002 | At | 攻击者可能滥用at实用程序来执行任务调度,以初始或重复执行恶意代码。at实用程序作为Windows、Linux和macOS中的可执行文件存在,用于在指定的时间和日期调度任务。尽管在Windows环境中已弃用,转而使用计划任务的schtasks,但使用at需要任务调度程序服务正在运行,并且用户必须以本地管理员组成员的身份登录。除了显式运行at 命令外,攻击者还可以通过直接利用Windows管理工具 Win32_ScheduledJob WMI类来调度任务。(Citation: Malicious Life by Cybereason) 在Linux和macOS上,超级用户以及添加到at.allow 文件中的任何用户都可以调用at。如果at.allow 文件不存在,则检查at.deny 文件。未列在at.deny 中的每个用户名都允许调用at。如果at.deny 存在且为空,则允许全局使用at。如果两个文件都不存在(通常是基线情况),则只有超级用户可以使用at。(Citation: Linux at) 攻击者可能使用at在系统启动时或按计划执行程序以实现持久性。at还可用于在横向移动期间进行远程执行或在指定账户(如SYSTEM)的上下文中运行进程。 在Linux环境中,攻击者还可能滥用at通过任务生成交互式系统shell或运行系统命令来突破受限环境。同样,如果二进制文件允许通过sudo 以超级用户身份运行,at也可用于权限提升。(Citation: GTFObins at) |
T1053.003 | Cron | 对手可能会滥用cron 实用程序来执行任务调度,以初始或定期执行恶意代码。(引用: 20 macOS Common Tools and Techniques) cron 实用程序是类Unix操作系统的基于时间的作业调度程序。crontab 文件包含要运行的cron条目和指定的执行时间。任何crontab 文件都存储在特定于操作系统的文件路径中。 对手可能会在Linux或Unix环境中使用cron 在系统启动时或定期执行程序以实现持久性。 |
T1053.005 | 计划任务 | 对手可能会滥用Windows任务计划程序来执行任务调度,以初始或定期执行恶意代码。有多种方法可以访问Windows中的任务计划程序。可以直接在命令行上运行schtasks实用程序,或者可以通过控制面板中的管理工具部分打开任务计划程序的GUI。(引用: Stack Overflow) 在某些情况下,对手使用了Windows任务计划程序的.NET包装器,或者使用了Windows netapi32库和Windows管理工具 (WMI)来创建计划任务。对手还可以利用Powershell Cmdlet Invoke-CimMethod ,该Cmdlet利用WMI类PS_ScheduledTask 通过XML路径创建计划任务。(引用: Red Canary - Atomic Red Team) 对手可能会使用Windows任务计划程序在系统启动时或定期执行程序以保持持久性。Windows任务计划程序还可以被滥用以进行远程执行作为横向移动的一部分,或在指定帐户(如SYSTEM)的上下文中运行进程。类似于系统二进制代理执行,对手还滥用了Windows任务计划程序,以便在签名/受信任的系统进程下掩盖一次性执行。(引用: ProofPoint Serpent) 对手还可能创建“隐藏”计划任务(即隐藏工件),这些任务可能对防御工具和用于枚举任务的手动查询不可见。具体来说,对手可能通过删除关联的安全描述符(SD)注册表值(删除此值必须使用SYSTEM权限完成)来隐藏任务。(引用: SigmaHQ)(引用: Tarrask scheduled task) 对手还可能采用其他方法隐藏任务,例如更改关联注册表项中的元数据(例如Index 值)。(引用: Defending Against Scheduled Task Attacks in Windows Environments) |
T1053.006 | Systemd计时器 | 对手可能滥用systemd计时器来执行任务调度,以初始或定期执行恶意代码。Systemd计时器是文件扩展名为.timer 的单元文件,用于控制服务。计时器可以设置为在日历事件或相对于起点的时间跨度后运行。它们可以作为Linux环境中Cron的替代品。(引用: archlinux Systemd Timers Aug 2020) Systemd计时器可以通过systemctl 命令行实用程序远程激活,该实用程序通过SSH操作。(引用: Systemd Remote Control) 每个.timer 文件必须有一个对应的.service 文件,名称相同,例如example.timer 和example.service 。.service 文件是Systemd服务单元文件,由systemd系统和服务管理器管理。(引用: Linux man-pages: systemd January 2014) 特权计时器写入/etc/systemd/system/ 和/usr/lib/systemd/system ,而用户级别的写入~/.config/systemd/user/ 。 对手可能使用systemd计时器在系统启动时或定期执行恶意代码以实现持久性。(引用: Arch Linux Package Systemd Compromise BleepingComputer 10JUL2018)(引用: gist Arch package compromise 10JUL2018)(引用: acroread package compromised Arch Linux Mail 8JUL2018) 使用特权路径安装的计时器可能用于保持root级别的持久性。对手也可能安装用户级别的计时器以实现用户级别的持久性。(引用: Falcon Sandbox smp: 28553b3a9d) |
T1053.007 | 容器编排任务 | 对手可能会滥用容器编排工具(如 Kubernetes)提供的任务调度功能,来调度部署配置为执行恶意代码的容器。容器编排任务会在特定日期和时间运行这些自动化任务,类似于 Linux 系统上的 cron 任务。这种类型的部署还可以配置为随着时间的推移维护一定数量的容器,从而自动化在集群中保持持久性的过程。 在 Kubernetes 中,可以使用 CronJob 来调度运行一个或多个容器以执行特定任务的 Job。(引用: Kubernetes Jobs)(引用: Kubernetes CronJob) 因此,对手可能会利用 CronJob 来调度部署在集群内各个节点上执行恶意代码的 Job。(引用: Threat Matrix for Kubernetes) |
T1059 | 命令和脚本解释器 | 对手可能会滥用命令和脚本解释器来执行命令、脚本或二进制文件。这些接口和语言提供了与计算机系统交互的方法,是许多不同平台的常见功能。大多数系统都带有一些内置的命令行界面和脚本功能,例如,macOS和Linux发行版包括某种形式的Unix Shell,而Windows安装包括Windows命令行和PowerShell。 还有一些跨平台的解释器,例如Python,以及那些通常与客户端应用程序相关的解释器,例如JavaScript和Visual Basic。 对手可能会以各种方式滥用这些技术来执行任意命令。命令和脚本可以嵌入到传递给受害者的初始访问有效载荷中,作为诱饵文档或从现有C2下载的二级有效载荷。对手还可能通过交互式终端/外壳执行命令,以及利用各种远程服务来实现远程执行。(引用: Powershell Remote Commands)(引用: Cisco IOS Software Integrity Assurance - Command History)(引用: Remote Shell Execution in Python) |
T1059.001 | PowerShell | 对手可能会滥用PowerShell命令和脚本进行执行。PowerShell是Windows操作系统中包含的强大交互式命令行界面和脚本环境。(引用: TechNet PowerShell) 对手可以使用PowerShell执行许多操作,包括信息发现和代码执行。示例包括Start-Process cmdlet,可用于运行可执行文件,以及Invoke-Command cmdlet,可在本地或远程计算机上运行命令(尽管使用PowerShell连接远程系统需要管理员权限)。 PowerShell还可以用于从Internet下载和运行可执行文件,这些文件可以从磁盘或内存中执行,而无需触及磁盘。 有许多基于PowerShell的攻击测试工具可用,包括Empire、PowerSploit、PoshC2和PSAttack。(引用: Github PSAttack) PowerShell命令/脚本也可以通过.NET框架和Windows公共语言接口(CLI)暴露的PowerShell底层System.Management.Automation 程序集DLL接口执行,而无需直接调用powershell.exe 二进制文件。(引用: Sixdub PowerPick Jan 2016)(引用: SilentBreak Offensive PS Dec 2015)(引用: Microsoft PSfromCsharp APR 2014) |
T1059.002 | AppleScript | 对手可能会滥用 AppleScript 进行执行。AppleScript 是一种 macOS 脚本语言,旨在通过称为 AppleEvents 的应用程序间消息控制应用程序和操作系统的部分。(引用: Apple AppleScript) 这些 AppleEvent 消息可以独立发送或通过 AppleScript 轻松编写脚本。这些事件可以定位打开的窗口、发送击键并与几乎任何本地或远程打开的应用程序交互。 可以通过命令行运行脚本,使用 osascript /path/to/script 或 osascript -e "script here" 。除了命令行,脚本还可以通过多种方式执行,包括邮件规则、Calendar.app 警报和 Automator 工作流程。通过在脚本文件开头添加 #!/usr/bin/osascript ,AppleScripts 也可以作为纯文本 shell 脚本执行。(引用: SentinelOne AppleScript) AppleScripts 不需要调用 osascript 即可执行。但是,它们可以通过使用 macOS 本机 API NSAppleScript 或 OSAScript 从 mach-O 二进制文件中执行,这两者都独立于 /usr/bin/osascript 命令行实用程序执行代码。 对手可能会滥用 AppleScript 执行各种行为,例如与打开的 SSH 连接交互、移动到远程计算机,甚至向用户显示虚假的对话框。这些事件无法远程启动应用程序(它们可以在本地启动),但如果它们已经在远程运行,则可以与应用程序交互。在 macOS 10.10 Yosemite 及更高版本上,AppleScript 能够执行 本机 API,否则需要在 mach-O 二进制文件格式中编译和执行。(引用: SentinelOne macOS Red Team) 由于这是一种脚本语言,它也可以用于启动更常见的技术,例如通过 Python 的反向 shell。(引用: Macro Malware Targets Macs) |
T1059.003 | Windows 命令行 | 对手可能会滥用 Windows 命令行进行执行。Windows 命令行 (cmd) 是 Windows 系统上的主要命令提示符。Windows 命令提示符可用于控制系统的几乎任何方面,不同子集的命令需要不同的权限级别。可以通过 远程服务(如 SSH)远程调用命令提示符。(引用: SSH in Windows) 批处理文件(例如 .bat 或 .cmd)还提供了一个顺序命令列表供 shell 运行,以及条件和循环等常规脚本操作。批处理文件的常见用途包括长时间或重复的任务,或需要在多个系统上运行相同的命令集。 对手可能会利用 cmd 执行各种命令和负载。常见用途包括使用 cmd 执行单个命令,或通过命令和控制通道交互式滥用 cmd 进行输入和输出。 |
T1059.004 | Unix Shell | 对手可能滥用Unix shell命令和脚本进行执行。Unix shell是Linux和macOS系统上的主要命令提示符,尽管根据具体的操作系统或发行版,存在许多Unix shell的变体(例如sh、bash、zsh等)。(引用: DieNet Bash)(引用: Apple ZShell) Unix shell可以控制系统的每个方面,某些命令需要提升的权限。 Unix shell还支持脚本,允许顺序执行命令以及其他典型的编程操作,如条件和循环。shell脚本的常见用途包括长时间或重复的任务,或需要在多个系统上运行相同的命令集。 对手可能滥用Unix shell执行各种命令或有效载荷。通过命令和控制通道或横向移动(如使用SSH)可以访问交互式shell。对手还可能利用shell脚本传递和执行多个命令,或作为用于持久性的有效载荷的一部分。 |
T1059.005 | Visual Basic | 对手可能会滥用Visual Basic (VB)进行执行。VB是由Microsoft创建的编程语言,与许多Windows技术(如组件对象模型和本机API)通过Windows API互操作。尽管被标记为遗留,没有计划的未来演变,VB集成并支持.NET Framework和跨平台.NET Core。(引用: VB .NET Mar 2020)(引用: VB Microsoft) 基于VB的衍生语言也已创建,例如Visual Basic for Applications (VBA)和VBScript。VBA是一种事件驱动的编程语言,内置于Microsoft Office以及几个第三方应用程序中。(引用: Microsoft VBA)(引用: Wikipedia VBA) VBA使文档能够包含用于自动执行任务和主机上其他功能的宏。VBScript是Windows主机上的默认脚本语言,也可以在HTML应用程序(HTA)网页上代替JavaScript使用,尽管大多数现代浏览器不支持VBScript。(引用: Microsoft VBScript) 对手可能会使用VB有效载荷执行恶意命令。常见的恶意使用包括使用VBScript自动执行行为或将VBA内容嵌入鱼叉式网络钓鱼附件有效载荷中(这也可能涉及Web标记绕过以启用执行)。(引用: Default VBS macros Blocking) |
T1059.006 | Python | 对手可能会滥用Python命令和脚本进行执行。Python是一种非常流行的脚本/编程语言,具有执行许多功能的能力。Python可以通过命令行交互式执行(通过python.exe 解释器)或通过脚本(.py)编写并分发到不同系统。Python代码还可以编译成二进制可执行文件。(引用: Zscaler APT31 Covid-19 October 2020) Python附带许多内置包,可以与底层系统交互,例如文件操作和设备I/O。对手可以使用这些库下载和执行命令或其他脚本,以及执行各种恶意行为。 |
T1059.007 | JavaScript | 对手可能会滥用各种 JavaScript 实现来执行。JavaScript (JS) 是一种平台无关的脚本语言(在运行时即时编译),通常与网页中的脚本相关,但 JS 也可以在浏览器外的运行时环境中执行。(引用: NodeJS) JScript 是相同脚本标准的 Microsoft 实现。JScript 通过 Windows 脚本引擎解释,因此与 Windows 的许多组件集成,如 Component Object Model 和 Internet Explorer HTML 应用程序 (HTA) 页面。(引用: JScrip May 2018)(引用: Microsoft JScript 2007)(引用: Microsoft Windows Scripts) JavaScript for Automation (JXA) 是基于 JavaScript 的 macOS 脚本语言,是 Apple 的开放脚本架构 (OSA) 的一部分,在 OSX 10.10 中引入。Apple 的 OSA 提供了控制应用程序、与操作系统接口以及访问 Apple 内部 API 的脚本功能。从 OSX 10.10 开始,OSA 仅支持两种语言,JXA 和 AppleScript。脚本可以通过命令行实用程序 osascript 执行,可以通过 osacompile 编译成应用程序或脚本文件,并且可以通过 OSAKit 框架在其他程序的内存中编译和执行。(引用: Apple About Mac Scripting 2016)(引用: SpecterOps JXA 2020)(引用: SentinelOne macOS Red Team)(引用: Red Canary Silver Sparrow Feb2021)(引用: MDSec macOS JXA and VSCode) 对手可能会滥用各种 JavaScript 实现来执行各种行为。常见的用途包括在网站上托管恶意脚本作为 Drive-by Compromise 的一部分,或下载并执行这些脚本文件作为二级有效负载。由于这些有效负载是基于文本的,对手也很常见地将其内容混淆作为 Obfuscated Files or Information 的一部分。 |
T1059.008 | 网络设备 CLI | 对手可能会滥用网络设备上的脚本或内置命令行解释器 (CLI) 执行恶意命令和负载。CLI 是用户和管理员与设备交互的主要方式,用于查看系统信息、修改设备操作或执行诊断和管理功能。CLI 通常包含执行不同命令所需的各种权限级别。 脚本解释器自动化任务并扩展了网络操作系统中包含的命令集之外的功能。CLI 和脚本解释器可以通过直接控制台连接或通过远程方式(如 telnet 或 SSH)访问。 对手可以使用网络 CLI 更改网络设备的行为和操作。CLI 可用于操纵流量流以拦截或操纵数据,修改启动配置参数以加载恶意系统软件,或禁用安全功能或日志记录以避免检测。(引用: Cisco Synful Knock Evolution) |
T1059.009 | 云API | 对手可能会滥用云API来执行恶意命令。云环境中的API提供各种功能,是以编程方式访问租户几乎所有方面的功能丰富的方法。这些API可以通过各种方法使用,例如命令行解释器(CLI)、浏览器中的Cloud Shell、PowerShell模块(如Azure for PowerShell)(引用: Microsoft - Azure PowerShell),或适用于Python等语言的软件开发工具包(SDK)。 云API功能可能允许跨租户中的所有主要服务(如计算、存储、身份和访问管理(IAM)、网络和安全策略)进行管理访问。 在具有适当权限的情况下(通常通过使用应用程序访问令牌和Web会话Cookie等凭据),对手可能会滥用云API来调用各种执行恶意操作的功能。例如,可以通过安装在云托管或本地主机上的二进制文件访问CLI和PowerShell功能,或通过许多云平台(如AWS、Azure和GCP)提供的基于浏览器的Cloud Shell访问。这些Cloud Shell通常是一个打包的统一环境,用于使用CLI和/或托管在云环境中的脚本模块。 |
T1059.010 | AutoHotKey 和 AutoIT | 对手可能会使用AutoIT和AutoHotKey自动化脚本执行命令和执行恶意任务。AutoIT和AutoHotkey(AHK)是脚本语言,使用户能够自动化Windows任务。这些自动化脚本可以用于执行各种操作,例如点击按钮、输入文本以及打开和关闭程序。(引用: AutoIT)(引用: AutoHotKey) 对手可能会使用AHK(.ahk )和AutoIT(.au3 )脚本在受害者系统上执行恶意代码。例如,对手已使用AHK执行有效负载和其他模块化恶意软件,如键盘记录器。对手还使用包含嵌入恶意软件的自定义AHK文件作为网络钓鱼有效负载。(引用: Splunk DarkGate) 这些脚本还可以编译成自包含的可执行有效负载(.exe )。(引用: AutoIT)(引用: AutoHotKey) |
T1059.011 | Lua | 对手可能会滥用Lua命令和脚本进行执行。Lua是一种跨平台的脚本和编程语言,主要设计用于嵌入应用程序中。Lua可以通过命令行(通过独立的lua解释器)、脚本(.lua )或从Lua嵌入程序(通过struct lua_State )执行。(引用: Lua main page)(引用: Lua state) 对手可能会执行Lua脚本以实现恶意目的。对手可能会整合、滥用或替换现有的Lua解释器,以允许在运行时执行恶意Lua命令。(引用: PoetRat Lua)(引用: Lua Proofpoint Sunseed)(引用: Cyphort EvilBunny)(引用: Kaspersky Lua) |
T1072 | 软件部署工具 | 对手可能会访问并使用企业内安装的集中软件套件来执行命令并在网络中横向移动。配置管理和软件部署应用程序可能用于企业网络或云环境中的常规管理目的。这些系统也可能集成到 CI/CD 管道中。此类解决方案的示例包括:SCCM、HBSS、Altiris、AWS 系统管理器、Microsoft Intune、Azure Arc 和 GCP 部署管理器。 访问网络范围或企业范围的端点管理软件可能使对手能够在所有连接的系统上实现远程代码执行。访问可能用于横向移动到其他系统、收集信息或造成特定影响,例如擦除所有端点上的硬盘。 基于 SaaS 的配置管理服务可能允许对云托管实例进行广泛的 云管理命令,以及在本地端点上执行任意命令。例如,Microsoft 配置管理器允许全局或 Intune 管理员以 SYSTEM 身份在加入 Entra ID 的本地设备上运行脚本。(引用: SpecterOps Lateral Movement from Azure to On-Prem AD 2020) 此类服务还可能利用 Web 协议 与对手拥有的基础设施通信。(引用: Mitiga Security Advisory: SSM Agent as Remote Access Trojan) 网络基础设施设备也可能具有配置管理工具,对手可以类似地滥用这些工具。(引用: Fortinet Zero-Day and Custom Malware Used by Suspected Chinese Actor in Espionage Operation) 此操作所需的权限因系统配置而异;本地凭据可能足以直接访问第三方系统,或者可能需要特定的域凭据。然而,系统可能需要管理员账户才能登录或访问特定功能。 |
T1106 | 本机 API | 对手可能会与本机操作系统应用程序编程接口 (API) 交互以执行行为。本机 API 提供了一种受控方式来调用内核中的低级操作系统服务,例如涉及硬件/设备、内存和进程的服务。(引用: NT API Windows)(引用: Linux Kernel API) 这些本机 API 在系统启动期间(当其他系统组件尚未初始化时)以及在例行操作期间执行任务和请求时由操作系统使用。 对手可能会滥用这些操作系统 API 函数作为执行行为的一种手段。类似于 命令和脚本解释器,本机 API 及其接口层次结构提供了与受害系统的各个组件交互和利用的机制。 本机 API 函数(例如 NtCreateProcess )可以通过系统调用/系统调用直接调用,但这些功能通常也通过接口和库暴露给用户模式应用程序。(引用: OutFlank System Calls)(引用: CyberBit System Calls)(引用: MDSec System Calls) 例如,Windows API CreateProcess() 或 GNU fork() 等函数将允许程序和脚本启动其他进程。(引用: Microsoft CreateProcess)(引用: GNU Fork) 这可能允许 API 调用者执行二进制文件、运行 CLI 命令、加载模块等,因为存在数千个用于各种系统操作的类似 API 函数。(引用: Microsoft Win32)(引用: LIBC)(引用: GLIBC) 更高级的软件框架,例如 Microsoft .NET 和 macOS Cocoa,也可用于与本机 API 交互。这些框架通常为 API 功能提供语言包装/抽象,并设计用于代码的易用性/可移植性。(引用: Microsoft NET)(引用: Apple Core Services)(引用: MACOS Cocoa)(引用: macOS Foundation) 对手可能会使用汇编语言直接或间接调用系统调用,试图规避防御传感器和检测签名,例如用户模式 API 挂钩。(引用: Redops Syscalls) 对手还可能尝试篡改与 API 监控相关的传感器和防御工具,例如通过 禁用或修改工具 取消挂钩监控的函数。 |
T1129 | 共享模块 | 对手可能通过加载共享模块来执行恶意有效负载。共享模块是加载到进程中的可执行文件,用于提供对可重用代码的访问,例如特定的自定义函数或调用操作系统API函数(即本机API)。 对手可能利用此功能作为在受害者系统上执行任意有效负载的一种方式。例如,对手可以将其恶意软件的功能模块化为执行各种功能的共享对象,例如管理C2网络通信或执行特定的目标操作。 Linux和macOS模块加载器可以从任意本地路径加载和执行共享对象。此功能位于dlfcn.h 中的函数如dlopen 和dlsym 。尽管macOS可以执行.so 文件,但常见做法是使用.dylib 文件。(引用: Apple Dev Dynamic Libraries)(引用: Linux Shared Libraries)(引用: RotaJakiro 2021 netlab360 analysis)(引用: Unit42 OceanLotus 2017) Windows模块加载器可以被指示从任意本地路径和任意通用命名约定(UNC)网络路径加载DLL。这种功能位于NTDLL.dll 中,是Windows本机API的一部分,通过运行时调用的函数如LoadLibrary 。(引用: Microsoft DLL) |
T1203 | 客户端执行漏洞利用 | 对手可能会利用客户端应用程序中的软件漏洞来执行代码。由于不安全的编码实践,软件中可能存在漏洞,导致意外行为。对手可以利用某些漏洞通过有针对性的漏洞利用来执行任意代码。通常,对攻击工具包最有价值的漏洞是那些可用于在远程系统上获得代码执行的漏洞,因为它们可用于访问该系统。用户期望看到与他们常用的应用程序相关的文件,因此它们是漏洞研究和开发的有用目标,因为它们具有很高的实用性。 存在几种类型: ### 基于浏览器的漏洞利用 Web 浏览器是通过驱动器式妥协和鱼叉式网络钓鱼链接的常见目标。端点系统可能通过正常的网页浏览或某些用户被目标鱼叉式网络钓鱼电子邮件中的链接引导到对手控制的站点来利用 Web 浏览器。这些通常不需要用户采取行动即可执行漏洞利用。 ### 办公应用程序 常见的办公和生产力应用程序(如 Microsoft Office)也通过网络钓鱼成为目标。恶意文件将直接作为附件传输或通过链接下载。这些需要用户打开文档或文件才能运行漏洞利用。 ### 常见的第三方应用程序 其他常见或在目标网络中部署的软件应用程序也可能被用于漏洞利用。诸如 Adobe Reader 和 Flash 等应用程序在企业环境中很常见,已被对手常规地用于尝试访问系统。根据软件和漏洞的性质,有些可能在浏览器中被利用,或需要用户打开文件。例如,一些 Flash 漏洞利用已作为 Microsoft Office 文档中的对象传递。 |
T1204 | 用户执行 | 对手可能依赖用户的特定操作来获得执行权限。用户可能会受到社会工程的影响,执行恶意代码,例如打开恶意文档文件或链接。这些用户操作通常会作为网络钓鱼的后续行为被观察到。 虽然用户执行通常发生在初始访问之后不久,但它也可能发生在入侵的其他阶段,例如当对手将文件放置在共享目录或用户桌面上,希望用户点击它时。这种活动也可能在内部鱼叉式网络钓鱼之后不久被看到。 对手还可能欺骗用户执行以下操作: * 启用远程访问软件,允许对手直接控制系统 * 在浏览器中运行恶意JavaScript,允许对手窃取Web会话Cookie(引用: Talos Roblox Scam 2023)(引用: Krebs Discord Bookmarks 2023) * 下载并执行恶意软件以进行用户执行 * 强迫用户手动复制、粘贴并执行恶意代码(引用: Reliaquest-execution)(引用: proofpoint-selfpwn) 例如,技术支持骗局可以通过网络钓鱼、语音钓鱼或各种形式的用户交互来促进。对手可以使用这些方法的组合,例如欺骗和推广免费电话号码或呼叫中心,用于引导受害者访问恶意网站,以交付和执行包含恶意软件或远程访问软件的有效载荷。(引用: Telephone Attack Delivery) |
T1204.001 | 恶意链接 | 攻击者可能依赖用户点击恶意链接以获得执行。用户可能会受到社会工程学的攻击,诱使他们点击导致代码执行的链接。此用户操作通常会被视为钓鱼链接的后续行为。点击链接还可能导致其他执行技术,例如通过客户端执行漏洞利用利用浏览器或应用程序漏洞。链接还可能导致用户下载需要通过恶意文件执行的文件。 |
T1204.002 | 恶意文件 | 对手可能依赖用户打开恶意文件以获得执行。用户可能会受到社会工程的影响,诱使他们打开一个将导致代码执行的文件。此用户操作通常会作为鱼叉式网络钓鱼附件的后续行为观察到。对手可能会使用多种类型的文件,这些文件需要用户执行,包括.doc、.pdf、.xls、.rtf、.scr、.exe、.lnk、.pif、.cpl和.reg。 对手可能会采用各种形式的伪装和混淆文件或信息来增加用户打开并成功执行恶意文件的可能性。这些方法可能包括使用熟悉的命名约定和/或密码保护文件,并向用户提供如何打开文件的说明。(引用: Password Protected Word Docs) 虽然恶意文件通常在初始访问后不久发生,但它也可能在入侵的其他阶段发生,例如当对手将文件放置在共享目录或用户桌面上,希望用户点击它。此活动也可能在内部鱼叉式网络钓鱼后不久看到。 |
T1204.003 | 恶意镜像 | 对手可能依赖用户运行恶意镜像来促进执行。Amazon Web Services (AWS) Amazon Machine Images (AMIs)、Google Cloud Platform (GCP) Images 和 Azure Images 以及流行的容器运行时(如 Docker)都可能被后门化。后门化的镜像可能通过上传恶意软件上传到公共存储库,用户可能会在不知情的情况下下载并部署来自镜像的实例或容器,从而绕过专门实现初始访问的技术。这可能导致在实例或容器中执行恶意代码,例如执行加密货币挖矿的代码。(引用: Summit Route Malicious AMIs) 对手还可能通过命名镜像的方式增加用户错误部署实例或容器的机会(例如:匹配合法名称或位置)。(引用: Aqua Security Cloud Native Threat Report June 2021) |
T1559 | 进程间通信 | 对手可能会滥用进程间通信(IPC)机制进行本地代码或命令执行。IPC通常用于进程共享数据、相互通信或同步执行。IPC也常用于避免死锁等情况,死锁是指进程陷入循环等待模式。 对手可能会滥用IPC执行任意代码或命令。IPC机制可能因操作系统而异,但通常以编程语言/库或本机接口(如Windows 动态数据交换或组件对象模型)的形式存在。Linux环境支持几种不同的IPC机制,其中两种是套接字和管道。(引用: Linux IPC) 更高级的执行媒介,如命令和脚本解释器,也可能利用底层的IPC机制。对手还可能使用远程服务,如分布式组件对象模型,以促进远程IPC执行。(引用: Fireeye Hunting COM June 2019) |
T1559.001 | 组件对象模型 | 对手可能会使用 Windows 组件对象模型 (COM) 进行本地代码执行。COM 是本机 Windows 应用程序编程接口 (API) 的进程间通信 (IPC) 组件,使软件对象之间能够进行交互,或实现一个或多个接口的可执行代码。(引用: Fireeye Hunting COM June 2019) 通过 COM,客户端对象可以调用服务器对象的方法,服务器对象通常是二进制动态链接库 (DLL) 或可执行文件 (EXE)。(引用: Microsoft COM) 远程 COM 执行通过远程服务(如分布式组件对象模型 (DCOM))实现。(引用: Fireeye Hunting COM June 2019) 暴露了各种 COM 接口,可以通过多种编程语言(如 C、C++、Java 和Visual Basic)滥用以调用任意执行。(引用: Microsoft COM) 还存在特定的 COM 对象,可以直接执行超出代码执行的功能,例如创建计划任务/作业、无文件下载/执行以及与权限提升和持久性相关的其他对手行为。(引用: Fireeye Hunting COM June 2019)(引用: ProjectZero File Write EoP Apr 2018) |
T1559.002 | 动态数据交换 | 对手可能会使用Windows动态数据交换(DDE)来执行任意命令。DDE是一种客户端-服务器协议,用于应用程序之间的一次性和/或连续的进程间通信(IPC)。一旦建立链接,应用程序可以自主交换由字符串、热数据链接(数据项更改时的通知)、热数据链接(数据项更改的复制)和命令执行请求组成的事务。 对象链接和嵌入(OLE),或在文档之间链接数据的能力,最初是通过DDE实现的。尽管被组件对象模型取代,但DDE可能在Windows 10和大多数Microsoft Office 2016中通过注册表项启用。(引用: BleepingComputer DDE Disabled in Word Dec 2017)(引用: Microsoft ADV170021 Dec 2017)(引用: Microsoft DDE Advisory Nov 2017) Microsoft Office文档可以通过DDE命令中毒,直接或通过嵌入文件,并用于通过网络钓鱼活动或托管的Web内容进行执行,避免使用Visual Basic for Applications(VBA)宏。(引用: SensePost PS DDE May 2016)(引用: Kettle CSV DDE Aug 2014)(引用: Enigma Reviving DDE Jan 2018)(引用: SensePost MacroLess DDE Oct 2017) 类似地,对手可能会感染有效负载,通过在CSV文件中嵌入DDE公式来执行应用程序和/或命令,意图通过Windows电子表格程序打开。(引用: OWASP CSV Injection)(引用: CSV Excel Macro Injection ) DDE还可以被在受感染机器上操作的对手利用,而无需直接访问命令和脚本解释器。DDE执行可以通过远程服务(如分布式组件对象模型(DCOM))远程调用。(引用: Fireeye Hunting COM June 2019) |
T1559.003 | XPC 服务 | 对手可以向 XPC 服务守护程序提供恶意内容以进行本地代码执行。macOS 使用 XPC 服务进行各种进程之间的基本进程间通信,例如在 XPC 服务守护程序和第三方应用程序特权帮助工具之间。应用程序可以使用低级 XPC 服务 C API 或高级 NSXPCConnection API 向 XPC 服务守护程序发送消息,该守护程序以 root 身份运行,以处理需要提升权限的任务(例如网络连接)。应用程序负责提供协议定义,该定义作为 XPC 服务的蓝图。开发人员通常使用 XPC 服务为应用程序提供稳定性和应用程序客户端与守护程序之间的权限分离。(引用: creatingXPCservices)(引用: Designing Daemons Apple Dev) 对手可以滥用 XPC 服务执行恶意内容。恶意执行请求可以通过应用程序的 XPC 服务处理程序传递。(引用: CVMServer Vuln)(引用: Learn XPC Exploitation) 这还可能包括识别和滥用不正确的 XPC 客户端验证和/或不良的输入参数清理以进行特权提升的利用。 |
T1569 | 系统服务 | 对手可能会滥用系统服务或守护进程来执行命令或程序。对手可以通过本地或远程与服务交互或创建服务来执行恶意内容。许多服务设置为在启动时运行,这有助于实现持久性(创建或修改系统进程),但对手也可以滥用服务进行一次性或临时执行。 |
T1569.001 | Launchctl | 对手可能会滥用 launchctl 执行命令或程序。Launchctl 与 launchd 交互,这是 macOS 的服务管理框架。Launchctl 支持在命令行上、交互式或甚至从标准输入重定向时接受子命令。(引用: Launchctl Man) 对手使用 launchctl 作为启动代理或启动守护程序执行命令和程序。常见的子命令包括:launchctl load 、launchctl unload 和 launchctl start 。对手可以使用脚本或手动运行命令 launchctl load -w "%s/Library/LaunchAgents/%s" 或 /bin/launchctl load 来执行启动代理或启动守护程序。(引用: Sofacy Komplex Trojan)(引用: 20 macOS Common Tools and Techniques) |
T1569.002 | 服务执行 | 攻击者可能滥用Windows服务控制管理器来执行恶意命令或负载。Windows服务控制管理器(services.exe )是管理和操作服务的接口。(Citation: Microsoft Service Control Manager) 服务控制管理器可通过GUI组件以及系统实用程序(如sc.exe 和Net)访问。 PsExec 也可用于通过服务控制管理器API创建的临时Windows服务执行命令或负载。(Citation: Russinovich Sysinternals) 诸如PsExec和sc.exe 之类的工具可以接受远程服务器作为参数,并可用于进行远程执行。 攻击者可能利用这些机制执行恶意内容。这可以通过执行新的或修改的服务来完成。此技术与Windows服务在服务持久性或权限提升期间结合使用。 |
T1609 | 容器管理命令 | 对手可能会滥用容器管理服务在容器内执行命令。容器管理服务(如Docker守护进程、Kubernetes API服务器或kubelet)可能允许远程管理环境中的容器。(引用: Docker Daemon CLI)(引用: Kubernetes API)(引用: Kubernetes Kubelet) 在Docker中,对手可以在容器部署期间指定一个入口点来执行脚本或命令,或者他们可以使用docker exec 命令在运行的容器内执行命令。(引用: Docker Entrypoint)(引用: Docker Exec) 在Kubernetes中,如果对手有足够的权限,他们可以通过与Kubernetes API服务器、kubelet交互或运行kubectl exec 命令在集群中的容器中获得远程执行。(引用: Kubectl Exec Get Shell) |
T1610 | 部署容器 | 对手可能会在环境中部署容器以促进执行或规避防御。在某些情况下,对手可能会部署一个新容器来执行与特定镜像或部署相关的进程,例如执行或下载恶意软件的进程。在其他情况下,对手可能会部署一个没有网络规则、用户限制等配置的新容器,以绕过环境中的现有防御。在Kubernetes环境中,对手可能会尝试在特定节点上部署一个特权或易受攻击的容器,以便逃逸到主机并访问节点上运行的其他容器。(引用: AppSecco Kubernetes Namespace Breakout 2020) 容器可以通过多种方式部署,例如通过Docker的create 和start API或通过Kubernetes仪表板或Kubeflow等Web应用程序。(引用: Docker Containers API)(引用: Kubernetes Dashboard)(引用: Kubeflow Pipelines) 在Kubernetes环境中,容器可以通过工作负载如ReplicaSets或DaemonSets部署,这可以允许容器在多个节点上部署。(引用: Kubernetes Workload Management) 对手可能会基于检索到的或构建的恶意镜像或从运行时下载并执行恶意有效负载的良性镜像部署容器。(引用: Aqua Build Images on Hosts) |
T1648 | 无服务器执行 | 攻击者可能滥用无服务器计算、集成和自动化服务在云环境中执行任意代码。许多云提供商提供各种无服务器资源,包括计算引擎、应用程序集成服务和Web服务器。 攻击者可能以各种方式滥用这些资源作为执行任意命令的手段。例如,攻击者可能使用无服务器函数执行恶意代码,例如加密挖矿恶意软件(即资源劫持)。(引用: Cado Security Denonia) 攻击者还可能创建能够进一步破坏云环境的函数。例如,攻击者可能使用AWS中的IAM:PassRole 权限或Google Cloud中的iam.serviceAccounts.actAs 权限向无服务器云函数添加额外的云角色,然后该函数可能能够执行原始用户无法执行的操作。(引用: Rhino Security Labs AWS权限提升)(引用: Rhingo Security Labs GCP权限提升) 无服务器函数还可以响应云事件(即事件触发执行)调用,可能在一段时间内实现持久执行。例如,在AWS环境中,攻击者可能创建一个Lambda函数,该函数在创建新用户时自动向用户添加额外的云凭据,并创建一个相应的CloudWatch事件规则,该规则在创建新用户时调用该函数。(引用: 入侵AWS帐户) 这在许多基于云的办公应用程序套件中也是可能的。例如,在Microsoft 365环境中,攻击者可能创建一个Power Automate工作流,该工作流在用户被授予访问SharePoint中的文档时转发用户收到的所有电子邮件或创建匿名共享链接。(引用: Varonis Power Automate数据外泄)(引用: Microsoft DART案例报告001) 在Google Workspace环境中,他们可能创建一个Apps Script,在用户打开文件时外泄用户的数据。(引用: Cloud Hack Tricks GWS Apps Script)(引用: OWN-CERT Google App Script 2024) |
T1651 | 云管理命令 | 对手可能会滥用云管理服务在虚拟机中执行命令。资源如AWS Systems Manager、Azure RunCommand和Runbooks允许用户通过利用安装的虚拟机代理在虚拟机中远程运行脚本。(引用: AWS Systems Manager Run Command)(引用: Microsoft Run Command) 如果对手获得了云环境的管理访问权限,他们可能会滥用云管理服务在环境的虚拟机中执行命令。此外,妥协服务提供商或委派管理员账户的对手也可能利用受信任关系在连接的虚拟机中执行命令。(引用: MSTIC Nobelium Oct 2021) |