Saran-K-07/DPI-MLEF
GitHub: Saran-K-07/DPI-MLEF
该框架在 Docker 沙箱中自动执行多语言 exploit 代码,通过 strace 捕获并过滤系统调用,为安全研究和机器学习模型提供结构化的动态行为追踪数据。
Stars: 0 | Forks: 0
# 动态 Payload 插桩与多语言 Exploit 框架
[](https://opensource.org/licenses/MIT)
[](https://www.gnu.org/software/bash/)
[](https://www.docker.com/)
[](https://python.org)
[](https://www.java.com)
[](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
[](https://golang.org)
**这是一个研究级的自动化框架,旨在通过 Docker 沙箱化的 strace 插桩,对多语言 exploit 技术进行动态分析。**
[概述](#overview) · [功能](#features) · [项目结构](#project-structure) · [快速开始](#getting-started) · [使用方法](#usage) · [Exploit 目录](#exploit-catalogue) · [研究背景](#research-context) · [贡献](#contributing) · [许可证](#license)
## 概述
**DPI-MLEF** 是一个专为**网络安全研究**设计的自动化动态分析框架。它在隔离的 Docker 容器中执行多种编程语言编写的 exploit 代码,通过 `strace` 捕获内核级的系统调用追踪,并过滤出与安全相关的信号——为下游的机器学习模型、入侵检测系统 (IDS) 和深度包检测 (DPI) 研究提供结构化的原始数据。
该工具目前支持使用 **Python、Java、JavaScript 和 Go** 编写的 exploit 技术,涵盖了广泛的混淆和规避策略,所有这些都由一个单一的 shell 脚本运行器驱动。
## 功能
- **多语言支持** — 运行使用 Python、Java、JavaScript、Go、Bash、Ruby、PHP、Rust 和 C/C++ 编写的 exploit。
- **全自动 Docker 沙箱化** — 动态生成适合相应语言的 Dockerfile,构建镜像,并在干净、隔离的环境中运行 exploit —— 无需为每个 exploit 进行手动设置。
- **基于 strace 的系统调用捕获** — 通过 `strace -ff` 在操作系统级别对 exploit 进行插桩,捕获所有子进程的细粒度系统调用活动。
- **针对特定 Exploit 的 Syscall 过滤** — 自动提取安全敏感的 syscall(`execve`、`ptrace`、`setuid`、`socket`、`connect`、`openat` 等),并将它们写入专用的 `exploit_syscalls.log` 中,以供下游的 ML pipeline 使用。
- **可扩展的目录** — 只需将文件放入相应的语言文件夹即可添加新的 exploit 技术 —— 无需更改运行器。
- **可用于研究的输出** — 每次运行都会生成 `trace.log`(完整追踪)和 `exploit_syscalls.log`(已过滤),兼容任何 ML 特征提取 pipeline。
## 项目结构
```
DPI-MLEF/
├── run.sh # Main orchestration script
├── ascii.art # ASCII art banner
├── .gitignore
│
├── python/ # Python exploit techniques
│ ├── ast bypass/
│ ├── base64/
│ ├── builtins/
│ ├── bytes/
│ ├── code/
│ ├── decorators/
│ ├── getattr restricted/
│ ├── hex string/
│ ├── package_alteration/
│ └── pickle/
│
├── java/ # Java exploit techniques
│ ├── byte/
│ ├── methodHandles/
│ ├── reflection/
│ └── serialization/
│
├── js/ # JavaScript exploit techniques
│ ├── function/
│ ├── getter/
│ ├── microtask/
│ ├── monkey/
│ ├── prototype pollution/
│ ├── proxy/
│ ├── setInterval/
│ ├── setTimeout/
│ └── setter/
│
└── go/ # Go exploit techniques
├── CGO/
├── goroutine/
├── plugin/
├── reflection/
├── tmpl/
├── unmarshalJSON/
└── wasm/
```
每个 exploit 文件夹包含:
- `exploit.
` — exploit 源文件
- `dockerfile` — 在运行时自动生成
- `trace.log` — 完整的 strace 输出
- `exploit_syscalls.log` — 过滤出的可疑 syscall
## 快速开始
### 前置条件
| 要求 | 备注 |
|---|---|
| Linux(推荐 Ubuntu) | 或任何基于 Ubuntu 的发行版;使用虚拟机也可 |
| [Docker](https://docs.docker.com/engine/install/) | 必须已安装并正在运行 |
| `bash` | v4.0+ |
| `strace` | 自动在 Docker 内部安装 —— 宿主机上不需要 |
### 安装
将仓库克隆到您的机器或虚拟机:
```
git clone https://github.com/Saran-K-07/DPI-MLEF.git
cd DPI-MLEF
```
赋予运行器可执行权限:
```
chmod +x run.sh
```
这样就可以了。宿主机上不需要任何额外的依赖项 —— Docker 会处理其他一切。
## 使用方法
### 基本语法
```
bash ./run.sh <.extension>
```
| 参数 | 描述 | 示例 |
|---|---|---|
| `` | 包含 exploit 文件的文件夹路径 | `./python/bytes` |
| `<.extension>` | exploit 的文件扩展名 | `.py`, `.js`, `.java`, `.go` |
### 示例
**运行一个 Python exploit:**
```
bash ./run.sh ./python/bytes .py
```
**运行一个 JavaScript exploit:**
```
bash ./run.sh ./js/proxy .js
```
**运行一个 Java exploit:**
```
bash ./run.sh ./java/reflection .java
```
**运行一个 Go exploit:**
```
bash ./run.sh ./go/goroutine .go
```
### 输出文件
每次运行后,会将两个文件写入 exploit 文件夹:
| 文件 | 描述 |
|---|---|
| `trace.log` | 完整的 `strace` 输出 —— exploit 及其子进程发起的所有 syscall |
| `exploit_syscalls.log` | `trace.log` 的过滤子集,仅包含与安全相关的 syscall |
过滤后的 syscall 包括对以下内容的调用:`execve`、`ptrace`、`setuid`、`setgid`、`capset`、`chmod`、`chown`、`mount`、`clone`、`unshare`、`socket`、`connect`、`accept`、`sendto`、`recvfrom`、`open`、`openat`。
### 工作原理
```
run.sh
│
├─ 1. Detects exploit file by extension
├─ 2. Selects Docker base image for that language
├─ 3. Generates Dockerfile (strace + language runtime)
├─ 4. Builds Docker image (--no-cache)
├─ 5. Runs container with the exploit under strace -ff
├─ 6. Copies /tmp/trace.log from the container
├─ 7. Filters for exploit-relevant syscalls
└─ 8. Writes exploit_syscalls.log + cleans up container
```
## Exploit 目录
所有 exploit 都针对一个标准的概念验证操作:`touch /tmp/pwned`。这是刻意为之的良性操作 —— 它展示了代码执行能力而不会造成损害,并产生可检测的文件系统 syscall 模式。
### Python
| 技术 | 描述 |
|---|---|
| `ast bypass` | 通过代码对象操作绕过 AST 级别的静态分析 |
| `base64` | 使用 Base64 编码和子类遍历来混淆命令 |
| `builtins` | 滥用 Python 的 `__subclasses__()` 链来访问 `os.system` |
| `bytes` | 将 payload 编码为字节数组并传递给 `eval()` |
| `code` | 通过 `types.CodeType` 和 `exec()` 注入原始 CPython 字节码 |
| `decorators` | 利用 `__init_subclass__` 钩子在类定义时触发代码 |
| `getattr restricted` | 使用 `getattr` 链访问受限的内建函数 |
| `hex string` | 将命令编码为十六进制字符串以规避基于字符串的检测 |
| `package_alteration` | 通过 `sys.modules` 操作覆盖标准库模块 |
| `pickle` | 通过 pickle 对象中的 `__reduce__` 实现任意代码执行 |
### Java
| 技术 | 描述 |
|---|---|
| `byte` | 在运行时通过 `MethodHandles.defineHiddenClass` 加载 Base64 编码的类 |
| `methodHandles` | 使用 `MethodHandles` 查找反序列化恶意对象 |
| `reflection` | 通过带有 `ObjectInputStream` 的 Java 反序列化触发代码执行 |
| `serialization` | 通过 `readObject()` 实现经典的 `Serializable` gadget chain |
### JavaScript (Node.js)
| 技术 | 描述 |
|---|---|
| `function` | 滥用 `[].filter.constructor` 来访问 `Function` 构造函数 |
| `getter` | 劫持属性 getter,以便在访问属性时执行代码 |
| `microtask` | 通过 Promise 微任务队列偷运执行 |
| `monkey` | 使用恶意代码 Monkey-patch 受信任的内建对象 (`JSON.parse`) |
| `prototype pollution` | 污染 `Object.prototype` 以改变应用程序行为 |
| `proxy` | 通过 ES6 `Proxy` 陷阱拦截方法调用 |
| `setInterval` | 使用基于定时器的调度来延迟和隐藏执行 |
| `setTimeout` | 在超时后异步执行 payload |
| `setter` | 劫持属性 setter,以便在分配属性时执行代码 |
### Go
| 技术 | 描述 |
|---|---|
| `CGO` | 通过 CGo 的外部函数接口直接调用 C 的 `system()` |
| `goroutine` | 使用 goroutine + channel 分发任意 shell 命令 |
| `plugin` | 通过 Go 的 `plugin` 包加载恶意共享对象 (`.so`) |
| `reflection` | 使用 `reflect.Value.MethodByName` 按名称调用任意方法 |
| `tmpl` | 通过自定义的 `FuncMap` 将 `os/exec` 注入到 Go 的 `html/template` 中 |
| `unmarshalJSON` | 在自定义的 `UnmarshalJSON` 内部嵌入命令执行 gadget |
| `wasm` | 通过 wazero 将宿主 `exec` 函数导出到 WebAssembly 模块 |
## 支持的语言
运行器开箱即用地支持以下文件扩展名:
| 扩展名 | 运行时 | 基础镜像 |
|---|---|---|
| `.py` | Python 3.12 | `python:3.12-slim` |
| `.js` | Node.js 22 | `node:22-bookworm-slim` |
| `.sh` | Bash | `debian:bookworm-slim` |
| `.rb` | Ruby 3.3 | `ruby:3.3-slim` |
| `.php` | PHP 8.3 | `php:8.3-cli` |
| `.go` | Go 1.26 | `golang:1.26.3-bookworm` |
| `.rs` | Rust 1 | `rust:1-bookworm` |
| `.java` | Java 26 (Temurin JDK) | `eclipse-temurin:26-jdk` |
| `.c` | GCC 14 | `gcc:14` |
| `.cpp` | GCC 10 | `gcc:10.3` |
## 添加新的 Exploit
1. 在相关的语言目录下创建一个新文件夹,例如 `python/my_technique/`
2. 添加您的 exploit 文件,例如 `exploit.py`
3. 使用 `bash ./run.sh ./python/my_technique .py` 运行它
不需要修改 `run.sh`。
对于已在[支持的语言](#supported-languages)中列出的语言,运行器会自动选取正确的镜像。
## 研究背景
该框架是在印度金奈的 **HPRCSE 实验室**,[IIITD&M Kancheepuram](https://www.iiitdm.ac.in/) 进行研究实习期间开发的。
| 领域 | 详情 |
|---|---|
| **机构** | IIITD&M Kancheepuram, Chennai |
| **实验室** | HPRCSE 实验室 |
| **领域** | 网络安全 — 动态分析 |
| **持续时间** | 2026 年 5 月 15 日 – 2026 年 5 月 29 日 |
| **指导老师** | [Mr. Mohit Bhasme](https://www.linkedin.com/in/mohit-bhasme-8263891b1/) |
| **负责人** | [Mr. Noor Mahammad Sk](https://www.linkedin.com/in/noor-mahammad-sk-494a9211/) |
主要研究目标是(通过 strace)从多种编程语言的各种 exploit 技术中生成带标签的动态行为追踪,以作为基于机器学习的 exploit 分类和异常检测系统的训练数据。
## 免责声明
## 许可证
该项目基于 **MIT 许可证**授权。
```
MIT License
Copyright (c) 2026 Saran K
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
完整文本请参见 [LICENSE](LICENSE)。
## 作者
**Saran K** · [sarankanakavel.me](https://sarankanakavel.me)
为 IIITD&M Kancheepuram HPRCSE 实验室的网络安全研究而构建
标签:Bash, Docker, JS文件枚举, 域名枚举, 安全防御评估, 应用安全, 数据可视化, 日志审计, 请求拦截, 逆向工具