Sravya0605/CodeAudit
GitHub: Sravya0605/CodeAudit
CodeAudit 是一个用 Go 编写的单一二进制恶意软件静态与行为分析框架,将多种常见分析工具的功能整合到统一流水线中并自动生成综合报告。
Stars: 1 | Forks: 0
# 代码审计
一个单一的 Go 二进制程序,可对文件运行一系列静态(以及可选的动态)分析检查,并生成一份综合报告——而不是分别运行 `file`、`strings`、`exiftool`、`olevba`、`pefile`、`strace` 和 YARA 扫描,然后手动拼凑输出结果。
## 功能说明
| 模块 | 类似工具 | 报告内容 |
|---|---|---|
| 文件类型 | `file` | 通过 magic numbers、MIME 嗅探和启发式分析检测出的类型 |
| 字符串 | `strings` | 可打印的 ASCII + UTF-16LE 字符串,并标记出已知的可疑关键词 |
| PE 分析 | `pefile` | 机器类型、节、节熵、导入的 DLL |
| ELF 分析 | `readelf`/`pefile`(ELF 部分) | 类、机器、类型、链接的库 |
| 元数据 | `exiftool` | 图像尺寸、PDF `/Info` 字典、OOXML `docProps/core.xml` |
| 宏 | `olevba` | 检测 OOXML 和传统 OLE 文档中的 VBA 宏,标记自动执行入口点 |
| Packer 启发式分析 | `DIE` (Detect It Easy) | 已知的 Packer 特征 + 节熵 + 导入表大小 |
| YARA-lite | `yara` | 使用纯子字符串匹配的一小套内置规则(见下方的注意事项) |
| VirusTotal | `vt-cli` | 仅进行哈希查询(绝不上传文件),可选择开启,需要你自己的 API key |
| 行为 | `strace` | **可选择开启。** 实际运行文件并将 syscall 分类为进程 / 文件 / 网络活动 |
每次运行都会生成:
- 一份 JSON 报告(默认为 `.codeaudit.json`)
- 一份在 stdout 上输出的人类可读文本报告(除非使用了 `-quiet`)
- 一个简单透明的加法式 **判定评分**(低/中/高),完全仅基于上述收集到的信号构建——这是一种分类辅助工具,而不是恶意软件/良性文件的分类器。
## 构建
```
go build -o codeaudit .
# 或:
make build
```
## 立即试用(无需真实样本)
```
make samples # generates ./testdata with synthetic, harmless test files
./codeaudit -r testdata/
```
这将创建一个良性文本文件和脚本、一个可疑的脚本、一个微小的 PNG、一个真实的(无害的)ELF 二进制文件,以及一个合成的启用宏的 docx,这样每个模块都有东西可查,而你无需去寻找真实的恶意软件。请参阅 `scripts/generate_test_samples.sh`。
## 用法
```
./codeaudit suspicious_file.exe
./codeaudit -json out.json -quiet suspicious.docx
./codeaudit -rules ./my-yara-lite-rules/ suspicious.bin
./codeaudit -vt -vt-key $VT_API_KEY suspicious.bin
# 扫描目录中的每个文件并打印按风险排序的摘要表
./codeaudit -r -summary ./some-directory/
```
当扫描多个文件时,会在最后自动打印一张按判定评分排序的汇总表,因此对装满样本的文件夹进行分类无需打开每一个单独的 JSON 报告。
### 行为分析(可选择开启,具有危险性)
```
./codeaudit -execute -timeout 10s ./suspicious_script.sh
```
这会 **实际执行目标文件**,并通过 `strace` 观察其 syscall(必须已安装并位于 `PATH` 中)。此工具不会以任何方式对进程进行沙箱处理或容器隔离——它只负责观察。
**仅在一次性、隔离的 VM 或 container 内运行 `-execute`**
(一个你愿意随时恢复的快照),切勿在你的主力机器上运行。
每次使用此标志时都会打印一条警告,并且默认情况下它是关闭的。
## 自定义 YARA-lite 规则
不支持真正的 YARA 语法(regex、hex 通配符、PE 模块等)——这是一个刻意简化的纯子字符串匹配器,因此该工具的构建依赖为零。规则文件格式:
```
rule: My_Rule_Name
condition: any
strings:
- "first string to match"
- "second string to match"
rule: Another_Rule_In_The_Same_File
condition: all
strings:
- "must have this"
- "and also this"
```
单个文件可以连续定义多条规则。将 `-rules` 指向包含这些文件的目录——有关可运行的示例,请参阅 `examples/rules/example.rule`。如果需要进行真正的检测工作,请改为将此项目与 [go-yara](https://github.com/hillu/go-yara) 结合使用。
## 测试和 CI
```
go test ./...
# 或:
make test
```
测试套件涵盖了文件类型检测、字符串提取(包括可疑关键词过滤器)、熵、Packer 启发式分析、宏检测(OOXML 和传统 OLE)、YARA-lite 规则引擎以及判定评分。GitHub Actions 工作流(`.github/workflows/ci.yml`)会在每次 push 和 pull request 时运行 `gofmt -l`、`go vet`、`go build` 和 `go test`。
## 许可证
MIT -- 详见 `LICENSE`。
## 已知限制
- 宏提取是从 `vbaProject.bin`/OLE 流中读取原始字节,而不是完全解压 VBA 源代码(这才是 `olevba` 实际所做的)。它是一个快速分类信号,而不是完整的宏转储。
- PDF 元数据提取可处理常见的未压缩 `/Info` 字典情况,但不支持加密或完全由对象流压缩的 PDF。
- 判定评分被刻意设计得简单透明,以便你可以确切地看到文件为何会得到相应的评分——它不是机器学习分类器,并且像任何启发式工具一样会产生误报/漏报。
标签:DAST, DNS 反向解析, EVTX分析, Go, Ruby工具, 云安全监控, 恶意软件分析, 搜索语句(dork), 无线安全, 日志审计, 网络信息收集, 静态分析