跳转到帖子

近期 VPN/边界设备被利用后的内网渗透链路与日志排查要点

精选回复

发布于

背景

最近几轮国际威胁情报里,VPN、SSL 网关、边界防火墙管理面仍然是高频入口。比较典型的路径是:攻击者拿到边界设备会话或凭据后,不一定马上投放明显木马,而是先做账号枚举、内网资产探测、Kerberos/SMB 横向尝试,再利用合法远程管理工具维持访问。

这类事件在授权渗透测试和应急复盘中很常见,难点不在单个漏洞复现,而在于确认:入口是否真实存在、权限边界有没有被突破、内网链路走到哪一步、日志里还能留下哪些可验证证据。

本文只讨论授权场景下的验证、排查和修复。涉及命令均以自有实验环境或客户授权环境为前提。

问题定位:从边界设备异常登录开始

近期案例里,最先暴露的问题通常不是主机告警,而是 VPN 或网关侧出现异常登录特征:

  • 非办公时段登录成功,源 IP 来自异常地区或云厂商地址段。
  • 同一账号短时间内从多个地理位置登录。
  • VPN 登录后访问的内网目标集中在域控、堡垒机、文件服务器、运维网段。
  • 边界设备管理后台出现配置导出、账号新增、策略调整等操作。

排查时不要只看“登录失败爆破”。很多真实入侵是有效凭据登录,失败记录很少。更应该关注登录成功后的访问路径。

技术分析:常见攻防链路

在授权测试中,边界设备突破后的链路大致可以拆成几段:

  • 入口确认:验证 VPN 账号、证书、MFA 策略、设备管理面是否存在弱配置或已知漏洞。
  • 权限边界验证:确认 VPN 用户进入后能访问哪些网段,是否存在过宽的 Any-Any 策略。
  • 内网探测:通过 DNS、LDAP、SMB、RDP、WinRM 等协议识别域环境与关键资产。
  • 横向尝试:利用已授权账号测试最小权限原则是否生效,例如普通 VPN 用户是否能访问域控管理端口。
  • 日志留痕:关联 VPN 日志、AD 登录事件、防火墙流量、EDR 告警,构建时间线。

这里最容易被忽略的是“权限边界”。不少环境把 VPN 用户放进了一个大网段,ACL 只做了入口认证,没有细分访问控制。攻击者拿到一个普通账号后,可以直接访问 445、3389、5985、389、636 等端口,这会把一个边界账号问题放大成内网问题。

操作步骤:授权验证思路

建议按下面顺序做,避免一上来就大范围扫描导致业务误报或日志噪声过大。

  • 第一步:确认 VPN 分配地址。记录登录后的客户端 IP、路由表、DNS 后缀。
  • 第二步:验证访问边界。只对授权目标网段做端口连通性测试,优先检查域控、跳板机、文件服务器。
  • 第三步:检查账号权限。确认普通 VPN 用户是否能访问管理协议,例如 RDP、WinRM、SSH、数据库端口。
  • 第四步:关联日志。把 VPN 登录时间和内网主机安全日志按时间线对齐。
  • 第五步:输出修复项。重点写清楚哪些策略过宽、哪些日志缺失、哪些账号存在异常权限。

代码/命令示例:日志与连通性排查

下面是一个常用的排查片段,用于在授权 Windows 环境中按时间筛选远程登录事件。重点关注 4624 成功登录中的 LogonType 3、10,以及来源地址是否来自 VPN 地址池。

PowerShell -ExecutionPolicy Bypass
$start = Get-Date "2025-01-01 00:00:00"
$end   = Get-Date "2025-01-02 00:00:00"
$vpnPoolPattern = "10.20.30."

Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    Id        = 4624
    StartTime = $start
    EndTime   = $end
} | ForEach-Object {
    $xml = [xml]$_.ToXml()
    $data = @{}
    foreach ($d in $xml.Event.EventData.Data) {
        $data[$d.Name] = $d.'#text'
    }

    if ($data['IpAddress'] -like "$vpnPoolPattern*") {
        [PSCustomObject]@{
            TimeCreated = $_.TimeCreated
            TargetUser  = $data['TargetUserName']
            Domain      = $data['TargetDomainName']
            LogonType   = $data['LogonType']
            SourceIP    = $data['IpAddress']
            Workstation = $data['WorkstationName']
            Process     = $data['ProcessName']
        }
    }
} | Sort-Object TimeCreated | Format-Table -AutoSize

