Memory Shell Detector MCP

Memory Shell Detector MCP

A tool for detecting and cleaning Java memory shells via local or SSH remote execution. It enables AI agents to scan Java processes, analyze suspicious class code, and safely remove memory shells after user confirmation.

Category
访问服务器

README

Memory Shell Detector MCP

基于 FastMCP 构建的 Java 内存马检测和清理工具 MCP 服务器,支持本地执行和 SSH 远程执行。

项目地址:https://github.com/RuoJi6/memory-shell-mcp

功能

功能 工具名称 对应命令
执行命令(本地/SSH) execute_command -
下载检测工具 download_detector_tools -
列出Java进程 list_java_processes -l
扫描指定进程 scan_process -s <PID>
查看可疑类代码 view_class_code -v <类名> -p <PID>
移除内存马 remove_memory_shell -r <类名> -p <PID>
导出检测报告 export_report --report
获取系统信息 get_system_info_tool -
检测网络状态 check_network -

安全特性

  • 移除内存马前会先获取源代码供 AI 分析确认
  • 需要 AI 确认后(ai_confirmed=True)才会执行移除操作
  • 自动处理移除确认提示

环境要求

  • Python 3.10+
  • JDK 1.8+(目标机器)
  • uv(Python 包管理器)

快速开始(uvx 方式)

发布到 PyPI 后,直接使用 uvx 运行,无需安装:

uvx memory-shell-mcp

MCP 配置(uvx 方式)

支持 MCP 的客户端:本工具可配置到任何支持 Model Context Protocol 的 AI 客户端,包括但不限于:

以下是常用客户端的配置示例:

Kiro

.kiro/settings/mcp.json 中添加:

{
  "mcpServers": {
    "memory-shell-detector": {
      "command": "uvx",
      "args": ["memory-shell-mcp"],
      "env": {},
      "disabled": false,
      "autoApprove": []
    }
  }
}

Claude Desktop

claude_desktop_config.json 中添加:

{
  "mcpServers": {
    "memory-shell-detector": {
      "command": "uvx",
      "args": ["memory-shell-mcp"],
      "env": {}
    }
  }
}

说明env 中的环境变量均为可选配置。不配置时,工具会下载到系统临时目录,SSH 参数可通过 AI 对话传入。


开发者模式(本地源码)

安装

git clone https://github.com/RuoJi6/memory-shell-mcp.git
cd memory-shell-mcp

# 创建虚拟环境并安装依赖
uv venv --python python3.12
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate   # Windows

uv pip install -e .

运行

# 激活虚拟环境后
memory-shell-mcp

MCP 配置(开发者模式)

{
  "mcpServers": {
    "memory-shell-detector": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/memory-shell-mcp",
        "memory-shell-mcp"
      ],
      "env": {}
    }
  }
}

说明env 中的环境变量均为可选配置。不配置时,工具会下载到系统临时目录,SSH 参数可通过 AI 对话传入。


环境变量说明(可选)

变量 说明
TOOLS_DIR 检测工具(JAR 文件)存放目录,不设置则下载到系统临时目录
SSH_HOST SSH 主机地址
SSH_USERNAME SSH 用户名
SSH_PASSWORD SSH 密码
SSH_KEY_PATH SSH 私钥路径(与密码二选一)
SSH_PORT SSH 端口(默认 22)
JAVA_HOME JDK 路径(可选)
  • 所有环境变量均为可选,不配置也可正常使用
  • 设置环境变量后,调用工具时无需每次传入对应参数
  • 如果 TOOLS_DIR 目录中已存在工具文件,download_detector_tools 会跳过下载
  • SSH 参数也可以通过 AI 对话动态传入,优先级高于环境变量

使用流程

完整检测流程

第一步:准备工作

1. 调用 download_detector_tools 下载检测工具
2. 调用 list_java_processes 列出所有 Java 进程,找到目标进程 PID

第二步:扫描检测

3. 调用 scan_process(pid=目标PID) 扫描目标进程
4. 扫描结果会列出所有可疑类,记录完整类名

第三步:源码分析(关键步骤)

5. 对每个可疑类调用 view_class_code(class_name="类名", pid=PID) 反编译查看源码
6. 分析源码判断是否为内存马

