elicryoung/security-log-analysis
GitHub: elicryoung/security-log-analysis
一个涵盖 Windows 与 Linux 安全日志调查全流程的个人学习作品集,记录了从环境搭建到多种攻击场景分析的实战经验与方法论。
Stars: 1 | Forks: 0
## title: 安全日志分析作品集
subtitle: Windows 与 Linux 安全事件调查
author: Eli Young
project: 1 of 4
# 安全日志分析
## SOC Analyst 实战调查作品集
# 目录
1. 阶段 1 — 环境配置
2. 阶段 2 — Windows 事件日志基础
- MSSQL 失败身份验证分析
- DACL 与 DCSync 权限分析
- IIS Webshell 与 Sysmon 调查
3. 阶段 3 — Linux 身份验证与 SSH 分析
# 阶段 1
## 环境配置
在这个项目的阶段 1,我专注于构建一个结构化且逼真的环境来学习安全日志分析。由于这是我第一次进行网络安全实战项目,重点不仅在于了解日志的工作原理,还在于理解分析师如何以专业的工作流程组织调查、记录发现和管理证据。
我使用 macOS 上的 Visual Studio Code 创建了一个专用的工作环境,并辅以以下扩展程序:
- XML 格式化
- 大型日志查看
- Markdown 文档编写
这显著提高了处理冗长的安全遥测数据时的可读性,并有助于从一开始就建立更清晰的调查工作流程。
随后创建了一个名为 `security-log-analysis` 的结构化项目目录,将以下内容分离开来:
- Windows 数据集
- Linux 数据集
- 分析师笔记
- 调查报告
- 文档
这反映了在真实调查过程中所期望的组织方式,并强化了将原始证据与分析材料分开的重要性。
## Windows 安全数据集
收集了多个 Windows EVTX 数据集用于调查练习,包括:
| 数据集 | 调查主题 |
|---|---|
| MSSQL 失败登录 | 身份验证攻击 |
| DCSync 与 ACL 滥用 | Active Directory 权限滥用 |
| IIS Webshell 与 Sysmon | 后渗透进程遥测 |
选择这些数据集是因为它们模拟了 SOC 环境中常被调查的真实攻击场景。
## Linux 安全数据集
还收集了 Linux 身份验证数据集,包括:
- 原始身份验证日志
- 结构化 CSV 变体
- 解析后的日志模板
这提供了一个比较以下内容的机会:
- 原始遥测分析
- 结构化安全数据
- 面向检测的日志格式
原始日志随后被用于使用以下工具进行的命令行调查:
- `grep`
- `cut`
- `sort`
- `uniq`
- `awk`
而结构化数据集则帮助演示了如何将遥测数据转换为可搜索的安全数据。
## 文档与报告工作流
最初,我创建了一个可重用的 Markdown 报告模板,专为以下内容设计:
- 调查目标
- 调查结果
- 时间线重建
- 妥协指标
- 最终评估总结
然而,随着项目的进展,我意识到固定的报告结构并不适合我自然学习和调查的方式。
相反,我转变为在每个阶段中维护大量不断更新的 Markdown 调查笔记。这种方法使我能够:
- 实时记录思考过程
- 记录调查中的错误
- 解释为什么使用某些命令
- 追踪理解是如何随时间加深的
回头看来,与高度模板化的报告相比,这产生了对调查过程更真实的记录。
## 版本控制与操作实践
该项目在 macOS 上使用 Git 连接到 GitHub,并创建了一个 `.gitignore` 文件。
原始日志数据集本身被故意排除在仓库之外,因为它们是公开可下载的训练数据集。然而,如果这些是真实的组织日志,出于安全和隐私原因,它们将被完全排除在外。
这强化了一个重要的操作经验教训:
即使是在训练环境中,也应始终谨慎处理安全数据。
## 成果
在阶段 1 结束时,项目环境包括:
- 有组织的 Windows 和 Linux 安全数据集
- 结构化的文档工作流
- 版本控制的调查笔记
- 可重复使用的分析师工作区
- 具备作品集基础的项目
最重要的是,这一阶段确立了将在后续 Windows 和 Linux 分析部分中贯穿使用的调查工作流程。
# 阶段 2
# Windows 事件日志基础
# 第 1 部分
## MSSQL 失败身份验证分析
### 数据集
`1.MSSQL_multiple_failed_logon_EventID_18456.evtx`
本次调查的重点是分析 Windows 事件日志中 Microsoft SQL Server 的身份验证失败情况。
遇到的第一个挑战是了解 Windows EVTX 文件是以二进制格式而非纯文本存储的。因此,该数据集无法直接在 Visual Studio Code 中读取,首先需要使用 macOS 上 Python 虚拟环境中的 `python-evtx` 库将其转换为 XML 格式。为此,我创建了一个简单的 `convert.py` 文件来更改格式。
这提供了对 Windows 安全遥测数据如何存储和处理的初步了解。
## 初步观察
转换数据集后,一个行为模式立即变得显而易见:
日志中包含针对多个管理员类账户的重复身份验证失败记录。
示例包括:
- `sa`
- `root`
- `##MS_*`
这种对特权账户名的重复针对强烈表明是自动化凭证攻击,而非正常的用户行为。
## 可疑行为指标
几个指标指向了暴力破解或凭证枚举活动:
| 观察结果 | 可疑原因 |
|---|---|
| 重复的 Event ID 18456 | 持续的 SQL 身份验证失败 |
| 针对多个用户名 | 凭证枚举行为 |
| 毫秒级时间戳 | 自动化执行 |
| 单一源 IP 重复 | 集中的攻击源 |
重复识别出的源 IP:
`10.0.2.17`
事件之间极快的间隔表明身份验证尝试是以程序化方式执行的,而非手动执行。
## 关键学习要点
本次调查引入了几个基础概念:
- Windows 事件日志结构
- 身份验证遥测
- 事件关联
- 行为分析
- 识别暴力破解指标
它还强化了一个重要的分析原则:
- 单个事件本身通常并不重要。
- 跨事件的模式才是揭示真相的关键。
# 第 2 部分
## DACL 与 DCSync 权限分析
### 数据集
`2.DACL_DCSync_Right_Powerview_Add-DomainObjectAcl.evtx`
该数据集的分析难度明显高于 MSSQL 身份验证日志,因为其涉及的活动是 Active Directory 权限和对象访问,而不是简单的身份验证失败。
调查的大部分时间花在研究以下内容上:
- 陌生的操作码
- LDAP 属性
- GUID
- Active Directory 安全描述符
与之前的数据集不同,可疑活动无法从通俗易懂的日志消息中立即显现出来。
## Event ID 分析
为了识别哪些事件出现得最频繁,使用了 Linux 命令行工具:
```
grep "bob
DC=insecurebank,DC=local
nTSecurityDescriptor
```
这表明账户 `bob` 正在修改 Active Directory 域对象本身的 `nTSecurityDescriptor` 属性。
在研究了相关的 GUID 和权限值之后,情况变得明朗,该活动涉及:
- DACL 修改
- 复制权限
- 潜在的 DCSync 准备活动
## 调查挑战
本节突出了 Windows 安全事件在最初看起来可能有多么困难。
许多重要的细节都被隐藏在以下内容中:
- XML 字段
- 操作码
- GUID 值
- 安全描述符字符串
调查的很大一部分涉及:
- 研究 Microsoft 文档
- 验证字段含义
- 理解 Active Directory 术语
虽然速度较慢,但这个过程极大地加深了对以下内容的理解:
- Windows 对象访问审计
- DACL 修改
- 复制滥用
- Active Directory 攻击准备
# 第 3 部分
## IIS Webshell 与 Sysmon 进程调查
### 数据集
`3.LM_typical_IIS_webshell_sysmon_1_10_traces.evtx`
本次调查是项目中第一个让人感觉像是在追踪真实攻击者行为,而不仅仅是审查日志的阶段。
该数据集包含 Sysmon 进程遥测数据,包括:
- 命令行
- 父子进程关系
- 执行链
- 进程 ID
- 会话关联
与标准的 Windows 安全日志不同,Sysmon 为进程活动提供了更丰富的可见性。
## 调查方法
调查不再局限于手动阅读每一个事件,而是转变为由问题驱动:
- 执行了哪些进程?
- 是什么生成了它们?
- 进程链是否合理?
- 这些事件是否通过共享的 Logon ID 相关联?
- 执行行为看起来正常吗?
与前面的部分相比,这代表了调查思维的重大转变。
## 可疑进程活动
识别出了几个可疑的进程:
- `cmd.exe`
- `net.exe`
- `net1.exe`
以及 IIS 工作进程:
- `w3wp.exe`
命令行分析显示:
```
cmd.exe /c net user
```
此命令执行 Windows 账户枚举。
然而,关键细节不在于命令本身——而在于父进程关系。
## 进程链重建
利用进程关联,重建了以下执行链:
```
w3wp.exe
└── cmd.exe
└── net.exe
└── net1.exe
```
这强烈表明存在:
- Webshell 活动
- 远程命令执行
- 攻击者侦察行为
因为 IIS Web 服务器进程通常不应该生成命令 shell。
## 关键学习成果
本节成为了项目中最重要的学习里程碑之一,因为它引入了:
- 进程树重建
- 父子进程分析
- 命令执行遥测
- 攻击者行为分析
- 使用 Logon ID 进行会话关联
更重要的是,它标志着调查的重点不再仅仅是识别 Event ID,而是更多地从遥测数据中重建攻击者行为。
# 阶段 3
# Linux SSH 暴力破解与身份验证分析
本阶段重点分析了 Linux 身份验证日志,并通过命令行调查技术识别 SSH 暴力破解行为。
在项目的这个阶段,Linux 日志分析变得更加直观。早期的调查严重依赖广泛搜索和手动滚动。在这个阶段,分析变得更加结构化,并更具调查性质。
## SSH 身份验证失败分析
调查首先确定了失败的身份验证尝试:
```
grep -i "authentication failure" Linux_2k.log
```
在提取远程主机值并汇总结果后,几个重复出现的攻击者 IP 地址变得显而易见。
其中一个主机立刻引起了注意:
```
150.183.249.110
```
大约有:
```
80 failed authentication attempts
```
这强烈表明存在自动化的暴力破解活动。
## 行为指标
几个特征指向了恶意的 SSH 活动:
| 指标 | 观察结果 |
|---|---|
| 快速的时间戳 | 尝试每秒都在发生 |
| 重复的用户名 | 持续针对 `root` |
| 不断增加的 SSH 进程 ID | 快速的 daemon 生成 |
| 多个源 IP | 分布式暴力破解行为 |
对以下账户的重复针对:
- `root`
- 管理账户
- 可预测的用户名
符合面向互联网系统上经常观察到的常见 SSH 攻击行为。
## 时间线关联
攻击活动也呈现出波浪式的发生。
在一连串失败的尝试结束后,大约 30 分钟后,另一个序列从不同的源 IP 开始。
这种模式表明:
- 自动化扫描基础设施
- 分布式攻击源
- 随时间推移重复的凭证攻击
## 调查成功访问
调查随后从询问:
转变为:
成功会话分析显示:
- 可预测的维护类活动
- 重复的自动化会话
- 没有与可疑攻击者 IP 相关的成功访问
这种区别成为了一个重要的分析经验教训:
## 工作流开发
本阶段最显著的改进之一是调查工作流的成熟度。
调查不再局限于手动阅读日志,而是集中于:
- 提取字段
- 减少干扰信息
- 统计发生次数
- 验证假设
- 关联时间线
- 区分恶意行为与合法行为
命令行不再让人觉得是一组随机的工具,而是开始成为一种系统性回答调查问题的方法。
# 总体反思
这个项目标志着我第一次直接处理跨 Windows 和 Linux 系统的原始安全遥测数据。
在开始时,安全日志显得极其庞大且基本无法阅读。随着时间的推移,调查过程变得更加结构化和具有分析性。最终使我能够非常快速地敲出 Linux 命令,从而有效且高效地发现模式并识别安全威胁。
最大的进步并不在于记住 Event ID 或 Linux 命令。
而是学习如何像分析师一样思考:
- 提出调查问题
- 识别模式
- 重建时间线
- 验证可疑行为
- 从干扰信息中分辨出有价值的信号
在项目结束时,我能够:
- 分析 Windows 和 Linux 身份验证遥测
- 重建进程执行链
- 识别暴力破解指标
- 调查 Active Directory 权限滥用
- 关联跨会话的相关事件
- 使用 Linux 命令行工具进行实际的日志调查
最重要的是,这个项目将安全日志从不可读的数据转变为可以系统地进行解释和调查的行为证据。
*本项目作为实战 SOC 分析师准备和基础安全运营培训的一部分完成。*
标签:Conpot, Windows安全, 安全研判, 安全运营(SOC), 网络安全研究, 逆向工具, 防御加固