使用说明
安全工具 MCP 服务器
一个模型上下文协议(MCP)服务器,通过运行Kali Linux的Docker容器提供对安全测试工具的受控访问。此服务器旨在 教育目的 和 仅授权进行渗透测试。
⚠️ 法律与伦理警告
重要提示: 这个工具旨在用于:
- 测试您自己的系统
- 经明确书面授权的渗透测试
- 在受控环境中的教育和研究用途
切勿在以下物品上使用这些工具:
- 你未拥有或未获得测试权限的系统
- 未经适当授权的生产系统
- 公共网络或第三方服务
未经授权的安全测试是 非法的 并可能导致严重的法律后果。
特点/特性
综合安全工具
- Nmap(网络映射和发现工具) - 网络发现和安全审计
- Nikto(尼科托) - 网络服务器漏洞扫描器
- SQLMap(注:SQLMap是一个用于自动检测和利用SQL注入漏洞的工具,但在此处仅作为名称翻译,不涉及具体功能描述) - SQL注入检测与利用
- WPScan - WordPress漏洞扫描器
- “Dirb”可以翻译为“迪尔布”(根据音译,具体翻译可能因语境或文化背景而异)。不过,需要注意的是,“Dirb”这个词在中文中并没有直接对应的含义,它可能是一个特定领域或文化中的专有名词,或者是某个特定概念的音译。在没有具体上下文的情况下,只能提供音译作为翻译。 - 网络内容发现工具
- Searchsploit(搜索漏洞利用工具) - 利用数据库搜索
安全特性
- 网络限制仅允许扫描指定的网络范围
- **输入消毒(或输入净化)**防止命令注入
- 非root执行以最小权限运行
- 资源限制CPU和内存限制
- 超时控制防止进程失控
- 审计日志记录追踪所有工具的使用情况
安装
先决条件
- 已安装Docker和Docker Compose
- Python 3.8+(用于本地开发)
- 对网络安全概念的基本了解
快速入门
- 克隆或创建项目文件:
mkdir security-mcp
cd security-mcp
# Copy all the provided files to this directory
- 配置环境变量:
cp .env.example .env
# Edit .env to set your allowed networks and other configurations
- 使用 Docker Compose 构建并运行:
docker-compose up --build
手动构建 Docker
# Build the image
docker build -t security-mcp-server .
# Run the container
docker run -d \
--name security-mcp \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
-e ALLOWED_NETWORKS="192.168.1.0/24" \
-p 5000:5000 \
security-mcp-server
配置
环境变量
| 变量 | 描述 | 默认值 | 示例 |
|---|---|---|---|
ALLOWED_NETWORKS |
可扫描的CIDR范围 | 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 |
192.168.1.0/24 |
MAX_TIMEOUT |
每个工具的最大执行时间(秒) | 300 |
600 |
ENABLE_AGGRESSIVE |
允许使用激进扫描选项 | false |
true |
LOG_LEVEL |
日志详细程度 | INFO |
DEBUG |
MCP_PORT |
MCP服务器端口 | 5000 |
8080 |
允许的网络
配置 ALLOWED_NETWORKS 将扫描限制在您自己的基础设施内:
# Example: Only allow scanning of your local network
ALLOWED_NETWORKS=192.168.1.0/24
# Example: Multiple networks
ALLOWED_NETWORKS=10.10.0.0/16,192.168.0.0/24,172.16.5.0/24
使用示例
与MCP客户端一起使用
from mcp import Client
# Connect to the MCP server
client = Client("http://localhost:5000")
# Get server information
info = client.call("get_server_info")
print(info)
# Perform a basic nmap scan
result = client.call("nmap_scan", {
"target": "192.168.1.1",
"scan_type": "basic",
"ports": "80,443,22"
})
# Scan a website with Nikto
nikto_result = client.call("nikto_scan", {
"target": "192.168.1.100",
"port": 80,
"ssl": False
})
# Search for WordPress vulnerabilities
wp_result = client.call("wpscan_scan", {
"target_url": "http://192.168.1.50",
"enumerate": "vp" # Enumerate vulnerable plugins
})
# Directory enumeration
dirb_result = client.call("dirb_scan", {
"target_url": "http://192.168.1.100",
"wordlist": "common",
"extensions": ".php,.html,.txt"
})
# Search for exploits
exploits = client.call("searchsploit_search", {
"search_terms": "apache 2.4",
"json_output": True
})
特定工具的使用方法
Nmap 扫描
# Stealth SYN scan
client.call("nmap_scan", {
"target": "192.168.1.0/24",
"scan_type": "stealth",
"ports": "1-1000"
})
# Version detection scan
client.call("nmap_scan", {
"target": "192.168.1.1",
"scan_type": "version",
"additional_flags": "--open -Pn"
})
SQL注入测试
# Test for SQL injection
client.call("sqlmap_scan", {
"target_url": "http://192.168.1.100/page.php?id=1",
"level": 2,
"risk": 1
})
WordPress 扫描
# Enumerate users and plugins
client.call("wpscan_scan", {
"target_url": "http://192.168.1.50",
"enumerate": "up", # users and plugins
"api_token": "your_wpscan_api_token" # Optional
})
安全最佳实践
1. 网络隔离
- 在隔离的网络段中运行容器
- 使用VLAN或独立的子网进行测试
- 实施适当的防火墙规则
2. 访问控制
- 限制对MCP服务器的访问
- 如果在本地主机之外暴露服务,请使用身份验证
- 监控并记录所有访问尝试
3. 目标验证
- 始终验证所有权或权限
- 为所有测试提供文件授权
- 使用书面协议进行第三方测试
4. 速率限制
- 在扫描之间设置延迟
- 避免使目标系统不堪重负
- 尊重目标系统资源
故障排除
常见问题
- 权限被拒绝错误:
# Ensure proper capabilities are set
docker exec security-mcp getcap /usr/bin/nmap
- 网络不可达:
- 检查Docker网络配置
- 验证ALLOWED_NETWORKS设置
- 确保目标可以从容器中访问
- 工具超时:
- 增加MAX_TIMEOUT以支持更长时间的操作
- 检查网络连接
- 验证目标系统是否响应正常
调试
启用调试日志记录:
docker-compose down
export LOG_LEVEL=DEBUG
docker-compose up
查看容器日志:
docker logs security-mcp-server -f
发展
添加新工具
- 更新Dockerfile以安装该工具
- 在其中添加一个包装函数
security_mcp_server.py - 实现输入清理和验证
- 在隔离环境中进行彻底测试
示例包装函数:
@mcp.tool()
def custom_tool(target: str, options: str) -> Dict[str, Any]:
"""Custom tool wrapper"""
if not validate_target(target):
return {"error": "Invalid target"}
target = sanitize_input(target)
cmd = ["tool_name", target]
result = run_command(cmd)
return {"result": result}
监控与日志记录
日志文件
日志存储在 ./logs 目录:
access.log- 所有工具调用error.log- 错误和异常security.log- 与安全相关的事件
指标
监控这些指标以确保安全:
- 每个目标的扫描次数
- 攻击性扫描的频率
- 身份验证失败尝试
- 非寻常扫描模式
合规与报告
生成报告
服务器可以以多种格式输出结果:
- 用于程序化处理的JSON
- 供人类阅读的文本
- 用于与其他工具集成的XML
审计轨迹(或审计追踪)
所有操作均记录如下:
- 时间戳
- 用户/客户端标识符
- 目标系统
- 使用的工具和参数
- 结果概要
贡献;做出贡献
欢迎投稿!请:
- 遵循安全最佳实践
- 添加适当的输入验证
- 记录新功能
- 在隔离环境中进行测试
许可证
此项目仅用于教育目的。用户有责任确保其使用方式符合所有适用的法律法规。
免责声明
此工具的作者和贡献者不对因该软件造成的任何滥用或损害承担责任。请自行承担风险使用,并且仅在您获得明确许可测试的系统上使用。
支持
对于问题和事项:
- 查阅安全工具的官方文档
- 查阅Docker和MCP框架的文档
- 确保网络配置正确
额外资源
记住能力越大,责任越大。请始终以道德和合法的方式使用这些工具。