1. 개요

- PaloAlto GlobalProtect, SonicWall NetExtender SSL-VPN 클라이언트 등에 심각한 취약점 "NachoVPN" 발견 [1][2][3]
- 공격자가 악성 VPN 서버를 통해 피해자 기기에 악성 업데이트 설치 또는 민감한 정보를 탈취할 수 있음
- 소셜 엔지니어링 기법을 활용해 사용자를 악성 VPN 서버로 유도해 익스플로잇

2. 주요내용

2.1 CVE-2024-29014

[사진 1] CVE-2024-29014 [4]

- SonicWall의 NetExtender Windows(32 및 64비트) 클라이언트에서 발생하는 임의 코드 실행 취약점
소셜 엔지니어링을 통해 악성 VPN 서버로 연결 하도록 유도 및 가짜 EPC 클라이언트 업데이트를 전달해 시스템 권한으로 임의 코드를 실행

영향받는 버전
- NetExtender Windows (32 and 64 bit) 10.2.339 및 이전 버전

 

- NetExtender 클라이언트는 SSL-VPN 서버에 연결하는 동안 서버에 EPC 클라이언트 업데이트가 있는지 확인하기 위한 요청 전송
> GET /cgi-bin/sslvpnclient?epcversionquery=nxw
> 서버는 버전 번호로 판단되는 값으로 응답
> 응답이 0xFF인 경우 클라이언트는 /NACAgent.exe에 대한 GET 요청을 전송

 

- NECore.dll의 ValidateSignature()에서 해당 파일이 다운로드되고 유효성을 검증

> 해당 함수는 WINTRUST_ACTION_GENERIC_VERIFY_V2 작업을 사용해 WinVerifyTrust 호출 (실행 파일에 포함된 Authenticode 서명 검증 과정)
> 그러나 실행 파일의 서명이 신뢰할 수 있는 CA와 연결되는지만 확인하며, 특정 게시자(Microsoft, Adobe, Oracle 등)에 의해 서명되었는지 확인하지 않음

> 따라서 시스템에서 신뢰하는 코드 서명 인증서로 실행 파일을 서명만 하게되면 서명 검사를 통과할 수 있음

※ 다운로드한 NACAgent.exe는 SYSTEM으로 실행되는 NEService.exe의 자식 프로세스로 실행

 

[사진 2] ValidateSignature()

- sonicwallconnectagent 사용자 정의 URI 핸들러는 SMA Connect 에이전트에 의해 Windows 레지스트리에 등록

> 핸들러는 클라이언트가 연결해야하는 서버를 지정하는 Base64로 인코딩된 JSON 개체가 포함
따라서 공격자는 host 값을 악의적인 SSL-VPN 서버의 IP를 가리키도록 sonicwallconnectagent:// URL을 제작하면 취약점 악용 가능

 

[사진 3] 레지스트리

[사용자 정의 URI 핸들러 예시]
sonicwallconnectagent://eyJhY3Rpb24iOjEwLCJoZWxwZXJ2ZXJzaW9uIjoiMS4xLjQyIiwiaG9zdCI6IjE3Mi4xNy4xMjguMSIsInBvcnQiOiI0NDMiLCJ1c2VybmFtZSI6InVzZXIiLCJleHRlbmRpZCI6IkV0UUJ2MFp3elY0OGsxRVpaQ3JMU3ZwOGJLcFh4NFRCcGVISmlmOVUxczQ9In0

[디코딩]
{ action: 10, helperversion: "1.1.42", host: "172.17.128.1", port: "443", username: "user", extendid: "EtQBv0ZwzV48k1EZZCrLSvp8bKpXx4TBpeHJif9U1s4=" }

 

- 사용자가 조작된 페이지를 방문하면 악성 SSL-VPN 서버에 연결 및 서명된 악성 NACAgent.exe 실행
> NetExtender 클라이언트에 EPC 에이전트 업데이트 필요 메시지가 표시되며, 무시 또는 확인을 누를 경우 악성 NACAgent.exe 파일이 시스템 권한으로 실행됨

 

[사진 4] 악성 SSL-VPN 접속

[영상 1] 공격 시연 [5]

2.2 CVE-2024-5921

[사진 5] CVE-2024-5921 [6]

- PaloAlto Networks GlobalProtect 앱의 불충분한 인증 유효성 검사로 임의의 서버에 연결할 수 있는 취약점
> 소셜 엔지니어링을 통해 악성 VPN 서버로 연결 하도록 유도 및 가짜 업데이트를 전달해 시스템 권한으로 임의 코드를 실행

영향받는 버전
- GlobalProtect 6.2.6 이전 버전

 

- 클라이언트-서버간 인증 과정 중 클라이언트는 POST 메소드로 서버에 자격 증명을 전송
> 서버는 XML 정책 객체로 포맷된 구성 데이터로 응답

 

- GlobalProtect 클라이언트는 기본적으로 응답을 신뢰
> 유일한 검증은 서버가 해당 도메인에 대한 유효한 TLS 인증서를 가지는지 확인하고 제공된 자격증명을 수락하는 것
익스플로잇에서 root-ca, version, uninstall, client-upgrade 요소가 중요

