ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows登录日志排查指南:读懂4624/4625,揪出异常登录

Windows登录日志排查指南:读懂4624/4625,揪出异常登录 每次你面对登录框输入密码、按下回车计算机绝不只是验完指纹放你进门。它会在后台把这套动作拆成一条流水线接住密码、验证身份、生成令牌、加载个人配置——每一步结束系统都会在某个地方留下一笔账。更现实的问题是绝大多数人从来没有打开过这些账本等电脑真出了事需要搞清楚到底是谁在什么时间、用什么方式登过这台机器时才后悔当初没留意。这篇文章就是把登录这件事从头到尾拆给你看系统在登录期间到底记录了哪些信息、记录在哪里、每条日志该怎么读以及当你怀疑有人偷偷登录过电脑时应该从哪几个位置开始查。哪怕你是第一次接触事件日志不需要懂底层原理只要跟着操作也能自己找到答案。1. 按下回车的那一秒一次登录在后台跑了哪些环节1.1 从密码校验到桌面加载系统在几个关键节点埋下记录一次看起来普通的登录在操作系统内部是要分好几步走的。以Windows为例你在锁屏界面输入密码winlogon进程先接管这次登录请求然后把凭据交给本地安全认证子系统LSA也就是lsass.exe进程。LSA会判断你使用的是本地账户还是域账户本地账户直接查本机的SAM数据库域账户则要交给域控制器做Kerberos或NTLM认证。认证通过后系统生成一个访问令牌创建新会话加载你的用户配置最后Userinit进程把桌面环境拉起来。这套流程里最关键的记录节点就两个凭据验证通过的那一刻和验证失败的那一刻。通过时系统写入成功登录事件失败时写入失败登录事件。这个验证节点之后的会话创建、桌面加载虽然也会产生零散的系统日志但这些信息通常不会像登录事件那样被集中管理。我们平时说的登录日志九成以上指的就是安全事件日志里那几个固定的ID。另外还有一个容易被忽略的点本地账户和域账户的脚印落点不一样。域账户登录时真正验证凭据的是域控域控上会额外生成对应的凭据验证事件比如4776如果走Kerberos还会有票据申请与颁发事件。所以排查登录问题时不能只盯着一台电脑有时候要去域控上找另一半答案。1.2 登录类型Logon Type一眼区分本地登录、网络登录、远程桌面打开一条登录日志你最先要看、也最该看懂的字段就是登录类型Logon Type。它直接说明了这次登录是通过哪条通道进来的。很多新手查日志只盯着用户名和来源IP却忽略了登录类型结果把网络共享访问当成有人坐在这台电脑前查了半天方向全错。常见登录类型如下表登录类型含义典型场景2交互式登录键盘和屏幕前直接登录本机最常见3网络登录访问另一台电脑的共享文件夹、IPC$等不坐键盘前4批处理登录计划任务等无人值守进程运行5服务登录Windows服务以指定账户启动运行7解锁屏幕从锁屏状态重新解锁而非全新登录8网络明文凭据某些Web应用或IIS以明文密码方式认证9RunAs换身份运行用不同凭据运行某个程序10远程交互式登录通过RDP/远程桌面进入系统最需要警惕的类型11缓存凭据登录域账户用本地缓存的凭据离线登录原则很简单看到type 3别慌它很可能只是另一台电脑来读取共享文件看到type 10才要优先怀疑有人远程连进来了。type 2是本地坐席操作type 7是解锁屏幕这两种在日常办公环境里属于高频正常事件但如果在凌晨反复出现同样值得多看一眼。2. 最该认识的日志ID4624、4625 和那些让人头大的字段2.1 登录成功4624的核心字段拆解用户名、来源IP、工作站名事件ID 4624表示账户成功登录。在事件查看器里打开一条4624你会看到一堆英文初看像天书其实里面最有价值的字段就那么几个字段含义怎么看TargetUserName登录成功的用户名判断是不是期望里的账户LogonType登录类型对照上节表格判断登录通道IpAddress来源IP本地登录通常是127.0.0.1或空值远程登录才会出现远端IPWorkstationName来源工作站名来自哪台机器ProcessName本次认证的进程名未知进程如恶意软件常出现在这里AuthenticationPackageName认证协议Kerberos、NTLM、Negotiate等看4624时有个经验先看LogonType再看来源IP最后看用户名。这个顺序能过滤掉90%的噪音。比如type 7解锁屏幕来源IP必然是本机地址用户名是本人基本可以直接忽略type 10 来源IP是一台从没见过的内网机器 管理员账户这才是需要深挖的组合。需要注意不同Windows版本里4624的字段映射位置是有差异的。你如果打算用脚本批量提取建议先打开一条日志切到“XML视图”对照里面的Data标签名称确认字段顺序再写代码别指望字段索引永远不变。2.2 登录失败4625怎么读失败原因代码是真正的线索事件ID 4625表示账户无法登录。它和4624就像一对双胞胎但多了几个重要字段尤其是Status和SubStatus这两个十六进制代码。这两个代码直接告诉你登录为什么失败。状态码含义0xC0000064用户名不存在0xC000006A密码错误0xC000006D可能因为用户名或密码错误系统不告诉你具体哪个0xC000006F用户试图在允许登录的时间之外登录0xC0000070用户被禁止远程登录0xC0000234账户已锁定0xC0000371与目标域之间没有信任关系这里要提醒一句单条4625几乎说明不了问题。人类随手输错密码、同事输错三次、服务账户密码过期都会产生失败日志。真正危险的是大量4625聚在一起同一来源IP短时间内尝试几十个不同用户名或者同一个用户名被反复尝试密码。这种模式基本可以断定有人在撞库爆破。排查时我最常做的事就是把4625按来源IP分组按时间排序再统计数量。如果某个IP在十分钟内尝试了上百次登录不管它有没有成功这条IP都该被拉进黑名单。2.3 容易被遗忘的三个配角事件4634、4647、47404624和4625是主角但一条完整的登录时间线还需要几个配角配合4634账户注销。记录会话何时结束配合4624能算出一次登录持续了多久。4647用户主动启动的注销和4634的区别在于是不是本人主动退出。4740账户被锁定。当登录失败次数超过策略阈值系统锁定账户时会触发这条事件。把这几类事件拼在一起就能还原出一段完整故事某人什么时间登录4624、期间尝试了哪些操作可能伴随其他事件、失败了多少次4625、最终又被谁锁了账户4740、什么时候退出4647/4634。举个例子凌晨1点连续40条4625之后突然出现一条4624用户名是zhangwei登录类型是10再往后不到三分钟出现一条4740——这个链条基本复原了一次远程暴力破解成功的全过程。3. 默认情况下你根本看不到这些日志先把审核策略打开3.1 为什么刚装好的Windows安全日志几乎是一片空白很多朋友第一次打开事件查看器里的Windows日志→安全发现里面空空荡荡或者只有几条系统启动类事件第一反应是我的电脑是不是坏了。其实不是坏而是Windows默认根本没有开启登录审核。默认情况下安全日志不记录4624和4625你必须先去策略里打开开关系统才开始记账。这就带来一个很扎心的事实如果不提前配置等你发现电脑被入侵、想回头查日志时会发现什么都没有。我在实际排查中遇到过好几次这种情况——现场证据完全缺失只能靠外围手段补救而能做的其实很少。所以这篇文章的核心建议是系统默认不记录登录事件并不是一个可以依赖的隐私保护反而是一个巨大的排查盲区。想有账可查先把审核打开。3.2 三种开启方式组策略、auditpol、GPO统一下发开启登录审核最常用的方式有三种按操作习惯和环境不同选一种就行。第一种本地组策略编辑器。适合单台电脑按WinR输入gpedit.msc依次展开计算机配置 → Windows设置 → 安全设置 → 本地策略 → 审核策略找到审核登录事件双击后勾选成功和失败。这里提醒一下家庭版Windows没有gpedit.msc只能用下面第二种命令行方式。第二种auditpol命令行。管理员权限打开CMD或PowerShell先看一下当前状态auditpol /get /subcategory:登录如果显示为无审核就执行auditpol /set /subcategory:登录 /success:enable /failure:enable设置完成后再用第一条命令复查确认成功和失败都已经是启用状态。这里要特别说明新版Windows更推荐用高级审核策略配置里的登录/注销→登录子类别因为它比旧的审核策略分类更细也能避免旧界面里某些子类别互相覆盖的问题。第三种域环境用组策略批量下发。如果你管理一批机器在组策略管理控制台里新建一条GPO定位到计算机配置 → 策略 → Windows设置 → 安全设置 → 高级审核策略配置 → 系统审核策略 → 登录/注销启用登录子类别的成功和失败然后链接到对应OU。这样整个部门或全公司的电脑会一次性开启记录省去一台台手动配置的麻烦。3.3 日志容量与保留策略防止被覆盖掉审核打开了还不够紧接着要做的是解决日志不够存的问题。Windows安全日志默认最大容量只有大约20MB达到上限后默认策略是覆盖最早的事件。换句话说如果一台服务器每天产生大量4624和4625几天后早期日志就会被新日志冲掉你再去查一周前的记录会发现早就没了。建议环境里把安全日志容量调大比如调到512MB或1GB再开启自动备份。命令行操作很简单# 将安全日志最大容量调整为1GB并开启自动备份 wevtutil sl Security /ms:1073741824 /rt:true /ab:true/ms后面跟的是字节数1073741824就是1GB/rt:true表示达到上限时保留最近事件/ab:true表示日志填满后自动归档备份。对于普通的个人电脑128MB到256MB足够用很久对于对外提供远程访问的服务器建议至少512MB起步如果条件允许还要配合集中日志平台做长期归档。4. 事件日志之外还有三处随身痕迹注册表、RDP记录和last命令4.1 UserAssist和Prefetch记录登录后运行过什么安全日志回答的是谁在什么时间登录了但它不太管登录之后这个人运行了什么东西。要回答登录后干了什么就得去系统里另外三个位置找痕迹。第一个是注册表里的UserAssist。它藏在HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist下记录通过资源管理器启动过的程序路径、运行次数和最近运行时间。注意它的路径是做过ROT13加密的直接打开看到一堆乱码需要用工具或脚本转换才能还原成明文路径。对数字取证来说这个位置非常重要因为普通用户极少会想到这里有记录。第二个是Prefetch预读取文件位于C:\Windows\Prefetch。Windows为了加速程序启动会把启动过的程序信息写进.pf文件里面包含程序路径、运行次数、最后运行时间。虽然初衷是性能优化但实际成了这台机器跑过哪些程序的另一份账本。缺点是进程运行过多时文件数量庞大而且清理门槛低被清理后就没有了。第三个是RecentDocs在HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs下记录最近打开过的文档名称。它能反映用户最近在处理哪些文件常用来判断是否有敏感文件被翻阅。这三个位置有个共同点它们都不是为审计而生的只是系统正常功能的副产品所以不能单独作为定论依据但用来辅助还原登录之后发生了什么价值非常大。4.2 远程桌面连接记录溯源远程登录最直接的位置如果你最关心的是有没有人通过远程桌面连过我的电脑除了安全日志里的type 10登录事件客户端侧还有一个非常直观的记录位置注册表HKCU\Software\Microsoft\Terminal Server Client\Servers和HKCU\Software\Microsoft\Terminal Server Client\Default。在这里能看到这台电脑曾经主动连接过的远程主机列表和最近连接顺序。需要区分一下安全日志的4624记录的是别人连进来的结果而注册表里这两项记录的是本机主动连出去的历史。两者配合使用才能把双向的远程桌面行为都覆盖到。系统端的RDP会话记录也很完整。在事件查看器里打开应用程序和服务日志→Microsoft→Windows→TerminalServices-RemoteConnectionManager→Operational可以找到会话创建、连接成功、断开等事件事件ID在不同版本Windows里有差异筛选时直接按事件来源过滤就行。配合安全日志的type 10登录基本能拼出一条完整的远程登录时间线。4.3 Linux/macOS用户也别漏掉last、lastlog和系统日志很多读者可能同时管理着Linux和macOS机器那边的登录记录和Windows逻辑类似但位置和命令完全不同。最常用的三个命令是last、lastb和lastlog。last读取/var/log/wtmp文件列出成功登录的历史包括登录时间、注销时间、来源IPlastb读取/var/log/btmp列出失败登录记录lastlog则按用户汇总每个账户的最后一次登录时间和来源。以Ubuntu为例# 查看最近20条成功登录记录 last -20 # 查看失败登录记录 sudo lastb # 查看所有账户的最后登录时间 lastlogLinux系统通常还会把SSH登录日志写进/var/log/auth.logDebian/Ubuntu系或/var/log/secureRHEL系。要查看SSH服务的实时登录尝试可以这样sudo journalctl -u sshdmacOS的登录历史可以用last查看lastlog也能用。想查看更细粒度的登录过程可以查统一日志log show --last 24h --predicate process loginwindow这部分和Windows不冲突如果你管理的机器比较多建议把last命令和Windows事件日志两套习惯都记下来。5. 实战排查从一条登录日志里揪出异常登录5.1 先学会三个判断规则时间、来源、登录形态积累了不少日志知识接下来聊实战到底怎么判断一条登录记录是不是异常我总结出三个规则按优先级依次看。规则一是时间是否异常。凌晨两点半、节假日、连续多个休息日出现的登录成功记录尤其在非服务器桌面上出现都是重点怀疑对象。不过攻击者也不一定只挑夜里动手所以时间只是加权信号而不是定论。规则二是来源是否异常。本地交互式登录的来源IP正常是本机地址type 10远程登录的来源IP应该是你预设的网关、专线或办公网地址。一旦出现一个从没见过的来源IP不管登录是否成功都要单独拎出来查。尤其注意来源IP属于外部网段、同时工作站名又与本机完全不匹配的情况。规则三是登录形态是否异常。普通员工的工位电脑理论上不应该出现type 10一个普通用户账户也不该有type 4批处理登录或type 5服务登录。如果管理员账号的登录类型和登录时间都显得很反常基本可以判断出问题了。把三个规则综合起来看比单一指标靠谱得多。比如一条type 2登录发生在白天、来源是本机、用户是本人那就没问题但同样是type 2如果发生在凌晨、而用户早在一个月前已离职这就要立即处理。5.2 PowerShell批量筛选与导出不用一条条翻日志事件查看器虽然直观但一条条翻太慢。实际排查时直接上PowerShell批量筛选。下面这条命令拉出最近50条成功登录事件并提取用户名、登录类型、来源IPGet-WinEvent -FilterHashtable {LogNameSecurity; Id4624} -MaxEvents 50 | Select-Object TimeCreated, {n用户名; e{$_.Properties[5].Value}}, {n登录类型; e{$_.Properties[8].Value}}, {n来源IP; e{$_.Properties[18].Value}} | Format-Table -AutoSize想统计失败登录都来自哪个IP可以执行Get-WinEvent -FilterHashtable {LogNameSecurity; Id4625} -MaxEvents 2000 | Group-Object { $_.Properties[19].Value } | Sort-Object Count -Descending | Select-Object Count, Name -First 10这里有个必须提醒的坑4624和4625的事件数据字段顺序并不完全一致。上面例子中4624的来源IP在Properties[18]而4625的来源IP在Properties[19]。同时不同Windows版本、不同补丁级别下索引位置也可能漂移。所以我写命令时通常先用事件查看器打开一条目标日志切到“XML视图”对照里面的字段名确认索引再跑脚本。这个习惯能帮你少走很多弯路。如果想长期留档把结果导出为CSV更实用Get-WinEvent -FilterHashtable {LogNameSecurity; Id4625} -MaxEvents 1000 | Where-Object { $_.Properties[19].Value -and $_.Properties[19].Value -ne 127.0.0.1 } | Export-Csv C:\temp\logon_fail.csv -Encoding UTF8导出后你可以直接丢进Excel做透视表按来源IP、用户名、时间字段拉几轮很多规律马上就能看出来。5.3 一个真实场景凌晨时分的RDP成功登录意味着什么把上面的方法串起来看一个典型的排查过程。假设你管理的办公室电脑开启了登录审核某天你例行检查安全日志发现这样的序列凌晨01:56到02:13之间连续出现46条4625尝试的用户名依次是admin、administrator、test、zhangwei、liqiang等02:15突然出现一条4624TargetUserName是zhangweiLogonType是10来源IP是198.51.100.23工作站名是UNKNOW-PC02:16到02:20又出现几条4776和4624登录类型包含type 3网络登录。这就是一个非常典型的远程暴力破解成功链条。攻击者先用弱密码字典撞库撞中一个账号后立刻通过远程桌面进入随后开始尝试访问其他机器type 3网络登录通常就是横向移动的迹象。对应动作至少有四步立即禁用或重置zhangwei账户密码并强制注销该会话。在防火墙或远程桌面网关层面封禁来源IP 198.51.100.23。检查是否有新的隐藏账户被创建留意事件ID 4720、4722、4728等账户管理事件。顺藤摸瓜查看后续type 3网络登录的目标机器评估横向渗透范围。这个案例里如果没有提前开启审核策略没有把安全日志容量调大你会发现凌晨这两分钟几乎是一片空白后续能做的工作就非常有限。所以我坚持认为审计配置不是安全团队的专项工作每个用电脑的人都值得花十分钟把这项基础配置补上。最后分享一条我自己的体会与其等出问题再翻日志不如现在就把审核策略开好、日志容量调大。很多公司电脑出事后我第一件事就是打开安全日志结果发现什么记录都没有那种感觉非常无力而且场合几乎都是当初没人想起要开审核。开启登录审核不会给日常使用带来可感知的开销最多多占一点磁盘和I/O换来的却是出事时你手里有一条完整的时间线。建议每隔一两个月用上面第5节里的命令导出一份登录记录哪怕只是扫一眼最近的4624和4625都比到时候一无所知强得多。
返回列表