일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 쿠버네티스
- AWS
- AWS EKS
- AWS EKS Udemy
- CFReDS
- The Sleuth Kit
- forensic
- 보안기사
- ISMS
- 실습
- 포렌식
- iam
- AWS 쿠버네티스
- AWS Elasticsearch
- TSK
- 정보보안기사
- kubernetes
- 해킹
- isms-p
- 정보보안
- 보안
- AWS Opensearch
- Autopsy
- k8s
- 모의해킹
- hacking case
- 정보보안기사 실기
- ISMS-P 인증심사원
- SMS-P 인증 기준 안내서 요약
- artifacts
- Today
- Total
Always-Try(정보보안 및 일상)
Log4j 보안 취약점 (CVE-2021-44228) 동작 원리 테스트 및 조치 방안 1/3 - 취약점 개요 본문
Log4j 보안 취약점 (CVE-2021-44228) 동작 원리 테스트 및 조치 방안 1/3 - 취약점 개요
Always-Try 2021. 12. 13. 22:04지난주 금요일부터 주말 내내 역사상 최악의 보안 취약점이 발견되었다면서 보안업계가 시끌시끌했다. 이미 유사한 컨텐츠로 해당 취약점을 다룬 포스팅들이 많았지만 그 중에는 도움이 되지 않는 포스팅이 대다수였다. 그래서 필자가 스스로 찾아보고 그리고 커뮤니티에 던졌었던 질문들을 활용해 최대한 쉽게 해당 취약점에 대해서 정리해보려 한다.
그리고 킹리적갓심에 의해 조만간 정보보안기사를 포함한 보안 자격증 시험에도 출제가 될 것으로 보이는데, 현업자는 물론 보안을 공부하는 학생들도 이 글을 보고 이해를 했으면 하는 바램으로 이 글을 작성한다. 내용이 길어서 총 3편으로 나눠서 작성한다.
2021.12.13 - [Pen Test] - Log4j 보안 취약점 (CVE-2021-44228) 쉽게 파해치기 1/3 - 취약점 개요
2021.12.13 - [Pen Test] - Log4j 보안 취약점 (CVE-2021-44228) 쉽게 파해치기 2/3 - 취약 환경 구성 및 테스트
2021.12.13 - [Pen Test] - Log4j 보안 취약점 (CVE-2021-44228) 쉽게 파해치기 3/3 - 취약점 점검 및 대응 방안
자. 시작합니다.
1. Log4j 보안 취약점 , 즉 CVE-2021-44228 가 뭐길레 이 난리를?
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-44228 에 따르면 해당 취약점은 다음과 같다고 한다.
Apache Log4j2 <=2.14.1 JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled. From log4j 2.15.0, this behavior has been disabled by default. In previous releases (>2.10) this behavior can be mitigated by setting system property "log4j2.formatMsgNoLookups" to “true” or it can be mitigated in prior releases (<2.10) by removing the JndiLookup class from the classpath (example: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class).
무슨말이지???? 혹시나 윗 글만으로 해당 취약점을 이해를 하신분이 계시다면 살포시 Ctrl+W 를 눌러서 나가주시면 된다. 더이상 볼 것도 없다. 필자는 이해가 안되서 일단 번역기를 돌려봤다.
한국말이긴 한데 뭔말이지???? Log4j는 뭐고 JNDI는 뭐고 LDAP은 뭐고 ?? 흠..ㅋㅋㅋ
대충 이해하자면 2.14.1 이하의 log4j2에 포함되어 있는 JNDI 기능이 공격자의 LDAP 및 기타 JNDI 관련 엔드포인트로부터 악용 될 수 있다는 얘기인 것 같다. 잠시 화장실 좀 다녀와서 계속하겠다.
잠시 화장실 다녀오니, 또 까먹었다. 그래서 저게 뭐라고?? 로그4j... JNDI.. 뭐더라?
음 아무래도 한번에 이해하긴 틀린 것 같다. 위에 언급된 단어들부터 좀 더 천천히 하나하나씩 알아보도록 하는 시간을 갖도록 하자.
우선 'Log4J -> JNDI -> LDAP ' 순으로 알아보자.
2. Log4j ?
Log4j는 Ceki Gülcü가 처음 개발한 자바 기반 로깅 유틸리티이다. 아파치 소프트웨어 재단의 프로젝트 아파치 로깅 서비스의 일부이다. 또, Log4j는 여러 자바 로깅 프레임워크들 가운데 하나이다. 위키백과
게키쿨쿠?? 음... 아. 자바 기반 로깅 유틸리티구나. 근데 이게 그렇게들 많이 사용한다는데 나는 개발자가 아니라 잘 와닿지는 않는다. 그래서 더 찾아봤더니 아래와 같이 log4j를 설명하는 블로그 내용을 볼 수 있었는데 대갈빡에 번쩍 불이나며 바로 이해가 됐다.
아?! 자주 보던 형태의 로그이다. 저런식으로 로그 레벨 설정하고 로그 남기기 위한 자바 기반 로깅 유틸리티가 Log4j 구나. Okay. 그럼 다음으로 넘어가자
3. JNDI (Java Naming and Directory Interface) ??
이름도 생소하다. JNDI 너는 뭐냐 ?
JNDI는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고(lookup)하기 위한 자바 API다.
여기서 JNDI에 대한 설명을 이해하기 위해 몇가지만 더 알아보고 넘어가자
- 디렉터리 서비스?
디렉토리 서비스는 컴퓨터 네트워크의 사용자와 네트워크 자원에 대한 정보를 저장하고 조직하는 응용 소프트웨어이다. 위키백과
디렉터리 서비스라고 하면 Microsoft의 Active Directory가 생각난다. 사용자, 파일, 폴더, 프린터 등등을 디렉터리 형태로 관리하는 서비스라고 생각하면 된다. 그럼 디렉터리 형태는 뭔데?? 라고 하는 분이 있을까봐 캠브리지 영영 사전을 찾아보면 아래와 같이 나온다. 더이상 설명은 주제를 넘어가니 이제 대충 이해하길 바란다.
a book that gives a list of names, addresses, or other facts:
정리하자면 JDNI는 자바에서 디렉터리 서비스를 가져다 쓰기 위한 API라고 이해하고 넘어가면 될 것 같다.
4. LDAP (Lightweight Directory Access Protocol) ??
앞서 언급한 Active Directory 와 같이 알아보자. 비교 설명이 잘 나와 있는 사이트의 설명을 가져와 본다.
(https://www.okta.com/kr/identity-101/ldap-vs-active-directory/)
Active Directory는 사용자, 컴퓨터, 프린터 등 IT 자산을 구성하는 데 사용되는 Microsoft 제품입니다. 따라서 대부분의 Microsoft Office 및 Server 제품과 통합됩니다.
LDAP(Lightweight Directory Access Protocol)는 서비스가 아닌 프로토콜이며, Active Directory를 포함해 다양한 유형의 디렉터리와 통신 및 쿼리하는 데 사용됩니다.
한마디로 LDAP은 디렉터리 서비스를 이용하기 위한 쿼리 프로토콜이다. 포트는 아래를 참고.
지금까지 나온 3개의 개념을 나열해보면 아래와 같다.
- Log4j: 로그 레벨을 설정하고 로그를 남기기 위한 자바 기반 로깅 유틸리티
- JNDI: 자바에서 디렉터리 서비스를 가져다 쓰기 위한 API
- LDAP: 디렉터리 서비스를 이용하기 위한 쿼리 프로토콜
그리고 Mitre의 설명 중 아래 부분만 다시 읽어보자
Log4j2 JNDI features do not protect against attacker controlled LDAP. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled.
모른다고? 그럴까봐 번역기 준비했다.
한국말이지만 한국말 같지 않은 한국말을 한번 한국말로 번역하자면,
'Log4j 유틸리티에는 JDNI라는 디렉터리 서비스를 사용하기 위한 LDAP 쿼리가 가능한 API가 있는데 공격자는 이를 악용할 수 있다' 는 말이다. 참고로 LDAP만 얘기했지만 LDAP 이외에 rmi, dns 등 다른 프로토콜로도 악용 가능하다.
이제 뭔지 정확히 알 것 같다. 이후 내용은 2편에서 계속이어진다.
끝
'Pen Test' 카테고리의 다른 글
Log4j 보안 취약점 (CVE-2021-44228) 동작 원리 테스트 및 조치 방안 3/3 - 취약점 점검 및 대응 방안 (6) | 2021.12.13 |
---|---|
Log4j 보안 취약점 (CVE-2021-44228) 동작 원리 테스트 및 조치 방안 2/3 - 취약 환경 구성 및 테스트 (0) | 2021.12.13 |
모의해킹 테스트 사이트 구축 - 쥬시샵, prestashop (0) | 2021.10.06 |
OWASP-ZAP 사용 가이드 - 3. https 사이트 접속 시 사설 인증서 오류 (0) | 2021.08.29 |
webhacking.kr - Challenge(old) - 20번 (0) | 2021.03.10 |