审计日志概述

审计日志到底是个什么东西?

说白了,它就是系统里所有“谁在什么时候、干了什么、结果如何”的流水账。

我在刚接手加密搜索系统的那会儿,日志就是我的“黑匣子”。系统出了事,第一反应是翻日志。要是日志不全,你连事故原因都找不到,更别说做安全审计了。

审计日志的定义

审计日志(Audit Log)是一种不可篡改的、按时间顺序记录的事件序列。它记录了用户操作、系统调用、数据访问、权限变更等关键行为。

在我这个行当里,它有个更贴切的名字——「数字世界的黑匣子」。航空业靠黑匣子分析空难,安全团队就靠审计日志分析安全事件。

审计日志的作用

我把它总结成了四个核心作用,记好这张表就够了:

作用 一句话说明 我在项目中遇到的真实场景
责任追溯 找到“谁干的” 有一次内部数据泄露,全靠登录日志锁定是某个运维同事的非正常时间段操作
合规审计 证明“我守规矩了” ISO 27001审计时,审计员只看审计日志是否完整、是否防篡改
异常检测 发现“不对劲” 加密搜索系统的API调用频次突然暴涨,日志帮我发现了暴力破解尝试
故障定位 回答“为啥挂了” 生产环境一次慢查询,跟踪到是一条加密索引重建导致的锁等待

一个重要的点:审计日志不能只有记录功能。它还必须做到“不可否认”,也就是当事人事后无法抵赖。这就引出了日志签名和链式哈希存储的概念,后面章节会展开。

常见字段

每个系统的字段可能不同,但我个人习惯把字段分成三组:谁、何时、干了啥。字段不全的日志,在我眼里就是“半残废”。

字段名 含义 示例值 备注
timestamp 事件发生时间 2025-03-21T14:32:10.123Z 建议用UTC,别用本地时间,否则取证时转换很痛苦
user_id 操作人标识 uid_1083 不要只用IP,IP会变,用户ID才是稳定锚
action 操作类型 SEARCH 动词为主,比如CREATE、READ、UPDATE、DELETE
resource 被访问的资源 /encrypted_index/user_data 具体到路径或对象ID
client_ip 来源IP 10.0.12.5 内网场景下注意NAT转换,最好同时记录真实源
result 执行结果 SUCCESS / FAILURE 失败时附带错误码,别省这一点

我的一点经验:除了上面这些,建议额外加一个 session_id。有一次追查加密搜索的“幽灵查询”,就是靠 session_id 把同一用户的一次完整会话串起来的。

格式标准

格式不统一,审计就是灾难。你想想看,10套系统10种格式,解析脚本写到你崩溃。所以,业界形成了两个主流标准:CEF 和 JSON。

CEF(Common Event Format)

CEF 是 ArcSight 提出的格式,核心思想是“用竖线分隔关键字段 + 扩展键值对”。举个例子:

CEF:0|Security|EncryptedSearch|1.0|100|EncryptedQuery|10|
src=10.0.12.5 spt=54321 dpt=443  
request=/search?q=encrypted user=uid_1083  
msg=Query index_alpha success

CEF 的前七个字段是固定的:设备类型、产品、版本、签名ID、名称、严重等级、扩展字段。后面的扩展部分可以自由加键值对。

我个人觉得 CEF 在 SIEM(安全信息与事件管理)系统里特别好用,因为它结构严谨,解析效率高。

JSON(JavaScript Object Notation)

JSON 格式更灵活,也是我现在的首选格式。每个字段都是键值对,读写方便,嵌套结构也不怕。

{
  "timestamp": "2025-03-21T14:32:10.123Z",
  "event_type": "SEARCH",
  "severity": "low",
  "user": {
    "id": "uid_1083",
    "role": "analyst"
  },
  "resource": {
    "type": "encrypted_index",
    "name": "user_data"
  },
  "action": {
    "name": "read",
    "method": "query"
  },
  "result": "SUCCESS",
  "client": {
    "ip": "10.0.12.5",
    "port": 54321
  }
}

警告:JSON 虽好,但别忘了做字段校验。我曾经遇到过一个场景,某系统输出的 JSON 里 timestamp 字段时而字符串、时而数值,导致下游解析全部报错。解决方案是在日志生成侧就做 schema 校验。

格式对比

我把 CEF 和 JSON 的优缺点对比了一下:

维度 CEF JSON
可读性 中等(竖线分隔,眼睛要适应) 优秀(键值对一目了然)
解析性能 快(固定位置解析) 中等(需要完整解析语法树)
扩展性 良好(扩展字段键值对) 优秀(任意嵌套结构)
系统兼容性 SIEM 工具原生支持 几乎所有系统都支持
我的场景选择 日志需要直接输入商业 SIEM 时 需要与微服务、云平台深度集成时

我的建议:如果你的团队在搭建新系统,直接上 JSON 格式。如果对接的是遗留的 SIEM 或 SOC 平台,CEF 更省事儿。但无论选哪个,注意记录都要带上时间戳、用户标识和结果状态。

审计日志知识体系框架 范围/来源 采集与传输 标准化存储 (CEF / JSON) 分析与监控 合规与响应 核心思想 从源头采集 → 结构化存储 → 实时分析 整个过程必须保证完整性、不可篡改性

嗯,这张图是我自己在做安全审计时画的心法。从源头采集到最终复盘,审计日志是有生命周期的,每一步都环环相扣。格式标准化是承上启下的关键环节,这一点怎么强调都不过分。