
إضافة Volatility 3 تستخرج مرشّحات رسائل MCP/JSON-RPC من تفريغات ذاكرة Windows وLinux، مع الحفاظ على البايتات الخام والعناوين وSHA-256 للتحقق.
MCPTrace هو إضافة Volatility 3 لاستخراج مرشّحات رسائل MCP/JSON-RPC من تفريغات ذاكرة Windows وLinux. يفحص ذاكرة العمليات بحثًا عن الطلبات والاستجابات والإشعارات وأسماء الأدوات ومعاملات الاستدعاء، ثم يسجّل المحتوى المستعاد مع موقعه في الذاكرة.
يركّز المشروع على الأدلة التي يمكن للمحلل فحصها والتحقق منها. يحتفظ كل أثر ببايته الأصلية ومعرّف العملية والعنوان الافتراضي والترميز والطول وتجزئة SHA-256. يمكن تصدير النتائج بصيغة JSONL لمزيد من التحليل أو المقارنة مع سجلات أخرى. يعمل MCPTrace على صورة ذاكرة مكتسبة ولا يتطلب نموذجًا لغويًا كبيرًا (LLM) أو واجهة برمجة تطبيقات ذكاء اصطناعي خارجية.
tools/call.أهداف التحليل الحالية هي Windows x64 وLinux x86-64. يشير اسم الإضافة إلى نظام التشغيل في صورة الذاكرة، بمعزل عن نظام التشغيل المستخدم لتشغيل Volatility.
يستخدم MCPTrace تعداد العمليات وترجمة العناوين في Volatility. على Windows، يتنقل عبر واصفات العناوين الافتراضية (VADs) للعملية؛ وعلى Linux، يتنقل عبر مناطق الذاكرة الافتراضية (VMAs). تحدد هذه التعيينات نطاقات عناوين العملية التي تُفحص. تشترك المحوّلان في نفس كود نحت الرسائل والربط والسياسة والتصدير.
داخل النطاقات القابلة للقراءة، يبحث الماسح الضوئي عن علامات إصدار JSON-RPC الحرفية ويحدد كائنات JSON المرشّحة حولها. يتعامل مع الكائنات المتداخلة والأحرف المُهرَّبة والأقواس داخل السلاسل النصية والرسائل الممتدة عبر أجزاء قراءة متجاورة. يُرفض JSON ذو المفاتيح المكررة أو المعرّفات غير المدعومة بدلًا من إعادة تفسيره بصمت. تُحدَّد صلة MCP من أسماء الطرق المعروفة وأشكال الاستجابة ومعرّفات الطلبات المرتبطة؛ وهي ليست تحققًا كاملًا من مخطط MCP.
تبقى الذاكرة المفقودة مفقودة. لا يملأ القارئ الفجوات بالأصفار ولا يدمج البايتات عبر VADs/VMAs منفصلة. مع --include-partial، يمكن عرض الشظايا غير المُحلَّلة بشكل منفصل، دون اختلاق معرّفات أو معاملات مفقودة. يمكن تخطي النطاقات الكبيرة غير المعيَّنة باستخدام معلومات جدول الصفحات، وتبقى نطاقات العناوين غير القابلة للقراءة ظاهرة في إحصاءات الفحص.
الربط متحفظ عن قصد. المعرّف الرقمي مثل 1 يختلف عن معرّف السلسلة "1"، والرسائل في عمليات مختلفة لا تُربط تلقائيًا. تُعلَّم التمثيلات المتعددة المتميزة المرتبطة بمعرّف ما على أنها غامضة. لا تعيد علاقات المرشّحات بناء جلسة أو اتجاه رسالة أو خط زمني للتنفيذ بمفردها.
يتطلب Python 3.10+. يتضمن التثبيت اعتماد الإطار المثبَّت، volatility3==2.28.2. أبقِ دليل plugins/ في المستودع متاحًا: تُثبَّت حزمة Python عبر pip، بينما يحمّل -p plugins محوّلات Volatility.
git clone https://github.com/Kowntaewook/MCPTrace.git
cd MCPTrace
python -m venv .venv
فعّل البيئة لصدفتك:
.\.venv\Scripts\Activate.ps1source .venv/bin/activateثم ثبّت MCPTrace:
python -m pip install .
شغّل الأمثلة التالية من جذر المستودع مع تفعيل البيئة الافتراضية. استبدل مسارات الصور ومعرّفات العمليات (PIDs) بأدلتك وعملياتك المستهدفة. قد يعمل عملاء MCP وخوادمه في عمليات منفصلة، لذا افحص كليهما حيثما كان ذلك مناسبًا.
Windows
تحقق من أن Volatility قادر على تفسير الصورة وسرد عملياتها قبل تشغيل MCPTrace. قد يتطلب إعداد رموز Windows الوصول إلى الشبكة.
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
ضع رموز ISF المطابقة لـ إصدار kernel الدقيق الخاص بالتفريغ في symbols/linux/.
إذا تعذّر على linux.pslist.PsList تحديد متطلبات kernel أو الطبقة الخاصة به، فحلّ
إعداد الصورة/الرموز قبل تفسير مخرجات 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 لفحص جميع العمليات، أو مرّر عدة PIDs: --pid 4242 5252.--dump ملفات JSONL لكل عملية إلى الدليل المحدد بواسطة -o.vol -p plugins windows.mcptrace.MCPTrace -h (أو المكافئ على Linux) لعرض جميع الخيارات.للحصول على تمثيل JSON لجدول النتائج الكامل، ضع الخيار العام -r json قبل
اسم الإضافة. هذا منفصل عن صادرات JSONL لكل عملية التي ينتجها --dump.
vol -p plugins -f windows.raw -r json windows.mcptrace.MCPTrace --pid 4242 > findings.json
| الخيار | الغرض |
|---|---|
--pid 4242 5252 | تحديد معرّفات العمليات؛ احذفه لفحص جميع العمليات التي يسردها المحوّل. |
--dump | تصدير العناصر المعروضة وملخصات الفحص بصيغة JSONL باستخدام الدليل العام -o. |
--include-partial | تضمين الأجزاء الخام غير المحلّلة دون إعادة بناء الحقول المفقودة. |
--include-rpc | عرض مرشّحات JSON-RPC العامة أيضًا دون صلة مؤكدة بـ MCP. |
--policy PATH | تطبيق قواعد محلية على وسائط الأدوات؛ راجع الأمثلة Windows وLinux. |
--suspicious-only | عرض مطابقات السياسة والملخصات؛ يتطلب سياسة غير فارغة. |
--max-records N | تحديد الحد الأقصى لسجلات المرشّحات لكل عملية قبل التصفية؛ القيمة الافتراضية: 10000. |
--max-object-bytes N | تحديد الحد الأقصى لحجم كائن JSON كامل واحد؛ القيمة الافتراضية: 65536 بايت. |
--max-bytes N | تحديد الحد الأقصى للبايتات المفحوصة من نطاق العناوين لكل عملية؛ 0 تعني بلا حد. |
تصف نتائج السياسة المطابقات مع القواعد التي يوفّرها المحلّل. ولا تُثبت المطابقة وجود نشاط خبيث. راجع المسارات والمضيفين وأسماء الأدوات في الأمثلة قبل تطبيقها على حالة مختلفة.
يحتوي ملف مثل mcptrace.pid-4242.jsonl على سجل بيانات وصفية، وسجلات عناصر،
وملخص فحص نهائي. تحدد البيانات الوصفية العملية ونظام التشغيل الهدف ومساحة
العناوين. وتحتفظ سجلات العناصر بالرسالة المحلّلة والبايتات المستعادة الدقيقة معًا.
| الحقول | المعنى |
|---|---|
pid، virtual_address، region_start | العملية وموقع الدليل. العناوين هي عناوين افتراضية للعملية، وليست إزاحات في ملف الصورة. |
message، method، tool، request_id | محتوى الرسالة المحلّل والحقول المحددة، عند توفرها. |
raw_base64، byte_length، raw_sha256 | البايتات الأصلية وطولها وSHA-256 للتحقق. |
state، encoding | ما إذا كان السجل كاملًا أم جزءًا، وكيفية ترميز بايتاته. |
relation، candidate_virtual_addresses | مواقع النظير المرشّحة وما إذا كانت العلاقة غامضة. |
findings | نتائج فحوص سياسة الوسائط الاختيارية. |
للتحقق من عنصر، فكّ ترميز raw_base64، وتحقق من طوله وتجزئته، ثم أعد قراءة
ذلك النطاق عبر طبقة ذاكرة العملية المقابلة. قد تؤدي إعادة تنسيق message
بصيغة JSON إلى تغيير المسافات البيضاء أو التهريب، لذا استخدم البايتات المحفوظة لإجراء
مقارنة دقيقة. تبقى نسخ الذاكرة المختلفة سجلات أدلة منفصلة.
اقرأ ملخص الفحص إلى جانب العناصر. فهو يبلّغ عن المناطق المفحوصة، والبايتات القابلة للقراءة وغير القابلة للقراءة، والمناطق غير الصالحة، والعمليات المتخطّاة، والأخطاء، وأحداث الحدود. قد تتضمن البايتات غير القابلة للقراءة مساحة عناوين محجوزة غير مستخدمة. ولا تُثبت نتيجة بلا رسائل أن نشاط MCP لم يحدث قط.
استخدم القياس المرجعي ثلاث لقطات جديدة لأجهزة Windows Server 2022 افتراضية. شغّل كل جهاز افتراضي زوجين من العميل/الخادم باستخدام Python MCP SDK الرسمي عبر stdio. جرى تبادل حركة المرور الفعلية قبل الحصول على ذاكرة الوصول العشوائي الفعلية باستخدام WinPmem؛ ولم تُحقن رسائل الاختبار في الصورة الناتجة.
أكملت كل حالة 64 استدعاء أداة و133 رسالة منطقية، بما في ذلك التهيئة، وإشعار، واكتشاف الأدوات. تضمّنت الحمولات ASCII، والكورية/الرموز التعبيرية، والأحرف المهرّبة، والمسافات البيضاء، وسلسلة بحجم 2 KiB. وكانت الحالات: