深入解析z/OS RACF安全架构与漏洞挖掘

本文深入剖析IBM z/OS的RACF安全子系统内部架构,揭示其数据库结构、权限关系链和加密算法,介绍自主研发的racfudit工具如何离线分析安全配置,并演示通过SQL查询发现权限提升路径和密码哈希提取技术。

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开发的双阶段解析引擎:

  1. 模板解析阶段:动态识别不同版本的配置文件结构
  2. 数据提取阶段:遍历索引块提取所有配置文件实例

支持输出格式:

  • SQLite数据库:支持复杂关系查询
  • 纯文本文件:便于快速审查

安全分析实践

密码哈希收集

1
2
3
SELECT ProfileName,PHRASE,PASSWORD,CONGRPNM 
FROM USER_BASE 
WHERE CONGRPNM LIKE "%SYS1%";

UACC权限误配置检测

1
2
3
SELECT ProfileName, UNIVACS 
FROM DATASET_BASE 
WHERE UNIVACS LIKE "1%";

RACF权限关系链

关键权限字段

  • SPECIAL:完全控制所有配置文件
  • OPERATIONS:访问关键资源类权限
  • AUDITOR:审计信息访问权
  • CLAUTH:创建指定类别配置文件的权限

隐式关系漏洞

组特权字段(group-SPECIAL)会扩展用户的权限影响范围。例如:

  1. USER1在group-SPECIAL字段设置GROUP1
  2. GROUP1拥有GROUP2
  3. GROUP2拥有USER5
  4. 则USER1获得对USER5的控制权

密码加密机制

DES算法

  • PASSWORD:用户名作为明文,密码作为密钥进行DES加密
  • PASSPHRASE:使用IBM自定义分组模式,存在截断碰撞风险

KDFAES算法

三层加密流程:

  1. DES阶段:用户名加密生成中间密钥
  2. PBKDF2阶段:使用salt和迭代参数进行哈希
  3. 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安全性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计