SinghAman21/malware-analysis

GitHub: SinghAman21/malware-analysis

一个自托管的恶意软件分析沙箱平台,在隔离的 Docker 容器中对可疑文件进行静态和动态分析并生成结构化威胁报告。

Stars: 0 | Forks: 0

# 🐞 恶意软件分析沙箱 一个自托管的、小型的 [Cuckoo](https://cuckoosandbox.org/) / [Any.run](https://any.run/)-style 平台。上传一个可疑文件 → 它会在一个**一次性的、隔离的 Docker 容器**内引爆 → 系统会捕获它执行的所有操作(文件、进程、网络) → 你会获得一份 干净、结构化的威胁报告。 它被构建为一套可组合的“乐高积木”:**隔离 → 观察 → 报告**,并封装在 可扩展的 API 和精致的仪表盘中。**无需付费的 API 密钥** — 一切均 自托管运行(VirusTotal 情报丰富是可选的,且默认关闭)。 ## 它的功能 - **静态分析** — 哈希、libmagic 文件类型、熵/加壳检测、ASCII+UTF‑16 字符串提取、ELF/PE 头解析,以及使用可编辑规则的 **YARA** 扫描。 - **动态分析(引爆)** — 在锁定的容器内通过 `strace` 运行 ELF 二进制文件和脚本,重建**进程树**、**文件活动**、**网络连接**和**植入的文件**。可选的数据包捕获 (`.pcap`)。 - **评分与裁决** — 行为特征 + YARA 严重程度 → 0–100 的威胁评分以及 干净 / 可疑 / 恶意的裁决。 - **IOC** — 提取并聚合所有运行过程中的威胁指标 (IP、域名、URL、哈希)。 - **报告** — 实时报告 UI(进程树、时间线、IOC、产物)以及可下载的 原始产物(`strace.log`、`.pcap`、植入的文件)。 界面与 API 端点 **1:1** 映射 — 请参阅 [`docs/API.md`](docs/API.md)。 ## 技术栈 | 层级 | 选择 | |-------|--------| | API | **NestJS** (REST + OpenAPI/Swagger),Zod 验证 | | 队列 | 基于 **Redis** 的 **BullMQ** | | Worker | 编排 **Docker**、`strace`、`tcpdump`、`yara`、`file` 的 TypeScript pipeline | | 数据库 | **PostgreSQL** + **Prisma** | | 存储 | **MinIO** (兼容 S3,自托管) | | Web | **Next.js 14** (App Router) · React · Tailwind · shadcn 风格 UI · TanStack Query | | 隔离 | 一次性 **Docker** 容器 (`--network none`,降权,资源限制) | | Monorepo | **pnpm** 工作区 (`apps/*`,`packages/*`) | ## 架构 ``` ┌───────────┐ upload ┌──────────────┐ Browser ───▶│ Next.js │───────────────────▶│ NestJS API │ (:3000) │ (web) │◀── live report ────│ (:4000) │ └───────────┘ └──────┬───────┘ │ enqueue job (BullMQ) ┌──────────┐ ◀────────────┤ │ Redis │ │ store sample └────┬─────┘ ▼ │ pull job ┌────────────┐ ▼ │ MinIO/S3 │ ┌────────────┐ ◀──────┤ (samples, │ │ Worker │ fetch │ artifacts) │ │ (pipeline) │ └────────────┘ └─────┬──────┘ static ──────────────── │ ──────────────── dynamic hashes/entropy/strings │ docker run --network none --cap-drop ALL ELF·PE parse · YARA │ ┌───────────────────────────────┐ └─▶│ sandbox-guest (disposable) │ │ strace ⟶ sample ⟶ /results │ └───────────────────────────────┘ │ parse strace → events/proc tree/net ▼ ┌────────────┐ │ PostgreSQL │ results, signatures, IOCs, verdict └────────────┘ ``` 深入探讨:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。 ## 快速开始 ### 前置条件 - **Node ≥ 20**,**pnpm ≥ 9**,**Docker**(确保你的用户在 `docker` 组中) - Linux 主机(沙箱用于观察 Linux 样本)。建议预留约 4 GB 空闲内存。 ### 一键设置 ``` bash scripts/setup.sh ``` 这将复制 `.env`,安装依赖项,启动基础设施,构建共享 包,推送数据库 schema,植入内置的 YARA 规则,并构建沙箱客户机镜像。 ### 运行(黄金路径 — 友好的低内存模式) 基础设施运行在 Docker 中;三个 Node 应用运行在主机上: ``` pnpm dev # starts @sandbox/api, @sandbox/worker, @sandbox/web together ``` 打开 **http://localhost:3000**。API 文档位于 **http://localhost:4000/docs**。 然后上传 `scripts/samples/benign_test.sh` 即可查看内容完整的报告。 ### 手动步骤(等同于 setup.sh) ``` cp .env.example .env pnpm install docker compose up -d postgres redis minio createbuckets # infra only pnpm --filter @sandbox/shared build pnpm --filter @sandbox/database generate && pnpm --filter @sandbox/database build pnpm db:push # sync schema pnpm db:seed # load built-in YARA rules + settings pnpm sandbox:build # build sandbox-guest:latest pnpm dev ``` ### 在 Docker 中运行完整技术栈(进阶) ``` docker compose --profile apps up -d --build ``` ## 实用命令 ``` make help # list all targets pnpm dev # run api + worker + web pnpm db:studio # Prisma Studio pnpm sandbox:build # rebuild the guest image pnpm typecheck # typecheck every package docker compose logs -f worker # (if running apps in docker) ``` ## 配置 所有配置都位于 `.env` 中(从 `.env.example` 复制)。重点如下: | 变量 | 默认值 | 含义 | |-----|---------|---------| | `SANDBOX_NETWORK_MODE` | `none` | `none` (离线,最安全) · `internal` (隔离 + pcap) · `inetsim` | | `SANDBOX_TIMEOUT_SEC` | `60` | 最大引爆时间 | | `SANDBOX_MEMORY_MB` / `SANDBOX_CPUS` | `512` / `1` | 单次引爆的资源上限 | | `VIRUSTOTAL_ENABLED` | `false` | 可选的哈希情报丰富(需免费层级的密钥) | | `MAX_UPLOAD_MB` | `64` | 上传大小限制 | ## 故障排除 - **“Docker 或客户机镜像不可用 — 仅限静态分析”** → 运行 `pnpm sandbox:build`, 并确保你的用户无需 sudo 即可运行 `docker ps`(`sudo usermod -aG docker $USER`, 然后重新登录)。 - 在客户机内部出现 **`strace: ptrace: Operation not permitted`** → worker 已经添加了 `--cap-add=SYS_PTRACE`;请确保你的 Docker 没有通过自定义的 seccomp profile 阻止它。 - **在主机上找不到 YARA** → 没关系。Worker 会自动在客户机镜像内运行 YARA。 - **内存不足** → 仅在 Docker 中运行基础设施,并通过 `pnpm dev` 运行各个应用(黄金路径)。 - **Prisma 找不到 `DATABASE_URL`** → 数据库脚本会通过 `dotenv-cli` 加载根目录的 `.env`; 请确保在仓库根目录下存在 `.env` 文件。 ## 文档 - [`docs/SETUP.md`](docs/SETUP.md) — **逐步的设置与运行指南**(从这里开始) - [`docs/WHY.md`](docs/WHY.md) — 动机与目标 - [`docs/FEATURES.md`](docs/FEATURES.md) — 完整功能列表 - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — 各个组件是如何组合的 - [`docs/API.md`](docs/API.md) — API 端点 ↔ 界面对照 - [`docs/SECURITY.md`](docs/SECURITY.md) — 隔离模型与局限性 - [`docs/LEARNINGS.md`](docs/LEARNINGS.md) — 构建这个项目带给我们的启示 - [`docs/COMMON-QUESTIONS.md`](docs/COMMON-QUESTIONS.md) — 关于该项目的综合问答 ## 许可证 MIT — 仅用于教育和授权的防御用途。
标签:DAST, Docker, NestJS, 云安全监控, 安全沙箱, 安全防御评估, 恶意软件分析, 搜索引擎查询, 测试用例, 自动化攻击, 请求拦截, 静态分析