
Plugin do Volatility 3 que extrai candidatos a mensagens MCP/JSON-RPC de dumps de memória do Windows e Linux, preservando os bytes brutos, endereços e SHA-256 para verificação.
MCPTrace é um plugin do Volatility 3 para extrair candidatos a mensagens MCP/JSON-RPC de dumps de memória do Windows e Linux. Ele examina a memória dos processos em busca de requisições, respostas, notificações, nomes de ferramentas e argumentos de chamadas, e então registra o conteúdo recuperado junto com sua localização na memória.
O projeto concentra-se em evidências que um analista pode inspecionar e verificar. Cada artefato mantém seus bytes originais, ID do processo, endereço virtual, codificação, comprimento e hash SHA-256. Os resultados podem ser exportados como JSONL para análise posterior ou comparação com outros logs. O MCPTrace opera sobre uma imagem de memória adquirida e não requer um LLM ou uma API de IA externa.
tools/call.Os alvos de análise atuais são Windows x64 e Linux x86-64. O nome do plugin refere-se ao sistema operacional na imagem de memória, independentemente do SO usado para executar o Volatility.
O MCPTrace usa a enumeração de processos e a tradução de endereços do Volatility. No Windows, ele percorre os Virtual Address Descriptors (VADs) do processo; no Linux, ele percorre as Virtual Memory Areas (VMAs). Esses mapeamentos definem quais faixas de endereço do processo são examinadas. Os dois adaptadores compartilham o mesmo código de carving de mensagens, correlação, política e exportação.
Dentro das faixas legíveis, o scanner procura marcadores literais de versão do JSON-RPC e localiza objetos JSON candidatos ao redor deles. Ele lida com objetos aninhados, caracteres escapados, chaves dentro de strings e mensagens que abrangem chunks de leitura contíguos. JSON com chaves duplicadas ou identificadores não suportados é rejeitado em vez de ser silenciosamente reinterpretado. A relevância para o MCP é determinada a partir de nomes de métodos conhecidos, formatos de resposta e IDs de requisição associados; não é uma validação completa do schema MCP.
Memória ausente permanece ausente. O leitor não preenche lacunas com zeros nem une
bytes entre VADs/VMAs separados. Com --include-partial, fragmentos não analisados podem ser
mostrados separadamente, sem inventar IDs ou argumentos ausentes. Faixas grandes não mapeadas
podem ser ignoradas usando informações da tabela de páginas, e faixas de endereço ilegíveis permanecem
visíveis nas estatísticas de varredura.
A correlação é deliberadamente conservadora. Um ID numérico como 1 é distinto do
ID de string "1", e mensagens em processos diferentes não são automaticamente vinculadas.
Múltiplas representações distintas associadas a um ID são marcadas como ambíguas.
As relações candidatas não reconstroem uma sessão, direção de mensagem ou linha do tempo
de execução por conta própria.
Requer Python 3.10+. A instalação inclui a dependência fixada do framework,
volatility3==2.28.2. Mantenha o diretório plugins/ do repositório disponível: o pacote
Python é instalado com pip, enquanto -p plugins carrega os adaptadores do Volatility.
git clone https://github.com/Kowntaewook/MCPTrace.git
cd MCPTrace
python -m venv .venv
Ative o ambiente para o seu shell:
.\.venv\Scripts\Activate.ps1source .venv/bin/activateEm seguida, instale o MCPTrace:
python -m pip install .
Execute os exemplos a seguir a partir da raiz do repositório com o ambiente virtual ativo. Substitua os caminhos das imagens e os PIDs pelas suas evidências e processos-alvo. Clientes e servidores MCP podem ser executados em processos separados, portanto inspecione ambos quando relevante.
Windows
Verifique se o Volatility consegue interpretar a imagem e enumerar seus processos antes de executar o MCPTrace. A preparação de símbolos do Windows pode exigir acesso à rede.
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 os símbolos ISF correspondentes à build exata do kernel do dump em symbols/linux/.
Se linux.pslist.PsList não conseguir resolver seus requisitos de kernel ou de camada, resolva
a configuração de imagem/símbolos antes de interpretar a saída do 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 verificar todos os processos, ou passe vários PIDs: --pid 4242 5252.--dump exporta arquivos JSONL por processo para o diretório especificado por -o.vol -p plugins windows.mcptrace.MCPTrace -h (ou o equivalente para Linux) para ver todas as opções.Para uma renderização JSON da tabela de resultados completa, coloque a opção global -r json antes
do nome do plugin. Isso é separado das exportações JSONL por processo produzidas por --dump.
vol -p plugins -f windows.raw -r json windows.mcptrace.MCPTrace --pid 4242 > findings.json
| Opção | Finalidade |
|---|---|
--pid 4242 5252 | Seleciona IDs de processo; omita para examinar todos os processos enumerados pelo adaptador. |
--dump | Exporta os artefatos exibidos e os resumos de varredura como JSONL usando o diretório global -o. |
--include-partial | Inclui fragmentos brutos não analisados, sem reconstruir campos ausentes. |
--include-rpc | Também exibe candidatos genéricos de JSON-RPC sem relevância MCP confirmada. |
--policy PATH | Aplica regras locais aos argumentos de ferramentas; consulte os exemplos para Windows e Linux. |
--suspicious-only | Mostra correspondências de política e resumos; requer uma política não vazia. |
--max-records N | Limita os registros candidatos por processo antes da filtragem; padrão: 10000. |
--max-object-bytes N | Limita o tamanho de um objeto JSON completo; padrão: 65536 bytes. |
--max-bytes N | Limita os bytes de intervalos de endereços tentados por processo; 0 significa ilimitado. |
Os achados de política descrevem correspondências com as regras fornecidas pelo analista. Uma correspondência não estabelece atividade maliciosa. Revise os caminhos, hosts e nomes de ferramentas dos exemplos antes de aplicá-los a um caso diferente.
Um arquivo como mcptrace.pid-4242.jsonl contém um registro de metadados, registros de artefatos
e um resumo final da varredura. Os metadados identificam o processo, o SO de destino e o espaço
de endereçamento. Os registros de artefatos preservam tanto a mensagem analisada quanto os bytes exatos recuperados.