4. 访问控制审计:用户身份认证机制审计
各位同学,咱们今天聊点实在的。访问控制审计,说白了就是看你的系统「门锁」够不够结实。我这些年做安全审计,见过太多系统——门是开了,但锁就是个摆设。嗯,咱们先从最基础的开始。
4.1 密码策略审计:别让密码成为摆设
密码策略,这是最基础但也最容易出问题的地方。我见过不少公司,密码策略写得天花乱坠,实际一查——管理员密码还是「admin123」。
核心审计点:
- 密码复杂度:至少8位,包含大小写字母、数字、特殊字符
- 密码有效期:建议90天强制更换,但别太频繁(用户会记在便签上)
- 历史密码:禁止重复使用最近5次密码
- 登录失败锁定:连续5次失败,锁定账号30分钟
我曾经审计过一家电商公司,他们的库存管理系统密码策略形同虚设。你猜怎么着?有个仓库主管的密码是「warehouse2020」,用了三年没换过。这要是被内部人员拿到,整个库存数据就全暴露了。
这里我给大家一个检查清单:
# 密码策略审计脚本(伪代码)
def audit_password_policy():
checks = []
# 检查最小长度
if policy.min_length < 8:
checks.append("FAIL: 密码最小长度不足8位")
# 检查复杂度
if not policy.require_uppercase or not policy.require_special:
checks.append("FAIL: 缺少复杂度要求")
# 检查有效期
if policy.max_age > 90:
checks.append("WARN: 密码有效期超过90天")
return checks
我的小技巧:审计时别只看配置文件。直接登录几个账号试试,看看实际生效的策略和文档写的是否一致。我遇到过三次「文档写得很完美,实际没启用」的情况。
4.2 MFA(多因素认证)审计:多一层保障
密码再强,也怕泄露。MFA就是给门再加一把锁。我个人习惯,所有涉及库存数据修改的操作,必须启用MFA。
MFA的常见形式:
| 因素类型 | 示例 | 安全等级 |
|---|---|---|
| 知识因素 | 密码、PIN码 | 低 |
| 持有因素 | 手机验证码、硬件Token | 中 |
| 生物因素 | 指纹、面部识别 | 高 |
审计MFA时,我重点关注三点:
- 是否强制启用:不能给用户「跳过MFA」的选项
- 备用机制:如果手机丢了怎么办?要有恢复码或备用邮箱
- 会话管理:MFA验证后,会话超时时间不能太长(建议15分钟)
注意:我曾经见过一个系统,MFA用的是短信验证码。但短信通道本身就不安全,容易被拦截。建议优先使用TOTP(基于时间的一次性密码)或硬件密钥。
4.3 SSO(单点登录)审计:方便与安全的平衡
SSO确实方便,用户不用记一堆密码。但方便背后有隐患——一旦SSO被攻破,所有系统都失守。
审计SSO时,我通常会检查:
- 认证协议:用的是SAML 2.0还是OAuth 2.0?版本是否过时?
- 令牌管理:令牌有效期多长?是否支持撤销?
- 信任关系:SSO服务商是否可信?有没有做安全评估?
- 日志审计:SSO的登录日志是否完整?能否追溯到具体用户?
你想想看,如果SSO的私钥泄露了,攻击者可以伪造任何用户的身份。所以SSO的密钥管理一定要严格,最好用硬件安全模块(HSM)存储。
4.4 权限分离与最小权限原则检查
这是访问控制的核心。权限分离,说白了就是「管账的不能管钱,管货的不能管账」。最小权限原则,就是「给用户刚刚好的权限,不多给一分」。
我画了一张图,帮你理解权限分离的逻辑:
审计时,我通常会做这几步:
- 列出所有角色:采购员、仓管员、审核员、管理员……
- 检查角色权限:每个角色能做什么?有没有越权?
- 检查用户分配:有没有一个人同时拥有多个角色?
- 检查特权账号:管理员账号谁在用?有没有共享?
实战案例:我曾经审计过一家制造企业,发现他们的仓库主管同时拥有「入库审核」和「出库审核」权限。这意味着他可以自己创建入库单、自己审核、自己出库——完全绕过了监督。这就是典型的权限未分离。
4.5 审计工具与自动化检查
手动审计太累,我一般会用脚本自动化检查。下面是一个简单的权限审计脚本示例:
# 权限分离审计脚本(Python伪代码)
def audit_permission_separation(users, roles):
issues = []
for user in users:
assigned_roles = user.get_roles()
# 检查是否同时拥有冲突角色
if '采购员' in assigned_roles and '审核员' in assigned_roles:
issues.append(f"用户 {user.name} 同时拥有采购和审核权限")
if '仓管员' in assigned_roles and '盘点员' in assigned_roles:
issues.append(f"用户 {user.name} 同时拥有仓管和盘点权限")
return issues
我的经验:审计时别只看系统配置。找几个实际用户聊聊天,问问他们「你平时用谁的账号登录?」。我至少发现过三次「共享管理员密码」的情况。
4.6 常见问题与整改建议
| 问题 | 风险等级 | 整改建议 |
|---|---|---|
| 密码策略未启用 | 高 | 立即启用密码复杂度、有效期、锁定策略 |
| MFA未强制 | 高 | 对所有管理操作强制MFA |
| SSO令牌有效期过长 | 中 | 缩短令牌有效期至30分钟以内 |
| 权限未分离 | 高 | 重新设计角色,确保职责分离 |
| 最小权限未落实 | 中 | 逐角色审查权限,删除不必要的权限 |
嗯,这一章内容不少。但记住一个核心:访问控制不是技术问题,是管理问题。技术再强,如果管理层不重视,一切都是白搭。我见过太多系统,安全审计报告写得漂漂亮亮,但实际执行一塌糊涂。
最后送大家一句话:权限给出去容易,收回来难。设计权限时,宁可先紧后松,也别先松后紧。