canvascomputing/malwi

GitHub: canvascomputing/malwi

malwi 是一款运行时供应链安全工具,通过进程注入技术拦截并管控 Python、Node.js 和 Bash 中的恶意代码行为。

Stars: 0 | Forks: 0

## 👹 `malwi` - 检测恶意代码
malwi logo

Stop Supply-Chain Attacks in Node.js, Python, Bash

OpenClaw OpenClaw  ·  ComfyUI ComfyUI  ·  npm npm-install  ·  PyPI pip-install  ·  Bash bash-execution

*高级网络攻击威胁着关键基础设施、数字主权和社会自由。像 Shai-Hulud npm 攻击(2025)这样的活动展示了滥用开源软件信任是多么简单。* `malwi` 在运行时使用精选的供应链安全策略或自定义策略,阻断 Python、Node.js 和 Bash 中未经授权的网络调用和文件访问。 **兼容性**: `Python 3.10-3.14` · `Node.js 21-25` · `Bash 4.4-5.3` · `macOS arm64, arm64e` ([⚠️ SIP](#macos-system-integrity-protection-sip)) 和 `Linux arm64, x86_64`
malwi demo
## 安装 ``` pip install --user malwi ``` 或者从[最新发布版](https://github.com/canvascomputing/malwi/releases)下载预编译的二进制文件。 ## 快速开始 一个[策略](cli/src/policy/presets/)控制 `malwi` 允许、拒绝、警告或记录什么: ``` malwi x node -e "fetch('https://canvascomputing.org/api/data')" malwi x python -c "import os; os.getenv('MISTRAL_API_KEY')" malwi x bash -c 'cat ~/.ssh/id_rsa' ``` ## 策略 用 YAML 编写策略来控制进程内运行的内容。每个部分针对不同的攻击面——网络、命令、文件、环境变量或运行时函数。规则可以允许、拒绝、警告或提示审查。 ``` $ malwi x -p policy.yaml -- node app.js ``` ``` # policy.yaml — 锁定 Node.js Web 应用 version: 1 # Network — 仅允许您的 API 和 npm registry network: allow: ["api.canvascomputing.org/**", "registry.npmjs.org/**"] deny: ["169.254.169.254/**", "*/**"] protocols: [https] # Commands — 阻止 reverse shells,权限提升时提示 commands: allow: [node, git, npm] deny: - curl - wget - nc - ncat - ssh - crontab - base64 warn: [docker, pip] review: [sudo] # Files — 保护凭证 files: deny: - "~/.ssh/**" - "~/.aws/**" - "*.pem" - "*.key" # Environment variables — 阻止机密信息泄露 envvars: deny: ["*SECRET*", "*PASSWORD*", "AWS_*"] warn: ["*TOKEN*", "*API_KEY*"] # Node.js — 阻止 eval 和 shell-outs,记录 network calls nodejs: deny: [eval, child_process.exec, child_process.execSync] log: [fetch, http.request, https.request] # Python — 阻止 native library loading 和 os.system python: deny: [ctypes.CDLL, os.system, os.popen] warn: [subprocess.run, subprocess.Popen.__init__] # Native symbols — 阻止凭证拦截和 raw networking symbols: deny: [getpass, crypt, dlopen, syscall] ``` ## 自动策略 当 `malwi` 检测到已知命令时,它会自动应用定制的[策略](cli/src/policy/presets/)。策略文件在首次使用时写入 `~/.config/malwi/policies/` —— 编辑它以进行自定义。 #### OpenClaw [OpenClaw](https://docs.openclaw.ai/) ([策略](cli/src/policy/presets/openclaw.yaml)) OpenClaw 代理连接到许多外部 API。此策略保护代理自己的进程——受损的依赖项可以在任何外部保障措施检测到之前窃取 API 密钥、注入代码或打开反向 shell。出站流量仅限于已知的提供商;其他所有内容都被阻断。 ``` malwi x openclaw gateway malwi x openclaw doctor ``` #### ComfyUI [ComfyUI](https://docs.comfy.org/) ([策略](cli/src/policy/presets/comfyui.yaml)) 自定义节点可以运行任意 Python——恶意的节点可以直接加载原生库、将你的代码泄露到远程,或窃取存储的凭据。此策略将网络访问限制在模型托管和包注册表,并阻断绕过 Python 级别控制的逃逸途径。 ``` malwi x python main.py # inside a ComfyUI directory malwi x python3 -m comfy --port 8188 malwi x comfyui --listen ``` #### npm [npm-install](https://www.npmjs.com/) ([策略](cli/src/policy/presets/npm-install.yaml)) npm install 可以执行依赖树中任何包的任意脚本。单个恶意包可以 eval 代码、生成 shell,并泄露 SSH 密钥或 token。此策略将网络限制在 npm registry,并阻断安装脚本不应需要的所有内容。 ``` malwi x npm install express malwi x npm add lodash malwi x npm ci ``` #### PyPI [pip-install](https://pypi.org/) ([策略](cli/src/policy/presets/pip-install.yaml)) 安装包会以完全访问权限在你的机器上执行任意代码——恶意包可以在你导入它之前窃取凭据并将其发送到远程服务器。此策略将网络锁定到 PyPI 并阻断常见的泄露路径。 ``` malwi x pip install flask malwi x pip3 install requests malwi x python3 -m pip install six ``` #### Bash [bash-execution](https://www.gnu.org/software/bash/) ([策略](cli/src/policy/presets/bash-install.yaml)) 远程 shell 脚本可以在你阅读任何一行之前建立持久性、泄露数据或提升权限。此策略阻断危险命令,并提示审查任何需要 sudo 的内容。 ``` curl -fsSL canvascomputing.org/install-demo.sh | malwi x bash ``` ## 工作原理 一个代理库通过 `DYLD_INSERT_LIBRARIES` (macOS) 或 `LD_PRELOAD` (Linux) 注入到目标进程中。它 hook Node.js、Python、Bash 和原生函数调用,并通过 TCP 流式传输到 CLI。CLI 根据策略评估每个调用。网络允许列表会自动 hook HTTP 函数并强制执行 URL 匹配。追踪会传播到子进程。无需修改源代码。 ``` ┌─────────────────────────────────────┐ │ malwi CLI │ │ Policy Engine → allow/deny/warn │ └────┬────────────────────▲───────────┘ │ inject │ TCP (trace events) ▼ │ ┌────────────────────────────────────┐ │ Target Process │ │ Agent: Node.js · Python · Bash · │ │ Native symbol hooks │ └────────────────────────────────────┘ ``` | ⚠️ 局限性 | 缓解措施 | |:--|:--| | 内联 `SVC`/`SYSCALL` 绕过 libc hooks | `计划中` | | [SIP 保护](#macos-system-integrity-protection-sip)的子进程在 macOS 上未受追踪运行 | `计划中` | ## macOS 系统完整性保护 (SIP) macOS SIP 阻止 `DYLD_INSERT_LIBRARIES` 加载到特定路径下的二进制文件。 | SIP | 路径 | |--|-------| | ✅ `malwi` 在此工作 | `/usr/local`, `/opt`, `~` | | **⚠️ 受 SIP 保护** | `/System`, `/usr`, `/bin`, `/sbin`, `/var`, `/Applications` | ### Python 安装示例 将 Python 安装到 `/usr/local`: ``` V=3.13.2 # check https://www.python.org/downloads/source/ for latest curl -fsSO https://www.python.org/ftp/python/$V/Python-$V.tgz tar xf Python-$V.tgz && cd Python-$V ./configure --prefix=/usr/local && make && sudo make install ``` ``` malwi x /usr/local/bin/python3 ``` ### Node.js 安装示例 将 Node.js 安装到 `/usr/local`: ``` V=22.14.0 # check https://nodejs.org/en/download for latest LTS ARCH=$(uname -m) curl -fsSO https://nodejs.org/dist/v$V/node-v$V-darwin-$ARCH.tar.gz tar xf node-v$V-darwin-$ARCH.tar.gz sudo cp -r node-v$V-darwin-$ARCH/{bin,include,lib,share} /usr/local/ ``` ``` malwi x /usr/local/bin/node ``` ### Bash 安装示例 将 Bash 安装到 `/usr/local`: ``` V=5.2.37 # check https://ftp.gnu.org/gnu/bash/ for latest curl -fsSO https://ftp.gnu.org/gnu/bash/bash-$V.tar.gz tar xf bash-$V.tar.gz && cd bash-$V ./configure --prefix=/usr/local && make && sudo make install ``` ``` malwi x /usr/local/bin/bash ``` ## 安全 要报告漏洞,请发送电子邮件至 [security@canvascomputing.org](mailto:security@canvascomputing.org)。详情请见 [SECURITY.md](.github/SECURITY.md)。 每当 `Cargo.lock` 或 `package-lock.json` 更改时,完整的依赖项列表会在每次构建时自动重新生成。见 [`DEPENDENCIES.md`](DEPENDENCIES.md)。 ## 开发 见 [DEVELOPMENT.md](docs/DEVELOPMENT.md)。
标签:Bash安全, DevSecOps, EDR, HTTP工具, IPv6支持, IP 地址批量处理, JSONLines, Lerna, MITM代理, Node.js安全, SecOps, UML, 上游代理, 云安全架构, 动态防御, 可视化界面, 多语言支持, 威胁情报, 安全测试框架, 应用安全, 开发者工具, 文件访问控制, 文档安全, 沙箱, 漏洞缓解, 策略执行, 系统加固, 网络安全, 网络安全审计, 网络访问控制, 脆弱性评估, 逆向工具, 通知系统, 隐私保护, 零信任