如果需要快速验证 VPN 用户进入后的最小访问边界,可以在授权客户端上做低频连通性测试。注意只测授权网段和关键端口,不做全端口高速扫描。

# Linux/macOS 客户端示例:验证关键资产端口是否被过度开放
for host in 10.10.1.10 10.10.1.20 10.10.2.15; do
  for port in 53 88 135 389 445 3389 5985; do
    timeout 2 bash -c "cat < /dev/null > /dev/tcp/$host/$port" 2>/dev/null \
      && echo "$host:$port open"
  done
done

关键日志点

位置重点事件排查价值
VPN/SSL 网关登录成功、会话建立、源 IP、分配地址、策略命中确认入口账号、来源和内网访问起点
域控4624、4625、4768、4769、4776确认 Kerberos/NTLM 认证行为和账号使用轨迹
Windows 服务器4624 LogonType 3/10、7045、4688确认远程登录、服务创建、进程执行
防火墙VPN 地址池到服务器区流量确认横向访问范围和策略是否过宽
EDR/终端异常 PowerShell、远程管理工具、凭据访问告警确认是否进入执行和持久化阶段

风险与修复建议

  • 收敛 VPN 访问范围:不要让 VPN 地址池直接访问整个办公网或服务器区。按角色划分 ACL,例如普通员工只允许访问业务入口,运维账号只允许访问堡垒机。
  • 强制 MFA 与设备绑定:对 VPN、边界设备管理后台、堡垒机都应开启 MFA。仅对密码加复杂度不足以抵御凭据泄露。
  • 禁用公网管理面:边界设备管理后台不要直接暴露公网,建议限制到固定运维 IP 或通过独立管理 VPN 访问。
  • 分离普通账号和运维账号:禁止普通办公账号同时具备 VPN 登录和服务器管理权限。
  • 开启关键日志:Windows 建议开启命令行审计、PowerShell Script Block Logging、账户登录审计。VPN 日志至少保留 180 天,便于回溯。
  • 检测 VPN 地址池异常行为:对 VPN 地址池访问域控 445/3389/5985、批量认证失败、短时间多主机连接建立告警规则。

一个比较实用的防火墙策略基线是:VPN 用户默认拒绝访问服务器区,只显式放行业务端口;运维 VPN 只能访问堡垒机;堡垒机再按审批访问目标服务器。这样即使单个 VPN 账号泄露,也不至于直接进入横向移动阶段。

总结

近期边界设备相关威胁的重点不只是“有没有漏洞”,而是漏洞或凭据被利用后,内网权限边界是否足够清晰。授权测试时应把验证重点放在 VPN 地址池访问范围、域认证日志、管理协议暴露和日志留存质量上。

如果只能做一项改动,优先收敛 VPN 到服务器区的访问策略;如果只能补一类日志,优先补齐 VPN 登录日志和域控认证日志。入口问题不可避免,但清晰的权限边界和可追溯日志能显著降低后续处置成本。

服务器与云环境安全示意图
服务器、云资产与权限边界梳理示意

这类事件排查建议不要从“某台内网主机是否中招”开始,而是先把 VPN/边界设备登录、身份认证、东西向流量和主机进程按同一时间线串起来。实际处置中,最容易漏的是:攻击者拿到 VPN 账号后使用合法登录进入内网,后续横向行为看起来并不像传统扫描。

1. 先固定边界设备和认证日志

  • 保留 VPN 登录成功/失败、分配的虚拟地址、账号、认证方式、客户端指纹、源公网 IP、会话建立和断开时间。
  • 同时导出 MFA、LDAP/AD、RADIUS、SSO 日志,不能只看 VPN 设备本地日志。重点核对“VPN 登录成功但 MFA 失败”“同一账号短时间来自多个国家/ASN”“登录后立即访问不常用网段”等情况。
  • 确认设备日志是否存在时间偏差,尤其是设备升级、重启或日志转发中断的时间段。
