dobin/avred
GitHub: dobin/avred
avred 是一款防病毒特征码定位工具,帮助红队成员识别恶意文件中被防病毒引擎检测的具体部分并辅助精准混淆。
Stars: 540 | Forks: 59
# avred
AntiVirus REDucer(防病毒削减器),用于 AntiVirus REDteaming(防病毒红队测试)。
avred 可用于识别文件中的哪些部分会被防病毒软件识别,
并尝试显示有关每个匹配项的尽可能多的信息和上下文。
这包括:
* 匹配项的 Section 名称
* 匹配项的验证
* 将匹配项增强为反汇编代码或数据引用
它主要用于帮助红队成员更轻松地对工具进行混淆,
以对抗静态分析。支持所有防病毒软件(使用 AMSI)。
查看详情:[avred.r00ted.ch](https://avred.r00ted.ch)
幻灯片:[HITB Slides Cracking The Shield.pdf](https://github.com/dobin/avred/blob/main/doc/HITB%20Slides%20Cracking%20the%20Shield.pdf)
## 与 ThreatCheck 的对比
与 ThreatCheck 相比,avred 具有以下多项功能:
* 显示所有匹配项(不仅限于一个)
* 验证匹配项以确保其有效
* 显示有关匹配项的更多信息
* 显示匹配项的相关性,以便您可以针对最薄弱的环节进行处理
* 支持所有防病毒软件
## 背景
大多数防病毒引擎依赖字符串或其他字节序列来识别恶意软件。
本项目有助于自动恢复这些特征码(匹配项)。
与其他类似项目的不同之处在于:
* 了解内部文件结构。
* 能够提取 vbaProject.bin 并对其进行修改
* 了解 PE Section 并单独扫描每一个 Section
* 了解 .NET streams
* 支持任何防病毒软件(得益于通过 HTTP 的 AMSI 服务器)
* 显示有关每个匹配项的详细信息(反汇编等)
* 验证匹配项
## 支持的文件:
* PE (EXE) 文件,r2 反汇编
* PE .NET 文件,dncil 反汇编
* Word 文件,pcodedmp 反汇编
## 示例
```
$ ./avred.py --file app/upload/DripLoader.exe
[...]
DripLoader.exe size: 93184 ident: PE EXE 64
ScannerInfo: zero-sections,section-scan
Matches:
id:0 offset:12991 len:195
Section: .text
Hexdump:
00012991 48 81 C4 98 13 00 00 C3 CC CC CC CC CC CC CC C3 H...............
000129A1 4D 8B C2 49 C7 C2 01 00 00 00 4D 33 D2 49 C7 C2 M..I......M3.I..
000129B1 0A 00 00 00 4C 8B D1 33 C0 4D 2B C2 83 C0 18 4D ....L..3.M+....M
000129C1 33 C0 0F 05 C3 48 83 C1 0A 33 C0 4C 8B D1 83 C0 3....H...3.L....
000129D1 3A 49 83 EA 0A 48 83 E9 0A 0F 05 C3 49 83 C2 1C :I...H......I...
000129E1 33 C0 4C 8B D1 49 83 EA 01 83 C0 50 49 83 C2 01 3.L..I.....PI...
000129F1 0F 05 C3 4C 8B E1 4C 8B EA 4D 8B F0 4D 8B F9 4C ...L..L..M..M..L
00012A01 8B D1 48 33 C0 05 C1 00 00 00 0F 05 48 83 F8 00 ..H3........H...
00012A11 74 8D 49 8B CC 49 8B D5 4D 8B C6 4D 8B CF 4C 8B t.I..I..M..M..L.
00012A21 D1 48 33 C0 05 BD 00 00 00 0F 05 48 83 F8 00 0F .H3........H....
00012A31 84 6A FF FF FF 49 8B CC 49 8B D5 4D 8B C6 4D 8B .j...I..I..M..M.
00012A41 CF 4C 8B D1 48 33 C0 05 BC 00 00 00 0F 05 48 83 .L..H3........H.
00012A51 F8 00 0F ...
[...]
```
## 截图
文件信息:

文件详情:

文件匹配项:

## 升级
注意:数据存储在序列化的 `.outcome` 文件中。当我更改模型时,
会出现一些奇怪的现象。
通常这样做就可以解决:
```
$ rm app/upload/*.outcome; rm app/upload/*.log
$ for i in app/upload/*; do ./avred.py --file "$i"; done
```
启用 hashcache 后,这应该会很快。
## 安装
要求:python 3.8
安装 python 依赖项:
```
pip3 install --upgrade -r requirements.txt
```
如果出现 `ImportError: failed to find libmagic. Check your installation` 错误,请尝试:
```
pip3 install python-magic-bin==0.4.14
```
安装 radare2:
注意:确保安装了 dnfile >= 0.14.1
## 设置
首先,我们需要一个安装了防病毒软件的 Windows 实例。我们使用 [avred-server](https://github.com/dobin/avred-server) 作为 Windows 主机上与此防病毒软件交互的接口。
让我们在 Windows 虚拟机 `1.1.1.1:9001` 上安装并配置 avred-server。
请按照 [avred-server](https://github.com/dobin/avred-server) README 中的安装说明进行操作。
完成安装并正常运行后(`use curl 1.1.1.1:9001/test`),您可以设置 avred:
* 在 `config.yaml` 中配置您的服务器 IP(例如 `"amsi": "1.1.1.1:9001"`)
* 通过扫描以下文件进行测试:`./avred.py --file test.ps1 --server amsi`
它看起来应该是这样的:
```
$ r2 -v
radare2 5.7.2 0 @ linux-x86-64 git.
commit: 5.7.2 build: 2022-07-02__14:15:22
$ cat config.yaml
server:
amsi: "http://1.1.1.1:8001/"
$ curl http://1.1.1.1:8001/test
{"benign detected":false,"malicous detected":true,"msg":"working as intended"}
$ ./avred.py --file test.ps1 --server amsi
[INFO ][2023/03/09 18:33][avred.py: 71] main() :: Using file: test.ps1
[INFO ][2023/03/09 18:33][avred.py: 90] scanFile() :: Handle file: test.ps1
[INFO ][2023/03/09 18:33][avred.py:115] scanFile() :: Using parser for PLAIN
[ERROR ][2023/03/09 18:33][avred.py:172] scanFile() :: test.ps1 is not detected by amsi
[INFO ][2023/03/09 18:33][avred.py:180] scanFile() :: Found 0 matches
[INFO ][2023/03/09 18:33][avred.py:206] scanFile() :: Wrote results to test.ps1.outcome
```
## 如何使用
作为 Web 服务器运行:
```
$ python3 avredweb.py --listenip 127.0.0.1 --listenport 8080
```
如果您不希望每个用户都能看到所有上传的文件,
请在 `config.yaml` 中的 `password` 键设置密码,用户名使用 `admin`。
从命令行运行:
```
$ python3 avred.py --server amsi --file app/upload/evil.exe
```
## 文件和目录结构
我是 NO-DB 团队的。仅使用文件。
文件命名规则:
* `file.exe`:您想要扫描的文件
* `file.exe.log`:扫描的所有日志输出(使用 `--logtofile`)
* `file.exe.outcome`:包含所有进一步信息的序列化 Outcome 数据结构
* `file.exe.pdb`:如果您有调试符号
## Docker
构建:
```
$ podman build -t avred .
```
运行:
```
$ podman run -p 9001:5000 -e "server=http://1.1.1.1:8001" --name avred -d avred
```
运行并挂载上传目录:
## 参考
类似项目:
* https://github.com/matterpreter/DefenderCheck
* https://github.com/rasta-mouse/ThreatCheck
* https://github.com/RythmStick/AMSITrigger
基于:
* https://github.com/scrt/avdebugger
## 测试
覆盖率:
```
python3 -m coverage run -m unittest -> .coverage
python3 -m coverage report -> stdout
python3 -m coverage html -> ./htmlcov/index.html
```
标签:请求拦截, 逆向工具