视频加载失败

常用操作系统日志查看与分析

3406 字
17 分钟
常用操作系统日志查看与分析
常用操作系统日志查看与分析

记录「常用操作系统日志查看与分析」实验的完整过程:先在 Kali Linux 上用 last、journalctl、dmesg 分析本机日志,再借助 Windows 11 事件查看器与 Python 脚本(python-evtx)解析 EVTX 样本,完成登录事件(4624/4625)的提取、筛选与统计。

实验目的与原理#

实验目的:掌握 Linux 本地日志查看工具,理解 Windows 日志格式。

实验原理:实验基于 Linux systemd 日志系统与 Windows 事件日志机制,通过 Kali Linux 本地工具(last、journalctl)分析系统启动、认证日志,结合 Windows 事件查看器与 Python 脚本解析 EVTX 样本,掌握操作系统日志的查看、过滤与安全分析方法。

常用操作系统日志查看与分析

实验软硬件环境#

  • Kali Linux 虚拟机(以 VirtualBox 为例)
  • Windows 日志样本文件(取自 EVTX-ATTACK-SAMPLES 项目)
  • 本地 Windows 11 主机,提前安装 Python 环境(实验中用 Anaconda 构建 Python 虚拟环境)

任务一:Linux 系统日志分析(Kali Linux 虚拟机本地)#

1.1 查看系统启动日志#

打开终端,使用 last 命令查看本机最近 5 次登录记录:

Terminal window
last -5

last -5 查看本机最近 5 次登录记录
last -5 查看本机最近 5 次登录记录

journalctl 是 Kali Linux 中查看系统日志的核心工具,基于 systemd 日志系统。常用命令包括:

功能命令
查看所有日志sudo journalctl
本次启动日志sudo journalctl -b
实时跟踪sudo journalctl -f
指定服务日志sudo journalctl -u ssh
时间段查询sudo journalctl --since "1 hour ago"
错误级别日志sudo journalctl -p err
关键词搜索sudo journalctl --grep="Failed"

在终端输入以下命令,验证输出效果并截图到实验报告中。查看本次启动成功的服务(前 20 个):

Terminal window
sudo journalctl -b | grep "Started" | head -20

journalctl -b 过滤出前 20 个启动成功的服务
journalctl -b 过滤出前 20 个启动成功的服务

查看 SSH 登录失败记录:

Terminal window
sudo journalctl --grep="Failed password" -n 20

journalctl 检索 SSH 登录失败记录
journalctl 检索 SSH 登录失败记录

查看最近 1 小时的认证日志:

Terminal window
sudo journalctl -u ssh --since "1 hour ago" --no-pager

journalctl 查看 SSH 服务最近 1 小时日志
journalctl 查看 SSH 服务最近 1 小时日志

检查内核启动过程中的错误信息:

Terminal window
sudo dmesg | grep -i error

dmesg 检查内核启动错误信息
dmesg 检查内核启动错误信息

1.2 分析认证日志(登录记录)#

查看 SSH 服务的最近 30 条认证记录:

Terminal window
sudo cat /var/log/auth.log | grep "sshd" | tail -30

cat /var/log/auth.log 提示没有那个文件或目录
cat /var/log/auth.log 提示没有那个文件或目录

Kali 默认不再把认证日志写入 /var/log/auth.log,因此该命令报「没有那个文件或目录」,认证记录需改由 journalctl -u ssh 查询。

1.3 使用 journalctl 高级过滤#

查看 SSH 服务最近 1 小时的完整日志(不分页显示):

Terminal window
sudo journalctl -u ssh --since "1 hour ago" --no-pager

journalctl 输出 SSH 服务最近 1 小时完整日志
journalctl 输出 SSH 服务最近 1 小时完整日志

搜索包含「Failed password」的日志(最近 20 条):

Terminal window
sudo journalctl --grep="Failed password" -n 20

journalctl 搜索 Failed password 最近 20 条记录
journalctl 搜索 Failed password 最近 20 条记录

任务二:Windows 日志分析(使用样本文件)#

使用 Windows 事件日志样本进行实验分析。该部分实验不一定需要在 Kali Linux 中进行,如果本机有相应工具,也可在本地 Windows 完成;本部分演示内容以本地 Windows 运行为主,需要提前安装好 Python 环境,这里使用的是 Anaconda 来构建 Python 虚拟环境。

