Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

T1136 - 创建账户

一句话通俗理解

最直接的持久化方式——攻击者在你系统里办一张“新员工卡“,以后随时刷这张卡进来,你改了原账户密码也没用,因为新账户还活着。

30秒速查卡

维度你需要知道的
这是什么?攻击者在系统/域/云平台创建新账户实现持久化
为什么危险?新账户完全合法,系统视为正常用户,即使发现入侵也容易被遗漏
谁需要关心?系统管理员、IAM 运维、云平台管理员
你的第一步防御监控所有账户创建事件,特别是非工作时间和非常规来源
如果只做一件事启用账户创建审计(Windows EventID 4720),配置告警

难度等级

⭐ 初级:会用 net useradduser 命令即可,无需任何高级知识

前置知识检查

读这个文件前,你需要知道:

  • 账户:系统识别用户身份的记录,有用户名和密码
  • net user 命令:Windows 创建账户的命令行工具
  • adduser/useradd:Linux 创建账户的命令行工具
  • 云账户:Azure AD / AWS IAM 中的用户身份

技术描述

场景引入

想象你管一栋宿舍楼,楼里住了 100 个学生。某天小偷溜进来,不是偷东西,而是跑去宿管办公室,伪造了一张学生证,名字叫“张三丰“,宿舍号填了空房 305。

从此小偷每天拿着“张三丰“的学生证大摇大摆进出宿舍楼——宿管一看“张三丰“是注册学生,直接放行。即使某天你发现宿舍被偷、换了所有门锁,“张三丰“这张证依然有效,因为他根本不是“被偷的人”,他是“新注册的学生“。

这就是创建账户持久化的精髓:不偷现有身份,而是创造全新身份。

通俗比喻

账户类型比喻攻击者怎么用
本地账户“办张宿舍楼门禁卡”net user 创建,加入管理员组
域账户“办张全校通学生证”在域控创建,全域有效
云账户“注册个云平台账号”Azure AD / AWS IAM 创建
服务账户“申请个机器人服务卡”创建服务账户,命名伪装正常
隐藏账户“办张隐形卡”用户名加 $ 结尾,net user 不显示

进阶理解

创建账户是最简单直接的持久化方式——不需要修改系统组件、不需要利用漏洞、不需要特殊权限(本地用户权限即可创建本地账户)。攻击者创建的账户完全合法,系统审计日志记录的是“账户创建“而非“入侵行为“。

关键策略:

  • 命名伪装:用 backup-svcmonitoringupdate-agent 等看似正常的服务账户名
  • 隐藏账户:Windows 中用户名加 $ 结尾(如 backdoor$),net user 不显示但可正常登录
  • 高权限:创建后立即加入 Administrators / Domain Admins 组
  • 多平台冗余:同时在本地、域、云创建账户,即使一处被发现仍有其他入口
  • 休眠策略:创建后不立即使用,长期“休眠“降低被行为分析发现的风险

子技术列表

T1136 有 3 个子技术:

子技术 ID名称简述
T1136.001Local Account创建本地账户
T1136.002Domain Account创建域账户
T1136.003Cloud Account创建云账户

详写 T1136.001 Local Account:

最常见的子技术。攻击者在单机上用 net user <用户名> <密码> /add 创建本地账户,再用 net localgroup Administrators <用户名> /add 提升权限。本地账户只需本地管理员权限,不需要域管理员。

T1136.003 Cloud Account:

攻击者在 Azure AD / AWS IAM 中创建新账户。云账户的优势在于:可远程创建、无需接触目标主机、权限可即时生效。攻击者常用 New-MgUser(Azure AD)或 aws iam create-user(AWS)创建账户,然后授予高权限角色。

攻击流程

flowchart TD
    A[获取管理员权限] --> B{选择账户类型}
    B --> C[创建本地账户]
    B --> D[创建域账户]
    B --> E[创建云账户]
    C --> F[net user /add]
    D --> G[New-ADUser]
    E --> H[New-MgUser / aws iam create-user]
    F --> I[加入特权组]
    G --> I
    H --> J[授予云角色]
    I --> K[账户持久化完成]
    J --> K
    K --> L[即使原账户被封<br/>新账户仍有效]

真实案例

案例1:Hafnium 在 Exchange 攻击中创建后门账户

  • 时间:2021 年 3 月
  • 目标:全球 3 万+ Exchange 服务器(ProxyLogon 漏洞 CVE-2021-26855)
  • 攻击组织:Hafnium(中国背景 APT)
  • 手法:利用 ProxyLogon 漏洞获取 SYSTEM 权限后,用 net user 创建名为 securityupdate 的账户,加入 AdministratorsExchange Servers 组。命名伪装成安全更新,管理员难以察觉。即使漏洞被修补,后门账户依然有效
  • 数据来源:Microsoft MSTIC + Volexity 报告(一手厂商报告)

