Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
NachoVPN — 맛있지만 악성인 SSL-VPN 서버 🌮 | Kitploit
도구/GitHubGitHub/amberwolfcyber/nachovpn
Privilege EscalationVulnerability AnalysisExploitationNetwork SecurityPenetration TestingRed TeamingPayload DevelopmentAdversarial Attack
GitHubamberwolfcyber/nachovpn

NachoVPN

맛있지만 악성인 SSL-VPN 서버 🌮

저장소 보기
267315개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

NachoVPN 🌮🔒

NachoVPN은 악성(rogue) VPN 서버를 사용하여 SSL-VPN 클라이언트의 취약점을 악용하는 개념 증명(PoC)입니다.

플러그인 기반 아키텍처를 사용하므로 커뮤니티에서 추가 SSL-VPN 제품에 대한 지원을 기여할 수 있습니다. 현재 Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect, Ivanti Connect Secure 등 여러 인기 기업용 VPN 제품을 지원합니다.

자세한 내용은 블로그 게시물과 HackFest Hollywood 2024 프레젠테이션 [슬라이드|비디오]를 참조하십시오.

설치

사전 요구 사항

  • Python 3.9 이상
  • Docker (선택 사항)
  • osslsigncode (Linux 전용)
  • msitools (Linux 전용)
  • python3-netfilter (Linux 전용)
  • git

Linux 설정

NachoVPN은 Ubuntu 22.04에서 빌드 및 테스트되었습니다.

  • python3-nftables 및 nftables 설치

  • 선택적으로 setcap을 사용하여 sudo 요구 사항을 피할 수 있습니다:

    root@kitploit:~
    sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
    
  • IP 전달 활성화:

    root@kitploit:~
    sudo sysctl -w net.ipv4.ip_forward=1
    

소스에서 설치

NachoVPN은 pip를 사용하여 GitHub에서 설치할 수 있습니다. 이 경우 git이 설치되어 있어야 합니다.

먼저 가상 환경을 생성합니다.

Linux에서는 가상 환경이 시스템 site-packages에 접근할 수 있어야 nftables가 동작합니다:

root@kitploit:~
python3 -m venv env --system-site-packages
source env/bin/activate

Windows에서는 nftables(따라서 패킷 전달)가 비활성화되므로 다음을 사용합니다:

root@kitploit:~
python -m venv env
.\env\Scripts\activate

그런 다음 NachoVPN을 설치합니다:

root@kitploit:~
pip install git+https://github.com/AmberWolfCyber/NachoVPN.git

Docker를 사용하려면 GitHub Container Registry에서 컨테이너를 가져올 수 있습니다:

root@kitploit:~
docker pull ghcr.io/AmberWolfCyber/nachovpn:release

배포용 빌드

wheel 파일 빌드

먼저 이 저장소를 클론하고 pip로 setuptools와 wheel을 설치합니다. 그런 다음 setup.py 스크립트를 실행할 수 있습니다:

root@kitploit:~
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel

그러면 dist 디렉터리에 wheel 파일이 생성되며 pip로 설치할 수 있습니다:

root@kitploit:~
pip install dist/nachovpn-1.0.0-py3-none-any.whl

로컬 개발용 빌드

또는 로컬 개발을 위해 다음 명령으로 패키지를 편집 가능(editable) 모드로 설치할 수 있습니다:

root@kitploit:~
pip install -e .

컨테이너 이미지 빌드

다음 명령으로 컨테이너 이미지를 빌드할 수 있습니다:

root@kitploit:~
docker build -t nachovpn:latest .

실행

서버를 독립 실행형으로 실행하려면 다음을 사용합니다:

root@kitploit:~
python -m nachovpn.server

또는 Docker를 사용하여 서버를 실행할 수 있습니다:

root@kitploit:~
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 환경 변수를 설정하여 인증서 생성을 건너뛸 수 있습니다.

이 경우 자체 서명 인증서가 대신 생성됩니다.

root@kitploit:~
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은 다음 플러그인과 기능을 지원합니다:

URI 핸들러

  • Ivanti Connect Secure(Pulse Secure) URI 핸들러는 NachoVPN 서버의 /pulse URL을 방문하여 트리거할 수 있습니다.
  • SonicWall NetExtender URI 핸들러는 NachoVPN 서버의 /sonicwall URL을 방문하여 트리거할 수 있습니다. 클라이언트 머신에 SonicWall Connect Agent가 설치되어 있어야 합니다.
  • Delinea URI 핸들러는 NachoVPN 서버의 /delinea URL을 방문하여 트리거할 수 있습니다.

