
Plugin de Volatility 3 que extrae candidatos de mensajes MCP/JSON-RPC de volcados de memoria de Windows y Linux, preservando los bytes sin procesar, las direcciones y el SHA-256 para su verificación.
MCPTrace es un plugin de Volatility 3 para extraer candidatos de mensajes MCP/JSON-RPC de volcados de memoria de Windows y Linux. Examina la memoria de los procesos en busca de solicitudes, respuestas, notificaciones, nombres de herramientas y argumentos de llamadas, y luego registra el contenido recuperado junto con su ubicación en memoria.
El proyecto se centra en la evidencia que un analista puede inspeccionar y verificar. Cada artefacto conserva sus bytes originales, el ID de proceso, la dirección virtual, la codificación, la longitud y el hash SHA-256. Los resultados pueden exportarse como JSONL para su posterior análisis o comparación con otros registros. MCPTrace opera sobre una imagen de memoria adquirida y no requiere un LLM ni una API de IA externa.
tools/call.Los objetivos de análisis actuales son Windows x64 y Linux x86-64. El nombre del plugin hace referencia al sistema operativo de la imagen de memoria, independientemente del SO utilizado para ejecutar Volatility.
MCPTrace utiliza la enumeración de procesos y la traducción de direcciones de Volatility. En Windows, recorre los Virtual Address Descriptors (VAD) del proceso; en Linux, recorre las Virtual Memory Areas (VMA). Estas asignaciones definen qué rangos de direcciones del proceso se examinan. Ambos adaptadores comparten el mismo código de carving de mensajes, correlación, políticas y exportación.
Dentro de los rangos legibles, el escáner busca marcadores literales de versión de JSON-RPC y localiza objetos JSON candidatos a su alrededor. Maneja objetos anidados, caracteres escapados, llaves dentro de cadenas y mensajes que abarcan fragmentos de lectura contiguos. El JSON con claves duplicadas o identificadores no admitidos se rechaza en lugar de reinterpretarse silenciosamente. La relevancia MCP se determina a partir de nombres de métodos conocidos, formas de respuesta e IDs de solicitud asociados; no es una validación completa del esquema MCP.
La memoria ausente se mantiene como ausente. El lector no rellena los huecos con ceros ni une
bytes entre VAD/VMA separados. Con --include-partial, los fragmentos no analizados pueden
mostrarse por separado, sin inventar IDs o argumentos faltantes. Los rangos grandes no mapeados
pueden omitirse utilizando la información de la tabla de páginas, y los rangos de direcciones ilegibles permanecen
visibles en las estadísticas del escaneo.
La correlación es deliberadamente conservadora. Un ID numérico como 1 es distinto del
ID de cadena "1", y los mensajes en procesos diferentes no se vinculan automáticamente.
Las múltiples representaciones distintas asociadas a un ID se marcan como ambiguas.
Las relaciones candidatas no reconstruyen por sí solas una sesión, la dirección de los mensajes ni una
línea temporal de ejecución.
Requiere Python 3.10+. La instalación incluye la dependencia fijada del framework,
volatility3==2.28.2. Mantenga disponible el directorio plugins/ del repositorio: el paquete
de Python se instala con pip, mientras que -p plugins carga los adaptadores de Volatility.
git clone https://github.com/Kowntaewook/MCPTrace.git
cd MCPTrace
python -m venv .venv
Activa el entorno para tu shell:
.\.venv\Scripts\Activate.ps1source .venv/bin/activateLuego instala MCPTrace:
python -m pip install .
Ejecute los siguientes ejemplos desde la raíz del repositorio con el entorno virtual activo. Reemplace las rutas de imagen y los PID con su evidencia y procesos objetivo. Los clientes y servidores MCP pueden ejecutarse en procesos separados, por lo que debe inspeccionar ambos cuando sea relevante.
Windows
Verifique que Volatility pueda interpretar la imagen y enumerar sus procesos antes de ejecutar MCPTrace. La preparación de símbolos de Windows puede requerir acceso a la red.
vol -f windows.raw windows.info.Info
vol -f windows.raw windows.pslist.PsList
mkdir output-windows
vol -p plugins -f windows.raw -o output-windows windows.mcptrace.MCPTrace --pid 4242 5252 --dump
Linux
Coloque los símbolos ISF que coincidan con la compilación exacta del kernel del volcado en symbols/linux/.
Si linux.pslist.PsList no puede resolver sus requisitos de kernel o de capa, resuelva
la configuración de imagen/símbolos antes de interpretar la salida de MCPTrace.
vol -s symbols -f linux.lime linux.pslist.PsList
mkdir output-linux
vol -p plugins -s symbols -f linux.lime -o output-linux linux.mcptrace.MCPTrace --pid 4242 --dump
--pid para escanear todos los procesos, o pase varios PID: --pid 4242 5252.--dump exporta archivos JSONL por proceso al directorio especificado por -o.vol -p plugins windows.mcptrace.MCPTrace -h (o el equivalente en Linux) para ver todas las opciones.Para obtener una representación JSON de la tabla de resultados completa, coloque la opción global -r json antes del nombre del plugin. Esto es independiente de las exportaciones JSONL por proceso producidas por --dump.
vol -p plugins -f windows.raw -r json windows.mcptrace.MCPTrace --pid 4242 > findings.json
| Opción | Propósito |
|---|---|
--pid 4242 5252 | Selecciona los ID de proceso; omítelo para examinar todos los procesos enumerados por el adaptador. |
--dump | Exporta los artefactos mostrados y los resúmenes de escaneo como JSONL usando el directorio global -o. |
--include-partial | Incluye fragmentos sin procesar y sin analizar, sin reconstruir los campos faltantes. |
--include-rpc | Muestra también candidatos genéricos de JSON-RPC sin relevancia MCP confirmada. |
--policy PATH | Aplica reglas locales a los argumentos de las herramientas; consulta los ejemplos de Windows y Linux. |
--suspicious-only | Muestra las coincidencias de la política y los resúmenes; requiere una política no vacía. |
--max-records N | Limita los registros candidatos por proceso antes del filtrado; valor predeterminado: 10000. |
--max-object-bytes N | Limita el tamaño de un objeto JSON completo; valor predeterminado: 65536 bytes. |
--max-bytes N | Limita los bytes de rango de direcciones intentados por proceso; 0 significa sin límite. |
Los hallazgos de la política describen coincidencias con las reglas proporcionadas por el analista. Una coincidencia no establece actividad maliciosa. Revisa las rutas, los hosts y los nombres de herramientas de los ejemplos antes de aplicarlos a un caso diferente.
Un archivo como mcptrace.pid-4242.jsonl contiene un registro de metadatos, registros de artefactos
y un resumen final del escaneo. Los metadatos identifican el proceso, el sistema operativo de destino y el espacio
de direcciones. Los registros de artefactos conservan tanto el mensaje analizado como los bytes exactos recuperados.