RACF内部架构
整体角色
z/OS访问控制流程图显示,RACF可分为服务组件和数据库两部分。服务组件通过System Authorization Facility (SAF)接口与其他子系统交互,执行安全校验。数据库以配置文件形式存储用户、组、数据集和通用资源信息。
RACF数据库组件
数据库包含四种核心配置文件类型:
- 用户配置文件:存储登录名、密码哈希、属性和组关系
- 组配置文件:记录组成员、所有者权限和子组关系
- 数据集配置文件:定义数据集的访问权限和审计策略
- 通用资源配置文件:管理资源类别权限分配
逻辑结构
每个配置文件由多个段(segment)组成。例如用户配置文件的BASE段包含:
PASSWORD
: DES/KDFAES加密的密码PHRASE
: 密码短语哈希OWNER
: 配置文件所有者AUTHDATE
: 创建日期
物理存储结构
RACF数据库作为特殊格式的数据集存储,包含:
- ICB头块:元数据和数据块指针
- 索引块:单向链表指向所有配置文件和段
- 模板块:定义所有配置文件的字段结构和格式
RACF数据库分析工具
现有方案局限
- Racf2john:仅支持DES/KDFAES密码哈希提取
- Racf2sql:需要IRRDBU00转储且可能丢失关键数据
- IRRXUTIL:需在主机执行且需要高阶权限
- Racf_debug_cleanup.c:仅解析BASE段且输出为纯文本
自研工具racfudit
采用Golang开发的双阶段解析引擎:
- 模板解析阶段:动态识别不同版本的配置文件结构
- 数据提取阶段:遍历索引块提取所有配置文件实例
支持输出格式:
- SQLite数据库:支持复杂关系查询
- 纯文本文件:便于快速审查
安全分析实践
密码哈希收集
|
|
UACC权限误配置检测
|
|
RACF权限关系链
关键权限字段
- SPECIAL:完全控制所有配置文件
- OPERATIONS:访问关键资源类权限
- AUDITOR:审计信息访问权
- CLAUTH:创建指定类别配置文件的权限
隐式关系漏洞
组特权字段(group-SPECIAL)会扩展用户的权限影响范围。例如:
- USER1在group-SPECIAL字段设置GROUP1
- GROUP1拥有GROUP2
- GROUP2拥有USER5
- 则USER1获得对USER5的控制权
密码加密机制
DES算法
- PASSWORD:用户名作为明文,密码作为密钥进行DES加密
- PASSPHRASE:使用IBM自定义分组模式,存在截断碰撞风险
KDFAES算法
三层加密流程:
- DES阶段:用户名加密生成中间密钥
- PBKDF2阶段:使用salt和迭代参数进行哈希
- AES阶段:加密最终输出
PWDX字段结构:
偏移量 | 长度 | 字段 | 说明 |
---|---|---|---|
0-3 | 4字节 | 魔数 | E7D7E66D |
4-7 | 4字节 | 哈希类型 | 00180000(密码)/00140000(密码短语) |
8-9 | 2字节 | 内存因子 | 决定迭代次数 |
10-11 | 2字节 | 重复因子 | 决定迭代次数 |
12-15 | 4字节 | 未知值 | 00100010 |
16-31 | 16字节 | Salt | 随机值 |
32-39 | 8字节 | 密码哈希前半部 | 加密数据前8字节 |
结论
通过深入分析RACF内部机制,揭示了权限关系链中的安全隐患。racfudit工具实现了离线数据库分析,能够识别权限提升路径和密码哈希提取。建议采用KDFAES算法、严格控制UACC值、定期审计权限关系链以增强z/OS安全性。