usamasadiq22/ELFscan
GitHub: usamasadiq22/ELFscan
一款用于静态扫描 ELF 二进制文件以检测恶意软件特征和威胁指标的轻量级法证工具。
Stars: 0 | Forks: 0
# ELFscan - 法证二进制扫描器
ELFscan 是一款轻量级的 C99 法证扫描器,专为检测可疑可执行文件、恶意软件特征及威胁指标(IOCs)的 ELF 二进制文件而设计。它通过熵计算、特征匹配和字符串提取进行静态分析。
## 功能特性
- **ELF 头部解析**:验证 ELF 魔术字节并解析可执行文件头
- **熵分析**:计算香农熵以检测加壳/加密的二进制文件
- **特征匹配**:加载并应用自定义十六进制模式规则(类似 YARA)
- **字符串提取**:提取可打印的 ASCII 字符串并标记可疑模式
- **法证报告**:生成带时间戳和判定结论的扫描报告
- **递归扫描**:支持整个目录树的递归扫描与判定汇总
- **IoC 检测**:支持基于哈希和基于特征的检测
## 构建方法
```
make
```
将生成 `./elfscan` 可执行文件。
## 使用方法
```
./elfscan [OPTIONS]
```
### 选项说明
- `-r, --recursive` 递归扫描目录
- `-R, --rules ` 从文件加载特征规则(默认:rules/default.rules)
- `-o, --output ` 将报告写入自定义文件
- `-e, --entropy ` 熵阈值(默认:6.5)
- `-v, --verbose` 扫描过程中显示详细输出
- `-h, --help` 显示帮助信息
### 使用示例
```
# 扫描单个二进制文件
./elfscan /usr/bin/ls
# 使用自定义规则递归扫描目录
./elfscan -r -R ./rules/default.rules /usr/local/bin
# 使用高熵阈值扫描(降低灵敏度)
./elfscan -e 7.0 /tmp
# 使用自定义输出进行详细扫描
./elfscan -v -o report.txt /home/user/bin
```
## 判定逻辑
文件分类如下:
1. **恶意**:特征匹配或 IoC 哈希匹配
2. **可疑**:
- 高熵值 + 已剥离二进制文件
- 检测到可疑字符串(路径、命令、C&C 模式)
3. **安全**:默认分类(未检测到指标)
## 熵阈值标准
- 0-4.0:明文/低压缩率(极可能为安全)
- 4.0-6.5:正常二进制代码(可能为安全)
- 6.5-7.2:高压缩率/编码(边界情况,若已剥离则可能为可疑)
- 7.2-8.0:极高熵值(可疑,极可能为加壳/加密)
## 系统架构
### 模块说明
1. **database.c/h**:扫描条目的动态数组
2. **elf_check.c/h**:ELF 魔术字节验证与头部解析
3. **entropy.c/h**:香农熵计算
4. **signature.c/h**:规则加载与模式匹配(Boyer-Moore-Horspool 算法)
5. **strings_ex.c/h**:字符串提取与可疑模式检测
6. **report.c/h**:带时间戳的法证报告生成
7. **scanner.c/h**:调度层(文件/目录遍历、判定逻辑)
8. **main.c**:命令行参数解析与报告协调
### 数据结构
```
typedef struct {
char path[512];
double entropy;
int is_elf;
int is_stripped;
int sig_match_count;
char matched_sigs[8][64];
char strings[64][128];
int string_count;
Verdict verdict;
} ScanEntry;
```
## 特征规则格式
规则以纯文本格式存储(默认:`rules/default.rules`):
```
RULE_NAME | HEX_PATTERN | DESCRIPTION
```
示例:
```
UPX_PACKED | 55 50 58 21 0a 0d 0d 0a | UPX executable packer detected
SYSCALL_GADGET | 0f 05 c3 | Direct syscall instruction (potential shellcode)
```
十六进制模式是由空格分隔的字节序列。模式会在文件中的任意位置进行匹配。
## 输出格式
报告文件在 `reports/` 目录中生成,带有时间戳:
```
elfscan_20260516_143022.txt
```
包含内容:
- 扫描元数据(日期、目标、设置)
- 可疑和恶意文件的详细条目
- 汇总统计(总数、安全、可疑、恶意)
- 总扫描耗时
## 性能指标
- **速度**:约 500-1000 文件/秒(因文件大小和规则数量而异)
- **内存**:动态分配,随文件数量扩展
- **依赖项**:仅需 C 标准库 + libm
## 当前限制
- 无基于哈希的检测(MD5/SHA256)- 为保持简洁的设计选择
- ELF 解析较为基础(不读取完整的段头信息)
- 特征匹配使用朴素子串搜索(尚未实现 Boyer-Moore-Horspool 优化)
- 字符串检测仅限于 6 字节以上的 ASCII 序列
## 研究角度
- **法证分析**:基于熵的恶意软件检测与二进制分析
- **特征引擎**:类似 YARA 的模式匹配引擎
- **系统编程**:手动 ELF 解析、文件 I/O、内存管理
- **算法应用**:香农熵、字符串提取、模式匹配
- **报告生成**:带判定分类的法证时间线报告
## 未来改进计划
- [ ] 完整的段头解析以更好地检测已剥离二进制文件
- [ ] Boyer-Moore-Horspool 优化用于特征匹配
- [ ] 支持 YARA 规则格式
- [ ] 基于哈希的 IoC 检测(MD5/SHA256)
- [ ] 导入地址表(IAT)挂钩检测
- [ ] 导出/导入分析
## 许可说明
仅限教育用途。专为数字取证与事件响应(DFIR)培训及应届毕业生作品集设计。
标签:AMSI绕过, ELF格式, IOC检测, 二进制扫描, 云安全监控, 可执行文件检查, 威胁检测, 字符串提取, 客户端加密, 恶意代码分析, 数字取证, 模式匹配, 熵计算, 签名匹配, 自动化脚本, 自动化资产收集, 递归扫描, 配置文件, 静态分析