案例2:LAPSUS$ 在攻击中创建云账户

  • 时间:2022 年
  • 目标:NVIDIA、Samsung、Okta 等企业
  • 攻击组织:Lapsus$(青少年黑客组织)
  • 手法:窃取管理员凭证后,在 Azure AD 中用 New-MgUser 创建后门服务账户,命名为 backup-sync,授予 Global Administrator 角色。云账户创建不留主机痕迹,且管理员很少审计云账户列表
  • 数据来源:Microsoft MSTIC + NVIDIA 官方声明(一手官方文档)

案例3:Rocke 组织在 Linux 挖矿中创建持久化账户

  • 时间:2018-2019 年
  • 目标:暴露 SSH 服务的 Linux 服务器
  • 攻击组织:Rocke(加密货币挖矿组织)
  • 手法:暴力破解弱密码 SSH 后,用 useradd -r -s /bin/bash 创建系统级账户 sysguard,加入 wheel 组获得 sudo 权限。系统级账户(-r)在 /etc/passwd 中 UID < 1000,伪装成系统服务账户
  • 数据来源:Trend Micro / Palo Alto Unit 42 报告(一手厂商报告)

红队视角

可持续利用性分析

维度评估说明
隐蔽性账户在用户列表中可见,但命名伪装可降低发现率
持久性极高账户不被删除则永久有效
可移植性极高所有操作系统和云平台都支持
检测难度账户创建有明确审计事件

红队可复制性

:: Windows:创建隐藏后门账户
net user backdoor$ P@ssw0rd2026! /add /active:yes
net localgroup Administrators backdoor$ /add

:: Windows:创建服务账户伪装
net user backup-svc S3cur3P@ss! /add /fullname:"Backup Service" /comment:"System backup service"
net localgroup Administrators backup-svc /add

:: Linux:创建系统级账户
useradd -r -m -s /bin/bash sysguard
echo "sysguard:S3cur3P@ss!" | chpasswd
usermod -aG wheel sysguard  # CentOS/RHEL
usermod -aG sudo sysguard   # Ubuntu/Debian

:: Azure AD:创建云账户
Connect-MgGraph -Scopes "User.ReadWrite.All"
New-MgUser -DisplayName "Backup Sync" -UserPrincipalName "backup-sync@tenant.onmicrosoft.com" -PasswordProfile @{Password="S3cur3P@ss!2026"; ForceChangePasswordNextSignIn=$false} -AccountEnabled

蓝队视角

用人话说检测

账户创建检测的核心是审计“新建账户“事件——正常运维中账户创建频率低且可预测,任何异常时间、异常来源的账户创建都是高危信号。重点关注:非工作时间创建、命名异常(伪装服务名)、创建后立即加特权组。

Sigma 规则

title: 检测可疑账户创建
id: 6f3c8e7a-2b1d-4e9c-8f5a-3d7b4c2a1e8f
status: stable
description: 监控账户创建事件,关注非工作时间和命名异常
logsource:
    product: windows
    service: security
detection:
    selection_create:
        EventID: 4720
    filter_system:
        SubjectUserName|endswith: '$'
    suspicious_naming:
        TargetUserName|contains:
            - 'backup'
            - 'update'
            - 'sync'
            - 'monitor'
            - 'service'
            - 'admin'
    condition: selection_create and not filter_system
falsepositives:
    - 合法的运维账户创建(需工单审批)
level: medium

命令行检测

# 查询最近 7 天创建的账户
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4720; StartTime=(Get-Date).AddDays(-7)} |
  Select-Object TimeCreated, @{N='Creator';E={$_.Properties[4].Value}}, @{N='NewUser';E={$_.Properties[0].Value}}

# 查询所有本地账户(包括隐藏的 $ 结尾账户)
Get-WmiObject Win32_UserAccount | Select-Object Name, SID, Disabled

# 查询 $ 结尾的隐藏账户
Get-WmiObject Win32_UserAccount | Where-Object {$_.Name -like '*$'} | Select-Object Name, SID

# Azure AD:查询最近创建的云账户
Get-MgUser -Filter "createdDateTime ge $(Get-Date).AddDays(-7)" -Property DisplayName, UserPrincipalName, CreatedDateTime
# Linux:查询最近创建的账户
grep useradd /var/log/auth.log | tail -20

