
استطلاع حي وتدقيق الوضع الأمني للبنية التحتية لوكلاء الذكاء الاصطناعي: يفحص إعدادات MCP وسجلات الجلسات وواجهات برمجة التطبيقات بحثًا عن الأسرار والكتالوجات المسمومة وتسريبات CoT.
حفلة تنكرية من عصر النهضة. اجلس في مقعد الوكيل.
اجلس في مقعد الوكيل.
واجهة CLI تتحدث MCP وتوافق OpenAI تمامًا كما يفعل النموذج، ثم تُبلغ بأسلوب linpeas. استنتاجات مع الإصلاحات. بلا حمولات استغلال. بلا فك تشفير CoT.
| ما هي | استطلاع حي للبنية التحتية للوكيل: إعدادات MCP، مستمعون، سجلات جلسات، صدى سلسلة التفكير المشفّرة، واجهات API بلا مصادقة، تسميم الكتالوج، أشجار المهارات. |
| لمن | مشغّلو Hermes وGrok وClaude وCursor وVS Code وCodex ومكدسات النماذج المحلية الذين يحتاجون إلى رؤية ما يراه الوكيل. |
| ما ليست عليه | ليست مولّد كسر قيود. ليست مفكّك الترميز arXiv:2608.09867 للنموذج الأضعف. ليست بوابة وقت التشغيل. |
| الحالة | Beta. cargo test دون اتصال هو بوابة الإصدار العام. --lab الحي مخصص للمضيفات التي تملكها. |
| الترخيص | MIT |
الماسحات الساكنة لـ MCP (Invariant mcp-scan, mcp-security-scan) تفحص المخططات والإعدادات. أدوات الفحص الصحي تبعث ping إلى initialize. الثغرة هي المقعد:
initialize، فأنت الوكيل بذاته.:11434, :8000) كثيرًا ما تُربط على 0.0.0.0 دون رمز bearer.عجلات نستخدمها لا نعيد كتابتها: كاشفات الكتالوج الحالية + pin/check، وnetstat، وureq للـ GET فقط، وتصنيف OWASP MCP Top 10 كتصنيف للاستنتاجات. لم نستنسخ mcp-scan أو mcp-security-scan.
git clone https://gitlab.com/WattoCyber/masq.git
cd masq
cargo install --path .
# binary: masq
cargo test
# expect: exit 0
المجموعة الشاملة (الملف التنفيذي ضد الـ fixtures، ومحاكاة محلية، واستطلاع لهذا المضيف):
python scripts/world_suite.py
# field = ~/.grok/sessions lab = allowlisted hosts bench = frozen-corpus wall
python scripts/world_suite.py --lanes all
جهاز بعيد بأسلوب Kali، من سطح المكتب:
MASQ_REMOTE_HOST=user@host bash scripts/deploy_kali.sh
# on the box:
~/.local/bin/masq --plain
MASQ_LAB_HOSTS=... ~/.local/bin/masq --lab --plain
masq # live stream + posture report (includes skills)
masq --lab # same, plus allowlisted homelab hosts
masq tui # boxed TUI, stays until Ctrl+C
masq --plain # report only, no live stream
masq --json # machine report
masq recon # same dump, recon only
masq sniff ~/.grok/sessions # CoT / secrets in session logs
masq sniff --timeline PATH # file-order blob/secret/reason lines (no decrypt)
masq api # GET /v1/models on local (and --lab) ports
masq sit --url http://127.0.0.1:4443/mcp
masq chameleon --url http://127.0.0.1:4443/mcp -o /tmp/chameleon
masq chameleon --url ws://127.0.0.1:9000/mcp -o /tmp/chameleon
masq chameleon --url unix:///tmp/mcp.sock -o /tmp/chameleon
masq chameleon --token-file ~/.secrets/mcp.txt --url http://127.0.0.1:9/mcp -o /tmp/chameleon
masq chameleon -- python -m their_mcp -o /tmp/chameleon
# then: npx -y @copilotkit/aimock --config /tmp/chameleon/aimock.json
masq discover # find VS Code / Cursor / Claude / Grok / Hermes MCP configs
masq proxy --upstream http://127.0.0.1:4443/mcp --block
masq sast ./server # local sinks (semgrep if present)
masq classify --url http://127.0.0.1:4443/mcp --lab
masq overnight --lab --hours 6
masq map --from reports/overnight-YYYYMMDD/latest.json
# catalog
masq fixtures/t3_line_jump.json
masq fixtures/clean_calculator.json --trusted
masq pin fixtures/clean_calculator.json -k calc
masq check fixtures/clean_calculator.json -k calc
masq detectors
الخروج: 0 نظيف · 2 استنتاجات ≥ --fail-on (الافتراضي high) · 1 خطأ.
واجهة TUI اختيارية (masq tui أو --tui). الافتراضي على طرفية tty هو بث حي بأسلوب linpeas يليه التقرير. Cron تستخدم --plain / --no-color.
الأسماء المستعارة: doctor / audit → scan. وchameleon → mimic. وposture → seat.
يتحدث sit / chameleon:
http://)ws://unix: وnpipe:--framing auto يجرب NDJSON ثم Content-Length)المصادقة (لا تُلقى أبدًا في التقرير):
--token-file PATH (السطر الأول يصبح Authorization: Bearer …)--token-env VAR--header "Name: value" (قابل للتكرار)wss:// غير مدمجة. استخدم Stunnel للوصول إلى ws:// أو استخدم HTTP. HTTP لا يتبع أي عمليات إعادة توجيه.
فإن initialize عبر stdio لا يعلن عن sampling. ضع علامة على sampling / elicitation في الخادم. عناوين URL الخاصة بالوثائق (model-catalog.json, /docs/) تُتجاهل عمدًا.
جذور الإعداد والمهارات تحت $HOME / %USERPROFILE%:
VS Code, Cursor, Windsurf, Claude Desktop, Claude Code, Grok, Hermes, Codex, Continue, Gemini CLI, Amp, Kiro, OpenCode, Amazon Q, Antigravity, OpenClaw.
بالإضافة إلى .mcp.json في دليل العمل الحالي وMASQ_EXTRA_CONFIG (قائمة مسارات نظام التشغيل).
--lab)--lab قائمة مسموحة وليست فحصًا لنطاق /24. وهي مضبوطة من المشغّل. لا شيء مُضمّن في البناء خارج loopback.
MASQ_LAB_HOSTS: مضيف:منفذ أو مضيفات مفصولة بفواصل أو مسافات أو أسطر جديدة..masq/lab-hosts: مضيف واحد لكل سطر، وتعليقات #.مثال:
export MASQ_LAB_HOSTS="192.0.2.10,192.0.2.11"
masq --lab
يُقرأ MASQ_LAB_HOSTS لفحوصات API وتجميع أسطول TUI. يوفّر MASQ_SIT_URLS (أو --mcp-url) عناوين MCP URLs للجلوس عليها مع --lab.
يتطلب sit --url خارج loopback --lab ومضيفًا في القائمة المسموحة. مستوى initialize غير المصادق عبر loopback هو High. وخارج الجهاز هو Critical.
لا توجه proxy إلى مضيف لا ترغب بالجلوس عليه.
أولوية Sniff: chat_history.jsonl أولًا، ثم Hermes request_dump_*، ثم باقي ملفات jsonl. يكتمل التجوال. لا يحتفظ بأول 300 نتيجة من WalkDir. وجّه masq sniff <one-session-dir> للتعمق أكثر.
masq overnight --lab --hours 6 --interval-mins 20
# writes <cwd>/reports/overnight-YYYYMMDD/{latest.json,latest.md,latest.txt,delta.txt}
لا يعدّل الإعدادات. ولا ينفذ tools/call على الخادم الحي. delta.txt تحوي baseline / no_change / CHANGE بالإضافة إلى + severity title و- severity title.
classify --llm وإضافة فرز TUI هما الوحيدتان اللتان ترسلان POST لعمليات completions (Grok /v1/chat/completions مع تأكيد المشغّل). بلا مفتاح: إصلاحات محلية فقط. المفتاح من XAI_API_KEY أو ~/.secrets/xai.txt. لا يُلقى أبدًا.
CLI (clap) masq
→ seat | recon | sniff | api | sit | chameleon
→ discover | proxy | sast | classify | overnight | map
→ scan | multi | pin | check | detectors | tui
→ client (HTTP / SSE / ws / unix / npipe / stdio)
→ normalize (full-schema walk, caps)
→ detectors + sniff + recon + sit findings
→ report (text / JSON / Markdown) + optional TUI
مكتبة crate: masq (scan_from_tools_list, scan_stdio, run_seat, PostureReport).
لا تُلقِ محتويات ~/.secrets. Recon تعدّ الملفات. المسار + "loaded".
cargo test
cargo clippy --all-targets -- -D warnings
توقع خروج 0.
الـ Fixtures: تسميم الوصف T1، والقفز السطري T3، وأسماء الوسائط T6، وANSI T8، والأسماء المكررة T13، وسحب بساط التثبيت، وقائمة متعددة، ومحاكاة NDJSON حية في tests/mock_mcp_server.py.
تبقى الأسرار خارج git (reports/, data/, .env, *.key, secrets/, .masq/).
MIT. حقوق النشر 2026 SamsonCyber.
| الأمر | الوظيفة |
|---|
seat (الافتراضي) | الوضعية الكاملة: recon + sniff + api + skills + sit اختياري. |
recon | ملفات الإعداد، المستمعون، عناوين URL الظلية، وسيطات sudo، npx/uvx غير المثبّتة. |
sniff | سجلات الجلسات بحثًا عن الأسرار وتفكير النص الصريح وصدى CoT المشفّر. |
sniff --timeline | أسطر T0001 بترتيب الملفات. دون فك تشفير. سقف 200 حدث/ملف. |
api | /v1/models للـ GET فقط (وأشباهها) على loopback؛ --lab يضيف أقرانًا في القائمة المسموحة. |
sit | يتحدث MCP: initialize, notifications/initialized, tools/list, prompts/list, resources/list. لا يبادر أبدًا بـ tools/call. |
chameleon / mimic | يجلس على كتالوج حي أو ملف، ويكتب catalog.json + aimock.json + calls.json. أغلفة tools/call المثال مخصصة لـ aimock فقط. |
discover | يطبع مسارات إعداد MCP المعروفة للوكيل. دون تشغيل أي عملية. |
proxy | يمرّر JSON-RPC الخاص بالوكيل. --block يرفض وسائط/نتائج tools/call ذات الشكل السري. الاستماع الافتراضي 127.0.0.1:9877. |
sast | مغاسل المصدر المحلية. تستخدم semgrep عند تثبيتها. |
classify | مراجعة محلية لـ IPI / التسميم لقائمة tools/list حية. --llm يسأل Grok (بمفتاح المشغّل). |
overnight | يكرر seat حتى انقضاء --hours. يكتب تقارير. لا يعدّل الإعدادات. |
map | استعلامات نصية لمسارات الهجوم على ملف JSON للوضعية المحفوظ. دون مخططات. |
scan / multi | فحص كتالوج ساكن (مسارات .json المجردة تُعاد كتابتها إلى هذا الأمر). |
pin / check | مخزن تثبيت تجزئة المحتوى (.masq/pins.json) لـ CI ضد سحب البساط. |
detectors | يطبع حزمة قواعد الكتالوج. |
tui | seat داخل صندوق. يبقى حتى Ctrl+C. |
| الوحدة | التغطية |
|---|
| recon | مسار أسرار MCP01، وnpx/uvx غير المثبّتة MCP04، ومستمعو MCP07/09 وعناوين URL الظلية، ووسيطات sudo MCP05 |
| catalog | تسميم/تظليل/سحب بساط المخطط MCP03 |
| skills | نفس كاشفات الكتالوج على SKILL.md (Hermes, Grok, Claude, Cursor, Codex, Gemini, Amp, Kiro, OpenCode, OpenClaw). دون Snyk سحابية. |
| sit | توسّع النطاق MCP02، وtools/list الحي MCP03، وinitialize غير المصادق MCP07، وإعلان الخادم عن sampling/elicitation، وStreamable HTTP (2025-06-18) ثم HTTP+SSE (2024-11-05)، وإعادة ربط DNS للأصل |
| sniff | MCP01 + MCP10 + صدى CoT المشفّر arXiv:2608.09867 (بما في ذلك thinkingSignature) |
| api | MCP07 /v1/models غير المصادق، وربط LAN MCP09 |
| watch | فرق التثبيت على .masq/pins.json + skills. يضبطه Overnight. ليس بروكسيًا. |
| fleet | تجميع قائمة lab المسموحة في قسم FLEET واحد |
| map | استعلامات مسار نصية على تقرير الوضعية |
| الحد | القيمة |
|---|
| ملف tools/list | 8 MiB |
| ملف sniff | 8 MiB (عينة من أول 2 MiB إذا كان أكبر) |
| ملفات sniff / جذر | 300 (الأحدث mtime ضمن الأولوية) |
| أحداث الخط الزمني / ملف | 200، ثم timeline truncated |
| أسطر T للخط الزمني | 500 (يظل الفحص والطي يعملان) |
| عمق تجوال المخطط | 64 |
| أدوات لكل جرد | 5_000 |
| فحص HTTP | GET فقط، 2 ثانية API / 5 ثوانٍ sit |
| مصافحة sit | مهلة + إنهاء |
| هذه الأداة | ليست هذه الأداة |
|---|
| الجلوس كعميل الوكيل (initialize + list) | إطلاق tools/call ضد خادم حي |
| كشف صدى CoT المشفّر في السجلات | فك تشفير CoT أو إعادة تشغيله على نموذج أضعف |
GET /v1/models | POST لعمليات completions (باستثناء فرز TUI الاختياري / classify --llm) |
| كشف سحب البساط عبر تثبيت التجزئة على كتالوج | PKI موقّعة / خزنة تثبيت للمؤسسات |
تمرير tools/call الخاص بالوكيل في proxy --block | بوابة DLP كاملة وقت التشغيل / مستوى تحكم SaaS |
| فحص محلي لشجرة المهارات | Snyk / SCA السحابية |
| الفحص | المتوقع |
|---|
masq fixtures/clean_calculator.json --trusted | خروج 0 |
masq fixtures/t3_line_jump.json | خروج 2 |
masq fixtures/t13_duplicate_names.json | خروج 2 (تظليل الأدوات) |
masq sniff --timeline fixtures/ (non-TTY / --json) | T0001 فقط مع العلامة |
masq chameleon fixtures/clean_calculator.json -o <tmpdir> | catalog.json, aimock.json, calls.json |
حي masq --no-color | الرموز محجوبة (…، وليس sk- كاملًا) |