72f2e1a897
Signed-off-by: Fanjun Kong <kongfanjun@iscas.ac.cn>
3.2 KiB
3.2 KiB
RPM 包安全特性大规模扫描系统 - 需求文档
1. 项目背景
需要对 RPM 软件源中的所有二进制文件进行安全特性扫描,检查编译时开启的安全保护机制(如 PIE、NX、Stack Canary、Fortify Source 等),以评估软件源的整体安全状况。
2. 核心需求
2.1 基本功能
-
RPM 包获取
- 从 RPM 软件源获取所有 RPM 包列表
- 支持配置软件源地址
-
二进制文件提取
- 从 RPM 包中提取二进制文件
- 关注路径:
/usr/bin,/bin,/usr/sbin,/sbin,/usr/lib64,/usr/lib - 识别 ELF 格式文件(可执行文件、动态库)
-
安全检查
- 使用
checksec工具检查 ELF 文件 - 检查项包括:
- PIE (Position Independent Executable)
- NX (No-Execute)
- Stack Canary (Stack Protection)
- Fortify Source
- RELRO (Relocation Read-Only)
- BIND_NOW
- 涌出保护
- 使用
-
结果输出
- 支持 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 异常处理需求
-
软链接处理
- 避免重复扫描同一个文件(如
/bin→/usr/bin) - 使用
find -type f只处理真实文件 - 基于 inode 去重
- 避免重复扫描同一个文件(如
-
动态库处理
- 正确识别
.so文件 - 处理插件式动态库(
/usr/lib64下的插件)
- 正确识别
-
内核模块排除
- 排除
.ko内核模块文件 - 理由:checksec 的某些检查项(如 PIE)对内核模块不适用
- 排除
-
错误处理
- 网络下载失败重试
- 损坏的 RPM 包处理
- 解压失败处理
- checksec 超时处理
3. 数据输出需求
3.1 统计指标
- PIE 覆盖率(开启 PIE 的文件占比)
- NX 覆盖率
- Stack Canary 覆盖率
- 危急项统计(如 NX 为 Disabled 的文件)
3.2 数据存储
- 初期:CSV 格式
- 进阶:数据库支持(SQLite/MySQL)
- 可视化:Dashboard 展示
4. 技术约束
- 操作系统:Linux(支持 DNF/YUM 包管理器)
- 依赖工具:
dnf或yum(RPM 包查询)checksec(安全特性检查)GNU Parallel(并行处理)rpm2cpio(RPM 包解压)file(文件类型识别)
5. 扩展需求
5.1 增量扫描
- 记录已扫描的包
- 支持只扫描新增或更新的包
5.2 断点续传
- 扫描中断后可继续
- 避免重复扫描已完成的部分
5.3 分布式扫描(未来)
- 支持多机并行扫描
- 结果汇总
6. 交付物
- 扫描脚本(Shell/Python)
- 配置文件
- 使用文档
- 示例报告
7. 非功能性需求
- 可维护性:代码清晰,注释完整
- 可扩展性:易于添加新的检查项
- 可靠性:异常处理完善
- 性能:支持大规模扫描