# Linux/SIEM 主机上先按账号和源地址做粗筛,字段名按实际日志调整
grep -Ei 'vpn|sslvpn|ipsec|login|authentication|radius' /var/log/* 2>/dev/null \
  | grep -E 'Accepted|success|Success|failed|Failed' \
  | awk '{print $1,$2,$3,$0}' | sort

# 查看设备或日志服务器最近是否出现过时间跳变、转发中断
journalctl --since "2026-10-01 00:00:00" --until "2026-10-02 00:00:00" \
  | grep -Ei 'ntp|time|chrony|rsyslog|forward|connection refused'

2. 用 VPN 分配地址反查内网活动

比单纯按公网 IP 搜索更有效的是拿 VPN 分配的虚拟地址去查 DHCP、NetFlow、交换机流量、DNS、代理和防火墙日志。重点看登录后 5~30 分钟内是否出现:

  • 访问域控的 88、389、445、135、139、3268/3269 端口;
  • 访问大量服务器的 445、3389、5985/5986、22;
  • 突然查询大量内部 DNS 记录或枚举 LDAP;
  • 代理、跳板机、文件服务器出现同一账号的首次访问。

如果 VPN 地址池和办公终端地址池混用,建议尽快拆分,并在防火墙上限制 VPN 用户到服务器网段的默认访问权限,只放行业务所需网段和端口。

3. Windows 侧不要只搜 4624

建议以 VPN 登录时间为起点,关联以下事件:

  • 4624:重点看 LogonType 3(网络登录)、10(远程交互登录),以及 Source Network Address;
  • 4672:账号是否获得高权限令牌;
  • 4648:是否显式使用其他凭据;
  • 4688 和 PowerShell 4103/4104:是否出现 net、nltest、whoami、quser、ipconfig、ад、PowerShell 下载或远程执行;
  • 7045、4697:是否新建服务;
  • 5140/5145:是否访问 ADMIN$、C$、SYSVOL、NETLOGON;
  • 4768/4769/4771:Kerberos 请求是否突然异常,特别是非工作站或 VPN 地址发起的票据请求。
# Windows:按时间和来源地址筛选登录成功事件
Get-WinEvent -FilterHashtable @{
  LogName='Security'
  Id=4624
  StartTime=(Get-Date '2026-10-01 00:00:00')
  EndTime=(Get-Date '2026-10-02 00:00:00')
} | ForEach-Object {
  $x = [xml]$_.ToXml()
  $d = @{}
  $x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
  [pscustomobject]@{
    Time=$_.TimeCreated
    User="$($d.TargetDomainName)\$($d.TargetUserName)"
    LogonType=$d.LogonType
    SourceIP=$d.IpAddress
    Workstation=$d.WorkstationName
    Auth=$d.AuthenticationPackageName
  }
} | Where-Object {
  $_.LogonType -in '3','10' -and
  $_.SourceIP -and $_.SourceIP -ne '-'
} | Sort-Object Time

如果启用了 Sysmon,可以再用事件 1、3、10、11 关联进程创建、网络连接、进程访问和文件落地。对于 VPN 用户直接触达服务器的场景,优先检查目标主机上是否出现来自 VPN 地址池的 wmiprvse.exe、svchost.exe、powershell.exe、cmd.exe、rundll32.exe 异常子进程。

4. Linux 和网络设备主机容易被漏查

边界设备被利用后,攻击者有时会把配置备份、密钥或 SNMP 凭据带到 Linux 跳板机。建议检查:

# SSH、sudo、提权和持久化线索
journalctl --since "2026-10-01" --until "2026-10-02" \
  | grep -Ei 'sshd|sudo|su:|authentication failure|accepted|failed'

last -ai
lastb -ai 2>/dev/null
find /etc/cron* /var/spool/cron -type f -printf '%TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null
find /tmp /var/tmp /dev/shm -type f -mtime -3 -ls 2>/dev/null
ss -plant

网络设备本身还要核对配置变更记录、管理员账号新增、管理面是否暴露到互联网、是否出现异常导出配置或固件文件读取。若设备支持,立即把管理面限制到管理网,并将配置变更和管理员登录转发到独立日志服务器,避免设备被入侵后本地日志被清理。

5. 处置顺序比“先重装一台主机”更重要

  1. 先对 VPN/边界设备做配置和日志留存,记录当前连接、管理员会话、账号和策略变更;
  2. 禁用或重置疑似账号、撤销现有 VPN 会话和令牌,轮换可能暴露的 LDAP、RADIUS、SNMP、设备管理凭据;
  3. 按 VPN 虚拟地址、账号和时间段定位最早访问的内网主机;
  4. 保留目标主机内存、EDR 时间线、Windows 日志和关键文件时间戳后,再进行隔离和清理;
  5. 最后才是恢复业务,并用最小权限、分区访问和强制 MFA 验证是否还存在同样的路径。

判断“是否只是账号泄露”时,不能只看有没有恶意文件。只要出现 VPN 登录后对域控、文件服务器或多台主机的异常访问,就应该按凭据泄露和横向活动处理,至少完成相关账号的密码、令牌、服务凭据和缓存凭据轮换。

最近浏览 0

  • 没有会员查看此页面。