Files
Fanjun Kong 72f2e1a897 just for testing
Signed-off-by: Fanjun Kong <kongfanjun@iscas.ac.cn>
2026-01-30 16:04:18 +08:00

3.2 KiB
Raw Permalink Blame History

RPM 包安全特性大规模扫描系统 - 需求文档

1. 项目背景

需要对 RPM 软件源中的所有二进制文件进行安全特性扫描,检查编译时开启的安全保护机制(如 PIE、NX、Stack Canary、Fortify Source 等),以评估软件源的整体安全状况。

2. 核心需求

2.1 基本功能

  1. RPM 包获取

    • 从 RPM 软件源获取所有 RPM 包列表
    • 支持配置软件源地址
  2. 二进制文件提取

    • 从 RPM 包中提取二进制文件
    • 关注路径:/usr/bin, /bin, /usr/sbin, /sbin, /usr/lib64, /usr/lib
    • 识别 ELF 格式文件(可执行文件、动态库)
  3. 安全检查

    • 使用 checksec 工具检查 ELF 文件
    • 检查项包括:
      • PIE (Position Independent Executable)
      • NX (No-Execute)
      • Stack Canary (Stack Protection)
      • Fortify Source
      • RELRO (Relocation Read-Only)
      • BIND_NOW
      • 涌出保护
  4. 结果输出

    • 支持 CSV 格式导出
    • 支持生成统计报告

2.2 大规模扫描需求

2.2.1 性能要求

  • 支持扫描数千个 RPM 包
  • 并行处理提升效率
  • 预计单次扫描时间:合理范围(待定)

2.2.2 预筛选优化

  • 排除 noarch 架构的包(主要是 Python/Perl/文档)
  • 使用 dnf repoquery 提前识别包含二进制文件的包
  • 只处理 x86_64 架构的包

2.2.3 并行处理

  • 使用 GNU Parallel 进行并发
  • 可配置并发数(如 -j 8

2.3 异常处理需求

  1. 软链接处理

    • 避免重复扫描同一个文件(如 /bin/usr/bin
    • 使用 find -type f 只处理真实文件
    • 基于 inode 去重
  2. 动态库处理

    • 正确识别 .so 文件
    • 处理插件式动态库(/usr/lib64 下的插件)
  3. 内核模块排除

    • 排除 .ko 内核模块文件
    • 理由:checksec 的某些检查项(如 PIE)对内核模块不适用
  4. 错误处理

    • 网络下载失败重试
    • 损坏的 RPM 包处理
    • 解压失败处理
    • checksec 超时处理

3. 数据输出需求

3.1 统计指标

  • PIE 覆盖率(开启 PIE 的文件占比)
  • NX 覆盖率
  • Stack Canary 覆盖率
  • 危急项统计(如 NX 为 Disabled 的文件)

3.2 数据存储

  • 初期:CSV 格式
  • 进阶:数据库支持(SQLite/MySQL
  • 可视化:Dashboard 展示

4. 技术约束

  1. 操作系统Linux(支持 DNF/YUM 包管理器)
  2. 依赖工具
    • dnfyumRPM 包查询)
    • checksec(安全特性检查)
    • GNU Parallel(并行处理)
    • rpm2cpioRPM 包解压)
    • file(文件类型识别)

5. 扩展需求

5.1 增量扫描

  • 记录已扫描的包
  • 支持只扫描新增或更新的包

5.2 断点续传

  • 扫描中断后可继续
  • 避免重复扫描已完成的部分

5.3 分布式扫描(未来)

  • 支持多机并行扫描
  • 结果汇总

6. 交付物

  1. 扫描脚本(Shell/Python
  2. 配置文件
  3. 使用文档
  4. 示例报告

7. 非功能性需求

  1. 可维护性:代码清晰,注释完整
  2. 可扩展性:易于添加新的检查项
  3. 可靠性:异常处理完善
  4. 性能:支持大规模扫描