구분 설명
root-ca - 클라이언트에 제공된 인증서를 신뢰할 수 있는 인증서 저장소에 설치하도록 지시
- GlobalProtect 게이트웨이의 IP 주소가 클라이언트가 신뢰하는 TLS 인증서를 사용할 수 있도록 하기위함
- 공격자는 인증서가 주장하는 모든 목적을 위해 컴퓨터가 완전히 신뢰하는 인증서를 설치할 수 있음 (MITM이 발생해 데이터 탈취 또는 악성 SW 서명 및 실행이 가능)
version - 클라이언트에 반환된 version 태그는 업데이트 요청이 트리커되는지 여부를 결정
- 값이 클라이언트에 현재 설치된 버전보다 높은 경우 연결 성공 시 업데이트를 요청
- Portal 인증 응답의 version 태그가 현재 설치된 버전보다 높은 경우
> 클라이언트는 Portal에 업데이트를 요청
> 서버는 클라이언트의 OS와 아키텍처에 맞는 적절한 설치 프로그램으로 302 응답
uninstall - 업그레이드가 관리되는 방식을 설정
> Allow with Prompt (Default) : 새 버전이 확인될 경우 업데이트 메시지 표시
> Allow Transparently : 사용자 상호 작용 없이 자동으로 업데이트 발생
> Internal : 사용자가 내부 네트워크에서 연결되어 있는 경우에만 사용자 상호 작용 없이 업그레이드되며, 내부 GW와 내부 호스트 감지를 구성해야 함 (외부 네트워크에서 연결된 경우 업그레이드 연기)
> Disallow : 업데이트 차단
> Allow Manually : "버전 확인"을 선택해 세 버전이 있는 경우 사용자 판단하 수동 업데이트 적용
client-upgrade - transparent로 설정된 경우 사용자 위치와 동의와 관계없이 자동 업데이트

 

[사진 6] 응답 예시

 

- 공격 성공 조건과 성공 시 가능한 악성 행위는 다음과 같음

구분 설명
공격 성공 조건 - 서버 인증서 : 공인 인증 기관에서 서명한 포털용 인증서
- 사용자 지정 루트 인증 기관(CA) : 로컬에서 생성된 CA PEM 파일이 클라이언트에 제공되어 신뢰할 수 있는 인증서 저장소에 설치
- 코드 서명 인증서 : 사용자 지정 CA가 악성 MSI에 서명하기 위해 서명한 인증서
성공 시 가능한 악성 행위 - 자격 증명 공개 : 사용자가 입력한 인증 세부 정보 수집
- 사기성 루트 인증 기관 설치 : 중간자 공격(MITM)이나 코드 서명과 같은 추가 공격이 가능
- 라우팅 구성 조작 : 네트워크 트래픽을 제어하기 위해 악의적인 라우팅 설정
- 악성 업데이트 요청 : 신뢰할 수 있는 기관에서 서명한 MSI를 가져와서 실행하도록 클라이언트를 트리거

 

[영상 2] Windows 환경 공격 시연 [7]
[영상 3] macOS 환경 공격 시연 [8]

3. 대응방안

- 벤더사 제공 업데이트 적용 [9][10]

취약점 제품명 영향받는 버전 해결 버전
CVE-2024-29014 NetExtender Windows (32 and 64 bit) 10.2.339 및 이전 버전 10.2.341 및 이후 버전
CVE-2024-5921 GlobalProtect 6.2.6 이전 버전 6.2.6
(또는 VPN 클라이언트를 FIPS-CC 모드에서 실행)

 

- NachoVPN 툴 활용 [11]

> 개념 증명용 오픈소스 기반 도구로, 악성 VPN 서버를 시뮬레이션할 수 있음

> Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect, Ivanti Connect Secure 등의 VPN 제품 지원

 

- 권고사항

> SSL-VPN 클라이언트를 최신 버전으로 업데이트

> 호스트 기반 방화벽 규칙을 사용해 VPN 클라이언트가 통신할 수 있는 IP 제한

> WDAC, EDR 등을 사용해 VPN 클라이언트가 승인된 실행 파일과 스크립트만 실행할 수 있도록 설정

> 소셜 엔지니어링 공격 관련 사용자 교육

> 다중 인증 적용 등

4. 참고

[1] https://blog.amberwolf.com/blog/2024/november/introducing-nachovpn---one-vpn-server-to-pwn-them-all/
[2] https://blog.amberwolf.com/blog/2024/november/sonicwall-netextender-for-windows---rce-as-system-via-epc-client-update-cve-2024-29014/
[3] https://blog.amberwolf.com/blog/2024/november/palo-alto-globalprotect---code-execution-and-privilege-escalation-via-malicious-vpn-server-cve-2024-5921/
[4] https://nvd.nist.gov/vuln/detail/CVE-2024-29014
[5] https://vimeo.com/1024774407
[6] https://nvd.nist.gov/vuln/detail/CVE-2024-5921
[7] https://vimeo.com/1024774239
[8] https://vimeo.com/1024773987
[9] https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2024-0011
[10] https://security.paloaltonetworks.com/CVE-2024-5921
[11] https://github.com/AmberWolfCyber/NachoVPN
[12] https://www.dailysecu.com/news/articleView.html?idxno=161574

+ Recent posts