2.0 使用 Windows 11 本地事件查看器(图形界面方式)#

步骤 1:打开事件查看器

  • 点击任务栏搜索图标(或按 Win + S)
  • 输入「事件查看器」或「Event Viewer」
  • 点击搜索结果中的「事件查看器」应用

搜索并打开事件查看器应用
搜索并打开事件查看器应用

步骤 2:导航到安全日志

在事件查看器左侧导航栏进入「Windows 日志 → 安全」。

事件查看器左侧导航栏进入安全日志
事件查看器左侧导航栏进入安全日志

注意:首次查看「安全」日志时,若提示「无法找到事件」,说明当前未启用安全审计策略。可通过本地安全策略(secpol.msc)→ 本地策略 → 审核策略 → 启用「审核登录事件」。

步骤 3:查看登录事件(4624/4625)

  • 点击「安全」日志后,右侧会显示所有安全事件列表
  • 在右侧「操作」面板点击「筛选当前日志…」
  • 在弹出窗口的「事件ID」输入框中输入:4624,4625
    • 4624:登录成功
    • 4625:登录失败
  • 点击「确定」,系统将只显示登录相关事件

筛选当前日志,事件 ID 输入 4624,4625
筛选当前日志,事件 ID 输入 4624,4625

筛选后仅显示 4624/4625 登录相关事件
筛选后仅显示 4624/4625 登录相关事件

步骤 4:查看事件详情

双击任意事件(如事件 ID 4624),弹出「事件属性」窗口。关键字段查看:

  • 常规选项卡:
    • Subject(发起者):谁尝试登录
    • TargetUserName(目标用户名):登录的账号
    • LogonType(登录类型):2(交互式)、3(网络)、10(远程桌面)
    • IpAddress(源IP):来自哪个 IP 地址
    • ProcessName:通过什么程序登录(如 chrome.exe、svchost.exe)
  • 详细信息选项卡:可查看 XML 格式的原始数据

事件 4624 属性窗口,查看登录关键字段
事件 4624 属性窗口,查看登录关键字段

步骤 5:导出日志(供后续 Python 分析)

如需导出日志用于 2.2 节的 Python 脚本分析:

  • 在「安全」日志上右键 → 「将所有事件另存为…」
  • 选择保存类型为「事件文件 (*.evtx)」
  • 命名文件(如 my-security-log.evtx),保存到桌面
  • 在 2.2 节的 Python 脚本中,将文件路径修改为导出的文件路径即可分析自己的日志

将所有事件另存为 evtx 事件文件
将所有事件另存为 evtx 事件文件

2.1 下载 Windows 日志样本文件#

注意,实验 2.1 不会使用到 2.0 中的样本文件,请按以下实验操作步骤操作。实验选用推荐样本来自 EVTX-ATTACK-SAMPLES 项目:

GitHub 地址:https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES

实验中提供的日志文件分别为:

这些样本文件包含 Event ID 4624(登录成功)、4625(登录失败)等安全事件。

2.2 在 Windows 系统使用 Python 脚本进行日志解析#

创建 python 脚本 log-lab-exp1-analysis-Evtx1.py,用于统计两类登录事件的数量:

import Evtx.Evtx as evtx
from xml.dom import minidom
# 使用下载的样本文件路径
# evtx_file = "LM_WMI_4624_4688_TargetHost.evtx"
evtx_file = "CA_4624_4625_LogonType2_LogonProc_chrome.evtx"
success_count = 0
fail_count = 0
try:
with evtx.Evtx(evtx_file) as log:
for record in log.records():
xml_data = record.xml()
# 统计登录成功事件 (Event ID 4624)
if "4624" in xml_data:
success_count += 1
if success_count <= 5: # 显示前5条
print(f"[登录成功] 时间: {record.timestamp()}")
# 统计登录失败事件 (Event ID 4625)
elif "4625" in xml_data:
fail_count += 1
if fail_count <= 5: # 显示前5条
print(f"[登录失败] 时间: {record.timestamp()}")
print(f"\n========== 统计结果 ==========")
print(f"登录成功次数 (Event ID 4624): {success_count}")
print(f"登录失败次数 (Event ID 4625): {fail_count}")
print(f"总计: {success_count + fail_count} 条安全事件")
except FileNotFoundError:
print(f"错误: 找不到文件 {evtx_file}")
print("请确保已下载EVTX-ATTACK-SAMPLES样本文件")
except Exception as e:
print(f"解析错误: {e}")

