삶 가운데 남긴 기록 AACII.TISTORY.COM
Log4j 보안 취약점 대응(Log4Shell) 2021년 11월 24일 본문
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389
Log4j 2 버전에 존재하는 JNDI(Java Naming and Directory Interface) 인젝션 취약점으로, 이를 악용하면 원격 코드 실행이 가능하게 됩니다.
CVSS스코어 10점 만점중 10점 위험도로 가장 높은 위험도의 취약점 수준이 심각하므로 빠른 대응이 필요합니다.
보안 취약점 영향받는 log4j 버전
- 2.13~2.15 : CVE-2021-45046(서비스 거부 취약점)
- 1.2.x 모든 버전: CVE-2021-4104(원격 코드 실행 취약점) ※ JMSAppender를 사용하지 않는 경우 취약점 영향 없음
- 2.0-beta9~2.16.0: CVE-2021-45105(서비스 거부 취약점)
log4j 설치 여부 확인(linux)
find / -name "log4*" 2>/dev/null
윈도우즈의 경우 윈도우 탐색기 검색 기능으로 검색합니다.
검색해서 log4j-core-2.15.X.jar 이하 버전이 설치되어있다면 취약점에 노출되어 있는 것입니다.
JAVA 버전 별 업데이트 권고
- JAVA8: log4j 2.17.1 이상 버전으로 업데이트
- JAVA7: log4j 2.12.4 이상 버전으로 업데이트
- JAVA6: log4j 2.3.2
maven 사용시 pom.xml 업데이트
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
gradle 사용시 build.gradle 에서 업데이트
//build.gradle
ext['log4j2.version'] = '2.17.1'
//gradle 플랫폼 지원을 사용하는 경우
implementation(platform("org.apache.logging.log4j:log4j-bom:2.17.1"))
버전 여부 재확인
./gradlew dependencyInsight —dependendy log4j-core
업데이트가 어려운 경우 임시조치
JndiLookup 클래스를 경로에서 제거합니다.
zip –q –d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
※ log4j-core JAR 파일 없이 log4j-api JAR파일만 사용하는 경우 취약점의 영향을 받지 않습니다.
log4j 2.7.0 이상 사용 시
log4j 설정(log4j.xml 등)에 PatternLayout 속성에 있는 %m 부분을 %m{nolookups} 으로 교체합니다.
2.16.0 이상에서는 %m을 사용해도 자동으로 nolookups로 처리됩니다.
- Java 실행 인자(Arguments) 에 시스템 속성을 추가한다. -Dlog4j2.formatMsgNoLookups=true
- Java 실행 계정의 환경 변수 혹은 시스템 변수로 LOG4J_FORMAT_MSG_NO_LOOKUPS=true를 설정합니다.
2.15.0 이상에서 다음 설정이 명시되지 않았는지 확인합니다. 명시된 설정은 모두 제거합니다.
-
-Dlog4j2.formatMsgNoLookups=false
-
LOG4J_FORMAT_MSG_NO_LOOKUPS=false
2.16.0 이상에는 log4j.enableJndi 설정이 기본값 false로 추가되었습니다. 따라서 다음 설정도 제거합니다.
-
-Dlog4j.enableJndi=true
Log4j 1.2.X 취약점 대응
CVE-2021-4104 : JMSAppender 사용 확인 후 코드 수정 또는 삭제합니다.
zip -d log4j-1.2.*.jar org/apache/log4j/net/JMSAppender.class
log4j.xml 등 세팅 파일에서 JMSAppender 를 사용하지 않습니다.
logback 등 대체 로깅 모듈을 사용합니다.
참고 사이트
- 보호나라 보안공지 : https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389
- Apache 보안업데이트 현황 : https://logging.apache.org/log4j/2.x/security.html
- CVE-2021-44228 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228
- CVE-2021-45046 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046
- CVE-2021-4104 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4104
- 최신버전 다운로드 : https://logging.apache.org/log4j/2.x/download.html
- 제조사별 영향받는 제품 현황 : https://github.com/NCSC-NL/log4shell/tree/main/software
- 탐지정책 : https://rules.emergingthreatspro.com/open/suricata-5.0/rules/emerging-exploit.rules
- Log4j 2.12.2버전 다운로드 : https://archive.apache.org/dist/logging/log4j/2.12.2/
'DEV&OPS > Java' 카테고리의 다른 글
보안 인증서 오류 탐색이 차단됨. 해결 방법 (1) | 2022.02.15 |
---|---|
Spring MVC legacy project maven tomcat oracle mybatis 설정 (0) | 2022.02.15 |
Spring 3 Quartz 1.8.6 스케줄링 (0) | 2021.08.30 |
is exceeding the 65535 bytes limit (0) | 2021.08.18 |
ClassNotFoundException 과 NoClassDefFoundError (0) | 2021.08.05 |