安装 - 使用 - 动态分析 - YARA 规则 - CI/CD
文档: 英文 | Tiếng Việt
用于检测恶意代码、可疑二进制文件和隐私泄露的静态和动态分析工具。分析源代码、编译后的可执行文件(.exe、.dll、.elf)、macOS 捆绑包(.app、.dmg、.pkg)、移动应用(.apk、.ipa)和应用包,使用 YARA 规则、Docker 行为沙箱、MobSF 移动分析、载荷去混淆以及多格式报告(JSON、HTML、SARIF)。
pip install malware-check
pipx install malware-check
git clone https://github.com/momenbasel/malware-check.git
cd malware-check
pip install -e ".[dev]"
此方式安装核心 CLI。通过 pefile/lief 的二进制分析、通过 magika 的 AI 文件检测以及通过 yara-python 的 YARA 扫描为可选附加功能。
# 核心 + 二进制分析 + AI 文件检测 + YARA
pip install malware-check[full]
# 或仅安装所需部分
pip install malware-check[binary]
pip install malware-check[detect]
pip install malware-check[yara]
# 或手动安装附加功能
pip install pefile lief magika yara-python
pip install malware-check[detect]
安装后,malware-check 使用 Magika 改进跨平台文件识别,丰富 file_type 元数据,并根据内容而非文件名将无扩展名或伪装文件路由到正确的分析器。
# 需要 Docker – https://docs.docker.com/get-docker/
# 构建沙箱镜像(一次性设置)
malware-check build-sandbox
malware-check info
info 命令将显示 Magika 驱动的文件检测是否可用。
安装为 Claude Code 技能,使 Claude 能够为您分析文件:
# 从 GitHub 安装技能
npx skills install momenbasel/malware-check --skill malware-check
# 或手动操作:将 skill/SKILL.md 复制到您的技能目录
cp -r skill/ ~/.claude/skills/malware-check/
然后在 Claude Code 中说出:“扫描此文件是否存在恶意软件”或“此二进制文件是否安全?”,Claude 将自动使用 malware-check。
您还需要安装 CLI 工具:
pip install malware-check pefile lief yara-python
安装该工具并添加到您的 Codex 智能体指令中:
# 1. 安装 CLI
pip install malware-check pefile lief yara-python
# 2. 添加到您的 Codex 指令(codex.md 或系统提示)
echo '使用 `malware-check scan <路径> --verbose` 分析文件是否存在恶意软件。' >> AGENTS.md
# 3. 或安装为 Codex 技能
cp -r skill/ .codex/skills/malware-check/
对于任何支持工具使用或自定义指令的 AI 编码智能体:
# 1. 安装
pip install malware-check
# 2. 添加到智能体指令:
# “当要求检查代码/二进制文件是否存在恶意软件时,使用:malware-check scan <目标> --verbose”
# “对于报告:malware-check scan <目标> --format html -o report.html”
# “对于 CI/CD:malware-check scan <目标> --format sarif -o report.sarif --exit-code”
malware-check scan suspicious_file.py
# 安装 malware-check[detect] 时效果最佳
malware-check scan suspicious_payload --verbose
malware-check scan /path/to/project --verbose
# 首先构建沙箱(一次性的)
malware-check build-sandbox
# 执行行为分析扫描
malware-check scan malware.exe --dynamic
malware-check scan /Applications/SuspiciousApp.app --dynamic --verbose
# JSON 报告
malware-check scan target/ --format json -o report.json
# HTML 仪表盘
malware-check scan target/ --format html -o report.html
# SARIF 用于 CI/CD
malware-check scan target/ --format sarif -o results.sarif
# 发现问题时退出码非零(用于 CI 门禁)
malware-check scan . --format sarif -o results.sarif --exit-code
malware-check info
name: 安全扫描
on: [push, pull_request]
jobs:
malware-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 设置 Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: 安装 malware-check
run: pip install malware-check
- name: 运行扫描
run: malware-check scan . --format sarif -o results.sarif --exit-code
- name: 上传 SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
malware-check/
├── src/malware_check/
│ ├── cli.py # Click CLI 入口点
│ ├── scanner.py # 编排器 + 基于 Magika 的可选文件检测
│ ├── models.py # Finding, FileAnalysis, ScanResult 数据模型
│ ├── analyzers/
│ │ ├── code.py # 源代码模式匹配(40+ 条规则)
│ │ ├── binary.py # PE/Mach-O/ELF 分析
│ │ ├── privacy.py # PII、跟踪、权限
│ │ ├── yara_engine.py # YARA 规则编译和扫描
│ │ └── dynamic.py # Docker 沙箱行为分析
│ └── reporters/
│ ├── console_reporter.py # Rich 终端输出
│ ├── json_reporter.py # JSON 导出
│ ├── html_reporter.py # HTML 仪表盘(Jinja2)
│ └── sarif_reporter.py # SARIF 2.1.0 用于 CI/CD
├── rules/yara/ # 内置 YARA 规则
├── tests/ # pytest 测试套件
└── pyproject.toml # 项目元数据
将自定义规则添加到任意目录,并通过 --yara-rules 传递:
malware-check scan target/ --yara-rules /path/to/my/rules/
规则支持用于严重性、类别、置信度、CWE 和 MITRE ATT&CK 映射的元数据字段:
rule My_Custom_Rule {
meta:
description = "检测自定义恶意软件模式"
severity = "critical"
category = "backdoor"
confidence = "0.90"
mitre = "T1059"
cwe = "CWE-94"
recommendation = "移除恶意代码"
strings:
$pattern = "suspicious_string"
condition:
$pattern
}
Docker 沙箱提供行为分析并完全隔离:
监控的行为:
# 克隆并安装开发依赖
git clone https://github.com/momenbasel/malware-check.git
cd malware-check
pip install -e ".[dev]"
# 可选:在开发时包含 Magika、YARA 和二进制扩展功能
pip install -e ".[dev,full]"
# 运行测试
pytest
# 代码检查
ruff check src/ tests/
MIT 许可证 – 详见 LICENSE 文件。
| 类别 | 检测示例 |
|---|
| 反向 Shell | Python socket+subprocess,bash /dev/tcp,netcat,PowerShell TCPClient,socat |
| 后门 | Web shell(PHP/JSP/ASP.NET),命令注入(Python/JS/Java/Ruby/Go/C),绑定 shell,隐藏路由,远程代码加载,创建用户,SSTI,不安全的反序列化 |
| 混淆 | Base64+eval 链,字符代码构造,十六进制载荷,动态导入 |
| 加密货币矿工 | Stratum 池连接,挖矿 API,钱包地址(BTC/ETH/XMR) |
| 勒索软件 | 文件加密遍历,勒索信息,加密+重命名模式 |
| 凭证窃取 | 硬编码密钥,剪贴板窃取,环境变量收获,浏览器凭证文件 |
| 供应链 | 可疑的 npm/pip 安装钩子,依赖混淆,自定义注册表 |
| 持久化 | 创建 cron/schtasks,注册表 Run 键,LaunchAgent/Daemon,SUID 操作 |
| 权限提升 | SUID 位操作,setuid(0),chown root |
| 反分析 | 调试器检测,VM 检测,TLS 回调,ptrace 使用 |
| 键盘记录器 | GetAsyncKeyState,SetWindowsHookEx,pynput,CGEventTapCreate |
| 隐私 | 跟踪 SDK(40+),PII 字段(SSN、信用卡、生物特征、健康信息),侵入性权限,设备指纹 |
| 二进制指标 | 加壳二进制文件(UPX、高熵),RWX 段,可疑导入,未签名/篡改代码 |
| 保护措施 | 实现方式 |
|---|
| 网络隔离 | --network none(默认) |
| 内存限制 | 512MB |
| CPU 限制 | 1 核 |
| 进程限制 | 100 个 PID |
| 只读文件系统 | --read-only,为 /tmp 和 /evidence 配置 tmpfs |
| 能力限制 | 全部删除(--cap-drop=ALL) |
| 权限提升 | 阻止(--security-opt=no-new-privileges) |
| 超时 | 可配置(默认 30 秒) |
| 技术 | ID | 检测 |
|---|
| 命令和脚本解释器 | T1059 | 反向 shell、eval/exec 模式 |
| 服务器软件组件:Web Shell | T1505.003 | PHP/JSP/ASP Web shell |
| 混淆文件或信息 | T1027 | Base64、字符代码、十六进制编码 |
| 资源劫持 | T1496 | 加密货币挖矿池和工具 |
| 数据加密以造成影响 | T1486 | 勒索软件文件加密 |
| 输入捕获:键盘记录 | T1056.001 | 键盘钩子和记录器 |
| 计划任务/作业 | T1053 | Cron、schtasks、LaunchAgent |
| 启动或登录自动启动 | T1547 | 注册表 Run 键 |
| 进程注入 | T1055 | VirtualAllocEx + WriteProcessMemory |
| 从密码存储中获取凭据 | T1555 | 浏览器凭证文件访问 |
| 滥用权限提升控制 | T1548 | SUID 位操作 |
| 调试器规避 | T1622 | 反调试 API 调用 |
| 供应链攻击 | T1195 | 恶意安装钩子 |