异常检测基础:常见异常类型

做数据库审计日志分析这么多年,我见过最多的就是这四类异常——SQL注入、暴力破解、权限滥用、数据泄露。说白了,大部分安全告警最后都能归到这几个大类里。你想想,日志里几万条记录,一眼扫过去就能判断个八九不离十,靠的就是对这几类异常形成肌肉记忆。

4.1 SQL注入

SQL注入的本质是攻击者把恶意SQL代码混进正常输入里,让数据库执行非预期的命令。我在项目里遇到过最典型的一次:某电商后台的搜索接口,日志里突然出现大量 OR 1=1 的尾巴,后面还跟着 UNION SELECT——明显有人在试探能不能绕过登录。

常见的注入特征有这些:

  • 输入字段里出现 '、"、--、# 等注释符
  • 包含 OR 1=1、AND 1=2 这种永真/永假条件
  • UNION SELECT 后面跟着字段数探针
  • 请求参数突然变长,包含 EXEC、xp_cmdshell 等存储过程调用
检测技巧:不要只看单条查询。SQL注入通常有试探阶段,3秒内同一账号发5条以上带特殊字符的查询,基本可以标黄了。
-- 一个典型的时间盲注日志片段
-- 正常查询
SELECT name FROM users WHERE id = 1

-- 注入试探
SELECT name FROM users WHERE id = 1 AND SLEEP(5)

4.2 暴力破解

暴力破解不新鲜,但它在审计日志里的“指纹”特别明显——短时间内大量失败的登录尝试。我有个习惯,先看登录失败日志里 client_ip 的分布。如果90%的失败都来自同一个IP,那基本是暴力破解跑不掉了。

有几个关键指标要盯着:

  • 同一IP 5分钟内失败次数 > 50
  • 用户名枚举:失败日志里的用户名按字母顺序递增
  • 登录时间间隔稳定在几百毫秒(脚本跑的)
  • 数据库账号名是不存在的用户(攻击者在扫描有效账户)
注意:还有一种“慢速暴力破解”,每天只试几次,周期拉长到两周。我曾经踩过这个坑,把慢速攻击当成了正常误操作,后来发现是攻击者对管理员账号做了定向爆破。现在我对所有IP的登录失败总数都加了滚动窗口计数。

4.3 权限滥用

权限滥用比前两种隐蔽得多。内部员工用合法账号干非法的事,日志里看起来都是正常的SQL语句。我遇到过最头疼的一个案例:运维人员用 root 账号直接连生产库 SELECT * FROM customer_credit_card,他确实有权限,但业务上根本不需要查这些字段。

怎么发现?我总结了三个角度:

  1. 行为基线偏离:同一个账号平时只查20行,突然查了10万行,要报警
  2. 敏感对象访问:从没碰过 payments 表的人突然在凌晨2点访问了
  3. 越权查询:普通账号执行了 GRANT、ALTER、SHOW DATABASES 等管理类语句
权限滥用的检测核心就一句话:不关心用户能不能做,只关心该不该做。权限基线 + 资源敏感度 = 告警。

4.4 数据泄露

数据泄露是后果最严重的异常类型。它不一定是外部攻击,也可能内部人员批量导出数据。我记得有一次,一家合作的支付公司出事,审计日志显示一个账号从 transactions 表里跑了300万条记录,用了5分钟,网络流量异常高——这就是典型的批量导出。

数据泄露在日志里的常见模式:

  • 大结果集查询:返回行数 > 平时99.9%分位数
  • 导出工具特征:INTO OUTFILE、mysqldump、pg_dump 出现
  • 非工作时间批量操作:凌晨2-5点的密集读操作
  • 异常的表级访问:某个只读账号突然遍历了所有数据表

检测数据泄露,我个人习惯建一个“敏感表白名单”,对 credit_card、ssn、password_hash 这类表的查询做分级告警。单次查超过1000行就警告,超过10000行直接阻断。

异常类型 主要特征 检测难点 我常用的信号
SQL注入 特殊字符、UNION、延时函数 WAF逃逸、编码混淆 3秒内5条特殊查询
暴力破解 大量失败登录、固定IP 慢速攻击、分布式IP 5分钟50次失败 + 滚动窗口
权限滥用 合法操作、超标访问 基线难建立、误报多 行为偏离 + 敏感对象
数据泄露 大结果集、批量导出 海量日志、SQL正常 结果行数 > 99.9%
常见异常类型与检测流程 SQL注入 暴力破解 权限滥用 数据泄露 特征匹配 + 频率分析 失败计数 + 时间窗口 基线偏离 + 敏感对象 结果集大小 + 导出命令 日志汇聚与特征提取 告警分级与人工验证
我的核对清单:每次搭建新系统的审计告警,我会先过一遍这四类异常,给每种异常写一个最小检测规则。SQL注入用正则,暴力破解用计数窗口,权限滥用用基线,数据泄露用阈值。四个规则跑通了,再慢慢调误报。

说到底,异常检测不是一上来就上深度学习。把这四个基础类型吃透,日志里80%的问题你都能第一时间抓住。剩下的20%——嗯,那是组合攻击和未知模式,后面章节咱们再聊。