在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化战术理论知识及实战研究,通过实战场景验证行之有效的检测规则、防御措施,本期我们为大家介绍ATT&CK 14项战术中提权战术(一),包括提权前6项子技术,后续会介绍提权其他子技术,敬请关注。
MITRE ATT&CK 是一个全球可访问的基于现实世界观察的对手战术和技术知识库。ATT&CK知识库被用作在私营部门、政府以及网络安全产品和服务社区中开发特定威胁模型和方法的基础。
2022年10月25日发布的ATT&CK v12版本更新了适用于企业、移动设备和 ICS(工业控制系统)框架的技术、组和软件。v12最大的变化是在ATT&CK中增加了ICS的检测,描述了检测各种ICS技术的方法,每种方法都与特定的数据源和数据组件相关联,检测功能既利用了传统的主机和基于网络的采集,也利用了ICS特定的来源,如资产和运营数据库等。
ATT&CK v12 for Enterprise包含14个战术、193个技术、401个子技术、135个组织、718个软件。
ATT&CK战术全景图(红框为提权战术)
权限升级是攻击者用来在系统或网络上获得更高级权限的技术。常见的方法是利用系统弱点、错误配置和漏洞。提升访问的示例包括:system/root账号、本地管理员、具有类似管理员访问权限的用户帐户、访问特定系统或功能的用户帐户。
提权战术包括13种技术,本期介绍前6种技术,逐一介绍如下:
攻击者可能会绕过控制提升权限的机制以获得更高级别的权限。攻击者可用多种方法来利用内置控制机制,以升级系统上的权限。
利用提升控制权限机制包含4项子技术,介绍如下:
如果应用程序设置了setuid或setgid位,则攻击者可能会利用配置,以便运行恶意代码。任何用户都可以指定要为自己的应用程序设置的setuid或setgid标志(即文件和目录权限修改),攻击者可以在他们自己的恶意软件上使用此机制,以确保他们将来能够在提升的上下文中执行。或者可以选择查找和定位已启用setuid或setgid位的易受攻击的二进制文件,二进制文件可能会被利用。
Windows用户帐户控制(UAC)允许程序提升其权限,以便在管理员级别权限下执行任务,通过提示用户进行确认。攻击者可能会绕过UAC机制来提升系统上的进程权限。
攻击者可以执行sudo缓存或使用sudoers文件提升权限。Sudo命令允许系统管理员委派权限,使某些用户能够以root或其他用户身份运行某些命令,同时提供命令及其参数的审计跟踪。/etc/sudoers描述了哪些用户可以从哪些终端运行哪些命令,哪些命令用户可以作为其他用户或组运行。攻击者利用这些机制的不良配置来升级特权,而不需要用户的密码。
攻击者可以利用AuthorizationExecuteWithPrivileges API通过提示用户输入凭据来升级权限。此API的目的是为应用程序开发人员提供一种使用root权限执行操作的简单方法,例如用于应用程序安装或更新。API不会验证请求root权限的程序是否合法。
ID | 缓解措施 | 描述 |
M1047 | 审计 | 检查windows系统上常见的uac绕过弱点 |
M1038 | 执行预防 | 系统设置可以阻止未从合法渠道下载的应用程序运行,不允许运行未签名的应用程序。 |
M1028 | 操作系统配置 | 具有已知漏洞的应用程序不应设置setuid或setgid位,设置setuid或setgid位的程序的数量应该在整个系统中最小化。 |
M1026 | 特权账户管理 | 从系统上的本地管理员组中删除用户。要求用户在每次执行sudo时输入其密码。 |
M1022 | 限制文件和目录权限 | 应该严格编辑sudoers文件,始终需要密码。 |
M1052 | 用户帐户控制 | 使用UAC的最高强制级别,减少DLL搜索顺序劫持等技术绕过机会。 |
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控已执行的命令和参数。 |
DS0022 | 文件 | 文件元数据 | 监控文件系统中设置了setuid或setgid位的文件。 |
文件修改 | sudo能够根据/etc/sudoers文件中的LOG_INPUT和LOG_OUTPUT指令记录所有输入和输出。监控/usr/libexec/security_auth执行,这可能表明正在执行AuthorizationExecuteWithPrivileges。 | ||
DS0009 | 进程 | OS API执行 | 监视执行的OS API回调,可能存在进程注入行为。 |
进程创建 | 监控新创建的进程。 | ||
进程元数据 | 监控正在运行的进程的上下文数据,包括环境变量、用户等信息。 | ||
DS0024 | Windows注册表 | Windows注册表修改 | 监控注册表设置是否存在未经授权的更改。 |
攻击者可以修改访问令牌以在不同的用户或系统下执行操作并绕过访问控制。Windows使用访问令牌来确定正在运行的进程的所有权。
攻击者可以使用内置的Windows API函数从现有进程复制访问令牌,这被称为令牌窃取。
任何用户都可以使用runas命令和Windows API函数来创建模拟令牌;它不需要访问管理员帐户。还有其他机制,如Activedirectory字段,可用于修改访问令牌。
操纵访问令牌技术包含5项子技术,介绍如下:
攻击者可能会复制另一个用户的令牌,然后模拟另一个用户的令牌,以升级权限并绕过访问控制。
攻击者可能会使用不同的令牌创建一个新进程,以升级权限并绕过访问控制。创建具有不同令牌的进程可能需要目标用户的凭据、模拟该用户的特定特权或对要使用的令牌的访问权限。
攻击者可以制作和模拟令牌以升级特权并绕过访问控制。如果攻击者拥有用户名和密码,但用户未登录到系统,则攻击者可以为用户创建登录会话。
攻击者可能会欺骗新进程的父进程标识符(PPID),以提升特权。新进程通常直接从其父进程或调用进程生成。攻击者可能会利用这些机制来逃避防御,例如,攻击者可能会产生一个新进程,并将父进程分配为以系统运行的进程,导致通过继承的访问令牌提权。
攻击者可以使用SID-History注入来升级权限并绕过访问控制。Windows安全标识符(SID)是标识用户或组帐户的唯一值。 Windows security在安全描述符和访问令牌中都使用sid。一个帐户可以在Sid-History Active Directory属性中保存额外的Sid,允许在域之间进行可操作的帐户迁移。这种操作可能导致通过横向移动技术(如远程服务、SMB/Windows管理共享或Windows远程管理)提升对本地资源的访问权限或访问其他无法访问的域。
ID | 缓解措施 | 描述 |
M1026 | 特权账户管理 | 限制权限,以便用户和用户组无法创建令牌。仅为本地系统帐户定义此设置。 |
M1018 | 用户账户管理 | 将用户和帐户限制为所需的最低权限。 |
ID | 数据源 | 数据组件 | 检测 |
DS0026 | Active Directory | Active Directory对象修改 | 监控对AD设置所做的更改 |
DS0017 | 命令 | 命令执行 | 通过审核命令行活动监控已执行命令和参数。 |
DS0009 | 进程 | OS API执行 | 通过分析用户网络活动、检查正在运行的进程以及与其他端点和网络行为的相关性,监控API调用。 |
进程创建 | 监控新创建的进程。 | ||
进程元数据 | 查询系统以获取进程和线程令牌信息,并查找不一致性,例如用户拥有模拟本地系统帐户的进程。 | ||
DS0002 | 用户账户 | 用户账户元数据 | 监控有关帐户的上下文数据,其中可能包括用户名、用户ID、环境数据等。 |
攻击者可以将系统设置配置为在系统登录期间自动执行程序,以保持持久性或提权。利用自动启动执行引导或登录技术包含14项子技术,介绍如下:
攻击者可以通过将程序添加到启动文件夹或使用注册表运行项引用它来实现持久性。
当系统启动时,攻击者可能会利用身份验证包来执行Dll。Windows身份验证包Dll由LSA进程在系统启动时加载,为操作系统的多个登录进程和多个安全协议提供支持。
当系统启动时,攻击者可能会利用时间提供程序来执行Dll。Windows时间服务(W32Time)启用跨域和域内的时间同步,负责从硬件或网络资源中检索时间戳,并将这些值输出到其他网络客户端。攻击者可以通过将恶意DLL注册并启用为时间提供程序。
当用户登录时,攻击者可能会利用Winlogon的功能来执行Dll或可执行文件。对注册表项的恶意修改可能会导致Winlogon加载和执行恶意Dll或可执行文件。如下子项可能容易被利用:
攻击者可能会利用这些特性来重复执行恶意代码并建立持久性。
当系统启动时,攻击者可能会利用安全支持提供程序(SSPs)来执行Dll。Windows SSP Dll在系统启动时加载到LSA进程中。一旦加载到LSA中,SSP Dll就可以访问存储在Windows中的加密和明文密码。
攻击者可能会修改内核以在系统引导时自动执行程序。可加载内核模块(Loadable Kernel Modules,LKMs)是可以根据需要加载和卸载到内核中的代码片段,它们扩展了内核的功能,而不需要重新启动系统。恶意使用时,LKMs可以是一种以最高操作系统特权(环0)运行的内核模式Rootkit。基于LKM的rootkit的常见功能包括:隐藏自身,选择性隐藏文件、进程和网络活动,以及日志篡改,提供经过身份验证的后门,并允许对非特权用户进行root访问。
3.4.7 重新开启申请(T1547.007)攻击者可以修改plist文件,以便在用户登录时自动运行应用程序。攻击者可以通过向com添加恶意应用程序路径来建立持久性。
3.4.8 LSASS驱动程序(T1547.008)攻击者可以修改或添加LSASS驱动程序以获得对受损系统的持久性。LSA是Windows负责本地安全策略和用户身份验证的主要组件。LSA包括与各种其他安全功能相关联的多个动态链接库(Dll)。通过替换或添加非法驱动程序,攻击者可以使用LSA操作来持续执行恶意代码。
3.4.9 快捷键修改(T1547.009)攻击者可以创建或修改可在用户登录期间执行程序的快捷方式。攻击者利用启动文件夹中的快捷方式来执行他们的工具并实现持久性,也可以编辑目标路径或完全替换现有的快捷方式,以便执行恶意软件。
3.4.10 端口监视器(T1547.010)攻击者可以使用端口监视器在系统引导期间运行恶意DLL,以便建立持久性或特权升级。可以通过AddMonitor API调用设置端口监视器,以设置要在启动时加载的DLL。
3.4.11 打印处理器(T1547.012)攻击者可能会利用打印处理器在系统引导期间运行恶意Dll以实现持久性或特权升级。攻击者通过添加在启动时加载恶意Dll的打印处理器来滥用打印后台处理程序服务。
3.4.12 XDG自启动(T1547.013)攻击者可以修改XDG自启动项目以在系统引导期间执行程序或命令,通过在桌面环境启动期间执行恶意命令和有效负载来保持持久性。
3.4.13 ActiveSetup(T1547.014)攻击者可通过将注册表项添加到本地计算机的ActiveSetup来实现持久性。ActiveSetup程序是一种Windows机制,用于在用户登录时执行程序。存储在注册表项中的值将在用户登录到计算机后执行。
3.4.14 登录项目(T1547.015)攻击者可以添加登录项以在用户登录时执行,以获得持久性或升级权限。登录项是在用户登录时自动启动的应用程序、文档、文件夹或服务器连接。登录项目可以通过共享文件列表或服务管理框架添加。
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 监控已执行的命令和参数 |
DS0027 | 驱动 | 驱动负载 | 监控异常的内核驱动程序安装活动 |
DS0022 | 文件 | 文件创建 | 监控新建立的文件 |
文件修改 | 监控文件所做的更改 | ||
DS0008 | 内核 | 内核模块加载 | 监控异常的内核驱动程序安装活动 |
DS0011 | 模块 | 模块负载 | 通过进程监控DLL加载,专门查找无法识别或通常未加载到进程中的Dll,查找可能是由于加载恶意DLL的进程导致的异常进程行为。 |
DS0009 | 进程 | OS API执行 | 监控API调用。 |
进程创建 | 监控新创建的进程。 | ||
DS0024 | Windows注册表 | Windows注册表项创建 | 监控新创建的注册表项。 |
Windows注册表项修改 | 监控修改的注册表项。 |
攻击者可以使用在引导或登录初始化时自动执行的脚本来建立持久性。初始化脚本可用于执行管理功能,包括执行其他程序或将信息发送到内部日志记录服务器。利用初始化脚本引导或登录技术包含5项子技术,介绍如下:
3.5.1 登录脚本(Windows)(T1037.001)攻击者可以使用在登录初始化时自动执行的Windows登录脚本来建立持久性。Windows允许在特定用户或用户组登录系统时运行登录脚本。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。
3.5.2 登录钩子(T1037.002)攻击者可以使用登录钩子来建立在用户登录时执行的持久性。登录钩子是一个plist文件,它指向一个特定的脚本,在用户登录时以root权限执行。攻击者可以在com中添加或插入恶意脚本的路径,恶意脚本在下次用户登录时执行。如果登录钩子已经存在,攻击者可以向现有的登录钩子添加其他命令,一个系统上一次只能有一个登录和注销挂钩。
3.5.3 网络登录脚本(T1037.003)攻击者可以使用在登录初始化时自动执行的网络登录脚本来建立持久性。可以使用Active Directory或组策略对象分配网络登录脚本。这些登录脚本以分配给它们的用户的特权运行。根据网络内的系统,初始化其中一个脚本可能适用于多个系统或所有系统。
3.5.4 RC脚本(T1037.004)攻击者可以通过修改RC脚本来建立持久性。这些文件允许系统管理员在启动时针对不同的运行级别映射和启动自定义服务。攻击者可以通过向rc添加恶意二进制路径或shell命令来建立持久性,重新启动后,系统以root身份执行脚本的内容,从而产生持久性。
3.5.5 启动项(T1037.005)攻击者可以使用在引导初始化时自动执行的启动项来建立持久性。启动项在启动过程的最后阶段执行,并包含shell脚本或其他可执行文件以及系统用于确定所有启动项的执行顺序的配置信息。
3.5.6 缓解措施
ID | 缓解措施 | 描述 |
M1022 | 限制文件和目录权限 | 将登录脚本的写入访问权限限制为特定管理员。 |
M1024 | 限制注册表权限 | 确保为注册表配置设置适当的权限,防止用户修改登录脚本的密钥。 |
3.5.7 检测
ID | 数据源 | 数据组件 | 检测 |
DS0026 | Active Directory | Active Directory对象修改 | 监控Active Directory中所做的更改。 |
DS0017 | 命令 | 命令执行 | 监控执行的命令和参数。 |
DS0022 | 文件 | 文件创建 | 监控新创建的文件。 |
文件修改 | 监控对文件所做的更改。 | ||
DS0009 | 进程 | 进程创建 | 监控新执行的进程。 |
DS0024 | Windows注册表 | Windows注册表项创建 | 监控新创建的windows注册表项。 |
攻击者可以创建或修改系统级进程,以重复执行恶意攻击。当操作系统启动时,它们可以启动执行后台系统功能的进程。攻击者可以安装新的或修改现有的服务、守护进程或代理程序,配置为在启动时或定时执行,以建立持久性。服务、守护进程或代理可以使用管理员权限创建,在系统权限下执行。攻击者可以利用此功能创建或修改系统进程,以便升级权限。创建或修改系统进程技术包含4项子技术,介绍如下:
3.6.1 启动代理(T1543.001)攻击者可以创建或修改启动代理以重复执行恶意攻击。当用户登录时,将启动每个用户launchd进程,通常安装启动代理来执行程序更新、在登录时启动用户指定的程序或执行其他开发人员任务,启动代理也可以使用Launchctl命令执行。启动代理名称可以通过使用相关操作系统或合法软件中的名称来伪装。启动代理使用用户级别权限创建,并使用用户级别权限执行。
3.6.2 Systemd服务(T1543.002)攻击者可以创建或修改systemd服务以重复执行恶意攻击。Systemd服务管理器通常用于管理后台守护进程和其他系统资源。
3.6.3 Windows服务(T1543.003)攻击者可以创建或修改Windows服务以重复执行恶意攻击。当Windows启动时,它会启动服务以执行后台系统功能。Windows服务配置信息,包括服务可执行或恢复程序的文件路径,存储在Windows注册表中。攻击者可以安装新服务或修改现有服务以在启动时执行,也可能使用服务来安装和执行恶意驱动程序。
3.6.4 启动守护进程(T1543.004)攻击者可以创建或修改启动守护进程以执行恶意攻击。启动守护进程需要提升的权限才能安装,在登录之前为系统上的每个用户执行,并在后台运行,而不需要用户交互。启动守护进程通常用于提供对共享资源的访问、软件更新或执行自动化任务。守护进程名称可以通过使用来自相关操作系统或合法软件的名称来伪装。
3.6.5 缓解措施
ID | 缓解措施 | 描述 |
M1047 | 审计 | 使用审计工具审计特权及服务。 |
M1040 | 端点上的行为防御 | 启用攻击面减少(ASR)规则及易受攻击的驱动程序阻止列表。 |
M1045 | 代码签名 | 强制注册和执行仅合法签名的服务驱动程序。 |
M1033 | 限制软件安装 | 将软件安装限制为最小授权。 |
M1028 | 操作系统配置 | 确保启用驱动程序强制签名机制。 |
M1022 | 限制文件和目录权限 | 将对系统级进程文件的读写访问限制为合法的特权用户。 |
M1018 | 用户账户管理 | 限制用户帐户和组的权限,只有经过授权的管理员才能对进程和服务配置修改。 |
3.6.6 检测
ID | 数据源 | 数据组件 | 检测 |
DS0017 | 命令 | 命令执行 | 检测异常进程调用行为,例如命令行调用能够修改服务的工具。 |
DS0027 | 驱动 | 驱动负载 | 监控不属于已知软件更新的新服务驱动程序安装和加载(例如:Sysmon事件ID6)。 |
DS0022 | 文件 | 文件创建 | 监控新创建的文件。 |
文件修改 | 监控对文件的更改。 | ||
DS0009 | 进程 | OS API执行 | 监控可能创建或修改系统级进程的API调用。 |
进程创建 | 监控新创建的进程。 | ||
DS0019 | 服务 | 服务创建 | 监控新创建的服务。 |
服务修改 | 监控异常的服务修改。 | ||
DS0024 | Windows注册表 | Windows注册表项创建 | 监控新创建的windows注册表项。 |
Windows注册表项修改 | 监控对windows注册表项的更改。 |
攻击者可以修改域的配置,以升级特权。对域设置的修改可能包括更改域组策略对象或更改域的信任设置。攻击者可以临时修改域策略,执行恶意操作,然后恢复更改以清除痕迹。利用组策略修改技术包含2项子技术,介绍如下:
3.7.1 组策略修改(T1484.001)攻击者可能会修改组策略对象(Gpo)以修改访问控制实现特权提升。组策略允许集中管理Active Directory(AD)中的用户和计算机设置。与AD中的其他对象一样,Gpo具有与其关联的访问控制。默认情况下,域中的所有用户帐户都有权读取Gpo,可以将GPO访问控制权限委派给域中的特定用户或组。恶意GPO修改可用于实施许多其他恶意行为,例如计划任务、禁用或修改工具、创建帐户、服务执行等。
3.7.2 域信任修改(T1484.002)攻击者可以添加新的域信任或修改现有域信任的属性,以提升特权。域信任详细信息允许在域之间应用身份验证和授权属性,以便访问共享资源。这些信任对象可能包括帐户、凭据和应用于服务器、令牌和域的其他身份验证信息。攻击者可以操纵域信任来添加自己的签名证书,还可以将域转换为联合域,这可能会启用恶意信任修改。
3.7.3 缓解措施
ID | 缓解措施 | 描述 |
M1047 | 审计 | 使用审计工具识别并纠正GPO权限恶意利用。 |
M1026 | 特权账户管理 | 使用最低权限保护域控制器和Active Directory联合身份验证服务器的管理访问。禁止创建具有管理权限的服务帐户。 |
M1018 | 用户账户管理 | 实施WMI和安全过滤筛选,确定GPO应用的白名单用户和计算机。 |
3.7.4 检测
ID | 数据源 | 数据组件 | 检测 |
DS0026 | Active directory | Active directory对象创建 | 监控新创建的active directory对象,如Windows EID5137. |
Active directory对象删除 | 监控active directory对象的意外删除,如Windows EID5141. | ||
Active directory对象修改 | 监控对AD设置所做的更改。. | ||
DS0017 | 命令 | 命令执行 | 监控已执行的命令和参数,以修改域信任设置,例如用户或应用程序修改域上的联合身份验证设置。 |
本期主要介绍了提权战术(一)及技术/子技术原理,下期将给大家介绍提权战术(二)涉及的剩余提权技术原理。敬请关注。