在内网攻防中,权限提升与横向移动是攻击者从单点突破走向全域控制的关键阶段。权限提升指低权限用户或进程通过系统漏洞、错误配置、令牌窃取等方式获得更高权限;横向移动则是利用已控主机的凭证或会话,访问其他服务器或域控。理解这两类行为的技术本质,是构建有效检测机制的前提。多数企业在边界部署了重型防护,却对内部主机的异常交互缺乏可见性,导致攻击者在内网长期潜伏。

权限提升的常见技术路径与检测要点
Windows环境中,本地权限提升通常依赖系统漏洞(如提权漏洞CVE系列)、服务配置弱点(如未引号路径服务)、以及令牌冒充。攻击者在获得普通用户shell后,会尝试运行whoami /priv查看可用特权,或直接执行提权EXP。检测时应重点关注安全日志中的4648(显式凭据登录)、4672(特殊权限分配)事件,以及系统日志中伴随的崩溃或异常服务启动。如果某台工作站频繁出现4672且进程来自临时目录,基本可判定为恶意提权。
除系统层外,基于组策略与域权限的提升也值得警惕。例如攻击者为自身账号添加至本地管理员组,会触发4732事件;利用Kerberoasting离线爆破服务账号密码,则会在域控产生4769请求。运维人员可编写简单脚本定期拉取这些事件ID,结合源IP与账号历史行为做关联。下表列出常见提权事件与风险等级:
| 事件ID | 含义 | 风险等级 |
|---|---|---|
| 4672 | 分配给新登录的特殊权限 | 高 |
| 4732 | 成员添加到启用安全性的本地组 | 中高 |
| 4769 | 请求Kerberos服务票据 | 中(需看加密类型) |
实际排查中,还应结合进程树分析。许多提权工具会释放 DLL 到 %temp% 并注入到系统进程,使用 Get-Process 配合模块列表可发现无签名模块。对于 Linux 主机,则要监控 sudo 日志与 SUID 文件变更,防止攻击者利用路径劫持提权。
横向移动的典型手法与行为特征
横向移动依赖凭证复用与协议信任。最常见的包括 Pass-the-Hash(PtH)、Pass-the-Ticket(PtT)和 WMI/PsExec 远程执行。PtH 使用 NTLM 哈希直接认证,不会生成 4624 网络登录中的明文密码,但会在目标机安全日志留下 4624 类型3且用户名异常、源工作站名可疑的记录。PtT 则通过注入票据绕过认证,此时域控 4769 服务票据请求多来自非交互会话。
网络层特征同样明显。攻击者常从同一台机器向多个服务器发起 SMB(445)、RDP(3389)或 WinRM(5985)连接,形成星型访问。正常运维一般集中于跳板机或特定网段,而恶意扫描会呈现短时间大量半连接。可用如下 PowerShell 片段统计某主机对外 445 端口连接数:
$conns = Get-NetTCPConnection -RemotePort 445 -State Established
$group = $conns | Group-Object RemoteAddress
foreach ($item in $group) {
if ($item.Count -gt 5) {
Write-Warning "疑似横向SMB连接: $($item.Name) 次数 $($item.Count)"
}
}
此外,攻击者使用 PsExec 会在目标服务控制管理器写入 PSEXESVC 服务,并产生 7045 服务安装事件。将此类事件与源 IP 的近期登录行为关联,能快速锁定移动起点。企业若部署了 Windows 高级审计策略,应开启“凭据验证”与“远程连接”子类,确保原始数据不丢失。
构建轻量级检测体系的实践方案
不依赖商业平台时,可用 Windows 事件转发(WEF)将关键主机日志集中到收集器,再用 XPath 过滤重点事件。例如只订阅 4672、4769、7045 等 ID,降低存储压力。配合任务计划程序,每小时跑一次关联脚本,发现某账号十分钟内既提权又访问三台以上服务器即告警。这种方案在中小网络足以覆盖多数攻击链。
对于无法部署域控转发的环境,可在核心交换机做 NetFlow 采样,识别异常东西向流量。结合主机端 wevtutil 导出日志,用 Python 做简单规则匹配。以下代码展示读取导出 XML 并提取 4769 弱加密票据请求:
import xml.etree.ElementTree as ET
tree = ET.parse('security_export.xml')
root = tree.getroot()
for event in root.iter('Event'):
eid = event.find('.//EventID').text
if eid == '4769':
ticket = event.find('.//TicketEncryptionType').text
if ticket == '0x17': # RC4 弱加密
print('弱加密票据请求:', event.find('.//TargetUserName').text)
最后需强调,检测规则要随业务调整。误报多源于运维批处理任务,因此建立白名单与行为基线不可忽视。只有将权限提升与横向移动检测嵌入日常巡检,才能真正把内网变成攻击者的迷宫而非高速公路。