第一章:安全日志基础

大家好,我是老张。在安全这个行当摸爬滚打了十几年,今天咱们来聊聊安全日志审计的入门课——日志基础。说实话,很多人觉得日志就是些枯燥的文本记录,没什么好看的。但我告诉你,真正的高手,能从日志里读出整个系统的「心电图」。

1.1 日志的定义与重要性

日志是什么?说白了,就是系统、网络设备、应用程序在运行过程中产生的「流水账」。它记录了「谁、在什么时间、从哪来、干了什么事、结果如何」。

我经常跟团队里的新人说:日志是安全事件的「第一现场」。没有日志,安全分析就是盲人摸象。

日志的核心价值:

  • 溯源取证:出事后,日志是唯一的「黑匣子」
  • 实时告警:异常行为能第一时间被发现
  • 合规审计:等保、ISO27001 都要求日志留存
  • 性能优化:从日志里能看出系统的瓶颈在哪

我记得有一次,客户说服务器被黑了,但找不到入口。我翻了一个月的登录日志,发现有个账号总是在凌晨3点登录,而且登录IP来自境外。顺着这条线,我们找到了一个被暴力破解的弱口令账号。你看,这就是日志的价值。

⚠️ 避坑指南:我曾经见过一个团队,日志只保留7天。结果出了安全事件,需要回溯15天前的记录,直接傻眼了。我建议:核心系统的日志至少保留180天,合规要求严格的行业(如金融、医疗)建议保留1年以上。

1.2 常见日志类型

日志分很多种,咱们按来源来分,主要有三大类:

1.2.1 系统日志

系统日志是操作系统自己产生的。Windows 有事件查看器,Linux 有 /var/log/ 目录。

常见的系统日志包括:

  • 登录日志:谁登录了、什么时候、成功还是失败
  • 系统事件:服务启动/停止、系统重启、驱动加载
  • 安全审计:权限变更、策略修改、账号创建/删除

举个例子,Linux 下查看登录失败的记录:

# 查看 SSH 登录失败的记录
grep "Failed password" /var/log/auth.log

# 输出示例
Mar 15 03:22:11 webserver sshd[12345]: Failed password for root from 192.168.1.100 port 54321 ssh2

嗯,这里要注意:系统日志里,登录失败次数突然暴增,基本就是暴力破解的征兆。我处理过很多次这种情况,发现后第一时间封禁源IP,然后排查是否有账号被攻破。

1.2.2 网络日志

网络设备(防火墙、路由器、交换机)产生的日志。这类日志对安全分析特别重要,因为网络是攻击者的必经之路。

设备类型 常见日志内容 安全价值
防火墙 连接建立/断开、策略命中、NAT转换 发现异常流量、端口扫描
入侵检测系统 攻击特征匹配、异常协议检测 实时发现攻击行为
VPN网关 用户认证、隧道建立/断开 追踪远程访问行为
DNS服务器 域名解析请求、响应 发现DNS隧道、恶意域名通信

我个人习惯,每天上班第一件事就是扫一眼防火墙的拒绝日志。如果某个IP被拒绝的次数突然飙升,那大概率是有人在搞事情。

1.2.3 应用日志

应用日志是业务系统自己产生的。Web服务器、数据库、中间件,都有自己的日志。

常见的应用日志场景:

  • Web访问日志:记录每个HTTP请求的URL、状态码、User-Agent
  • 数据库查询日志:记录SQL语句的执行情况
  • 业务操作日志:用户下单、支付、修改密码等关键操作

你想想看,如果有人在你的网站上尝试SQL注入,Web日志里会留下什么?

# 典型的SQL注入尝试日志
192.168.1.100 - - [15/Mar/2024:03:22:11 +0800] "GET /product?id=1' OR '1'='1 HTTP/1.1" 500 234 "-" "Mozilla/5.0"

看到那个 id=1' OR '1'='1 了吗?这就是典型的注入测试。我在项目中遇到过很多次,只要在日志里看到这种模式,基本可以断定有人在试探你的应用安全。

1.3 日志格式标准

日志格式不统一,是安全分析最大的痛点之一。好在业界有一些标准格式,咱们来认识一下。

1.3.1 Syslog 格式

Syslog 是最古老的日志协议,也是目前最通用的。它定义了日志的传输方式和基本格式。

标准的 Syslog 格式长这样:

<PRI>Timestamp Hostname AppName[PID]: Message

举个例子:

<13>Mar 15 03:22:11 webserver sshd[12345]: Failed password for root from 192.168.1.100

这里 <13> 是优先级,13 表示「认证系统的错误消息」。嗯,这个数字是有讲究的,它由设施代码和严重级别组合而成。

💡 小技巧:Syslog 的严重级别从 0(紧急)到 7(调试)。我建议你在日志收集时,至少保留 0-4 级别(紧急到警告)的日志。调试级别的日志太啰嗦,除非排查问题,否则别开。

1.3.2 JSON 格式

JSON 格式是现在最流行的结构化日志格式。它最大的好处是——机器可读性强,解析起来特别方便。

{
  "timestamp": "2024-03-15T03:22:11.123Z",
  "hostname": "webserver",
  "appname": "sshd",
  "pid": 12345,
  "severity": "ERROR",
  "message": "Failed password for root",
  "src_ip": "192.168.1.100",
  "dst_port": 22,
  "auth_method": "password"
}

你看,JSON 格式把每个字段都标得清清楚楚。我特别喜欢用 JSON 格式的日志,因为写分析脚本时,直接 json.loads() 就能解析,省去了正则匹配的麻烦。

1.3.3 CEF 格式

CEF(Common Event Format)是 ArcSight 公司定义的格式,现在被很多安全设备和 SIEM 系统采用。

CEF 格式长这样:

CEF:Version|Device Vendor|Device Product|Device Version|Signature ID|Name|Severity|Extension

实际例子:

CEF:0|Check Point|Firewall-1|R80.10|100|Connection Denied|5|src=192.168.1.100 dst=10.0.0.1 dpt=443

说实话,CEF 格式看着有点复杂,但它把安全事件的关键信息都封装进去了。扩展字段(Extension)里可以放任意键值对,灵活性很高。

格式 优点 缺点 适用场景
Syslog 通用性强、兼容性好 格式不统一、解析困难 传统设备、网络设备
JSON 结构化、易解析、可扩展 体积较大 现代应用、云原生环境
CEF 标准化程度高、安全事件专用 学习成本高 SIEM系统、安全设备

我的建议:如果你的环境允许,尽量统一使用 JSON 格式。实在不行,至少保证所有日志都包含「时间、来源、事件类型、结果」这四个核心字段。这是做安全分析的最低要求。

好了,第一章的内容就到这里。日志是安全分析的基础,就像盖房子要打地基一样。下一章咱们聊聊日志收集的那些事儿——怎么把分散在各处的日志集中起来,怎么保证日志不丢、不乱、不被篡改。

记住一句话:没有日志,安全就是空谈。