원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
apache log4j 취약점 제거조치
1. Log4j 사용여부 및 버전 조회 방법
# find / -name "*log4j*jar" -type f
/usr/share/java/log4j.jar
/usr/share/java/slf4j/log4j-over-slf4j.jar
/usr/share/java/slf4j/slf4j-log4j12.jar
/data/webapp/webapp/WEB-INF/lib/log4j-1.2.14.jar
/data/webapp/webapp/WEB-INF/lib/log4j-1.2.14.jar
조회시 위와 같이 WEB-INF/ 하위 디렉토리에 log4j<버전명>.jar 파일이 있는 경우
해당 log4j 를 사용한다고 의심할 수 있다.
2. 버전별 취약점 내용
1) CVE-2021-44228 : Log4j 2 원격코드 실행 취약점
- 취약점 내용 : Log4j 2 에서 사용되는 JNDI(java naming and directory interface) 인젝션 취약점을 이용하여 원격코드 실행 가능
- 대상버전 : 2.0-beta9 ~ 2.14.1 (2.12.2 제외)
2) CVE-2021-45046 CVE-2021-41045 : 서비스 거부
- 취약점 내용 : JNDI 조회 데이터를 입력하여 ddos 공격 가능
- 대상버전 : 2.0-beta9 ~ 2.16.0 (2.12.3 제외)
3) CVE-2021-4104 : 원격코드 실행
- 취약점 내용 : 공격자가 log4j.properties에 쓰기 권한을 획득할 경우 원격코드 실행 가능
- 대상버전 : 1.2x 버전중 JMSAppender Class를 사용중인 소프트웨어
3. 취약점 조치 방법
1) log4j 버전 업그레이드
- JDK 8 : Log4j 2.17.0 으로 업데이트
- JDK 7 : Log4j 2.12.3 으로 업데이트
- JDK 6 : Log4j 2.3.1 로 업데이트
2) JNDI Class 파일 삭제 : JNDI 취약점을 이용하므로 Class 파일을 삭제하여 기능을 동작하지 못하게 하는 방법이다.
- JndiLookup.class 존재 유무 확인
# unzip -l log4j-<버전명>.jar | grep -i JndiLookup.class // log4j-<버전명>.jar 의 압축을 풀지않고, jndilookup.class 파일 존재유무 확인방법
- JndiLookup.class 파일 삭제
# zip -q -d log4j-<버전명>.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- JndiLookup.class 삭제 여부 확인
# unzip -l log4j-<버전명>.jar | grep -i JndiLookup.class
3) CVE-2021-4104 취약점 조치
- log4j.properties 찾기
# find / -name log4j.properties -type f // 파일 찾기
- JMSAppender 적용여부 확인
log4j.appender.stdout=org.apache.log4j.ConsoleAppender // 이와 같을 경우 JMSappender가 아닌 ConsoleAppender 사용중임.
log4j.appender.stdout.follow=true
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %p %C %t %c{1} - %m%n
- JMSAppender 사용중일 경우 제거
# zip –q –d log4j-<버전명>.jar org/apache/log4j/net/JMSAppender.class
# unzip -l log4j-<버전명>.jar | grep -i JndiLookup.class