安全工具执行服务

mcpwn是一个MCP服务器,允许大型语言模型在本地机器上执行安全工具,支持nmap、gobuster等多种工具,并提供Docker隔离以增强安全性。

  • by ParrotSec
  • Go
  • 本地部署
  • 12 星标
  • 更新于
在 GitHub 查看 ParrotSec/mcpwn

使用说明

mcpwn 是一个MCP服务器,允许大型语言模型(LLM)在本地计算机上执行安全工具。目前支持 7 开箱即用的工具: nmap, gobuster, ffuf, httpx, sqlmap, msfvenom,以及 msfconsole.

目录

特性

  • 模型上下文协议:完全符合模型上下文协议。它使用 modelcontextprotocol/go-sdk.
  • 动态刀具注册:定义工具(如 nmap, gobuster等)通过一个简单的 mcpwn.yaml 文件。
  • 灵活的论点:支持 extra_args 将任何有效的CLI标志传递给工具,提供完全的灵活性。
  • Docker集成:在隔离容器中运行工具,以实现安全性和轻松的依赖关系管理。
  • 跨平台:为Linux、macOS和Windows编译。自动发布是通过Goreleaser构建的,以及 .deb 基于Debian的系统支持打包。

项目结构

├── cmd
│   └── mcpwn                
│       └── main.go
├── debian
├── internal
│   ├── config                // YAML configuration loader
│   │   ├── config.go
│   │   └── config_test.go
│   ├── executor              
│   │   ├── run.go
│   │   └── run_test.go
│   └── server                // MCP protocol implementation and tool routing
│       ├── server.go
│       └── server_test.go
├── mcpwn.yaml                // Default MCP tools configuration out-of-the-box
└── go.mod & go.sum

安装

先决条件和信息

您可以使用 mcpwn 使用本地安装的工具或Docker(推荐)。

如果你决定不使用Docker,你仍然可以使用它,但你想使用的安全工具(例如。, nmap)必须安装在您的系统中 PATH.

默认情况下,工具在内部运行 Docker容器,这提供了一个强大的隔离层。

安全架构

mcpwn旨在防止未经授权访问您的主机:

  1. 直接执行:服务器使用Go的 exec.Command,它直接执行二进制文件,而不涉及系统shell(如 /bin/sh 或 cmd.exe).这意味着特殊字符作为文字参数传递,而不是被解释为命令分隔符。
  2. 强化Docker隔离:工具在具有以下功能的临时容器中运行:
    • --cap-drop=ALL:默认情况下,所有Linux功能都会被删除。
    • --cap-add=NET_RAW:只授予网络工具(如nmap原始数据包)所需的最低能力。
    • 未安装主机卷或套接字。
  3. 发射后不管:容器使用 --rm 旗帜。容器内的任何变化在完成后都会被永久销毁。
  4. 参数注入:虽然LLM可以传递标志(例如。, --os-shell),影响严格限于孤立的、无特权的容器。

从源代码构建

git clone https://gitlab.com/parrotsec/project/mcpwn.git
cd mcpwn
go build -o mcpwn cmd/mcpwn/main.go

此外, mcpwn 是跨平台的,因此您可以为GNU/Linux、macOS和Windows构建项目。

自动化构建和包装

我们可以使用GoReleaser自动构建和创建 .tar.gz 和 .deb 档案:

goreleaser build --snapshot --clean

对于基于Debian的系统,如ParrotOS,标准 debian/ 还提供了目录用于本机创建包:

dpkg-buildpackage -us -uc -b # or via sbuild

配置

默认情况下, mcpwn 查找名为的配置文件 mcpwn.yaml 与可执行文件位于同一目录中。对于系统范围的安装,它还会检查以下位置的配置文件 /etc/mcpwn/mcpwn.yaml.

您可以轻松扩展 mcpwn 通过向此文件添加新的工具定义。 Docker支持 也可用:如果您指定 image 对于工具来说, mcpwn 将在临时Docker容器中自动运行它,以提高安全性和隔离性。

示例 mcpwn.yaml

tools:
  - name: "nmap_scan"
    description: "Nmap is a free and open source utility for network discovery and security auditing."
    command: "nmap"
    image: "parrotsec/nmap"
    args:
      - name: "target"
        description: "Target IP/Domain"
        required: true
        positional: true
      - name: "aggressive"
        description: "Aggressive scan (-A)"
        flag: "-A"
        type: "boolean"
      - name: "extra_args"
        description: "Any additional nmap arguments"
        flag: ""

用法

手动运行

您可以直接运行服务器来测试它是否正确加载了您的配置:

./mcpwn

服务器通过以下方式进行通信 Stdio 您将在上看到日志消息 Stderr.

与Claude和Gemini集成(WIP)

克劳德代码

在终端中运行以下命令:

claude mcp add --transport stdio mcpwn -- /path/to/your/mcpwn

双子星命令行工具

使用 mcpwn 随着 双子星命令行工具,请按照以下步骤操作:

  1. 构建二进制文件:

    go build -o mcpwn cmd/mcpwn/main.go
    
  2. 注册服务器:运行以下命令进行添加 mcpwn 到您的Gemini CLI配置(使用您当前的绝对路径):

    gemini mcp add mcpwn $(pwd)/mcpwn
    
  3. 启动Gemini:

    gemini
    
  4. 使用:在双子座会议中,

  5. 您可以通过键入以下内容来验证连接 /mcp list。然后,您可以要求模型运行您的工具,例如:

    在快速模式下使用nmap_Scan扫描本地主机。 使用nmap_scan和'vuln'脚本搜索192.168.1.1上的漏洞。

注意:如果您修改 mcpwn.yaml,您必须重新启动Gemini CLI会话以刷新工具定义。

许可证

该项目根据GPL v3获得许可。

联系

如需更多信息和实施,请联系 danterolle@parrotsec.org 或 team@parrotsec.org.