
Вкусный, но вредоносный 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.
Сначала создайте виртуальное окружение.
В 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
Сначала клонируйте этот репозиторий и установите 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 | 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 (обойдено) | ✅ | ✅ | ✅ | ✅ (только Windows — отключено по умолчанию в 22.8R1) | ✅ | Windows |
| Netskope | Netskope | CVE-2025-0309 | ✅ | ❌ | ✅ | ❌ | ❌ | Windows |
| Delinea | Обработчик протокола | CVE-2026-???? | ✅ | ✅ | ❌ | ✅ | ❌ | Windows |
/pulse на сервере NachoVPN./sonicwall на сервере NachoVPN. Для этого на клиентской машине должен быть установлен SonicWall Connect Agent./delinea на сервере NachoVPN.