4、审计日志类型:系统日志、应用日志、数据库日志、网络日志、安全设备日志

审计日志到底长什么样?这个问题我当年刚入门时也困惑过。你以为审计日志就是txt文件里一堆时间戳?其实没那么简单。不同类型的系统,日志格式、内容、采集方式天差地别。今天咱们就掰开揉碎了说说这五类最常见的审计日志。

审计日志类型全景图 审计日志分类 系统日志 应用日志 数据库日志 网络日志 安全设备日志 日志类型对比速览 系统日志 - OS级事件:登录、进程、内核 应用日志 - 业务操作:交易、错误、用户行为 数据库日志 - 数据操作:SQL、变更、备份 网络日志 - 流量与连接:防火墙、路由器 安全设备日志 - 威胁检测:IDS/IPS、WAF 核心原则:每类日志都包含 Who/When/What/Where 关键字段:时间戳 + 来源 + 操作 + 结果 + 对象

4.1 系统日志

系统日志是操作系统的亲儿子。Windows的Event Log,Linux的/var/log/messages、/var/log/secure,这些都是系统级事件的直接记录。说白了,谁登录了、什么时候重启的、哪个内核模块报错了,全在这。

我个人的习惯,做合规审计时一定先检查系统日志里的认证事件。为什么?因为这是攻击者的第一落脚点。你在Windows安全日志里看到连续10次登录失败然后第11次成功,这大概率就是暴力破解得手了。

系统日志必看字段

  • 事件ID / Event ID:Windows用4624表示登录成功,4625表示登录失败
  • 时间戳:精确到毫秒,UTC标准
  • 用户ID:SID或UID,别只看用户名
  • 源IP:登录来源,内网/外网要区分
  • 进程ID:是谁启动了这次操作
# Linux查看认证失败的SSH登录记录
grep "Failed password" /var/log/secure | tail -5

# 输出示例
# Jun 12 03:14:08 web01 sshd[12345]: Failed password for root from 10.0.0.33 port 51234 ssh2
# Jun 12 03:14:10 web01 sshd[12345]: Failed password for root from 10.0.0.33 port 53212 ssh2

我曾经遇到过一家客户,系统日志被删了前三个月的,问他们怎么回事,说是磁盘满了自动清理。嗯,这里要注意——合规审计要求日志保留至少180天,系统日志的轮转策略必须在合规框架内设计。

4.2 应用日志

应用日志是你的业务大脑。电商的订单创建、银行的转账记录、CRM的客户修改,全写在应用日志里。审计时我最关注应用日志,因为它直接反映业务操作的真实意图。

应用日志的格式各家不同,但一般包含:请求URL、请求参数、响应码、处理耗时。我建议你在设计阶段就约定一个日志规范,否则后期解析会让你崩溃。

应用日志设计黄金法则

每一条应用日志必须能回答三个问题:谁(用户ID)?做了什么(操作类型)?结果怎么样(成功/失败/拒绝)?

# 一个规范的应用日志条目示例
{
  "timestamp": "2025-04-08T09:15:23.456Z",
  "user_id": "u_2023_zhangsan",
  "session_id": "sess_abc123",
  "action": "ORDER_CREATE",
  "resource": "order/ORD20250408-001",
  "amount": 2999.00,
  "source_ip": "192.168.1.100",
  "result": "SUCCESS",
  "duration_ms": 123
}

4.3 数据库日志

数据库日志是数据的最后防线。你想想看,业务应用说删了条数据,到底真删了没?谁执行的DELETE?数据库日志会告诉你真相。MySQL的binlog、Oracle的redo log和audit log、PostgreSQL的WAL,都属于这类。

我在项目中遇到过客户说数据被恶意修改了,查了一圈应用日志都是正常的,最后在数据库审计日志里找到了一个从数据库管理工具直连的IP。这个IP根本不是应用服务器,而是攻击者通过跳板机直接连了数据库主库。嗯,入口没锁好。

数据库审计日志启用警告

数据库审计日志会显著影响写入性能。我建议生产环境只对关键表(用户表、订单表、权限表)开启审计,不要全库全表审计。我曾经见过有人全表开启后,写入TPS直接从5000掉到800。