운영 참고 사항

  • 신뢰할 수 있는 인증 기관(CA)이 서명한 TLS 인증서를 사용하는 것이 좋습니다. Docker 컨테이너는 certbot을 사용하여 이 과정을 자동화합니다. 신뢰할 수 있는 인증서를 사용하지 않으면 NachoVPN은 자체 서명 인증서를 대신 생성하며, 대부분의 경우 클라이언트에 인증서 경고를 표시하거나, 클라이언트 설정을 수정하여 자체 서명 인증서를 허용하지 않는 한 연결을 거부합니다. Palo Alto GlobalProtect 플러그인의 경우 MSI 설치 프로그램도 실패하게 됩니다.
  • SonicWall 플러그인에 유효한 코드 서명 인증서를 시뮬레이션하기 위해 NachoVPN은 NACAgent.exe 페이로드를 자체 서명 인증서로 서명합니다. 테스트 목적으로 공격을 트리거하기 전에 /sonicwall/ca.crt에서 이 CA 인증서를 다운로드하여 설치할 수 있습니다. 프로덕션 사용 사례의 경우 공개 CA에서 유효한 코드 서명 인증서를 획득하여 NACAgent.exe 페이로드에 서명한 후 payloads 디렉터리에 배치해야 합니다(Docker를 사용하는 경우 /app/payloads에 볼륨 마운트).
  • 편의를 위해 SonicWall 플러그인용 기본 NACAgent.exe 페이로드가 생성되어 payloads 디렉터리에 기록됩니다. 이 페이로드는 현재 사용자의 데스크톱에서 SYSTEM 권한으로 새 cmd.exe 프로세스를 생성합니다.
  • Palo Alto GlobalProtect 플러그인은 MSI 설치 프로그램과 msi_version.txt 파일이 downloads 디렉터리에 있어야 합니다. 수동으로 추가하거나 msi_downloader.py 스크립트를 실행하여 다운로드하십시오.

플러그인 비활성화

플러그인을 비활성화하려면 DISABLED_PLUGINS 환경 변수에 추가합니다. 예:

root@kitploit:~
DISABLED_PLUGINS=CiscoPlugin,SonicWallPlugin

환경 변수

NachoVPN은 환경 변수를 통해 구성됩니다. 따라서 컨테이너화된 배포와 쉽게 호환됩니다.

전역 환경 변수:

플러그인별 환경 변수:

완화 방안

다음 완화 방안을 권장합니다:

  • SSL-VPN 클라이언트를 공급업체에서 제공하는 최신 버전으로 업데이트하십시오.
  • 대부분의 VPN 클라이언트는 VPN 프로필을 특정 엔드포인트로 잠그거나 항상 켜진(always-on) VPN 모드를 지원합니다. 가능한 경우 이를 활성화해야 합니다.
  • 안타깝게도 어떤 경우에는 악의적인 로컬 사용자가 이 잠금을 제거할 수 있으므로, 호스트 기반 방화벽 규칙을 사용하여 VPN 클라이언트가 통신할 수 있는 IP 주소를 제한하는 것도 권장됩니다.
  • WDAC와 같은 애플리케이션 제어 정책이나 EDR 솔루션을 사용하여 승인된 실행 파일과 스크립트만 VPN 클라이언트에 의해 실행될 수 있도록 하는 것을 고려하십시오.
  • VPN 클라이언트가 비표준 자식 프로세스를 실행하는 것을 탐지하고 경고하십시오.

참고 자료

  • AmberWolf 블로그: NachoVPN
  • HackFest Hollywood 2024: Very Pwnable Networks: 상용 VPN 클라이언트를 악용하여 원격 루트 및 SYSTEM 셸 탈취, Rich Warren & David Cash [비디오]
  • BlackHat 2008: Leveraging the Edge: SSL VPN 악용, Mike Zusman
  • BlackHat 2019: NSA처럼 기업 인트라넷에 침투하기, Orange Tsai & Meh Chang
  • NCC Group: 새로운 연결 만들기: Cisco AnyConnect 클라이언트를 활용하여 페이로드 드롭 및 실행, David Cash & Julian Storr
  • The OpenConnect Project

기여

기여를 환영합니다! 이슈를 열거나 Pull Request를 올려 주세요.

