L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

performing-log-analysis-for-forensic-investigation

performing-log-analysis-for-forensic-investigation

收集、解析和关联系统、应用程序及安全日志,以在取证调查期间重建事件并建立时间线。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: performing-log-analysis-for-forensic-investigation description: 收集、解析和关联系统、应用程序及安全日志,以在取证调查期间重建事件并建立时间线。 domain: cybersecurity subdomain: digital-forensics tags: [forensics, log-analysis, siem, event-correlation, timeline-analysis, evidence-collection] version: "1.0" author: mahipal license: Apache-2.0

执行取证调查的日志分析

适用场景

  • 从可用日志来源重建安全事件时间线时
  • 后渗透调查期间识别初始访问、横向移动和数据外泄时
  • 跨多个系统和日志来源关联事件时
  • 建立未授权访问或违规行为的证据时
  • 准备需要详细事件编年记录的取证报告时

前置条件

  • 能够访问已收集的日志文件(Windows 事件日志、syslog、应用程序日志)
  • 日志解析工具(LogParser、jq、awk 或 ELK Stack)
  • 了解日志格式(EVTX、syslog、JSON、CSV)
  • 所有日志来源的 NTP 同步时间戳(用于关联)
  • 用于日志聚合和索引的充足存储空间
  • 时间线分析工具(log2timeline、Plaso)

工作流程

步骤 1:收集并保全日志来源

# 创建案例日志目录结构
mkdir -p /cases/case-2024-001/logs/{windows,linux,network,application,web}