执行后显示分析日志文件的 4624 和 4625 情况:解析 CA_4624_4625_LogonType2_LogonProc_chrome.evtx 统计到登录成功 3 次、登录失败 1 次,共 4 条安全事件;解析 LM_WMI_4624_4688_TargetHost.evtx 统计到登录成功 1294 次、登录失败 1 次,共 1295 条安全事件。

Evtx1.py 解析 CA 样本:成功 3 次、失败 1 次
Evtx1.py 解析 CA 样本:成功 3 次、失败 1 次

Evtx1.py 解析 LM 样本:成功 1294 次、失败 1 次
Evtx1.py 解析 LM 样本:成功 1294 次、失败 1 次

再创建第二个脚本,用于提取最近登录记录的关键字段:

import Evtx.Evtx as evtx
import re
# 使用下载的样本文件路径
evtx_file = "LM_WMI_4624_4688_TargetHost.evtx"
# evtx_file = "CA_4624_4625_LogonType2_LogonProc_chrome.evtx"
print("========== 最近登录记录详情 ==========\n")
try:
with evtx.Evtx(evtx_file) as log:
count = 0
for record in log.records():
xml_data = record.xml()
if "4624" in xml_data and count < 5:
# 提取关键信息
time_match = re.search(r'<TimeCreated SystemTime="([^"]+)"', xml_data)
user_match = re.search(r'<Data Name="TargetUserName">([^<]+)</Data>', xml_data)
ip_match = re.search(r'<Data Name="IpAddress">([^<]+)</Data>', xml_data)
print(f"记录 {count+1}:")
print(f" 时间: {time_match.group(1) if time_match else 'N/A'}")
print(f" 用户: {user_match.group(1) if user_match else 'N/A'}")
print(f" 来源IP: {ip_match.group(1) if ip_match else 'N/A'}")
print("-" * 40)
count += 1
except Exception as e:
print(f"错误: {e}")

执行后显示分析日志文件的情况,输出前 5 条登录记录的时间、用户与来源 IP:

Evtx2.py 输出最近登录记录详情(Administrator / user01)
Evtx2.py 输出最近登录记录详情(Administrator / user01)

Evtx2.py 输出最近登录记录详情(SYSTEM 账户)
Evtx2.py 输出最近登录记录详情(SYSTEM 账户)

2.3 在 Kali Linux 系统使用 Python 脚本进行日志解析#

Kali Linux 中自带有 python 3.13,运行以下命令安装 python-evtx 库:

Terminal window
sudo apt install -y python3-evtx

创建 2.2 中的 python 脚本,并运行 Python 脚本分析登录事件(结果应与 2.2 中一致):

Kali 下 Evtx1.py 解析 LM 样本:成功 1294 次、失败 1 次
Kali 下 Evtx1.py 解析 LM 样本:成功 1294 次、失败 1 次

Kali 下 Evtx2.py 输出最近登录记录详情(SYSTEM 账户)
Kali 下 Evtx2.py 输出最近登录记录详情(SYSTEM 账户)

Kali 下 Evtx1.py 解析 CA 样本:成功 3 次、失败 1 次
Kali 下 Evtx1.py 解析 CA 样本:成功 3 次、失败 1 次

Kali 下 Evtx2.py 输出前 5 条最近登录记录详情
Kali 下 Evtx2.py 输出前 5 条最近登录记录详情

2.4 分析 EVTX-ATTACK-SAMPLES 项目中的其他日志文件#

针对 4624 事件,查找其他带有 4624 关键字的日志文件,下载后使用上面的两个 python 分析脚本进行分析,并对分析结果进行截图。推荐尝试 security_4624_4673_token_manip.evtx 和 DE_RDP_Tunneling_4624.evtx 文件。

security_4624_4673_token_manip.evtx:统计到登录成功 1 次、登录失败 0 次,共 1 条安全事件,并输出该条登录记录的详情。

security_4624_4673_token_manip.evtx 解析结果:1 条登录事件
security_4624_4673_token_manip.evtx 解析结果:1 条登录事件

security_4624_4673_token_manip.evtx 登录记录详情
security_4624_4673_token_manip.evtx 登录记录详情

DE_RDP_Tunneling_4624.evtx:统计到登录成功 18 次、登录失败 0 次,共 18 条安全事件,并输出前 5 条登录记录详情。