数据库类型 日志文件 审计启用方式
MySQL binlog / 审计插件 -- audit_log=ON
Oracle redo / audit trail AUDIT_ACTIONS 策略
PostgreSQL WAL / log_statement log_statement = 'all'
SQL Server .ldf / 审计日志 创建服务器审计

4.4 网络日志

网络日志是你的高速公路监控。防火墙连接记录、路由器NetFlow、交换机端口日志,这些记录了每一段网络流的来龙去脉。审计时我习惯先看网络日志里的东西向流量,很多内网横向移动攻击就藏在这里。

举个例子,某台业务服务器平时只跟应用服务器和数据库通信,突然大量连接外部IP,那十有八九是被日了在往外传数据。网络日志里的目的IP、端口、传输字节数,全都能作为证据。

网络日志审计清单

  • 防火墙连接创建/拒绝/超时记录
  • VPN用户登录/注销/异常断开
  • DNS查询日志(疑似C2通信)
  • NetFlow/流量元数据(跨区访问)
  • DHCP IP分配日志(设备接入记录)
# 防火墙日志片段示例
# 格式: 时间 | 源IP:端口 | 目的IP:端口 | 协议 | 动作
2025-04-08T09:20:00 192.168.1.10:51234 -> 203.0.113.5:443 TCP ALLOW
2025-04-08T09:20:01 192.168.1.10:51235 -> 203.0.113.5:443 TCP ALLOW
2025-04-08T09:20:02 10.0.1.5:3389   -> 10.0.2.10:3389 TCP DENY

网络日志采集策略

我建议只保留安全相关的事件:拒绝连接、异常端口访问、跨子网访问、外网连接。所有的ALLOW的普通流量,只保留1天即可,否则存储成本你扛不住。

4.5 安全设备日志

安全设备日志是你的哨兵。WAF拦截的SQL注入、IDS/IPS捕获的异常流量、EDR检测到的恶意进程、DLP拦截的数据外发,这些都是安全日志的核心。审计合规要求中,安全日志的留存周期通常是其他日志的两倍——不少标准要求保留至少1年。

我记得有一次做等保测评,客户说他们有WAF日志,一看,发现WAF日志里记录了每天上百条SQL注入攻击,但安全团队根本没看。为什么?因为没有日志分析平台,全堆在设备本地,根本没人去翻。

安全日志常见误区

不要以为开日志就等于有安全审计。我曾经见过客户把IDS日志的告警级别全设成最高,结果每天几万条告警,没人看也没人分析。日志要有告警降噪策略,要定期review,否则就等于没日志。

# WAF安全日志示例
{
  "type": "WAF",
  "rule_id": "942100",
  "severity": "CRITICAL",
  "attack_type": "SQL_INJECTION",
  "src_ip": "185.220.101.23",
  "request_url": "/product?id=1 UNION SELECT * FROM users",
  "action": "BLOCKED",
  "timestamp": "2025-04-08T09:25:00Z"
}

不同类型的安全设备日志格式差异很大。WAF关注HTTP请求负载,EDR关注进程行为,防火墙关注网络流,DLP关注数据内容。但你记住,所有安全日志最终要归一到同一个标准字段体系下,不然你的SIEM没法做关联分析。

4.6 五类日志总结对比

学完这五类日志,你可能会觉得内容有点多。嗯,来,我帮你梳理一下核心区别:

日志类型 核心关注 典型攻击场景 保留期限建议
系统日志 登录、权限、进程 暴力破解、提权 180天
应用日志 业务操作、错误 越权访问、逻辑漏洞 180天
数据库日志 SQL、数据变更 SQL注入、数据泄露 180天
网络日志 连接、流量、协议 C2通信、横向移动 90天
安全设备日志 威胁告警、拦截 Web攻击、恶意软件 1年+

最后再强调一句:审计日志不在于多,在于有效。与其堆满TB级别的冗余日志,不如把这五类日志的关键字段梳理清楚。很多合规审计的整改项,其实就是在日志完整性上出了问题。你能做到每类日志都有、关键字段全覆盖,基本就能通过大部分合规检查了。