# 从取证镜像中提取 Windows 事件日志
cp /mnt/evidence/Windows/System32/winevt/Logs/*.evtx /cases/case-2024-001/logs/windows/

# 需要收集的关键 Windows 事件日志
# Security.evtx - 认证、访问控制、策略更改
# System.evtx - 服务启停、驱动加载、系统错误
# Application.evtx - 应用程序错误和事件
# Microsoft-Windows-PowerShell%4Operational.evtx - PowerShell 执行
# Microsoft-Windows-Sysmon%4Operational.evtx - Sysmon 详细事件
# Microsoft-Windows-TaskScheduler%4Operational.evtx - 计划任务
# Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx - RDP

# 收集 Linux 日志
cp /mnt/evidence/var/log/auth.log* /cases/case-2024-001/logs/linux/
cp /mnt/evidence/var/log/syslog* /cases/case-2024-001/logs/linux/
cp /mnt/evidence/var/log/kern.log* /cases/case-2024-001/logs/linux/
cp /mnt/evidence/var/log/secure* /cases/case-2024-001/logs/linux/
cp /mnt/evidence/var/log/audit/audit.log* /cases/case-2024-001/logs/linux/

# 收集 Web 服务器日志
cp /mnt/evidence/var/log/apache2/access.log* /cases/case-2024-001/logs/web/
cp /mnt/evidence/var/log/nginx/access.log* /cases/case-2024-001/logs/web/

# 对所有收集的日志计算哈希以验证完整性
find /cases/case-2024-001/logs/ -type f -exec sha256sum {} \; > /cases/case-2024-001/logs/log_hashes.txt

步骤 2:解析 Windows 事件日志

# 安装 python-evtx 用于 EVTX 解析
pip install python-evtx

# 将 EVTX 转换为 XML/JSON 以便分析
python3 -c "
import Evtx.Evtx as evtx
import json, xml.etree.ElementTree as ET

with evtx.Evtx('/cases/case-2024-001/logs/windows/Security.evtx') as log:
    for record in log.records():
        print(record.xml())
" > /cases/case-2024-001/logs/windows/Security_parsed.xml

# 使用 evtxexport(libevtx-utils)
sudo apt-get install libevtx-utils
evtxexport /cases/case-2024-001/logs/windows/Security.evtx \
   > /cases/case-2024-001/logs/windows/Security_exported.txt

# 需要调查的关键安全事件 ID
# 4624 - 成功登录
# 4625 - 登录失败
# 4648 - 使用显式凭据登录(runas、横向移动)
# 4672 - 分配了特殊权限(管理员登录)
# 4688 - 进程创建(如果启用了审计则含命令行)
# 4697 - 服务已安装
# 4698/4702 - 计划任务已创建/更新
# 4720 - 用户账户已创建
# 4732 - 成员已添加到安全性已启用的本地组
# 1102 - 审计日志已清除

# 使用 python-evtx 提取特定事件
python3 << 'PYEOF'
import Evtx.Evtx as evtx
import xml.etree.ElementTree as ET

target_events = ['4624', '4625', '4648', '4672', '4688', '4697', '1102']

with evtx.Evtx('/cases/case-2024-001/logs/windows/Security.evtx') as log:
    for record in log.records():
        root = ET.fromstring(record.xml())
        ns = {'ns': 'http://schemas.microsoft.com/win/2004/08/events/event'}
        event_id = root.find('.//ns:EventID', ns).text
        if event_id in target_events:
            time = root.find('.//ns:TimeCreated', ns).get('SystemTime')
            print(f"[{time}] 事件 ID: {event_id}")
            for data in root.findall('.//ns:Data', ns):
                print(f"  {data.get('Name')}: {data.text}")
            print()
PYEOF

步骤 3:解析和分析 Linux/Syslog 条目

# 解析 auth.log 中的 SSH 和 sudo 事件
grep -E '(sshd|sudo|su\[|passwd|useradd|usermod)' \
   /cases/case-2024-001/logs/linux/auth.log* | \
   sort > /cases/case-2024-001/analysis/auth_events.txt

# 提取 SSH 登录失败记录
grep 'Failed password' /cases/case-2024-001/logs/linux/auth.log* | \
   awk '{print $1,$2,$3,$9,$11}' | sort | uniq -c | sort -rn \
   > /cases/case-2024-001/analysis/failed_ssh.txt

# 提取成功的 SSH 登录
grep 'Accepted' /cases/case-2024-001/logs/linux/auth.log* | \
   awk '{print $1,$2,$3,$9,$11}' > /cases/case-2024-001/analysis/successful_ssh.txt

# 解析审计日志中的文件访问和命令执行
ausearch -if /cases/case-2024-001/logs/linux/audit.log \
   --start 2024-01-15 --end 2024-01-20 \
   -m EXECVE > /cases/case-2024-001/analysis/audit_commands.txt

ausearch -if /cases/case-2024-001/logs/linux/audit.log \
   -m USER_AUTH,USER_LOGIN,USER_CMD \
   > /cases/case-2024-001/analysis/audit_auth.txt

# 解析 Web 访问日志中的可疑请求
cat /cases/case-2024-001/logs/web/access.log* | \
   grep -iE '(union.*select|<script|\.\.\/|cmd\.exe|/etc/passwd)' \
   > /cases/case-2024-001/analysis/web_attacks.txt

# 从 Web 日志中提取唯一 IP 地址
awk '{print $1}' /cases/case-2024-001/logs/web/access.log* | \
   sort | uniq -c | sort -rn > /cases/case-2024-001/analysis/web_ips.txt

步骤 4:跨来源关联事件

# 规范化时间戳并合并日志来源
python3 << 'PYEOF'
import csv
import datetime
from collections import defaultdict

events = []

# 解析 Windows 安全事件(预先导出为 CSV)
with open('/cases/case-2024-001/analysis/windows_events.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        events.append({
            'timestamp': row['TimeCreated'],
            'source': 'Windows-Security',
            'event_id': row['EventID'],
            'description': row['Description'],
            'details': row.get('Details', '')
        })

# 解析 Linux auth 事件
with open('/cases/case-2024-001/analysis/auth_events.txt') as f:
    for line in f:
        parts = line.strip().split()
        if len(parts) >= 6:
            events.append({
                'timestamp': ' '.join(parts[:3]),
                'source': 'Linux-Auth',
                'event_id': parts[4].rstrip(':'),
                'description': ' '.join(parts[5:]),
                'details': ''
            })

# 按时间戳排序
events.sort(key=lambda x: x['timestamp'])

# 写入关联时间线
with open('/cases/case-2024-001/analysis/correlated_timeline.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['timestamp', 'source', 'event_id', 'description', 'details'])
    writer.writeheader()
    writer.writerows(events)

print(f"关联事件总数:{len(events)}")
PYEOF

# 快速关联:查找时间窗口内的事件
# 查找横向移动模式
grep "4648\|4624.*Type.*3\|4624.*Type.*10" /cases/case-2024-001/analysis/windows_events.csv | \
   sort > /cases/case-2024-001/analysis/lateral_movement.txt

步骤 5:生成取证时间线报告

# 创建结构化调查报告
cat << 'REPORT' > /cases/case-2024-001/analysis/log_analysis_report.txt
日志分析取证报告
=============================
案例:2024-001
分析员:[检查员姓名]
日期:$(date -u)

已分析的日志来源:
- Windows 安全事件日志(Security.evtx)- 245,678 个事件
- Windows 系统事件日志(System.evtx)- 45,234 个事件
- Windows PowerShell Operational - 12,456 个事件
- Linux auth.log - 34,567 条记录
- Apache access.log - 567,890 条记录
- Linux audit.log - 89,012 条记录

关键发现:
1. 初始访问:[时间戳] - 来自外部 IP 的成功 RDP 登录
2. 权限提升:[时间戳] - 新建管理员账户
3. 横向移动:[时间戳] - 检测到跨 3 个系统的哈希传递攻击
4. 数据外泄:[时间戳] - 大量数据传输至外部 IP
5. 日志篡改:[时间戳] - 安全事件日志已清除(事件 1102)

事件时间线:
[完整的时间线见 correlated_timeline.csv]
REPORT

# 打包分析制品
tar -czf /cases/case-2024-001/log_analysis_package.tar.gz \
   /cases/case-2024-001/analysis/

关键概念

概念描述
事件关联(Event correlation)通过时间、IP、用户或会话将多个日志来源的相关事件关联起来
日志规范化(Log normalization)将多种日志格式转换为统一模式以进行一致性分析
时间线分析(Timeline analysis)按时间顺序排列事件以重建事件序列
日志完整性(Log integrity)使用哈希和证据链验证日志未被篡改
登录类型(Logon types)Windows 认证方法分类(2=交互式、3=网络、10=RDP)
审计策略(Audit policy)系统配置,决定哪些事件会被记录在日志中
日志轮转(Log rotation)自动归档日志文件,影响证据可用性
反取证(Anti-forensics)攻击者清除或修改日志以掩盖踪迹的技术

工具与系统

工具用途
python-evtx解析 Windows EVTX 事件日志文件的 Python 库
evtxexportlibevtx 提供的命令行 EVTX 导出工具
LogParser微软基于 SQL 的 Windows 日志查询引擎
ausearchLinux 审计日志搜索工具
jq用于解析结构化日志格式的 JSON 查询工具
ELK Stack用于日志聚合和可视化的 Elasticsearch、Logstash、Kibana
Chainsaw基于 Sigma 规则的 Windows 事件日志分析工具
Hayabusa快速 Windows 事件日志取证时间线生成器

常见场景

场景 1:暴力破解攻击检测 过滤 Security.evtx 中的事件 ID 4625(登录失败),按来源 IP 和目标账户分组,识别快速连续失败的模式,找到随后的成功登录(4624),追踪被入侵账户的后续活动。

场景 2:内部威胁调查 收集嫌疑人工作站和已访问服务器的所有日志来源,将文件访问事件与认证事件关联,建立非工作时间数据访问的时间线,识别向外部介质或云存储的数据传输。

场景 3:Web 应用程序入侵 解析 Web 服务器访问日志中的 SQLi、XSS 和路径遍历模式,识别攻击 IP 和时间线,关联应用程序日志确认成功利用,通过系统和 auth 日志追踪后渗透活动。

场景 4:勒索软件事件时间线 通过进程创建事件(4688)识别初始执行,通过服务安装(4697)追踪权限提升,通过网络登录(4624 Type 3)绘制横向移动路线,从文件系统活动中识别加密开始时间,找到最早的 IoC 以确定修复范围。

输出格式

日志分析摘要:
  调查期间:2024-01-15 00:00 至 2024-01-20 23:59 UTC
  已分析事件总数:894,567
  日志来源:6 个(3 个 Windows,3 个 Linux)

  关键事件:
    登录失败:     1,234 次(来自 5 个唯一 IP)
    成功登录:     456 次(3 次异常)
    账户更改:     12 次(1 次未授权管理员创建)
    进程创建:     8,234 次(15 次可疑)
    日志清除:     2 次(安全日志于 2024-01-18 03:00 UTC 被清除)
    服务安装:     3 次(1 个未知服务)

  攻击时间线:
    2024-01-15 14:32 - 通过 RDP 暴力破解实现初始访问
    2024-01-15 14:45 - 管理员账户 "svcbackup" 已创建
    2024-01-16 02:15 - 横向移动至 3 台服务器
    2024-01-17 03:00 - 数据暂存于 C:\ProgramData\temp\
    2024-01-18 01:30 - 4.2 GB 数据外泄至 185.x.x.x
    2024-01-18 03:00 - 安全日志已清除

  报告:/cases/case-2024-001/analysis/log_analysis_report.txt
Skills enregistrées