DE_RDP_Tunneling_4624.evtx 解析结果:18 条登录事件
DE_RDP_Tunneling_4624.evtx 解析结果:18 条登录事件

DE_RDP_Tunneling_4624.evtx 前 5 条登录记录详情
DE_RDP_Tunneling_4624.evtx 前 5 条登录记录详情

测试/调试及实验结果分析#

Linux 日志测试#

last -5 输出最近 5 次登录记录;journalctl -b | grep "Started" | head -20 过滤出 20 个启动成功的服务;journalctl --grep="Failed password" 检索到 SSH 登录失败记录。

调试:无 sudo 权限导致 journalctl 报错,添加后解决;7-Zip 版本低导致镜像解压失败,升级后修复。

Windows 日志测试#

事件查看器筛选 4624(登录成功)、4625(登录失败),可查看用户、IP、登录类型等字段。

Python 脚本解析两类 Windows 日志样本的结果如下:

样本文件登录成功(4624)登录失败(4625)总计
CA_4624_4625_LogonType2_LogonProc_chrome.evtx314
LM_WMI_4624_4688_TargetHost.evtx129411295

调试:路径错误导致 FileNotFoundError,修正后运行;pip 安装 python-evtx 超时,切换清华源解决。

实验结论#

本实验达成预定目标:掌握了 Linux 本地日志查看工具链(last 查看登录历史、journalctl 过滤 systemd 日志、dmesg 排查内核错误);理解了 Windows 日志格式与分析方法(.evtx 文件结构、事件 ID 4624/4625 含义),并能通过 Python 脚本实现 evtx 日志的自动化解析与统计。

实验体会#

1、Linux 日志分析心得:journalctl 是基于 systemd 的统一日志管理工具,相比传统分散在 /var/log 下的日志文件,其支持按启动会话(-b)、服务(-u ssh)、时间(—since “1 hour ago”)、错误级别(-p err)等多维度过滤,大幅提升了日志查询效率;last 命令简洁轻量,适合快速排查异常登录。

2、Windows 日志分析心得:事件查看器的图形界面适合单条事件的手动溯源,但面对海量日志时效率低下;Python 结合 python-evtx 库可实现批量解析、自动统计(如暴力破解的失败次数统计)和关键字段提取,更适合规模化安全分析场景。

3、问题与能力提升:实验中解决了 VirtualBox 启动失败(BIOS 开启 VT-x 虚拟化)、GitHub 样本下载慢(使用 ghproxy 镜像加速)等问题,提升了环境配置与故障排查能力;后续可扩展分析权限提升(4672)、进程创建(4688)等其他 Windows 安全事件,完善日志分析维度。


实验流程图#

实验准备

Kali Linux 虚拟机 + Windows 11 主机

EVTX-ATTACK-SAMPLES 样本

任务一:Linux 日志分析

last -5 查看最近登录记录

journalctl -b / -f / -u ssh / --since / -p err

按启动会话、服务、时间、级别过滤

journalctl --grep="Failed password" -n 20

检索 SSH 登录失败

dmesg | grep -i error 排查内核错误

cat /var/log/auth.log 不存在

认证日志改由 journalctl -u ssh 查询

任务二:Windows 日志分析

2.0 事件查看器

筛选事件 ID 4624,4625

2.1 下载 EVTX-ATTACK-SAMPLES 样本

2.2 Windows 下 Python 解析

Evtx1.py 统计 4624/4625 数量

Evtx2.py 提取时间 / 用户 / 来源 IP

2.3 Kali 下 python3-evtx 复现

结果与 Windows 一致

2.4 扩展分析

security_4624_4673_token_manip.evtx(1 条)

DE_RDP_Tunneling_4624.evtx(18 条)

结果分析:CA 样本 4 条(3 成功 / 1 失败)

LM_WMI 样本 1295 条(1294 成功 / 1 失败)

实验结论:掌握 Linux 日志工具链

理解 Windows 事件日志与 EVTX 自动化解析

实验准备

Kali Linux 虚拟机 + Windows 11 主机

EVTX-ATTACK-SAMPLES 样本

任务一:Linux 日志分析

last -5 查看最近登录记录

journalctl -b / -f / -u ssh / --since / -p err

按启动会话、服务、时间、级别过滤

journalctl --grep="Failed password" -n 20

