1. 关键日志字段与含义
1.1 系统日志与认证日志中的核心字段
在 Linux 日志体系中,核心字段包括 时间戳、主机名、进程名与 PID、以及 消息体。这些字段共同决定了事件的时间线和来源。时间戳用于排序,主机名用于定位,进程名与 PID帮助追踪触发源,消息体承载具体行为描述。对于 /var/log/auth.log 与 /var/log/secure 等认证日志,失败登录、成功登录、sudo/ su 提升等字段会直接暴露异常行为。还应关注 日志级别与 来源服务标签,它们在 rsyslog/journald 的输出中以不同格式体现,如 SYSLOG_IDENTIFIER、MESSAGE。
对于使用 systemd 的系统,journalctl 提供了结构化字段,例如 _PID、SYSLOG_IDENTIFIER、MESSAGE,以及时间戳相关字段 __REALTIME_TIMESTAMP。这些字段的组合使得跨主机的行为归因成为可能。理解这些字段有助于识别异常登录、暴力破解、以及未授权的脚本执行等事件。
1.2 审计日志与内核日志中的关键字段
审计日志 /var/log/audit/audit.log 常包含 type、op、subject、perf 等字段,auditd 的事件通常与系统调用相关,如 execve、open、connect。通过筛选 type=SYSCALL 或 type=USER_ACCT,可以定位可疑的系统调用和认证事件。内核日志通常通过 kernel 标识,关键字段包括 TIME、MSG,用于侦测内核层的端口扫描、拒绝服务和模块注入等行为。
2. 常用日志源与格式
2.1 /var/log/auth.log 与 /var/log/secure
认证日志是暴露暴力攻击的第一道防线。典型字段包括 Failed password、Invalid user、Connection from 的记录,此外还会出现 from IP、port、以及 authentication method 等信息。通过对 ssh、sudo、和 su 请求的记录进行统计,可以发现异常模式,如 短时间高并发尝试、来自同一 IP 的重复失败等。
系统日志服务的多样化格式也需要留意。对于 rsyslog 与 systemd-journald,日志源标签、时间戳、主机名、服务名的组合是跨服务器追踪攻击的基础。
2.2 /var/log/kern.log 与系统事件
内核日志 kernel 提供了低层次的网络事件、驱动加载、模块错误等信息。常见标记包括 INET、DROP、REJECT、以及 CONNECT。对端口扫描、连接拒绝、以及异常的套接字状态变更,会在内核日志中呈现为异常模式。
对比应用层日志,可以将内核事件与用户态事件进行关联,找出攻击向量的起点。例如,当内核记录到大量 SYN_RECV 或 RESET 的统计时,需要结合应用日志进行聚合分析,识别是否为扫描或攻击行为。
2.3 其他重要源
审计日志之外,应用日志如 web 服务、数据库、以及容器平台日志也能暴露攻击迹象。关键字段包括 请求 URI、返回码、错误栈、会话 ID,以及与用户活动相关的 时间戳 与 IP 来源。
3. 实战分析流程
3.1 数据收集与归档
系统应持续收集来自多源的日志,确保 时间同步,以便跨主机追踪。归档策略应包含 压缩、去重、分区存储,便于后续的取证与回放。

在 Linux 日志中,核心字段的完整性是后续分析的基础。确保 时间戳、主机名、服务来源、以及 消息体 未被篡改。
3.2 异常模式识别与筛选
通过设置阈值和规律性模式,初步检测可疑事件,例如 短时内大量失败尝试、来自同一 IP 的连续连接、以及 异常时间段的登录尝试。
基于日志字段,可以构造筛选规则,如筛出所有包含 Failed password、authentication failure、以及 invalid user 的条目,作为后续深入分析的入口。
3.3 攻击指纹的识别
攻击指纹通常来自多源数据的交叉证据,例如 sshd 的失败记录、pam 的相关日志、以及 iptables 的连接日志。通过组合 时间序列、源 IP、目的端口,可以识别常见攻击,如暴力破解、端口扫描、以及命令注入的试探行为。
3.4 关联分析与溯源
跨主机关联分析是把多源日志拼接成完整故事的关键。将 认证日志、应用日志、以及 内核日志在时间维度上对齐,可以追踪攻击路径的起点、横向扩散以及影响范围。
3.5 取证与基线对比
在取证阶段需要对比当前日志与基线,评估偏离程度。核心是确保 证据链、日志可溯源性、以及 时间标记的一致性。
4. 常见攻击模式及日志指纹
4.1 SSH 暴力破解的日志指纹
SSH 暴力攻击往往在认证日志中呈现为大量 Failed password、Invalid user、以及 Connection from 的记录。结合 来源 IP、端口号,可识别持续性攻击的模式。对比时间窗内的聚合统计,可以判断是否为自动化脚本发动的攻击。
典型指纹还包括 SSH version、keyboard-interactive、以及在某些日志中出现的 Too many authentication failures 这类信息。
4.2 终端命令与会话异常
在认证后的行为中,异常的命令执行、非正常的交互会话、以及持续的特权提升请求,都是潜在攻击的信号。日志中的 Tty、PWD、以及 历史命令相关字段需要关注。
通过对 shell 会话的关联分析,可以发现越权行为、后门账户的创建、以及计划外的任务执行等。
4.3 定时任务与计划任务的异常
计划任务如 cron 的异常创建、修改或执行,会在 cron、CRON、以及 anacron 日志中暴露。关注 user、command、以及 time 字段,可以发现未授权的任务。
4.4 数据导出与数据库访问异常
数据库连接失败、权限变更、以及数据导出行为,在应用日志和数据库日志中往往呈现为异常的 SQL 语句、错误码、用户 列。需要结合主机日志,排查是否有横向渗透的迹象。
5. 使用工具与示例代码
5.1 常用日志分析工具概览
常用工具包括 grep、awk、sed、jq、以及日志聚合平台如 ELK、Graylog、Loki。这些工具可以帮助我们快速提取关键字段,并进行聚合统计。
对于结构化日志,JSON 格式和可格式化的日志输出,是实现高效分析的基础。对系统日志格式的理解,决定了分析规则的精准性。
5.2 逐步演示:从日志中提取关键字段
下面的示例演示如何筛选出认证失败的记录,并提取时间、来源、用户信息等。你可以把它作为日常排查的起点。
# 从 auth.log 提取失败的登录记录
grep -i 'Failed password' /var/log/auth.log | awk '{print $1, $2, $3, $0}' > failed_logins.log
为了在大规模数据中进行更灵活的筛选,可以使用 Python 进行解析与聚合:
import re
from datetime import datetime
import jsonlogs = []
with open('/var/log/auth.log') as f:for line in f:if 'Failed password' in line or 'invalid user' in line:# 简单示例:提取时间、主机、信息parts = line.split()ts = ' '.join(parts[:3])host = parts[0]msg = ' '.join(parts[3:])logs.append({'timestamp': ts, 'host': host, 'message': msg})# 统计失败数量
print(len(logs))
5.3 使用 JSON 日志提高可分析性
将日志转为 JSON,并用 jq 进行筛选,可以实现更高效的分析。下面展示一个简单的 jq 查询,用于筛选出来自特定 IP 的认证失败条目。
jq '. | select(.message | contains("Failed password")) | {time: .time, host: .host, msg: .message}' auth.json