# 查询系统级账户(UID < 1000,排除已知系统账户)
awk -F: '$3 < 1000 && $3 != 0 {print $1, $3}' /etc/passwd | grep -v -E '^(bin|daemon|mail|ftp|http|nobody|dbus|polkitd|systemd)'

# 查询有 sudo 权限的账户
grep -E '^.{14}NOPASSWD|wheel|sudo' /etc/sudoers /etc/sudoers.d/* 2>/dev/null

关键事件 ID

EventID含义重点关注
4720用户账户创建非工作时间、命名异常
4722用户账户启用之前禁用的账户被启用
4732加入本地安全组新账户加入 Administrators
4728加入全局安全组新账户加入 Domain Admins

网络层检测

  • 云 API 调用 CreateUser 的异常来源 IP
  • LDAP 协议的 AddUser 请求异常

避坑指南

说明正确做法
只看 net user 列表$ 结尾账户不显示用 WMI 或 Get-LocalUser 查询
忽略云账户云账户创建不留主机痕迹审计云平台账户创建日志
忽略系统级账户Linux -r 账户伪装系统服务审计 UID < 1000 的新账户
只看创建不看加组创建后立即加特权组才是高危关联 4720 和 4732 事件
忽略命名伪装backup-svc 听起来正常维护合法服务账户白名单
忘记检查休眠账户创建后长期不用的账户更危险关注创建后从未登录的账户

检测建议

主机层

  • Windows 安全日志:EventID 4720/4722/4732/4728
  • Linux/var/log/auth.log 中的 useradd 事件
  • 云平台:Azure AD Audit Logs、AWS CloudTrail iam:CreateUser

应用层

  • 账户生命周期管理:所有账户创建需工单审批
  • 特权账户审计:定期审计 Administrators / Domain Admins 成员
  • 云账户审计:定期导出云平台账户列表对比基线

网络层

  • 云 API CreateUser 调用的异常来源
  • LDAP 协议的账户创建请求

缓解措施

措施实施方式效果
账户创建审批流程所有账户创建需工单+审批阻止未授权创建
账户生命周期管理自动化离职/禁用流程减少休眠账户
特权账户限制严格控制 Administrators 组成员降低新账户特权风险
云账户审计定期审计 Azure AD / IAM 账户发现异常云账户
隐藏账户检测定期用 WMI 扫描 $ 结尾账户发现隐藏后门
命名规范强制服务账户命名前缀(如 svc-识别非规范命名

动手实验

实验1:观察隐藏账户创建

:: 1. 创建隐藏账户
net user hidden$ Test123!@# /add

:: 2. 用 net user 查看(看不到 hidden$)
net user

:: 3. 用 wmic 查看(能看到)
wmic useraccount where "name='hidden$'" get name,sid

:: 4. 加入管理员组
net localgroup Administrators hidden$ /add

:: 5. 清理
net user hidden$ /delete

预期输出net user 不显示 hidden$,但 wmic useraccount 显示,证明隐藏账户有效。

实验2:检测账户创建事件

# 1. 启用账户管理审计
auditpol /set /subcategory:"User Account Management" /success:enable

# 2. 创建测试账户
net user testdetect Test123!@# /add

# 3. 查询事件日志
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4720; StartTime=(Get-Date).AddMinutes(-5)} |
  Select-Object TimeCreated, @{N='Creator';E={$_.Properties[4].Value}}, @{N='NewUser';E={$_.Properties[0].Value}}

# 4. 清理
net user testdetect /delete

预期输出:事件日志记录账户创建,包含创建者、新账户名、时间——这是检测的核心依据。

专用工具

工具用途特点
Purple KnightAD 安全评估检测后门账户
PingCastleAD 安全评分识别异常账户
Azure AD Audit Reports云账户审计Azure AD 账户创建日志
AWS IAM Access AnalyzerAWS 账户审计检测异常 IAM 账户

术语解释

术语通俗解释
创建账户在系统中新建用户身份
隐藏账户用户名加 $ 结尾,net user 不显示
系统级账户Linux 中 UID < 1000 的账户,伪装系统服务
服务账户用于运行服务的账户,常被攻击者伪装
休眠账户创建后长期不用的账户
账户生命周期从创建到禁用/删除的全过程

参考资料

深入了解

动手试试

真实攻击

  • 🎯 Microsoft MSTIC Hafnium 报告 —— Exchange 后门账户创建
  • 🎯 Microsoft MSTIC Lapsus$ 报告 —— 云账户创建
  • 🎯 Trend Micro Rocke 报告 —— Linux 系统级账户

版本历史

版本日期变更
v3.12026-07-10重写为持久化战术正确内容,修复跨战术污染
v3.02026-06-15初版 v3.0 风格