检索 SSH 登录失败

dmesg | grep -i error 排查内核错误

cat /var/log/auth.log 不存在

认证日志改由 journalctl -u ssh 查询

任务二:Windows 日志分析

2.0 事件查看器

筛选事件 ID 4624,4625

2.1 下载 EVTX-ATTACK-SAMPLES 样本

2.2 Windows 下 Python 解析

Evtx1.py 统计 4624/4625 数量

Evtx2.py 提取时间 / 用户 / 来源 IP

2.3 Kali 下 python3-evtx 复现

结果与 Windows 一致

2.4 扩展分析

security_4624_4673_token_manip.evtx(1 条)

DE_RDP_Tunneling_4624.evtx(18 条)

结果分析:CA 样本 4 条(3 成功 / 1 失败)

LM_WMI 样本 1295 条(1294 成功 / 1 失败)

实验结论:掌握 Linux 日志工具链

理解 Windows 事件日志与 EVTX 自动化解析

总体思路总结#

  • 日志入口:Linux 侧以 systemd 的 journalctl 为核心,按启动会话、服务、时间、级别四个维度过滤;Windows 侧以事件查看器 + 事件 ID 筛选为入口。
  • 关键事件:登录类安全事件只有两个关键 ID——4624(登录成功)与 4625(登录失败),配合 LogonType、TargetUserName、IpAddress 三个字段即可还原一次登录行为。
  • 自动化:python-evtx 把「人工翻日志」变成「脚本统计 + 字段提取」,LM_WMI 样本 1295 条记录用脚本秒级完成统计,人工翻查几乎不可行。
  • 注意点:Kali 中 /var/log/auth.log 已不再写入认证日志,需改用 journalctl -u ssh;Windows 首次查看安全日志需先启用审核策略。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

常用操作系统日志查看与分析
作者
Mudrock
发布于
2026-08-02
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
日志收集与分析系统操作
日志审计记录「日志收集与分析系统操作」实验的完整过程:在 Kali Linux 中用 Docker Compose 部署 Loki + Promtail + Grafana,实现本地 journald 日志的实时采集、集中存储与可视化展示,再通过 Grafana Explore 与自定义 LogQL 查询、Dashboard 面板完成日志级别分布统计与错误/警告趋势监控。
2
DVWA靶机攻击日志收集与观察
日志审计记录「DVWA 靶机攻击日志收集与观察」实验:在实验 2 的日志架构基础上引入 DVWA 靶机,由 Promtail 从靶机采集日志,通过攻击 DVWA 靶机产生攻击日志,再在浏览器中利用 Grafana 观察生成的攻击日志,建立攻击行为与日志数据之间的关联概念。
3
AI算法用于日志异常分析(Python)
日志审计基于 Python 的日志异常分析实验:用 Drain 算法解析 HDFS 模拟日志并统计模板频率,用 TF-IDF + Isolation Forest 完成异常检测,再在实验4专用 DVWA 环境中执行 SQL 注入、暴力破解、目录扫描等真实攻击,对比规则统计法与 AI 算法两种检测结果。
4
基于无监督学习的Web日志异常检测系统
日志审计基于无监督学习的 Web 日志异常检测系统实践记录:以 Kaggle Web Log Dataset 的 16007 条 OJ 服务器日志为对象,构建从原始日志到异常告警的无监督检测流水线——数据清洗与字段解析、Drain 日志模板挖掘、时间窗口特征工程、Isolation Forest 无监督异常检测,最终定位出登录爆破尝试与越权访问等典型异常请求。
5
外卖评论情感分类
深度学习基于 PyTorch 完成外卖评论情感分类实验:以 waimai_10k 中文评论数据集为对象,搭建「中文分词与词表构建 → 序列化与填充 → 模型定义 → 训练与测试 → 可视化对比」的完整流程,分别用双向 LSTM 的 TextRNN 与 Transformer 编码器的 TextTransformer 完成负面/正面二分类,并对两种模型的参数量、测试准确率、训练曲线、混淆矩阵与预测结果做对比分析。
随机文章随机推荐
Profile Image of the Author
Mudrock
Hello, I'm Mudrock.
公告
欢迎来到我的博客!本站将持续上传一些我的各项学习资料等内容。
分类
标签
最新动态
站点统计
文章
7
分类
2
标签
28
总字数
38,296
最后活动
0 天前
文章目录