1. 개요

- 도메인 컨트롤러를 대상으로 시스템 충돌과 재부팅을 유발할 수 있는 취약점 LDAPNightmare 발견 [1]
- 서비스 거부 취약점 CVE-2024-49113과 정수 오버플로를 통한 원격 코드 실행 취약점 CVE-2024-49112
- Windows 서버를 대상으로 한 심각한 보안 위협이 되고 있어 가능한 한 빨리 '24.12 보안 업데이트 적용 필요

 

1.1 LDAP(Lightweight Directory Access Protocol)

- 네트워크 상에서 조직이나 개인정보 혹은 파일이나 디바이스 정보 등을 찾아보는 것을 가능하게 만든 소프트웨어 프로토콜로 389 포트 사용 [2][3]

> 디렉토리 서비스 표준인 X.500의 DAP(Directory Access Protocol)를 기반으로한 경량화(Lightweight)된 버전으로 서버-클라이언트 구조

※ 디렉토리 서비스란 이름을 기준으로 대상을 찾아 조회하거나 편집할 수 있는 서비스

2. 취약점

2.1 CVE-2024-49113

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

- Windows LDAP 프로토콜에서 발생하는 서비스 거부 취약점

> 공격자가 조작된 CLDAP 요청을 보내 LSASS 프로세스를 충돌시켜 서버 재부팅을 유발할 수 있음

CLDAP (Connection-less Lightweitght Directory Access Protocol)
- LDAP의 한 종류로, UDP/389포트를 사용 (LDAP는 TCP 사용)
- LDAP 대비 응답 시간이 빠르고 오버헤드가 낮으나, 데이터 손실이 발생 가능
※ UDP의 특성상 송신 IP를 확인하지 않고, 응답 패킷이 요청 패킷보다 훨씬 커 DRDoS 공격에 사용됨 (평균 50~86배 정도 증폭)

LSASS (Local Security Authority Subsystem Service)
- Windows 운영체제에서 시스템의 보안 정책을 강화를 위한 윈도우의 프로세스
> 윈도우 시스템에 로그인하려는 사용자의 유효성을 판단
> 사용자 비밀번호 저장 및 관리, 비밀번호 변경 요청 처리
> 인증된 사용자에게 시스템 자원에 접근할 수 있는 권한을 부여하는 액세스 토큰을 생성
> 시스템 보안 관련 이벤트를 기록하며, 시스템의 보안 정책을 적용 및 관리
※ 시스템의 모든 사용자 자격 증명을 저장하고 관리하기 때문에 공격자의 주요 목표 중 하나이며, Mimikatz 등의 공격 도구 존재

 

- 공격과정

① 공격자는 피해자 DC에 DCE/RPC 요청을 전송

- 공격자가 제어하는 LDAP 서버를 쿼리하도록 조작된 DCE/RPC 요청을 전송

> RPC 메소드 중 DsrGetDcNameEx2 메소드는 도메인 컨트롤러의 LDAP 서버 정보를 반환하기 위해 설계된 RPC 호출임

 

- DsrGetDcNameEx2 메소드의 매개변수 중 DomainName을 공격자가 제어하는 DNS 서버로 조작하여 요청 전송

> DomainName이 특정 도메인 또는 사이트를 가리킬 때, 자동으로 해당 도메인에 대한 LDAP DNS SRV 쿼리를 생성

> DNS는 공격자가 제어하는 LDAP 서버의 호스트 네임과 LDAP 포트 정보 응답

[사진 2] DsrGetDcNameEx2 메소드 매개변수 및 설명 [5]

- DC (Domain Controller) : 로그인, 이용권한 확인, 새로운 사용자 등록, 암호 변경 등을 처리하는 기능을 하는 서버 컴퓨터
- DCE/RPC (Distributed Computing Environment/Remote Procedure Calls) : 분산 컴퓨팅 환경(DCE)에서 원격 프로시저 호출(RPC)을 구현하기 위한 프로토콜
- DNS SRV (Service Resource Record) : 특정 서비스에 대해 도메인 이름을 기반으로 연결할 수 있는 호스트 및 포트 정보를 제공하는 DNS 레코드 유형

② NBNS 요청 및 응답

- LDAP 서버의 호스트네임과 포트 정보를 수신한 피해자는 LDAP 서버에 대한 NBNS 쿼리를 수행

> 호스트네임에 대응하는 LDAP 서버의 IP 주소(공격자가 제어하는 LDAP 서버 IP) 응답

- NetBIOS (Network Basic Input/Output System) : 윈도우 네트워크에 사용되는 컴퓨터 이름 [6]
- NBNS (NetBIOS Name Service) : NetBIOS 네트워크 상에서 호스트 이름을 IP 주소로 해석하기 위해 사용되는 프로토콜 [7]

③ 조작된 CLDAP 응답으로 시스템 재부팅 유도

- 피해자 DC는 공격자의 LDAP 서버에 CLDAP 요청을 전송

> 공격자는 LDAP 참조(referral) 결과 코드와 함께 조작된 lm_referral 값을 포함한 조작된 CLDAP 응답 전송

> 조작된 lm_referral 값에 의해 범위를 벗어난 읽기와 LSASS를 충돌이 발생하고 시스템 재부팅을 유도할 수 있음

※ 관련 PoC [8]

lm_referral 값 - LDAP 클라이언트가 참조 테이블에서 메모리 접근을 수행할 때 사용
- 참조 테이블에 액세스하는지 여부를 결정하는 조건은 lm_referral 값이 0이 아닌지 확인
- 0이 아닌 값은 참조 테이블의 오프셋으로 사용되어 메모리 접근이 시도
- 공격자는 해당 값을 조작해 클라이언트가 잘못된 메모리 위치를 참조하도록 유도

[사진 3] 공격 과정 요약

2.2 CVE-2024-49112

[사진 4] CVE-2024-49112 [9]

- Windows LDAP 프로토콜에서 발생하는 원격 코드 실행 취약점 (CVSS: 9.8)

> CLDAP 패킷을 변조하여 LDAP 서비스에서 임의 코드를 실행할 수 있음

 

<<내용 추가 예정>>

 

3. 대응방안

- MS 12월 보안 위협에 따른 정기 보안 업데이트 적용 [10]

> 즉시 패치가 어려운 경우 권고 사항

① 악성 값이 설정된 CLDAP 참조 응답을 모니터링
② 비정상적인 DsrGetDcNameEx2 호출을 탐지
③ 도메인 컨트롤러를 대상으로 하는 의심스러운 DNS SRV 조회를 감지

4. 참고

[1] https://www.safebreach.com/blog/ldapnightmare-safebreach-labs-publishes-first-proof-of-concept-exploit-for-cve-2024-49113/
[2] https://yongho1037.tistory.com/796
[3] https://hec-ker.tistory.com/319
[4] https://nvd.nist.gov/vuln/detail/CVE-2024-49113
[5] https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/fb8e1146-a045-4c31-98d1-c68507ad5620
[6] http://www.ktword.co.kr/test/view/view.php?m_temp1=319&id=452
[7] https://wiki.wireshark.org/NetBIOS/NBNS
[8] https://github.com/SafeBreach-Labs/CVE-2024-49113
[9] https://nvd.nist.gov/vuln/detail/CVE-2024-49112
[10] https://www.boho.or.kr/kr/bbs/view.do?searchCnd=1&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=2&categoryCode=&nttId=71606
[11] https://www.dailysecu.com/news/articleView.html?idxno=162699

[12] https://www.boannews.com/media/view.asp?idx=135499&page=1&kind=1

+ Recent posts