《UNIX系统安全工具》第3章:帐号安全基础
来源:云盘
/田浩然上传的资料/电子书/Linux/UNIX系统安全工具/003.pdf(O’Reilly《Maximum Security》/《UNIX系统安全工具》中译本第3章,约 8 页)
核心主题
帐号(用户名+口令)是 UNIX 安全的最外层机制:用户名标识”谁”,口令确认”是他”。没有确认机制,责任追溯和安全控制都无从谈起。root 帐号一旦被侵入,系统即”属于”攻击者——改文件、插恶意代码、造假用户、改日志灭迹。
口令选择指南
禁忌(经不起两类攻击:个人信息猜测 + 口令猜测程序):
- 不用字典词(猜测程序可配置多语言词表)、不用 qwerty/abcdef 类序列
- 不用个人信息(生日、姓名、电话、车牌、街道名)
- 不用与旧口令相似、包含用户名、短于 6 字符、纯字母/纯数字、全大小写统一的口令
- 不用公布过的范例口令
推荐:≥6 字符;混入数字与特殊字符;易记到不用写下;能快速盲打(防 shoulder surfing)。
写下口令的代价: Cliff Stoll 曾在电视拍摄中把口令贴在显示器上被数百万观众看到。若必须记录:折叠纸条放保险处/随身钱包物上;绝不把用户名和口令写在一起;记录时按可记住的方式做变形;绝不贴在硬件上。
crypt() 机制要点
- 历史:早期 UNIX 明文口令文件多次泄露(Morris & Thompson 记录的著名事故:编辑中的口令文件与每日信息文件被互换,口令显示在所有终端上)。UNIX V6 起改为以军方 M-209 密码机为模型的旋转算法编码;V7 换用 crypt() 库。
- 算法:源于 DES。口令截断/填充到 8 字符,每字符取 7 位组成 56 位密钥;用该密钥反复加密 64 位零块 25 轮,结果编码为 11 字符。注意概念反转——“加密口令”其实是用口令作密钥加密一组零块。
- salt:12 位(0~4095),由 /bin/passwd 按时钟选取,编码为加密条目前 2 字符;完整条目 13 字符(2 salt + 11 密文)。salt 搅乱 DES,使同一口令有 4096 种加密结果——防止相同口令在 passwd 中肉眼可见,也迫使字典攻击预计算量 ×4096。
- passwd 文件格式:
name:coded-passwd:UID:GID:user-info(GECOS):home:shell;:*:禁止登录;UID<100 留系统帐号;shell 填 /bin/false 可禁登录;现代系统用影子口令把密文移出 /etc/passwd。
弱点分析(本书最有价值的部分)
两个根本问题:可猜测的口令 + 过程匹配(字典攻击)。
- Morris & Thompson:分析 3289 个口令,86% 含明显缺陷;5 分钟词典搜索猜中 1/3。
- 预计算加密字典:50 万词字典 × 4096 salt ≈ 32GB 存储——20 年前是不可想象的资源障碍,如今几百美元。salt 的保护已被硬件发展击穿。
- 安全评估公式:
K × C >> E × T- K = 口令空间容量;C = salt 排列数 4096;E = 每秒加密次数;T = 攻击者可用时间。
- 悲剧在于:K 和 C 二十年不变,E 随 CPU 逐年暴涨,存储技术使预计算时间趋近于零。
- 结论:不必攻破特定口令,几十个用户的系统平均总能攻破几个——对攻击者已足够。
可行动点
- 现代视角复盘:本章的 K×C>>E×T 公式正是后来 bcrypt/scrypt/argon2”提高单次验证成本”路线的反面论证——唯一能对抗 E 增长的杠杆是让 E 变大(工作因子可调),MD5-crypt/sha-crypt/bcrypt 即此思路的产物。
- 任何”参数 20 年不变”的防御机制都值得用该公式体检:安全强度 = f(不变量, 攻击者算力增速)。
- 该章是理解 shadow password、口令策略(pam_unix cracklib)、登录失败锁定的前置知识。
关联
- 同书后续章节:字典攻击详述(第5章)、crypt 命令与 CBW 破解工具(6.8 节)
- Unix入侵检测与日志文件系统-绿色兵团1999(入侵后的日志侧证据链,与帐号安全互为攻守两面)