ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

登录记录全解析:从系统日志到异常登录排查实战

登录记录全解析:从系统日志到异常登录排查实战 你按下电源键输入密码回车屏幕亮起。整个过程看起来平淡无奇但系统从你按下回车那一刻就开始记账了这个登录动作发生在什么时间、用的是哪个账户、通过什么方式认证、从哪台设备连进来的、最终成功还是失败——这些信息全部会被写进系统日志。很多人工作了几年也未必注意过“登录记录”这个东西直到某天发现自己的账号被人登过、服务器被爆破过、或者想查一台机器到底什么时候被重启过才回头去翻这些账本。这套“登录记录”不是哪个安全软件的功能而是操作系统自带的基础能力。Windows 有事件日志Linux/macOS 有 wtmp、btmp 和 auth 日志每次登录都会留下至少两三条痕迹。这篇文章我会把这些痕迹一条条翻出来讲清楚它们存在哪儿、怎么看、能查出什么以及安全人员是怎么通过它们发现异常登录的。不管你是普通用户还是运维读完都能自己动手查一遍。1. 登录事件里到底躺着哪些信息1.1 一条登录记录的基本字段我们先把一条登录记录拆开看。以 Windows 安全日志中最常见的“登录成功”事件事件ID 4624为例它的核心字段大体有这些字段含义示例账户名谁登录了Zhangsan安全标识符 SID账户的唯一身份标识S-1-5-21-...-500登录类型通过什么方式登录2交互式、10远程登录进程哪个系统进程发起的认证User32、Advapi身份验证包用哪种协议完成的认证Kerberos、NTLM、Negotiate工作站/来源IP从哪台机器发起的登录本机空值RDP 则为 IP会话ID本次登录的会话编号0x1234567进程名调用登录 API 的程序路径C:\Windows\System32...时间事件生成的时间戳2025-06-01 08:04:12这些字段单独拿出来看都很枯燥但组合起来就能还原出完整的登录场景。比如看到一条 4624 事件登录进程是User32、工作站字段为空、登录类型是 2基本可以断定这人在显示器前用物理键盘输入密码登录看到登录进程是NtLmSspNT LAN Manager Security Support Provider、来源 IP 是公网地址、登录类型是 3那大概率是远程访问本机共享资源或通过旧协议完成的网络登录。1.2 最容易忽略的“登录类型”Windows 的 4624 事件里有个字段叫Logon Type翻译过来是“登录类型”。这是很多人第一次翻日志时最容易翻车的点因为同一个账户的多次登录登录类型可能完全不同。常见的有登录类型名称真实场景2交互式登录在电脑屏幕前按 CtrlAltDel 输入密码或者通过控制台直接登录3网络登录访问共享文件夹、映射磁盘、使用 net use 连接到本机4批处理登录计划任务或批处理作业在后台以某账户身份运行5服务登录Windows 服务以服务账户身份启动比如 SQL Server 服务7解锁锁屏后重新输入密码或指纹解锁8网络明文通过 IIS 的 Basic 认证等明文方式登录常见于 Web 请求9新凭据用 RunAs 以不同账户运行程序10远程交互式登录RDP 远程桌面登录来源 IP 通常会记录客户端地址我见过有人把凌晨出现的登录类型 5 当成黑客入侵结果一查只是数据库服务自动重启。反过来如果一台服务器平时只用 RDP 远程登录某天突然出现一条登录类型 2 的交互式登录那就很可疑——这说明有人物理接触了那台机器或者通过服务器管理口接管了控制台。1.3 成功和失败两条腿走路安全日志里登录事件分“成功”和“失败”两类ID 也不同4624 是成功登录4625 是登录失败。很多人只盯着成功事件看觉得失败而已没什么大不了但实际上失败记录的信息往往比成功还要敏感它会记录失败原因密码错误、账户锁定、时间限制、失败次数、来源地址还有详细的验证包名称。Windows 默认的审计策略里成功审核一般默认开启失败审核在某些精简安装或组策略收紧不当的环境里可能没开。所以如果你发现自己电脑的登录日志里只有 4624 没有 4625不用先怀疑系统疯了先检查一下审核策略打开secpol.msc依次展开“安全设置 → 本地策略 → 审核策略”看“审核登录事件”里“失败”那一栏是否勾选了。真实环境中安全设备通常会强制要求成功和失败都记录因为大量 4625 失败后跟一条 4624往往意味着撞库成功。2. 系统到底把账本存在了哪里2.1 Windows 的事件日志体系Windows 的登录记录主要存在于“事件日志”里通过eventvwr.msc可以打开事件查看器。分类上登录相关事件几乎都落在“Windows 日志 → 安全”这个分类下但有三个日志需要配合看日志名称关注点安全日志登录成功/失败、特权使用、账户管理等审计事件系统日志系统启动/关闭、事件日志服务启停、服务安装应用程序日志应用层认证行为比如某些业务系统的登录记录只看安全日志会漏掉一个细节系统日志里的事件ID 6005 表示“事件日志服务已启动”6006 表示“事件日志服务已停止”。这两种事件通常出现在系统开机或关机时通过它们可以反向确认这台电脑的重启时间。还有一个 6013记录的是系统运行时长也就是从上次启动到现在一共跑了多少秒。把 6005/6006/6013 和安全日志里的 4624 对齐就能画出一条完整的“开机—登录—运行—关机”时间线。在 Linux 和 macOS 上登录记录被拆成了更细的账本。/var/run/utmp记录当前在线用户/var/log/wtmp记录历史上成功登录的数据/var/log/btmp专门存登录失败的数据。CentOS/RHEL 系列的认证细节写在/var/log/secureDebian/Ubuntu 则是/var/log/auth.log。macOS 用的还是同一套 Unix 底子所以last和wtmp也存在但图形界面的详细日志走的是统一的日志系统可以通过log show去捞。2.2 为什么系统要把账本拆成三份很多初学者会问既然都是登录记录为什么不直接放一个文件里这个设计其实是有讲究的。utmp、wtmp、btmp三者的区别是“状态”、“历史成功记录”、“历史失败记录”。系统启动时维护的是当前会话的瞬时状态who命令读的就是它用户注销或系统重启后这条当前会话记录会追加写入wtmp形成历史而密码输错时系统根本不想让这种脏数据混入正常登录历史于是单独塞进btmp。把“正在发生的事”、“曾经成功过的事”、“失败过的事”分开一方面是因为日志文件的增长速度和访问频率不同另一方面是管理员在排查时能第一时间缩小范围查有没有人爆破直接看btmp查谁成功登录过直接看wtmp。2.3 日志是循环写入的不是无限累积的要有一个心理准备系统日志并不是无限保存的。Windows 事件日志默认采用“按大小覆盖”的策略安全日志默认上限可能是 128MB视系统配置而定超过上限后会用新事件覆盖最老的记录。Linux 的日志文件则配合logrotate轮转常见的策略是只保留最近 4 周或最近 10 个归档文件。这就引出一个实际教训如果你怀疑某台机器遭到入侵想翻一个多月前的登录记录但系统日志恰好只保留了七天那就很难查了。这也是为什么正规机房要专门搭建集中日志服务器、把各主机的登录事件实时转发到远端存储——日志保存期限这件事不能靠操作系统默认配置得靠人去主动规划和备份。3. 普通人能查出来的东西3.1 先在 Windows 上跑一次实操打开事件查看器太啰嗦我更喜欢直接用 PowerShell 查。想查最近 50 条成功登录事件Get-WinEvent -FilterHashtable {LogNameSecurity; Id4624} -MaxEvents 50 | Select-Object TimeCreated, Message | Format-List如果想把结果精简成表格Get-WinEvent -FilterHashtable {LogNameSecurity; Id4624} -MaxEvents 50 | ForEach-Object { $xml [xml]$_.ToXml() [PSCustomObject]{ 时间 $_.TimeCreated 账户 $xml.Event.EventData.Data | Where-Object {$_.Name -eq TargetUserName} | Select-Object -ExpandProperty #text 登录类型 $xml.Event.EventData.Data | Where-Object {$_.Name -eq LogonType} | Select-Object -ExpandProperty #text 来源IP $xml.Event.EventData.Data | Where-Object {$_.Name -eq IpAddress} | Select-Object -ExpandProperty #text } } | Format-Table这段脚本里最关键的是把事件 XML 里EventData节点里的字段名拿出来映射成表格列。TargetUserName是登录账户名LogonType是登录类型IpAddress是来源地址。如果某个字段查出来是-或空值通常是本地交互式登录因为不涉及网络来源。还有一种更简单粗暴的方式用wevtutil在命令行直接搜wevtutil qe Security /q:*[System[(EventID4624)]] /f:text /c:20这条命令会把最近 20 条登录成功事件以纯文本形式打印出来。适合在只能远程命令行操作、没法开图形界面的服务器上应急使用。3.2 Linux 和 macOS 的经典三连在 Linux 上查登录记录最常用的三条命令是last、lastb和wholast读/var/log/wtmp显示历史上成功登录的会话、时间、来源地址、在线时长lastb读/var/log/btmp显示失败登录记录需要 root 权限who读/var/run/utmp显示当前谁在线。我经常用的一条组合是last -i -a | head -50-i参数把来源主机名解析为 IP 地址-a参数在最后一列显示完整的主机名或 IP。对于排查“昨晚有没有人从外部登录过”这种问题直接看last -i输出的第三列就够了。macOS 上last命令同样可用但图形界面登录的细节要更丰富一点可以用系统自带的统一日志查log show --last 1h --predicate process loginwindow它会显示loginwindow进程在这一小时内的所有日志包括锁屏、解锁、验证失败等细节。实话说macOS 用户日常不太会有机会碰这些但如果你在 Mac 上装了 SSH 服务/var/log/secure.log里的 sshd 记录就成了排查远程登录的主战场。3.3 看日志时最容易踩的几个坑第一个坑是时间。Windows 安全日志里显示的时间是本地时间但某些第三方安全设备收集后转存的日志默认使用 UTC 或者特定时区如果不做时区换算很容易把凌晨 1 点的登录看成中午 1 点。排查时建议从一开始就明确时间基准全部换算成 UTC 或同一时区再分析。第二个坑是重启带来的“断片”。系统意外断电或强制关机时最后的注销事件根本来不及写进日志所以你会发现某条 4624 之后直接跳到了几天后的下一条 4624中间没有 4634注销也没有 4647用户发起的注销。这不是日志丢了而是操作系统根本没来得及记录。判断机器是否曾意外重启要到系统日志里看 6008意外关机事件或者用 6013 的运行时长来推算。第三个坑是混淆“系统登录”和“应用登录”。打开某个软件、输入账号密码那是应用日志的事跟操作系统登录记录是两套体系。有人查安全日志发现某账户从没登录过但软件后台明明显示这个用户天天在线原因就在这。4. 安全审计视角怎么通过登录记录抓异常4.1 异常登录的三个判断维度翻日志不能漫无目的地看没有几百万条记录谁都不会逐一阅读。我总结了一套“三维度筛选法”时间维度登录时间是深夜、凌晨、节假日还是工作时间是否跟该员工出勤时间完全不匹配有人说黑客也会假装上班但实际上大部分爆破攻击发生在业务低谷时段。来源维度登录来源 IP 是否属于常用网段是否在短时间内从跨度极大的地理位置出现比如前一条来自国内后一条来自国外账号维度登录的账号是否是特权账户服务账户还是普通员工账户特权账户的异常登录优先级最高服务账号在凌晨以外的时段运行本身就值得警惕。三个维度都命中基本就可以判定这是一条高危登录事件。如果只有一个维度异常比如时间不对但来源 IP 是内部地址那可能只是某位同事半夜加班回公司处理故障不必过度恐慌但仍然建议确认。4.2 暴力破解的痕迹长什么样Linux 的btmp和 Windows 的 4625 是暴破攻击的直接证据。典型的暴力破解特征有特征说明同一来源 IP 短时间大量失败记录一分钟内出现几十次甚至上百次 4625失败后突然出现成功登录说明密码撞对了攻击者已登录成功账户名不规律攻击者经常使用 admin、test、user 这类字典名批量试探失败次数到达账户锁定阈值后被解锁管理员重新启用账户或锁定策略本身没生效发现这些特征后第一反应不是去手动封 IP而是先确认那条成功的 4624 或wtmp记录有没有真正建立会话。如果成功登录确实发生了按紧急事件处理断开该会话、重置该账户密码、检索该账户登录后的所有行为进程启动、文件访问、计划任务创建。4.3 如果日志被删了还能查到什么攻击者清理痕迹是常见操作Windows 安全日志尤其容易被清。但清日志这个行为本身就很可疑而且它背后有几个残留在别的日志里很难掩盖系统日志中的 6005/6006 事件会再次出现因为清日志需要重启事件日志服务安全日志被清空后新记录的事件 ID 编号会从 1 开始重新计数与正常持续增长编号的机器明显不同Prefetch文件、$MFT、USN 日志里可能残留程序执行的痕迹如果事件日志服务在清空期间仍在运行某些未刷盘的内容还有机会恢复。单纯靠清空安全日志掩盖入侵在大型企业环境里基本不可能因为关键主机早就把日志实时转发到 SIEM 了。这也是我一直强调“本地日志不可靠集中留存才靠谱”的原因。日志的核心价值就在于事后追溯一份只存在本机系统盘里的日志价值低得可怜。4.4 保留策略和权限管控看过太多运维事故我在这里给出几条可直接落地的建议登录审计策略要开启成功失败双重审核不要为了省日志量只开“成功”安全日志大小建议不少于 256MB保留天数至少 180 天有合规要求时按规范执行服务器日志要实时转发到集中日志平台至少做到异地留存、只增不改查看安全日志的权限要收敛不能让所有普通用户随便翻别人的登录记录一旦发现管理员账户出现异常登录优先处理后立即修改该主机的管理员密码和关联服务账号密码。关于权限这点多提醒一句Windows 普通用户可以查看自己的登录记录但没有权限读取安全日志中其他地址相关的事件这是系统设计如此不是因为日志丢失。日常排查需要以管理员身份运行事件查看器或 PowerShell才能读取完整的 Auditing 信息。5. 常见问题速查表现象原因解决办法安全日志里没有 4624/4625审核策略未开启或事件日志服务异常检查 secpol.msc 审核策略确认服务 EventLog 运行中只有成功登录没有失败记录失败审核未开启在审核策略中为“审核登录事件”勾选“失败”4624 大量出现但本地没人登录网络登录类型 3或服务登录来自共享访问与系统服务按 LogonType 过滤区分真实交互登录RDP 登录记录里来源 IP 全是 ::1通过 IPv6 环回地址回连常见于跳板机中转使用-4强制 IPv4 或检查跳板出口地址Linux 查 lastb 提示权限不足btmp 文件权限限制用 sudo lastb 执行登录记录时间与业务日志相差数小时时区配置不一致统一系统时区与日志展示时区同一会话在 last 里显示 never logged inlastlog 与 wtmp 数据不同两者口径有差异以 wtmp 为准lastlog 仅供快速参考重启后 first login 时间异常事件日志轮转或系统时间调整结合 system 日志 6005/6013 辅助判断真实时间线看完这张表你已经能把大多数常见场景对号入座了。真遇到拿不准的记录不要急着下结论先确认时间线再核对来源最后才定性。宁可多花十分钟把日志对齐也不要因为一条孤立记录把正常操作误判成入侵。这个内容后续还可以继续扩展比如把集中日志收集、威胁情报关联、登录后行为审计串成一套完整的排查流程。
返回列表