
خادم SSL-VPN لذيذ، لكنه خبيث 🌮.
NachoVPN هو إثبات مفهوم (Proof of Concept) يوضح استغلال عملاء SSL-VPN باستخدام خادم VPN خادع.
يستخدم بنية قائمة على الإضافات بحيث يمكن للمجتمع المساهمة في دعم منتجات SSL-VPN إضافية. وهو يدعم حاليًا العديد من منتجات VPN المؤسسية الشائعة، مثل Cisco AnyConnect وSonicWall NetExtender وPalo Alto GlobalProtect وIvanti Connect Secure.
لمزيد من التفاصيل، راجع مقالة المدونة، وعرض HackFest Hollywood 2024 [الشرائح|الفيديو].
تم بناء NachoVPN واختباره على Ubuntu 22.04.
ثبّت python3-nftables و nftables
اختياريًا، استخدم setcap لتجنب الحاجة إلى sudo:
sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
فعّل إعادة توجيه IP:
sudo sysctl -w net.ipv4.ip_forward=1
يمكن تثبيت NachoVPN من GitHub باستخدام pip. لاحظ أن هذا يتطلب تثبيت git.
أولاً، أنشئ بيئة افتراضية.
على لينكس، تأكد من أن البيئة الافتراضية لديها إمكانية الوصول إلى site-packages الخاصة بالنظام، حتى يعمل nftables:
python3 -m venv env --system-site-packages
source env/bin/activate
على ويندوز، تكون nftables (وبالتالي إعادة توجيه الحزم) معطلة، لذا استخدم:
python -m venv env
.\env\Scripts\activate
ثم ثبّت NachoVPN:
pip install git+https://github.com/AmberWolfCyber/NachoVPN.git
إذا كنت تفضل استخدام Docker، يمكنك سحب الحاوية من GitHub Container Registry:
docker pull ghcr.io/AmberWolfCyber/nachovpn:release
أولاً، استنسخ هذا المستودع، وثبّت setuptools و wheel عبر pip. يمكنك بعد ذلك تشغيل السكربت setup.py:
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel
سيؤدي هذا إلى إنشاء ملف wheel في مجلد dist، والذي يمكن تثبيته باستخدام pip:
pip install dist/nachovpn-1.0.0-py3-none-any.whl
بدلاً من ذلك، للتطوير المحلي يمكنك تثبيت الحزمة في الوضع القابل للتحرير باستخدام:
pip install -e .
يمكنك بناء صورة الحاوية باستخدام الأمر التالي:
docker build -t nachovpn:latest .
لتشغيل الخادم بشكل مستقل، استخدم:
python -m nachovpn.server
بدلاً من ذلك، يمكنك تشغيل الخادم باستخدام Docker:
docker run -e SERVER_FQDN=connect.nachovpn.local -e EXTERNAL_IP=1.2.3.4 -v ./certs:/app/certs -p 80:80 -p 443:443 --rm -it nachovpn
سيؤدي هذا إلى إنشاء شهادة لـ SERVER_FQDN باستخدام certbot، وحفظها في مجلد certs، الذي قمنا بتركيبه داخل الحاوية.
بدلاً من ذلك، ولأغراض الاختبار، يمكنك تخطي إنشاء الشهادة عن طريق تعيين متغير البيئة SKIP_CERTBOT.
سيؤدي هذا إلى إنشاء شهادة موقّعة ذاتيًا بدلاً من ذلك.
docker run -e SERVER_FQDN=connect.nachovpn.local -e SKIP_CERTBOT=1 -e EXTERNAL_IP=1.2.3.4 -p 443:443 --rm -it nachovpn
يتم أيضًا توفير ملف docker-compose كمثال للراحة.
يمكنك تشغيل nachovpn باستخدام وسيطات سطر الأوامر -d أو --debug لزيادة مستوى تفصيل السجلات، مما يساعد في التصحيح.
بدلاً من ذلك، إذا كانت السجلات مزعجة للغاية، يمكنك استخدام وسيطة سطر الأوامر q أو --quiet بدلاً من ذلك.
يدعم NachoVPN الإضافات والإمكانيات التالية:
| الإضافة | المنتج | CVE | RCE على ويندوز | RCE على macOS | صلاحيات مميزة | معالج URI | التقاط الحزم | عرض توضيحي |
|---|---|---|---|---|---|---|---|---|
| Cisco | Cisco AnyConnect | N/A | ✅ | ✅ | ❌ | ❌ | ✅ | ويندوز / macOS |
| SonicWall | SonicWall NetExtender | CVE-2024-29014 | ✅ | ❌ | ✅ | ✅ | ❌ | ويندوز |
| PaloAlto | Palo Alto GlobalProtect | CVE-2024-5921 (إصلاح جزئي) | ✅ | ✅ | ✅ | ❌ | ✅ | ويندوز / macOS / iOS |
| PulseSecure | Ivanti Connect Secure | CVE-2020-8241 (تم تجاوزه) | ✅ | ✅ | ✅ | ✅ (ويندوز فقط - معطّل افتراضيًا في 22.8R1) | ✅ | ويندوز |
| Netskope | Netskope | CVE-2025-0309 | ✅ | ❌ | ✅ | ❌ | ❌ | ويندوز |
| Delinea | Protocol Handler | CVE-2026-???? | ✅ | ✅ | ❌ | ✅ | ❌ | ويندوز |
/pulse على خادم NachoVPN./sonicwall على خادم NachoVPN. يتطلب ذلك تثبيت SonicWall Connect Agent على جهاز العميل./delinea على خادم NachoVPN.NACAgent.exe بشهادة موقّعة ذاتيًا. لأغراض الاختبار، يمكنك تنزيل وتثبيت شهادة المرجع المصدق (CA) هذه من /sonicwall/ca.crt قبل تشغيل الاستغلال. لحالات الاستخدام في الإنتاج، ستحتاج إلى الحصول على شهادة توقيع كود صالحة من مرجع مصدق عام، وتوقيع الحمولة NACAgent.exe الخاصة بك، ووضعها في مجلد payloads (أو تركيبها كوحدة تخزين في /app/payloads، إذا كنت تستخدم Docker).NACAgent.exe افتراضية لإضافة SonicWall، وكتابتها في مجلد payloads. تقوم هذه الحمولة ببساطة بتشغيل عملية cmd.exe جديدة على سطح مكتب المستخدم الحالي، بصلاحيات SYSTEM.msi_version.txt في مجلد downloads. يمكنك إضافتها يدويًا، أو تشغيل السكربت msi_downloader.py لتنزيلها.GlobalProtect.msi.old و GlobalProtect64.msi.old في مجلد downloads. يجب أن تحتوي هذه الملفات على مثبتات MSI غير معدّلة لإصدار أقدم من 6.2.6 (مثل 6.2.5).لتعطيل إضافة، أضفها إلى متغير البيئة DISABLED_PLUGINS. على سبيل المثال:
DISABLED_PLUGINS=CiscoPlugin,SonicWallPlugin