访问控制基础:认证、授权、审计(AAA)及常见攻击模式

这一章我们聊聊 AAA。说实话,很多刚入行的朋友把 AAA 当成三个独立的东西。实际上它们是一套闭环:认证确认你是谁,授权决定你能干什么,审计记录你干了什么。缺一个,安全模型就漏风。

我在带宽外网安全审计时遇到过一家公司,认证做得挺严——双因素、证书、生物识别全上了。但授权一塌糊涂,普通员工居然能访问财务数据库。审计日志更是形同虚设,半年没开过。结果内部攻击者用合法账号把客户数据拖走了。你看,AAA 缺了任何一角,都不叫安全。

2.1 认证(Authentication)

认证就是验证身份。常见的认证因子有三种:

  • 知识因子:密码、PIN码、密保问题。最常见的,也是最容易被社工的。
  • 持有因子:手机令牌、硬件Key、智能卡。我见过用USB Key做认证的金融系统,物理隔离确实强。
  • 固有因子:指纹、人脸、虹膜。生物特征无法更改,一旦泄露就是终身风险。

现在大部分系统走的是多因子认证(MFA)。不过我劝你别以为上了 MFA 就高枕无忧。我曾经碰到一个案例,攻击者通过钓鱼拿到用户密码,然后绕过短信验证码的限流机制——30秒内暴力轮询了6个验证码就中了。MFA 的具体实现才是关键。

避坑指南:不要只用 SMS 做第二因子。SIM 卡交换攻击已经让很多公司栽过跟头。优先用 TOTP(基于时间的一次性密码)或硬件安全密钥。

2.2 授权(Authorization)

认证通过了,接下来要决定你能访问哪些资源。这就是授权。授权模型主要有五种:

模型核心逻辑我见过的坑
DAC(自主访问控制)资源所有者自行决定权限文件共享时权限扩散,无法集中管控
MAC(强制访问控制)系统根据安全标签控制配置复杂,军用系统常用,互联网公司很少用
RBAC(基于角色的访问控制)用户绑定角色,角色绑定权限角色爆炸——我见过一个系统有400多个角色,没人能说清区别
ABAC(基于属性的访问控制)根据用户、资源、环境属性动态决策策略引擎性能容易成为瓶颈
ReBAC(基于关系的访问控制)通过实体间关系推导权限社交网络、文档协作里很常见,但审计路径难梳理

我在实际项目中倾向用 RBAC+ABAC 混搭。简单说:角色管大部分权限,少数精细场景用属性规则做补充。比如“只有部门经理可以查看本部门薪资数据,且只能在工作时间查看”,这样用 ABAC 的动态条件去卡,比单纯 RBAC 灵活得多。

2.3 审计(Auditing)

审计是很多公司的短板。日志记了,但没人看。出了事才回头翻,结果发现日志缺失、时区不对、字段不全。

我个人习惯把审计分成三层:

  1. 记录层:谁、何时、从哪、做了什么、结果如何。每条日志必须包含这五个字段。
  2. 存储层:日志不能只存在本地,攻击者会删日志。要实时发送到集中式日志服务器,建议保留至少90天。
  3. 分析层:不能只存不查。要建立基线规则,比如“同一个IP半小时内登录失败超过5次”就触发告警。
经验之谈:日志格式统一用JSON,别用自定义的syslog变体。我处理过一起事件,不同设备日志时间戳格式不一致,光解析就花了三天。统一JSON+UTC时间戳能省大量麻烦。

2.4 常见攻击模式

了解 AAA 原理后,必须知道攻击者怎么绕过它。这里列几个我亲手分析过的案例。

2.4.1 认证层面的攻击

  • 暴力破解 / 凭证填充:攻击者用泄露的密码字典批量登录。我曾经在一个开源项目里发现,某大厂API居然没做登录频率限制。结果不到两天,几十万个账号被撞库。
  • 中间人攻击:在HTTP(对,就是不带S的)流量中抓包直接拿到明文密码。现在大部分网站都强制HTTPS了,但内网系统还有这种问题。
  • 会话劫持:偷取Cookie或Session ID伪装成合法用户。建议:Cookie设置HttpOnly、Secure、SameSite=Strict,且每次登录后重新生成Session。

2.4.2 授权层面的攻击

  • 权限提升:普通用户通过API参数修改获得管理员权限。典型的IDOR(不安全的直接对象引用)。我见过一个电商系统,修改URL里的user_id就能看到任意用户订单,包括管理员。
  • 水平越权:A用户访问B用户的资源。例如修改订单ID查看他人订单。
  • 垂直越权:普通用户执行管理员操作。例如普通员工调用/admin/deleteUser接口却没校验角色。

2.4.3 审计层面的攻击

  • 日志篡改 / 删除:攻击者进入系统后第一件事是清日志。所以建议日志服务器配置WORM(一次写入多次读取)模式。
  • 日志洪水:大量伪造日志淹没真实告警,让安全团队疲劳。应对:日志费率限制和异常检测需配套。

2.5 AAA闭环架构图

下面这张SVG图能直观展示AAA各环节的关系以及攻击点。

AAA 闭环与常见攻击点 用户 认证(AuthN) 密码 / 令牌 / 生物特征 授权(AuthZ) RBAC / ABAC / 策略 审计(Audit) 日志 / 采集 / 告警 资源 暴力破解·凭证填充 权限提升·越权 日志篡改·洪水 会话劫持·中间人 说明:用户经过认证后获得授权,才能访问资源;所有操作记录进审计系统。 红色虚线表示攻击者可以绕过或攻击每一个环节。

2.6 构建检测规则的小思路

异常访问检测模型怎么落地?其实就是在 AAA 的每个环节埋检测点。我通常这样做:

  • 认证阶段:监控单IP登录失败次数、异地区登录、非工作时间登录。
  • 授权阶段:监控角色变更、权限分配异常(比如普通用户突然新增管理员角色)、访问不存在的资源路径。
  • 审计阶段:监控日志生成量突变、日志删除操作、审计系统自身离线。
核心观点:AAA 不是三个独立模块,而是一条安全链路。认证处失守,授权再严格也白搭;审计不健全,攻进来了你都不知道。检测模型应该覆盖这条链路上的每个薄弱点。

好了,这一章就到这里。理解 AAA 是构建异常检测模型的基础。下一块内容,我们会深入数据采集与特征工程——说白了,怎么把原始流量变成模型能吃的“食材”。