العودة إلى المدونة

ماذا يرسل مساعد الذكاء الاصطناعي الخاص بك إلى الخارج: تدقيق حركة المرور عبر mitmproxy

تحليل حركة المرور لـ GitHub Copilot أظهر: العميل يجمع ما يصل إلى 20 ملفًا من السياق، والتغييرات والمحتوى المفتوح لـ .env - كل شيء يذهب إلى الخادم كنص عادي، بينما يتم تخزين تاريخ الدردشة المحلي بدون تشفير. تعليمات خطوة بخطوة حول كيفية تشغيل mitmproxy في وضع local، والتقاط الكناري في جسم الطلب ولماذا لا تنقذ استبعاد المحتوى الافتراضي في وضع الوكيل.

📅٢ ربيع الأول ١٤٤٨ هـ
ماذا يرسل مساعد الذكاء الاصطناعي الخاص بك إلى الخارج: تدقيق حركة المرور عبر mitmproxy
```html

في 11 أغسطس 2026، انتشر تحليل على Hacker News يجب على كل من يمتلك مساعد AI في IDE الخاص به قراءته: قام باحث بتوصيل VS Code مع GitHub Copilot عبر بروكسي اعتراضي ورأى ما يتم إرساله إلى الخوادم. اتضح أن الطلب يتضمن أكثر بكثير من السطر الذي تكتبه، بما في ذلك محتوى ملف .env المفتوح بشكل كامل.

الخبر الجيد: يمكن لأي شخص التحقق من ذلك، وليس فقط على Copilot. أدناه - تعليمات عملية حول كيفية رفع تدقيق حركة المرور لمساعدك في 20-30 دقيقة، وما الذي تبحث عنه في الطلبات المعترضة وما هي القيود على الآليات الافتراضية لاستثناء الملفات.

لماذا يجب القيام بذلك بنفسك

توثق الوثائق الخاصة بالمورد السياسة، وليس السلوك الفعلي للعميل. بين "نحن لا نستخدم كودك للتعلم" و "العميل لا يرسل كودك إلى الخادم" - هناك فجوة: لتوليد اقتراح، يجب أن تحصل النموذج على السياق، والسؤال هو مدى اتساع السياق الذي يجمعه العميل.

التدقيق ضروري إذا كنت:

  • تعمل بموجب NDA أو مع بيانات شخصية للعملاء وتحتاج إلى معرفة ما يخرج عن الحدود؛
  • تحتفظ بأسرار في المستودع، إعدادات البيئات، عناوين داخلية ورموز؛
  • تتحمل مسؤولية الامتثال في الفريق وتحتاج إلى سجل حقيقي للطلبات، وليس لقطة شاشة من الإعدادات؛
  • فقط تريد أن تفهم لماذا يعرف المساعد فجأة عن ملف لم تفتحه.

ما الذي وجدناه في حركة مرور Copilot

التحليل الذي نتحدث عنه اعتمد على mitmproxy الكلاسيكي: تم توجيه VS Code إلى بروكسي محلي على المنفذ 8080 وتم تعطيل التحقق الصارم من الشهادة. الاكتشافات الرئيسية:

  • السياق أوسع من ملف واحد. عند الإكمال التلقائي، يجمع العميل ما يصل إلى 20 ملفًا، 8 ملخصات من آخر التعديلات و3 أسطر من السياق حول كل تغيير، بالإضافة إلى النص الكامل للملف الحالي والملفات التي تم تعديلها مؤخرًا على شكل اختلافات.
  • الأسرار غير مخفية. في جسم الطلب، كان حقل prompt يحتوي على سلسلة من النوع TEST_ENV_VAR_SECRET="mysecretenvvar" - أي أن المتغيرات البيئية من الملف المفتوح كانت تُرسل كنص عادي.
  • قاعدة البيانات المحلية مفتوحة أيضًا. يحتفظ ملف session-store.db بـ user_message و assistant_response بدون تشفير أو تعديل: كانت تتجمع فيه الرموز، مفاتيح مزودي الخدمات السحابية وكلمات المرور من سلاسل الاتصال التي قمت بإدخالها في الدردشة في وقت ما.
  • استدعاءات الخدمة. بالإضافة إلى الإضافات نفسها، يستدعي العميل /models، /agents/swe/models، /models/session/intent ونقاط نهاية OAuth الخاصة بـ GitHub - من خلالها يمكن رؤية كيف يصنف المساعد طلبك قبل توليد الرد.

من المهم أن نتذكر: العميل يرسل إلى الخادم عنوان URL للمستودع الحالي للحصول على سياسة الاستثناءات القابلة للتطبيق. هذه الحقيقة بحد ذاتها غير ضارة، لكنها تعني أن تكوين شجرة العمل الخاصة بك - هو أيضًا إشارة.

خطوة بخطوة: رفع الاعتراض

  1. قم بتثبيت mitmproxy وتشغيله. يكفي واجهة الويب: mitmweb. بشكل افتراضي، يستمع البروكسي على المنفذ 8080، ويفتح وحدة التحكم في المتصفح. بالنسبة لـ CI والجلسات الطويلة، من الأسهل استخدام mitmdump.
  2. قم بتثبيت الشهادة الجذرية. عند التشغيل الأول، يقوم mitmproxy بإنشاء CA في الدليل ~/.mitmproxy (ملف mitmproxy-ca-cert.cer). يجب إضافته إلى الموثوقين - وإلا سيفصل العميل اتصال TLS. خلال فترة التدقيق، يكفي الثقة على مستوى المستخدم؛ بعد ذلك - قم بإزالة الشهادة، ولا تترك CA الغير موثوق في النظام "لأي طارئ".
  3. اختر وضع الاعتراض. هناك ثلاثة أوضاع، والاختيار الصحيح يوفر ساعة من المتاعب:
    • عادي - بروكسي عادي، يتم إعداد العميل بشكل صريح. الخيار الأكثر توقعًا.
    • محلي - اعتراض شفاف للتطبيقات على نفس الجهاز، دون تعديل إعدادات البرنامج: mitmproxy --mode local:Code ستلتقط فقط عملية VS Code، --mode local:42 - العملية ذات PID المحدد، --mode local:!curl - كل شيء ما عدا curl. هذه هي أفضل طريقة للاستماع إلى المساعد الذي ليس لديه إعداد بروكسي.
    • عالي - سلسلة، عندما يكون وراء mitmproxy بروكسي خاص بك: mitmdump --mode upstream:http://host:8081، ويتم تعيين اسم المستخدم وكلمة المرور عبر الخيار --set upstream_auth=user:pass.
  4. وجه IDE إلى البروكسي (لوضع العادي). في VS Code في settings.json:
    • "http.proxy": "http://127.0.0.1:8080"
    • "http.proxySupport": "override"
    • "http.proxyStrictSSL": false - فقط خلال فترة التدقيق. هذا العلم يعطل تمامًا التحقق من الشهادات، ولا ينبغي تركه في التكوين العامل.
  5. حل مشكلة الشهادة بشكل احترافي. يعمل ملحق Copilot على Node، لذا فإن الطريقة الصحيحة هي عدم تعطيل التحقق، بل تجميع PEM مع CA الجذرية بالإضافة إلى شهادة mitmproxy وتحديدها عبر متغير البيئة NODE_EXTRA_CA_CERTS. يجب إعادة تشغيل IDE: يتم قراءة المتغير عند بدء العملية.
  6. اكتب التدفق في ملف. النظر بعينيك في الوقت الحقيقي غير مجدي - هناك عشرات الطلبات في الدقيقة. قم بتشغيل --set save_stream_file=flows.dump، ولتجنب جمع كل شيء، قيد العينة عبر --set save_stream_filter=.... بعد ذلك، يمكن تحليل الملف بهدوء في وضع عدم الاتصال.
  7. ابحث في جسم الطلب، وليس في URL. تقنية عملية: ضع في المستودع التجريبي ملف كناري بسلسلة فريدة (على سبيل المثال، CANARY_9f3c_DO_NOT_SEND)، افتحها في المحرر، اعمل في ملف مجاور - وابحث عن الكناري في الأجسام المعترضة. بهذه الطريقة سترى ليس فقط النطاق النظري، ولكن النطاق الفعلي لجمع السياق في نسختك من العميل.

المزالق

قد تمنع الترخيصات الاعتراض. في الخطط المؤسسية، يعطي Copilot خطأ من النوع "ترخيص Copilot الحالي الخاص بك لا يدعم اتصالات البروكسي مع الشهادات الموقعة ذاتيًا". هذه ليست مشكلة في البروكسي - العميل يرفض عمدًا العمل عبر CA الموقعة ذاتيًا. يتم علاجها بشهادة موثوقة على مستوى النظام أو بتجميع PEM لـ Node؛ إذا كانت سياسة المؤسسة تمنع ذلك، سيتعين عليك التنسيق مع المسؤول بشأن التدقيق، وليس التحايل عليه.

التثبيت وQUIC. بعض العملاء يستخدمون HTTP/3 فوق QUIC، الذي لا يمكن للبروكسي العادي رؤيته. إذا كان التطبيق "يعمل، لكن السجل فارغ" بعد تفعيل الاعتراض - فإن السبب غالبًا ما يكون هنا: قم بحظر UDP/443 للعملية التجريبية، وسيتراجع العميل إلى HTTP/2.

التحليلات والحمولة المفيدة تسير في طرق مختلفة. لا تستنتج "لا شيء يخرج" من نقطة نهاية واحدة: انظر إلى القائمة الكاملة للمضيفين الذين يتصل بهم العملية، وليس فقط ذلك المذكور في الوثائق.

الإطار القانوني. يمكن الاعتراض على حركة المرور على جهازك وحسابك. الاستماع إلى جهاز كمبيوتر محمول لشخص آخر دون علمه - هذه قصة أخرى، ولا تبررها أي "أمان".

ماذا تفعل بالنتائج

إذا أظهر التدقيق أن الطلبات تتضمن ملفات غير ضرورية، فإن الوسائل الافتراضية تبدو على النحو التالي - ولكل منها قيود ملحوظة.

  • استثناء المحتوى. آلية رسمية من GitHub، تمنع Copilot من استخدام المسارات المحددة. متاحة فقط في الخطط التجارية والمؤسسية، يتم إعدادها بواسطة المسؤول في إعدادات Copilot، مدعومة في VS Code وVisual Studio وJetBrains؛ في Xcode وEclipse وVim/Neovim - فقط للإضافات المضمنة.
  • الثغرة الرئيسية - وضع الوكيل. الوثائق تقول بوضوح أن الاستثناءات غير مدعومة في أوضاع التحرير والوكيل في Copilot Chat، وكذلك في Copilot CLI. أي أنه حيث يقوم المساعد بالتنقل في الملفات، وقراءة الإعدادات، وتنفيذ الأوامر، لا يتم تطبيق تصفية المنصة. إذا كنت تعتمد على استثناء المحتوى كحاجز وحيد - فلا يوجد حاجز في وضع الوكيل.
  • .gitignore لا يحمي. اعتقاد شائع: الاستثناء من فهرس Git لا يعني الاستثناء من سياق المساعد.
  • الحد الأدنى التنظيمي. يجب وضع الأسرار في مدير الأسرار، وليس في .env بجوار الكود؛ دردشة المساعد ليست مكانًا لإدخال سلاسل الاتصال؛ يجب تنظيف قاعدة البيانات المحلية بنفس الطريقة التي تقوم بها بتنظيف سجل shell.

أين البروكسي هنا ولماذا تحتاجه

للاعتداء تطبيق عملي. أولاً، يسمح وضع upstream بتمرير كل حركة مرور المساعد عبر عقدة خروج خاضعة للرقابة: يمكنك رؤية الطلبات وإدارة العنوان الذي تخرج منه في نفس الوقت. هذا ضروري عندما يكون API المساعد غير متاح من منطقتك أو عندما تتطلب السياسة المؤسسية عنوان IP ثابت - لمثل هذا السيناريو، تناسب البروكسيات الثابتة بروكسيات مركز البيانات ذات العنوان الثابت.

ثانيًا، يمكن استخدام نفس الإعداد لتصحيح الأتمتة: عندما يتنقل وكيل AI عبر المواقع، يظهر الاعتراض العناوين التي يرسلها بالفعل وما الذي تلتقطه الحمايات. لقد ناقشنا هذه العلاقة في المادة حول البروكسيات لوكلاء AI على Playwright وMCP - هناك حول اختيار نوع العنوان لسيناريوهات الوكيل، حيث تحتاج إلى عنوان IP سكني، وليس خادمي.

إذا لم تقم برفع mitmproxy من قبل، ابدأ بالإعداد الأساسي لاعتراض HTTPS - تم وصفه بالتفصيل في دليلنا لاعتراض حركة المرور عبر mitmproxy، ثم قم بإضافة أوضاع local وupstream.

الاستنتاج

تدقيق حركة مرور مساعد AI ليس جنونًا، بل هو نظافة هندسية طبيعية تستغرق مساء واحدًا مرة واحدة. أظهر تحليل Copilot صورة واضحة: يجمع العميل السياق بشكل واسع، وتدخل الأسرار في هذا السياق جنبًا إلى جنب مع الكود، وتُخزن السجلات المحلية كنص عادي، ولا تعمل الاستثناءات الافتراضية تمامًا في الوضع الأكثر خطورة - وضع الوكيل.

تحقق من حركة المرور، وليس الوثائق. ارفع mitmproxy في وضع local، ضع في المستودع كناري، اجمع التدفق في ملف وانظر بعينيك ما يخرج من جهازك. بعد ذلك، القرار بسيط: إما أن تقبل عن طيب خاطر هذا الحجم من النقل، أو تنقل الأسرار خارج شجرة العمل قبل أن يراها خادم آخر.

```