بنى أحدهم أتمتة تشغّل شبكة VPN عند ظهور علامة تبويب متخفية، وهي لا تعمل بموثوقية. السبب بنيوي، ويستحق الفهم قبل ضبط الأتمتة: قواعد VPN لكل تطبيق على Android تختار حزم التطبيقات، أما التخفي فحالة داخل حزمة واحدة، لذا لا تستطيع القاعدة التمييز بينهما. ويصل الإشعار بعد أن يبدأ المتصفح العمل، حتى المحفّز الصحيح يصل متأخرا. اتبع الفحوص الخمسة بالترتيب؛ وفشل الفحص الرابع يعني أن النهج لا الإعدادات هو ما يجب تغييره.

الفحص الأول: ما الذي تستطيع القاعدة اختياره

يبني تطبيق VPN نفق عبره من قوائم التطبيقات المسموح بها أو المحظورة، وهذه القوائم تأخذ أسماء الحزم. Chrome في الوضع العادي وChrome في الوضع المتخفي حزمة واحدة، بالمعرّف نفسه وإذن الشبكة نفسه، فالقاعدة التي تضم Chrome أو تستثنيه تنطبق على الاثنين بالتساوي. ولا يملك النظام هوية مقيدة بعلامة تبويب ليطابقها.

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

انتبه إلى فخ هوية الحزمة: نسخة بيتا أو نسخة مورّد حزمة مختلفة عن المتصفح المستقر، فالقاعدة التي تغطي إحداهما تفوت الأخرى بصمت:

adb shell pm list packages | grep -i chrome

الفحص الثاني: هل يمكن أن يصل المحفّز مبكرا بما يكفي

مستمع الإشعارات يراقب الإشعارات المسموح له برؤيتها. المراقبة ليست اعتراضا: عند وجود الإشعار يكون المتصفح قد حلّ الاسم وفتح الاتصال، ولا شيء في ذلك المسار ينتظر أتمتتك. والمهمة التي تشغّل بعدها عميل VPN يجب أن تنتظر واجهة العميل وأي مطالبة موافقة ومصافحة النفق، وهي تقاس بالثواني بينما يقاس الطلب الأول بالمللي ثانية.

والكشف هش لسبب ثان. نص الإشعار يتغير بين الإصدارات والترجمات، فنمط يطابق إصدارا يتوقف عن المطابقة بعد تحديث، والفشل صامت. غياب الإشعار ليس دليلا على غياب التصفح الخاص؛ قد يعني فقط أن النص تغير أو أن القناة صامتة.

هناك صيغة مشروعة لهذا سير العمل، وهي مرتبة لا تفاعلية: صِل شبكة VPN المعتمدة أولا، وأكّد إشارة جهوزية تثبت فعلا أن النفق يحمل حركة، ثم افتح جلسة التخفي عبر أدوات المتصفح المدعومة، وتوقف إن فشل فحص الجهوزية. ذلك يحمي الجلسة التي أنت على وشك بدئها دون ادعاء حماية جلسة تعمل بالفعل.

الفحص الثالث: دقّق الإذن قبل منحه

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

قبل منح أي شيء، اسأل إن كان الناتج نفسه يمكن بلوغه بآلية مدعومة. إن كان الجواب مطلبا سياساتيا، فغالبا نعم: يستطيع النظام فرض نفق لتطبيق أو ملف تعريف دون أي خدمة استماع.

الفحص الرابع: استخدم التشغيل الدائم والحظر عند الحاجة إلى الإنفاذ

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

adb shell settings get global always_on_vpn_app
adb shell settings get global always_on_vpn_lockdown

قيمة تطبيق غير فارغة تعني أن حزمة مضبوطة كدائمة، وقيمة قفل 1 تعني أن الاتصالات خارج النفق محظورة. الزوج يحوّل عادة بذل أفضل إلى ضمان ويزيل السباق كليا، لأن النفق يُنشأ قبل السماح بحركة التطبيقات.

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

الفحص الخامس: اكتب سير العمل واختبر مسار الفشل

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

ثم اختبر الفشل لا النجاح فقط. اقطع النفق أثناء جلسة وراقب ما يفعله المتصفح؛ أوقف عملية تطبيق VPN وتأكد من عدم تسرب شيء. وأخيرا، أبقِ نموذجي الخصوصية منفصلين في التوثيق: التخفي يتحكم بحالة متصفح مؤقتة ولا يخفي الحركة عن الشبكة، بينما ينقل VPN الحركة لكنه لا يمحو بيانات الدخول ولا أي شيء أُرسل داخل الجلسة الخاصة.

مقالات ذات صلة