72f2e1a897
Signed-off-by: Fanjun Kong <kongfanjun@iscas.ac.cn>
121 lines
3.2 KiB
Markdown
121 lines
3.2 KiB
Markdown
# 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. **性能**:支持大规模扫描
|