RACF内部架构
整体角色
z/OS访问控制示意图显示,RACF可分为服务组件和数据库两部分。服务组件通过SAF接口与其他子系统交互,执行安全校验。例如TSO子系统在用户认证后,通过SAF查询RACF验证用户访问权限,并将用户信息存入ACEE控制块。
RACF数据库组件
RACF数据库以特定格式存储在数据集中,包含四种核心配置文件:
- 用户配置文件:存储登录名、密码哈希、属性和所属组
- 组配置文件:包含组成员、所有者属性及访问权限
- 数据集配置文件:记录数据集访问权限和审计策略
- 通用资源配置文件:保存资源类别及权限信息
逻辑结构
每个配置文件由多个段组成。例如用户配置文件的BASE段包含:
- PASSWORD: DES/KDFAES加密的密码
- PHRASE: 密码短语哈希
- OWNER: 配置文件所有者
- AUTHDATE: 创建日期
数据库结构
RACF数据库采用块状结构:
- 头块(ICB):包含元数据和指向其他块的指针
- 索引块:单向链表结构,指向所有配置文件和段
- 模板块:存储所有配置文件的字段格式模板
RACF分析工具
现有方案评估
- Racf2john: 仅支持DES/KDFAES密码哈希提取
- Racf2sql: 需要IRRDBU00工具生成的转储文件
- IRRXUTIL: 需在主机执行且需要特权权限
- Racf_debug_cleanup.c: 仅解析BASE段且输出为纯文本
racfudit工具
自主研发的跨平台工具(Golang实现),支持多版本z/OS(1.13/2.02/3.1),采用两阶段分析:
- 解析数据库中的模板定义
- 遍历索引块提取所有配置文件
支持输出格式:
- SQLite数据库:便于执行安全查询
- 纯文本格式:便于快速查看
安全分析案例
密码哈希收集
|
|
UACC配置缺陷检测
|
|
RACF关系链分析
关键配置文件字段
用户配置文件特殊字段:
- SPECIAL: 完全控制所有配置文件
- OPERATIONS: 全数据集访问权限
- GROUP-SPECIAL: 组范围内的特权控制
关系链类型
- Owner: 主体拥有对象
- MemberOf: 主体属于对象
- AllowAlter/Update/Read: 不同级别访问权限
- GroupSpecial: 组范围内的特殊权限
隐式关系
当用户配置group-SPECIAL字段时,其权限范围扩展到指定组的影响范围。例如: USER1(group-SPECIAL=GROUP1) → GROUP1(拥有GROUP2) → GROUP2(拥有USER5) 形成USER1控制USER5的权限链
密码哈希机制
DES算法
- PASSWORD: 用户名DES加密(8字节EBCDIC编码)
- PASSPHRASE: 自定义分组模式,存在截断碰撞风险
- 破解时间:NVIDIA 4090集群小于5分钟
KDFAES算法
多阶段加密流程:
- DES阶段:用户名DES加密
- 哈希阶段:PBKDF2-SHA256-HMAC迭代
- AES阶段:用户名AES加密
PWDX字段结构:
- 魔术字节:E7D7E66D
- 哈希类型:00180000(密码)/00140000(密码短语)
- 内存因子/重复因子:控制迭代次数
- 16字节盐值
- 哈希值前8字节
攻击案例
权限提升路径
- 获取TESTUSR凭证(含group-SPECIAL=PASSADM)
- 修改OPERATOR密码(PASSADM组拥有OPERATOR)
- 修改DFSOPER密码(OPERATOR可修改非特权用户)
- 通过BPX.SUPERUSER资源获得UNIX特权
替代提升路径
TESTUSR → OPERSMS(通过SURROGAT类模拟) → HFSADMIN组 → TSOAUTH类资源 → APF权限提升
防护建议
- 迁移至KDFAES算法和密码短语
- 严格控制UACC值设置
- 定期审计APF库访问权限
- 监控用户关系链变化
- 使用racfudit进行安全配置验证