
Plugin Volatility 3 qui extrait les candidats de messages MCP/JSON-RPC à partir de vidages mémoire Windows et Linux, en préservant les octets bruts, les adresses et le SHA-256 pour vérification.
MCPTrace est un plugin Volatility 3 permettant d'extraire des candidats de messages MCP/JSON-RPC à partir de vidages mémoire Windows et Linux. Il examine la mémoire des processus à la recherche de requêtes, de réponses, de notifications, de noms d'outils et d'arguments d'appel, puis enregistre le contenu récupéré ainsi que son emplacement en mémoire.
Le projet se concentre sur les preuves qu'un analyste peut inspecter et vérifier. Chaque artefact conserve ses octets d'origine, son identifiant de processus, son adresse virtuelle, son encodage, sa longueur et son hachage SHA-256. Les résultats peuvent être exportés au format JSONL pour une analyse ultérieure ou une comparaison avec d'autres journaux. MCPTrace fonctionne sur une image mémoire acquise et ne nécessite ni LLM ni API d'IA externe.
tools/call.Les cibles d'analyse actuelles sont Windows x64 et Linux x86-64. Le nom du plugin fait référence au système d'exploitation de l'image mémoire, indépendamment du système d'exploitation utilisé pour exécuter Volatility.
MCPTrace utilise l'énumération des processus et la traduction d'adresses de Volatility. Sous Windows, il parcourt les Virtual Address Descriptors (VAD) des processus ; sous Linux, il parcourt les Virtual Memory Areas (VMA). Ces mappages définissent les plages d'adresses de processus examinées. Les deux adaptateurs partagent le même code de carving de messages, de corrélation, de politique et d'export.
Dans les plages lisibles, le scanner recherche les marqueurs littéraux de version JSON-RPC et localise les objets JSON candidats autour d'eux. Il gère les objets imbriqués, les caractères échappés, les accolades à l'intérieur de chaînes et les messages s'étendant sur des blocs de lecture contigus. Le JSON comportant des clés dupliquées ou des identifiants non pris en charge est rejeté plutôt que silencieusement réinterprété. La pertinence MCP est déterminée à partir des noms de méthodes connus, des formes de réponse et des identifiants de requête associés ; il ne s'agit pas d'une validation complète du schéma MCP.
La mémoire manquante reste manquante. Le lecteur ne comble pas les lacunes avec des zéros et ne joint pas les octets à travers des VAD/VMA distincts. Avec --include-partial, les fragments non analysés peuvent être affichés séparément, sans inventer d'identifiants ou d'arguments manquants. Les grandes plages non mappées peuvent être ignorées à l'aide des informations de table des pages, et les plages d'adresses illisibles restent visibles dans les statistiques de scan.
La corrélation est délibérément conservatrice. Un identifiant numérique tel que 1 est distinct de l'identifiant chaîne "1", et les messages de processus différents ne sont pas automatiquement liés. Les multiples représentations distinctes associées à un identifiant sont marquées comme ambiguës. Les relations candidates ne reconstruisent pas à elles seules une session, une direction de message ou une chronologie d'exécution.
Nécessite Python 3.10+. L'installation inclut la dépendance épinglée du framework, volatility3==2.28.2. Gardez le répertoire plugins/ du dépôt disponible : le paquet Python est installé avec pip, tandis que -p plugins charge les adaptateurs Volatility.
git clone https://github.com/Kowntaewook/MCPTrace.git
cd MCPTrace
python -m venv .venv
Activez l'environnement pour votre shell :
.\.venv\Scripts\Activate.ps1source .venv/bin/activateInstallez ensuite MCPTrace :
python -m pip install .
Exécutez les exemples suivants depuis la racine du dépôt avec l'environnement virtuel actif. Remplacez les chemins d'image et les PID par vos preuves et processus cibles. Les clients et serveurs MCP peuvent s'exécuter dans des processus séparés, inspectez donc les deux lorsque c'est pertinent.
Windows
Vérifiez que Volatility peut interpréter l'image et énumérer ses processus avant d'exécuter MCPTrace. La préparation des symboles Windows peut nécessiter un accès réseau.
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
Placez les symboles ISF correspondant à la version exacte du noyau du dump dans symbols/linux/.
Si linux.pslist.PsList ne parvient pas à résoudre ses exigences de noyau ou de couche, résolvez
la configuration de l'image/des symboles avant d'interpréter la sortie 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 pour analyser tous les processus, ou passer plusieurs PID : --pid 4242 5252.--dump exporte des fichiers JSONL par processus vers le répertoire spécifié par -o.vol -p plugins windows.mcptrace.MCPTrace -h (ou l'équivalent Linux) pour toutes les options.Pour un rendu JSON du tableau de résultats complet, placer l'option globale -r json avant
le nom du plugin. Cela est distinct des exports JSONL par processus produits par --dump.
vol -p plugins -f windows.raw -r json windows.mcptrace.MCPTrace --pid 4242 > findings.json
| Option | Objectif |
|---|---|
--pid 4242 5252 | Sélectionne les ID de processus ; omettre pour examiner tous les processus énumérés par l'adaptateur. |
--dump | Exporte les artefacts affichés et les résumés de scan au format JSONL dans le répertoire global -o. |
--include-partial | Inclut les fragments bruts non analysés sans reconstruire les champs manquants. |
--include-rpc | Affiche également les candidats JSON-RPC génériques sans pertinence MCP confirmée. |
--policy PATH | Applique des règles locales aux arguments des outils ; voir les exemples Windows et Linux. |
--suspicious-only | Affiche les correspondances de politique et les résumés ; nécessite une politique non vide. |
--max-records N | Limite le nombre d'enregistrements candidats par processus avant filtrage ; valeur par défaut : 10000. |
--max-object-bytes N | Limite la taille d'un objet JSON complet ; valeur par défaut : 65536 octets. |
--max-bytes N | Limite les octets de plage d'adresses tentés par processus ; 0 signifie illimité. |
Les résultats de politique décrivent les correspondances avec les règles fournies par l'analyste. Une correspondance n'établit pas une activité malveillante. Examinez les chemins, hôtes et noms d'outils des exemples avant de les appliquer à un autre cas.
Un fichier tel que mcptrace.pid-4242.jsonl contient un enregistrement de métadonnées, des enregistrements d'artefacts,
et un résumé de scan final. Les métadonnées identifient le processus, le système d'exploitation cible et l'espace
d'adressage. Les enregistrements d'artefacts conservent à la fois le message analysé et les octets exacts récupérés.