系统用户检查结果与异常账户及影子账户检测分析

系统用户检查结果与异常账户及影子账户检测分析

0x02电子取证/系统用户审查 给出了 Windows 下 net userwmic useraccount、注册表 SAM 和 Linux 下 /etc/passwd/etc/shadowwhow 的基础取证入口。已有文章 凭据抓取与认证材料取证分析 聚焦认证材料如何被窃取和复用。本文换一个角度:不讨论凭据如何被拿走,而是讨论用户账户本身是否被篡改、是否存在隐藏账户、权限是否被非法提升。

用户账户是攻击者建立持久化控制的核心手段之一。当你在 net user 输出中看到一个陌生账户时,这可能是攻击者创建的后门账户。但更多时候,攻击者的操控更加隐蔽:创建影子账户(隐藏账户)、复制管理员权限、修改现有账户属性、甚至利用系统内置账户的漏洞。


0x01 Windows 侧的异常账户检测

1. 影子账户(Hidden User)检测

影子账户是 Windows 环境下最常见的隐藏账户技术。攻击者通过修改注册表使账户在登录界面和管理工具中不可见,但账户本身仍然存在且可以登录。

影子账户的创建方法

攻击者通常通过以下步骤创建影子账户:

  1. 创建新账户(如 Administrat0r$
  2. 修改注册表隐藏账户:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
  3. 在该键下创建 DWORD 值,名称为账户名,值为 0(隐藏)
  4. 复制管理员账户的 SID 和权限到新建账户

检测方法

常规工具无法检测:

  • net user 不会显示影子账户
  • “计算机管理” -> “本地用户和组” 不会显示
  • “设置” -> “账户” 不会显示

可检测的方法:

  1. WMIC 查询

    wmic useraccount get name,sid,disabled,status

    WMIC 直接查询 WMI,可以绕过注册表隐藏设置。

  2. 注册表 SAM 直接查询

    HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\

    需要 SYSTEM 权限才能访问 SAM 键。可以使用 PsExec 以 SYSTEM 权限运行 regedit:

    psexec -s -i regedit
  3. NetUserEnum API: 通过调用 Windows API NetUserEnum 可以枚举所有用户账户,包括隐藏账户。

  4. PowerShell 查询

    Get-LocalUser | Select-Object Name, SID, Enabled, Description
  5. Sigma 规则检测: SigmaHQ 提供了检测影子账户创建的规则:

    detection:
      selection:
        TargetObject|contains: '\SAM\SAM\Domains\Account\Users\Names\'
        TargetObject|endswith: '$\(Default)'
        Image|endswith: '\lsass.exe'

2. 账户属性异常检测

除了影子账户,攻击者还可能修改现有账户的属性:

检测点

  1. 账户被启用但不应启用

    • Guest 账户被启用
    • DefaultAccount 被启用
    • 未知账户被启用
  2. 账户被加入管理员组

    net localgroup administrators

    检查是否有未知账户被加入 Administrators 组。

  3. 账户密码被修改

    net user <username>

    查看"密码上次设置"时间,判断是否被恶意修改。

  4. 账户登录时间被修改: 检查账户的登录时间限制是否被修改为"全部允许"。

3. 内置账户异常检测

Windows 内置账户可能被攻击者利用:

  • Administrator(RID 500):可能被重命名或禁用后重新启用
  • Guest(RID 501):可能被启用并加入管理员组
  • DefaultAccount(RID 503):系统管理账户,通常不应被使用
  • WDAGUtilityAccount:Windows Defender 应用程序防护账户,可能被滥用

检测方法:

Get-LocalUser | Where-Object { $_.SID -match '-500$|-501$|-503$' }

0x02 Linux 侧的异常账户检测

1. UID 0 账户检测

Linux 下 UID 为 0 的账户拥有 root 权限。攻击者可能创建新的 UID 0 账户或修改现有账户的 UID。

检测方法

awk -F: '$3==0 {print $1}' /etc/passwd

正常情况下,只有 root 账户的 UID 为 0。如果发现其他账户 UID 为 0,说明存在异常。

2. 可登录账户检测

检查哪些账户可以远程登录:

awk '/\$1|\$6/ {print $1}' /etc/shadow

这会列出所有设置了密码的账户(密码字段以 $1$$6$ 开头)。

3. sudo 权限检测

检查哪些账户拥有 sudo 权限:

grep -v "^#\|^$" /etc/sudoers | grep "ALL=(ALL)"
cat /etc/sudoers.d/* 2>/dev/null
groups <username>

如果发现未知账户拥有 sudo 权限,说明存在异常。

4. 空密码账户检测

检查是否存在空密码账户:

awk -F: '($2=="") {print $1}' /etc/shadow

空密码账户可以被任何人无需密码登录,属于高危异常。

5. 账户 Shell 异常检测

检查账户的登录 Shell 是否被修改:

awk -F: '$7 !~ /\/nologin|\/false/ {print $1, $7}' /etc/passwd

如果发现未知账户的 Shell 为 /bin/bash/bin/sh,说明该账户可以登录系统。


0x03 用户检查结果与登录日志交叉验证

1. Windows 侧交叉验证

登录日志分析

通过事件日志可以获取登录记录:

  • 事件 ID 4624:成功登录
  • 事件 ID 4625:失败登录
  • 事件 ID 4634:注销
  • 事件 ID 4648:显式凭据登录
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-7)} |
  Where-Object { $_.Properties[8].Value -ne 'SYSTEM' } |
  Select-Object TimeCreated,
    @{N='Account';E={$_.Properties[5].Value}},
    @{N='LogonType';E={$_.Properties[8].Value}},
    @{N='SourceIP';E={$_.Properties[18].Value}}

交叉验证要点

  • 用户账户列表中存在但从未登录的账户:可能是后门账户
  • 用户账户列表中不存在但有登录记录的账户:可能是已删除账户或影子账户
  • 登录来源 IP 异常:可能是攻击者远程登录
  • 登录时间异常:可能是非工作时间入侵

2. Linux 侧交叉验证

登录日志分析

通过以下命令获取登录记录:

last      # 成功登录记录
lastb     # 失败登录记录
lastlog   # 所有用户最后登录时间

交叉验证要点

  • /etc/passwd 中存在但 lastlog 显示从未登录的账户:可能是后门账户
  • /etc/passwd 中不存在但 last 显示有登录记录的账户:可能是已删除账户
  • 登录来源 IP 异常:可能是攻击者远程登录
  • 登录时间异常:可能是非工作时间入侵

0x04 三个最容易误判的边界

1. 账户存在不等于被攻击者创建

系统可能存在合法的备用账户、服务账户、测试账户。必须结合账户创建时间、登录记录、权限配置综合判断。

2. UID 0 不等于恶意账户

某些系统管理任务可能需要 UID 0 账户。但除了 root 之外的 UID 0 账户必须严格审查。

3. 影子账户检测需要 SYSTEM 权限

普通管理员权限无法访问 SAM 注册表键。必须使用 PsExec 或其他工具以 SYSTEM 权限运行检测命令。


0x05 公开资料与分析借鉴

1. SigmaHQ: Creation of a Local Hidden User Account by Registry

SigmaHQ 提供了检测影子账户创建的 Sigma 规则:

  • 监控注册表键 \SAM\SAM\Domains\Account\Users\Names\ 的修改
  • 检测以 $ 结尾的账户名(常见的影子账户命名方式)
  • 检测 lsass.exe 修改 SAM 注册表的行为

最值得借鉴的一点是:影子账户创建时会修改特定的注册表键,通过监控这些键可以检测影子账户的创建。

公开来源:

2. Forensafe: Investigating User Accounts

Forensafe 的取证文章详细说明了 Windows 用户账户的取证价值:

  • SAM 注册表键的结构和内容
  • 用户账户 Artifact 包含的信息(用户名、全名、权限级别、最后登录时间等)
  • 如何通过 ArtiFast Windows 提取和分析用户账户

最值得借鉴的一点是:SAM 注册表键包含了用户账户的完整信息,即使事件日志被清理,SAM 仍然可以提取账户信息。

公开来源:

3. CheckSomeBytes: Making Windows Users ‘Invisible’

CheckSomeBytes 的文章详细说明了 Windows 隐藏账户的实现方法和取证痕迹:

  • 通过 SpecialAccounts\UserList 注册表键隐藏账户
  • 隐藏账户在登录界面、设置菜单、共享菜单中不可见
  • 但用户目录、SAM 注册表、用户图片目录中仍然保留痕迹

最值得借鉴的一点是:隐藏账户只是从 UI 层面隐藏,文件系统层面和注册表层面仍然保留大量痕迹。

公开来源:

4. NothingCyber: Blue Team-System Live Analysis Part 7

NothingCyber 的蓝队分析文章说明了 Windows 用户账户取证的实战方法:

  • 使用 NirSoft RegScanner 扫描注册表
  • SAM 注册表键需要 SYSTEM 权限才能访问
  • 使用 PsExec 以 SYSTEM 权限运行 regedit

最值得借鉴的一点是:不要将取证工具复制到目标系统,应使用写保护的外部存储连接取证工具。

公开来源:


0x06 建议的交付结构

用户账户检查结果建议整理为如下表格:

检查项检查结果异常判断结论强度建议
net user 输出发现未知账户 test$可疑账户进一步检查
wmic useraccount 输出发现影子账户 Administrat0r$隐藏账户存在立即禁用并调查
SAM 注册表发现未知 SID 对应账户隐藏账户存在提取账户详细信息
net localgroup administrators发现未知账户在管理员组权限提升立即移除并调查
/etc/passwd UID 0发现 backup 账户 UID 为 0特权账户审查账户用途
/etc/shadow 空密码发现 test 账户无密码空密码账户立即设置密码或禁用
lastlog 交叉验证test$ 账户从未登录可能是后门账户检查创建时间
登录日志交叉验证Administrat0r$ 有登录记录隐藏账户被使用提取登录来源 IP

0x07 和其他分析篇怎样联动

本文最适合和以下专题联动:

  • 凭据抓取与认证材料取证分析:提供凭据窃取分析,本文补充账户篡改检测
  • 自启动项计划任务与服务持久化分析:提供持久化检测,账户后门是另一种持久化方式
  • 系统日志检查结果证据强度分层与事件链构建分析:提供日志层面的登录事件分析

本文的定位是聚焦 0x02 系统用户审查中"异常账户检测"这一维度,而不是覆盖整个身份管理领域。


0x08 总结

用户账户分析的关键,不是"列出所有账户",而是:

  • 检测影子账户和隐藏账户的存在
  • 识别 UID 0 和空密码等高危异常
  • 通过交叉验证判断账户是否被攻击者使用
  • 从注册表和文件系统层面提取被 UI 隐藏的账户信息

当你能从 net userwmic useraccount、SAM 注册表、/etc/passwd/etc/shadow 的输出中读出账户篡改信号时,0x02 里的"系统用户审查"才真正升级为 0x03 的"系统用户检查结果与异常账户及影子账户检测分析"。