第2章:日志基础——什么是日志、日志类型
2.1 什么是日志
日志这东西,说白了就是系统运行的“黑匣子”。你想想看,服务器、网络设备、业务应用,每时每刻都在产生记录——谁在什么时候、从哪来、干了什么事、结果怎么样。把这些按时间顺序记下来,就是日志。
我个人习惯是,接到任何安全事件,第一件事就是翻日志。没有日志,你就像蒙着眼找线索,基本无从下手。
一条完整的日志,通常包含以下几个核心要素:
| 要素 | 说明 | 示例 |
|---|---|---|
| 时间戳 | 事件发生的精确时间 | 2025-01-15 14:23:45 |
| 事件源 | 产生日志的主体(IP、主机名、设备) | 192.168.1.100 |
| 事件类型 | 事件的分类或操作 | 登录成功 / 登录失败 |
| 日志级别 | 事件的严重程度 | INFO / WARNING / ERROR |
| 详细描述 | 事件的具体信息 | User 'admin' logged in from 10.0.0.5 |
在安全领域,日志是溯源的唯一客观证据。攻击者可以删除文件、清理进程,但总会在日志里留下痕迹——前提是你知道怎么看。
2.2 系统日志
系统日志记录的是操作系统层面的事件。无论是Windows还是Linux,系统日志都是安全分析的“第一战场”。
- Windows 事件日志:主要看三个通道——
Security(登录、权限变更)、System(服务启停、驱动异常)、Application(应用层错误)。安全分析时,Event ID 4625(登录失败)和Event ID 4688(进程创建)是我最常翻的。 - Linux 系统日志:集中在
/var/log/目录下。messages记录系统通用信息,secure或auth.log记录认证行为,cron记录计划任务。我记得有一次做应急响应,攻击者就是通过cron日志暴露了持久化脚本的启动时间。 - macOS 统一日志:使用
log show命令查看,结构较新,但原理类似。
我曾经遇到过一个案例:攻击者手动清理了 /var/log/secure 文件。但我发现 audit.log(审计日志)还在——因为默认权限不同,对方漏掉了。所以我的建议是:千万别只依赖单一日志源。
2.3 应用日志
应用日志的范围最广,也最杂。Web服务器、数据库、中间件、业务系统,各有各的格式和记录方式。但这也意味着攻击者的恶意行为往往会被记录得最详细。
- Web服务器日志:Apache 和 Nginx 的 access log 是“金矿”。每一行都记录了请求的来源IP、请求方法、URL、状态码、User-Agent。举个例子:
192.168.1.1 - - [15/Jan/2025:14:23:45 +0800] "GET /admin HTTP/1.1" 200 2345
你看,谁在什么时间访问了后台管理页面,一目了然。
- 数据库日志:MySQL 的 general log 记录所有SQL语句,slow query log 记录慢查询。攻击者做SQL注入时,查询语句会被原样记下来:
# Time: 2025-01-15T14:23:45.123456Z
# User@Host: root[root] @ localhost []
# Query_time: 12.345 Lock_time: 0.001
SELECT * FROM users WHERE id = 1 OR 1=1;
看到 OR 1=1 了吗?典型的注入尝试。
- 业务应用日志:Java 的 Log4j、Python 的 logging 框架,开发同学最熟悉。但我在项目中遇到过,开发说“日志都打了”,结果一查全是
DEBUG级别信息,真正有用的ERROR反而没记录。嗯,这里要注意:日志级别的配置一定要和生产环境匹配。
2.4 网络日志
网络日志记录了数据包的流动情况。它不关心系统内部发生了什么,只关心“谁和谁在通信、用了什么协议、传了多少数据”。
- 防火墙日志:记录允许和拒绝的连接。我建议你们重点关注
deny日志——那里藏着扫描探测、漏洞利用的早期信号。 - 路由器/交换机日志:网络流量变化、配置变更、端口状态抖动。攻击者在内网横向移动时,往往会在网络设备上留下异常流量记录。
- IDS/IPS日志:直接输出告警事件。Snort、Suricata 这类工具会把匹配到攻击特征的包记录下来,包含payload内容,是IOC提取的优质来源。
- DNS日志:域名解析请求。攻击者使用C2域名时,DNS请求是绕不开的——除非他直接用IP,但那样反而更容易被检测。
我见过一个案例:攻击者在内网用 nslookup 做DNS隧道,数据藏在TXT记录里。防火墙没报警,但DNS日志里出现了大量超长域名解析——这就是线索。
2.5 三类日志对比
明白了每种日志的定位,接下来用一个表格把它们放在一起对比。这样你在实际分析时,能快速判断该查哪类日志。
| 日志类型 | 数据来源 | 典型格式 | 核心安全价值 | 常见IOC示例 |
|---|---|---|---|---|
| 系统日志 | 操作系统(Windows Event Log / Linux syslog) | EVTX / syslog / JSON | 登录行为、权限变化、进程创建 | 4625(登录失败)、4688(异常进程)、/var/log/secure 中的SSH爆破 |
| 应用日志 | Web服务器、数据库、业务应用 | Apache common log / JSON / 自定义格式 | 攻击payload、SQL注入、文件包含、未授权访问 | access log中的 ../../etc/passwd、slow query中的 OR 1=1 |
| 网络日志 | 防火墙、路由器、IDS/IPS、DNS服务器 | NetFlow / syslog / PCAP元数据 / DNS请求 | 网络连接、C2通信、扫描探测、数据外泄 | 防火墙deny日志中的批量扫描源IP、DNS日志中的长域名 |
三类日志各有侧重,但在真实事件中往往是交叉验证的。举个例子:系统日志告诉你某个账户异常登录,应用日志告诉你这个账户访问了敏感接口,网络日志告诉你这个IP向外部域名做了DNS查询——三个线索拼在一起,才能还原出完整的攻击链路。
这张图把本章的知识体系串起来了。从上往下看:先有日志的核心定义,再分三大类型,每个类型下又有具体的日志子类。最底层是每条