内存马判断标准:

  • ✅ 是否包含命令执行代码(Runtime.execProcessBuilder
  • ✅ 是否包含反射调用敏感方法
  • ✅ 是否有异常的网络连接或文件操作
  • ✅ 是否动态注册 Filter/Servlet/Listener
  • ✅ 是否有加密/编码的可疑字符串(Base64、AES 等)
  • ✅ 是否有 Webshell 特征(参数名为 cmd/command/exec 等)
  • ✅ 类名是否异常(随机字符串、与业务无关)
  • ✅ 是否有类加载器操作(defineClass、ClassLoader)

第四步:清除内存马

7. 确认是内存马后,调用 remove_memory_shell(class_name="类名", pid=PID, ai_confirmed=True)
8. 移除后立即再次调用 scan_process 验证是否清除成功
9. 重要:某些内存马需要多次移除才能彻底清除,如果仍然存在,重复步骤 7-8

第五步:生成报告(可选)

10. 调用 export_report 导出检测报告存档

示例提示词

直接复制以下提示词发送给 AI 即可开始检测:

本地检测

帮我检测本机的 Java Web 服务,排查是否存在内存马。

检测要求:
1. 先下载检测工具,然后列出 Java 进程找到目标 PID
2. 扫描该进程,获取所有可疑类列表
3. 对每个可疑类反编译源代码,分析是否为内存马
4. 如果确认是内存马,执行移除操作
5. 移除后再次扫描验证,某些内存马需要多次移除才能彻底清除
6. 最后给我一个检测报告总结

SSH 远程检测

帮我检测远程服务器上的 Java 服务是否存在内存马。

服务器信息:
- IP: 192.168.1.100
- 用户名: root
- 密码: your_password

检测要求:
1. 通过 SSH 连接到服务器
2. 下载检测工具到 /tmp 目录
3. 列出所有 Java 进程,扫描可疑进程
4. 反编译分析每个可疑类的源代码
5. 确认是内存马后执行移除,并验证移除结果
6. 生成检测报告

内存马类型说明

类型 特征 移除难度
Filter 型 实现 javax.servlet.Filter,动态注册到 FilterChain 中等,可能需要多次移除
Servlet 型 继承 HttpServlet,动态注册路由 中等
Listener 型 实现 ServletRequestListener 较易
Spring Controller 使用 @RequestMapping 动态注册 中等
Spring Interceptor 实现 HandlerInterceptor 中等
Agent 型 通过 Instrumentation 修改字节码 困难,可能需要重启
Valve 型 (Tomcat) 继承 ValveBase 中等

旧版使用流程(简化版)

1. 下载检测工具

调用 download_detector_tools

2. 列出 Java 进程

调用 list_java_processes()

3. 扫描可疑进程

调用 scan_process(pid=进程ID)

4. 查看可疑类源代码

调用 view_class_code(class_name="类名", pid=进程ID)

5. 移除内存马

# AI 确认后调用
调用 remove_memory_shell(class_name="类名", pid=进程ID, ai_confirmed=True)

SSH 远程执行

方式1:环境变量预设

在 MCP 配置的 env 中设置:

"env": {
  "TOOLS_DIR": "/your/tools/directory",
  "SSH_HOST": "192.168.1.100",
  "SSH_USERNAME": "root",
  "SSH_PASSWORD": "password"
}

调用时只需设置 use_ssh=True

调用 scan_process(pid=12345, use_ssh=True)

方式2:AI 对话动态传入

直接告诉 AI SSH 连接信息:

调用 scan_process(
    pid=12345,
    use_ssh=True,
    ssh_host="192.168.1.100",
    ssh_username="root",
    ssh_password="password"
)

对话传入的参数优先级高于环境变量


工具下载地址

工具会自动从以下地址下载:

  • Agent JAR: https://xget.xi-xu.me/gh/RuoJi6/memory-shell-mcp/releases/download/1/detector-agent-1.0.0-SNAPSHOT.jar
  • CLI JAR: https://xget.xi-xu.me/gh/RuoJi6/memory-shell-mcp/releases/download/1/memory-shell-detector-cli.jar

支持系统

  • Windows / Linux / macOS

风险等级说明

等级 说明
CRITICAL 确认为内存马,需立即处理
HIGH 高度可疑,建议人工确认
MEDIUM 中等风险,可能是正常组件
LOW 低风险,基本可排除
SAFE 安全,已在白名单中

注意事项

  1. 扫描其他进程需要足够的系统权限
  2. 目标进程和检测工具需使用相同或兼容的 JDK 版本
  3. Agent JAR 需要和 CLI JAR 放在同一目录下
  4. Agent 型内存马无法通过本工具移除,需要重启应用
  5. 移除内存马可能影响应用正常运行,建议先备份

发布到 PyPI

# 1. 注册 PyPI 账号并获取 API Token
# https://pypi.org/manage/account/token/

# 2. 构建包
uv build

# 3. 发布到 PyPI
uv publish --token YOUR_PYPI_TOKEN

# 4. 发布后即可通过 uvx 运行
uvx memory-shell-mcp

参考项目

License

MIT License

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选