
استطلاع حي وتدقيق الوضع الأمني للبنية التحتية لوكلاء الذكاء الاصطناعي: يفحص إعدادات MCP وسجلات الجلسات وواجهات برمجة التطبيقات بحثًا عن الأسرار والكتالوجات المسمومة وتسريبات CoT.
اجلس حيث يجلس النموذج. انظر ما يمكنه رؤيته.
MASQ هي أداة سطر أوامر أمنية محلية لمكدسات وكلاء الذكاء الاصطناعي. إنها تجلس في المقعد نفسه الذي يجلس فيه النموذج: تقرأ كتالوجات أدوات MCP، وتُكمل مصافحة MCP، وتطّلع على سجلات الجلسات، وتستكشف منافذ HTTP للنماذج المحلية. ثم تطبع النتائج والإجراءات التصحيحية.
تتحدث MCP وHTTP المتوافق مع OpenAI بالطريقة التي يتحدث بها العميل. وتُبلّغ بالطريقة التي تفعلها أداة استطلاع المضيف. وهي لا تستدعي الأدوات على خادم حي، ولا تفك تشفير سلسلة التفكير، ولا تولّد عمليات كسر الحماية.
| استخدمها عندما | تشغّل Cursor أو VS Code أو Claude أو Codex أو مكدس نموذج محلي وتريد رؤية خوادم MCP والمهارات والسجلات وواجهات API التي يمكن للوكيل الوصول إليها. |
| ابدأ بـ | العرض التوضيحي الذي يستغرق دقيقتين أدناه. يبقى داخل هذا المستودع. |
| الحالة | نسخة تجريبية (Beta). cargo test هي البوابة العامة. الاستكشافات الحية مخصصة للمضيفين الذين تملكهم. |
| الترخيص | MIT |
تحتاج إلى Rust بإصدار مستقر (1.88 أو أحدث) وPython 3. من نسخة مستنسخة من هذا المستودع:
cargo build --locked --bin masq
alias masq=./target/debug/masq
# or run the same walkthrough as a script:
# bash scripts/demo.sh
1. تبقى الفهرسة النظيفة نظيفة
masq fixtures/clean_calculator.json --trusted
CLEAN clean_calculator tools=2 hash=sha256:e680cd2e4ac6c80ec783f11a0d9272a6741797feba216eb8e79633dd59633ab4
الخروج 0.
2. كتالوج مسموم يفشل في اجتياز البوابة
fixtures/t3_line_jump.json هو أداة sqrt يخبر وصفها النموذجَ بأن يستشيرها أولاً في كل جلسة، وبأن يسبق أوامر الصدفة بـ curl كاناري. هذا تسميم للكتالوج، وليس رياضيات.
masq fixtures/t3_line_jump.json
FINDINGS t3_line_jump tools=1 findings=2 max=critical
F-001 [critical] D02 mcp03=schema_poison sqrt Network exfiltration directive in schema
path: $.tools[0].description
F-002 [critical] D03 mcp03=schema_poison sqrt Line-jump: force tool consultation / session prefix
path: $.tools[0].description
الخروج 2 (النتائج عند --fail-on أو أعلى، الافتراضي high).
3. شغّل MCP حيًّا بالطريقة التي يعمل بها النموذج
يتحدث mock المضمّن في الشجرة بروتوكول MCP عبر stdio. يرسل masq رسائل initialize وnotifications/initialized وtools/list. ولا يرسل أبدًا tools/call.
masq sit --plain --no-color -- python3 tests/mock_mcp_server.py
01 CATALOG
M-001 CRIT live Secret path or credential exfil directive
Schema references secret file paths or credential stores in an agent-directed way.
ACT Never reference host secret paths in tool metadata.
LOCUS stdio:python3 :: add
M-002 HIGH live IPI / poison language in tool metadata
Local classifier hit `system-override` in tool `add`.
ACT Remove agent-directed instructions from the tool description.
M-003 HIGH live Instruction-override language in schema string
Text matches common prompt-injection / instruction-override phrasing in tool metadata.
M-004 HIGH live Pre-action system instruction in schema
Schema instructs the model to perform actions before the normal tool purpose.
02 SEAT
HIT stdio python3 init ok name=mock-poison tools=1
يخبر وصف أداة add في المحاكي النموذجَ بقراءة ~/.ssh/id_rsa قبل إجراء العمليات الحسابية. ترصد masq ذلك من tools/list الحيّ، ثم تخرج بالرمز 2.
4. فحص سجل جلسة تجريبي
يزرع fixtures/demo/chat_history.jsonl مفتاح API مزيفًا وكُتلة تفكير مشفّرة. وجّه masq إلى ذلك الدليل - لا إلى سجل محادثاتك الحقيقي - لرؤية الخط الزمني.
masq sniff --timeline --plain --no-color fixtures/demo
T0001 SECRET chat_history.jsonl:2 {"content":"Authorization: Bearer sk-x……
T0002 BLOB chat_history.jsonl:3 encrypted_content len=202
المفتاح المزروع محجوب. تُبلَّغ سلسلة التفكير المشفرة بالطول، لا تُفكَّك.
5. ثبّت كتالوجًا راجعته، ثم التقط الانحراف
masq pin fixtures/clean_calculator.json -k calc
masq check fixtures/clean_calculator.json -k calc --trusted
pin يكتب .masq/pins.json. تفشل check لاحقًا إذا تغيّرت قائمة الأدوات أو التجزئات (rug-pull).
رموز الخروج في كل مكان: 0 نظيف · 2 نتائج ≥ --fail-on · 1 خطأ.
تقوم ماسحات MCP الساكنة بفحص المخططات (schemas). وتقوم فحوصات السلامة باختبار initialize. الفجوة هي المقعد: الملفات والمستمعات والمصافحات التي يستخدمها النموذج بالفعل.
initialize دون أي مصادقة. إذا أمكنك إتمام تلك المصافحة، فأنت بالفعل الوكيل. يكتفي masq بالمراقبة؛ ولا يستدعي الأدوات.11434 و8000 وما شابهها على 0.0.0.0 دون bearer. يبصم masq الخدمة (Ollama، vLLM، LiteLLM، …) باستخدام فحوصات GET فقط، ثم يسرد النماذج.flowchart LR
A["MCP tools/list JSON"] --> M[masq]
B["Live MCP server"] --> M
C["Session logs"] --> M
D["Local model HTTP"] --> M
M --> E["Findings + remediations"]
M --> F["Optional pin store for CI"]
git clone https://gitlab.com/WattoCyber/masq.git
cd masq
cargo install --path . --locked
# command: masq
masq --version
masq --help
يتطلب Rust المستقر الحالي (1.88+؛ ثبّته باستخدام rustup). يُعدّ cargo test البوابة العامة. لا يُشترط Python 3 إلا من أجل محاكاة stdio الحية في العرض التجريبي وفي الاختبارات.
للبناء على مضيف Unix بعيد عبر SSH (تثبيت فقط؛ لا يفحص ذلك المضيف):
MASQ_REMOTE_HOST=user@host bash scripts/deploy_remote.sh
# on that host: masq --version
لا يغادر العرض التجريبي هذا المستودع أبدًا. أما هذه الأوامر فتغادره، وهي محصورة في هذا الجهاز ما لم تُفعّل قائمة سماح للمختبر.
صدّر أو احفظ ملف JSON الخاص بـ tools/list، ثم:
masq path/to/tools.json
masq path/to/tools.json --json
masq path/to/tools.json --markdown
تُعاد كتابة مسارات .json المجردة إلى scan. يتحول ملفا JSON أو أكثر إلى multi.
masq sit -- python3 -m your_mcp
masq sit --url http://127.0.0.1:PORT/mcp
Loopback كافٍ. عناوين URL خارج loopback تحتاج أيضًا إلى --lab ومضيف مدرج في قائمة السماح (انظر أدناه). المصادقة، إذا كان الخادم يحتاجها:
masq sit --url http://127.0.0.1:PORT/mcp --token-file /path/to/token
masq sit --url http://127.0.0.1:PORT/mcp --token-env MCP_TOKEN
masq sit --url http://127.0.0.1:PORT/mcp --header "Authorization: Bearer …"
لا تتم كتابة الرموز المميزة في التقرير أبدًا.