새 플러그인 개발에 관심이 있다면 ExamplePlugin을 살펴보고 시작할 수 있습니다.

라이선스

NachoVPN은 MIT 라이선스로 제공됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.

도구 다운로드
PluginProductCVEWindows RCEmacOS RCEPrivilegedURI HandlerPacket CaptureDemo
CiscoCisco AnyConnectN/A✅✅❌❌✅Windows / macOS
SonicWallSonicWall NetExtenderCVE-2024-29014✅❌✅✅❌Windows
PaloAltoPalo Alto GlobalProtectCVE-2024-5921 (부분 수정)✅✅✅❌✅Windows / macOS / iOS
PulseSecureIvanti Connect SecureCVE-2020-8241 (우회됨)✅✅✅✅ (Windows 전용 - 22.8R1에서 기본적으로 비활성화됨)✅Windows
NetskopeNetskopeCVE-2025-0309✅❌✅❌❌Windows
DelineaProtocol HandlerCVE-2026-????✅✅❌✅❌Windows
  • Palo Alto GlobalProtect 다운그레이드 공격을 수행하려면 GlobalProtect.msi.old와 GlobalProtect64.msi.old가 downloads 폴더에 있어야 합니다. 이 파일은 6.2.6 이전 버전(예: 6.2.5)의 수정되지 않은 MSI 설치 프로그램을 포함해야 합니다.
  • VariableDescriptionDefault
    SERVER_FQDN서버의 정규화된 도메인 이름(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터널을 통해 \\10.10.0.1\<SMB_SHARE_NAME>에서 사용할 수 있는 SMB 공유를 활성화합니다.false
    SMB_SHARE_NAMESMB 공유에 사용할 이름.SHARE
    SMB_SHARE_PATHSMB 공유에 사용할 디렉터리의 경로.smb
    TUNNEL_PRIVATEtrue로 설정하면 터널링을 활성화하지만 VPN 클라이언트의 인터넷 전달은 비활성화합니다. 클라이언트는 SMB 공유에만 접근할 수 있습니다.false
    TUNNEL_FULLtrue로 설정하면 전체 터널링을 활성화하고 VPN 클라이언트가 인터넷에 접근할 수 있게 합니다. 또한 TUNNEL_PRIVATE=true를 의미합니다.false
    VariableDescriptionDefault
    VPN_NAMECisco AnyConnect에 클라이언트로 표시되는 VPN 프로필 이름.NachoVPN
    PULSE_LOGON_SCRIPTPulse Secure 로그온 스크립트의 경로.C:\Windows\System32\calc.exe
    PULSE_LOGON_SCRIPT_MACOSmacOS용 Pulse Secure 로그온 스크립트의 경로.
    PULSE_DNS_SUFFIXPulse Secure 연결에 사용할 DNS 접미사.nachovpn.local
    PULSE_USERNAMEPulse Secure 로그온 대화상자에 미리 채워질 사용자 이름.
    PULSE_SAVE_CONNECTIONPulse Secure 연결을 사용자 클라이언트에 저장할지 여부.false
    PULSE_ANONYMOUS_AUTHPulse Secure 연결에 익명 인증을 사용할지 여부. true로 설정하면 사용자에게 사용자 이름이나 비밀번호를 묻지 않습니다.false
    PULSE_HOST_CHECKER_RULES_FILEICS용 레지스트리 기반 호스트 검사 규칙 목록이 포함된 JSON 파일. 예제는 src/nachovpn/plugins/pulse/test/example_rules.json을 참조하십시오.
    PALO_ALTO_MSI_ADD_FILEPalo Alto 설치 프로그램 MSI에 추가할 파일의 경로.
    PALO_ALTO_MSI_COMMANDPalo Alto 설치 프로그램 MSI가 실행할 명령.net user pwnd Passw0rd123! /add && net localgroup administrators pwnd /add
    PALO_ALTO_FORCE_PATCHpayloads 디렉터리에 MSI 설치 프로그램이 이미 있는 경우 패치를 강제할지 여부.false
    PALO_ALTO_PKG_COMMANDmacOS에서 Palo Alto 설치 프로그램 PKG가 실행할 명령.touch /tmp/pwnd
    CISCO_COMMAND_WINWindows에서 Cisco AnyConnect OnConnect.vbs 스크립트가 실행할 명령.calc.exe
    CISCO_COMMAND_MACOSmacOS에서 Cisco AnyConnect OnConnect.sh 스크립트가 실행할 명령.touch /tmp/pwnd