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

121 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. **依赖工具**
- `dnf``yum`RPM 包查询)
- `checksec`(安全特性检查)
- `GNU Parallel`(并行处理)
- `rpm2cpio`RPM 包解压)
- `file`(文件类型识别)
## 5. 扩展需求
### 5.1 增量扫描
- 记录已扫描的包
- 支持只扫描新增或更新的包
### 5.2 断点续传
- 扫描中断后可继续
- 避免重复扫描已完成的部分
### 5.3 分布式扫描(未来)
- 支持多机并行扫描
- 结果汇总
## 6. 交付物
1. 扫描脚本(Shell/Python
2. 配置文件
3. 使用文档
4. 示例报告
## 7. 非功能性需求
1. **可维护性**:代码清晰,注释完整
2. **可扩展性**:易于添加新的检查项
3. **可靠性**:异常处理完善
4. **性能**:支持大规模扫描