Apache Log4j 보안이슈 대응에 대한 문의
- 작성자
- 관리자
- 작성일자
- 2021-12-13
- 조회수
- 60,770
Q
Apache Log4j 보안이슈 확인 및 대응시 자주묻는 질문들에 대해 정리된 내용 입니다.
Java 기반 JVM을 사용하는 모든 서비스에서 대응이 필요합니다.
A
1. Log4 jdbc v1.2를 적용하고 있는데 이런경우는 보안패치 해당사항이 없는건가요?
보안패치 대상은 Log4 jdbc가 아닌
Log4j-core입니다.
다음 2번을 참고하여 대상인지 필히 확인을 하셔야 합니다.
2. Log4j2 패치를 해야하는 대상인지 잘 모르겠어요.
* 개발환경에서 확인
이클립스 개발환경에서는 pom.xml파일을 오픈한후
Dependency Hierarchy 탭을 오픈한후 목록에서 log4j-core : 2.X.X가 있는지 확인합니다.
최종적으로 적용되는 버전은 "Resolved Dependency"목록에서 확인 가능합니다.
또는 이클립스 개발환경에서 Maven Dependency 항목의 목록에서
log4j-core-2.X.X.jar 파일이 있는지 확인 합니다.
* 운영환경에서 확인
WAS 서버에서 웹프로젝트가 배포된 디렉토리에서
WEB-INF/lib 디렉토리에서 log4j-core-2.X.X.jar 파일이 있는지 확인 합니다.
3. 표준프레임워크 v3.5 ~ v3.10을 사용하는경우 패치 방법이 어떻게 되나요?
※ 다음 3가지 방법중 하나를 선택하여 조치하시면 됩니다.
1) 표준프레임워크 라이브러리를 포함하여 아파치 Log4j-core를 패치하는 경우
표준프레임워크 개발환경에서
로컬 메이븐 레포지토리 "/egovframework/" 하위 디렉토리 삭제후
프로젝트 우클릭후
Maven > Update Project를 선택하여 업데이트 합니다.
pom.xml 파일을 오픈후 Dependency Hierarchy 탭을 클릭한 후
Filter "log4j"를 입력합니다.
우측 "Resolved Dependency" 목록에서 log4j-core : 2.12.4이 적용되었는지 확인합니다.
2) JDK8의 경우 Apache Log4j를 패치하는 경우
pom.xml에 다음을 추가합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
3) JDK7의 경우 Apache Log4j를 패치하는 경우
pom.xml에 다음을 추가합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.4</version>
</dependency>
4. 표준프레임워크 v3.0 ~ v3.1을 사용하는경우 패치 방법이 어떻게 되나요?
※ 다음 2가지 방법중 하나를 선택하여 조치하시면 됩니다.
1) 표준프레임워크 라이브러리를 포함하여 아파치 Log4j-core를 패치하는 경우
표준프레임워크 개발환경에서
로컬 메이븐 레포지토리 "/egovframework/" 하위 디렉토리 삭제후
프로젝트 우클릭후
Maven > Update Project를 선택하여 업데이트 합니다.
pom.xml 파일을 오픈후 Dependency Hierarchy 탭을 클릭한 후
Filter "log4j"를 입력합니다.
우측 "Resolved Dependency" 목록에서 log4j-core : 2.3.2이 적용되었는지 확인합니다.
2) JDK6의 경우 Apache Log4j를 패치하는 경우
pom.xml에 다음을 추가합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.3.2</version>
</dependency>
5. 표준프레임워크 v1.0 ~ v2.x를 사용하고 있는데 어떻게 해야 하나요?
1) 임시조치 방법
o JMSAppender 사용시 설정 삭제
o JMSSink 클래스 파일 삭제
zip -q -d log4j-*.jar org/apache/log4j/net/JMSSink.class
o JDBCAppender 클래스 파일 삭제
zip -q -d log4j-*.jar org/apache/log4j/jdbc/JDBCAppender.class
o Chainsaw 관련 클래스 삭제
zip -q -d log4j-*.jar org/apache/log4j/chainsaw/*
2) JDK7 이상인경우 Log4j-core 최신버전으로 업데이트 하기위해 표준프레임워크 버전을 최신버전으로 업그레이드 합니다.
* 다음 업그레이드 가이드를 참조하여 표준프레임워크를 최신버전으로 업그레이드 합니다.
https://www.egovframe.go.kr/home/ntt/nttRead.do?pagerOffset=0&searchKey=&searchValue=&menuNo=75&bbsId=3&nttId=1778
6. 우선 임시 조치를 하고 Log4j 패치버전 업그레이드를 대응하려고 하는데 어떻게 해야할까요?
o JndiLookup 클래스를 경로에서 제거 :
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
* 해당 명령이 수행되지 않는 경우 다른 압축해제 툴을 사용하여 압축을 해제한후 "JndiLookup.class"를 삭제후 동일한 파일명으로 다시 압축을 합니다.
o 다음 설정을 사용하는 경우 아래의 조치방안으로 조치 적용
- PatternLayout에서 ${ctx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
- ${ctx:loginId} 또는 $${ctx:loginId}를 제거
※ 본 방법은 임시조치 방법이며 향후 운영서버 JDK7이상으로 업그레이드 하고 표준프레임워크 및 Log4j-core 최신 버전을 적용하셔야 합니다.
7. log4j 1.x에서 보안이슈에 해당사항이 없는 경우는 아무런 조치를 안 해도 되나요?
log4j 1.x버전의 경우 Apache 재단의 추가적인 업그레이드 및 기술지원 중지로 인해 다른 보안위협에 노출될 가능성이 높아
향후 JDK7 이상으로 업그레이드 후 프레임워크 및 Log4j-core 최신 버전 적용을 권고 합니다.
8. 로그처리 라이브러리로 보안이슈가 있는 Log4j가 아닌 Logback을 쓰면 되나요?
Logback은 log4j 1.x 버전을 기반으로 개발한 로깅 라이브러리로서
취약점이 존재하여 v1.2.9 이상으로 업데이트 하여야 합니다.
9. Log4j 보안이슈는 표준프레임워크를 적용하고 있지 않은 JVM기반 서비스인데 대상이 되나요?
Java 기반 JVM 환경을 사용하는 모든 서비스에서
아파치 재단에서 배포하는 Log4j2를 사용하는 시스템은 모두 조치 대상입니다.
10. 개발환경에서 테스트 없이 운영서버에 바로 반영해도 문제가 없나요?
개발시 다양한 라이브러리가 추가로 적용되어 있을수 있으므로
반드시 개발환경이나 테스트베드 환경에서 확인 후 운영서버에 반영해야 합니다.
보안패치 대상은 Log4 jdbc가 아닌
Log4j-core입니다.
다음 2번을 참고하여 대상인지 필히 확인을 하셔야 합니다.
2. Log4j2 패치를 해야하는 대상인지 잘 모르겠어요.
* 개발환경에서 확인
이클립스 개발환경에서는 pom.xml파일을 오픈한후
Dependency Hierarchy 탭을 오픈한후 목록에서 log4j-core : 2.X.X가 있는지 확인합니다.
최종적으로 적용되는 버전은 "Resolved Dependency"목록에서 확인 가능합니다.
또는 이클립스 개발환경에서 Maven Dependency 항목의 목록에서
log4j-core-2.X.X.jar 파일이 있는지 확인 합니다.
* 운영환경에서 확인
WAS 서버에서 웹프로젝트가 배포된 디렉토리에서
WEB-INF/lib 디렉토리에서 log4j-core-2.X.X.jar 파일이 있는지 확인 합니다.
3. 표준프레임워크 v3.5 ~ v3.10을 사용하는경우 패치 방법이 어떻게 되나요?
※ 다음 3가지 방법중 하나를 선택하여 조치하시면 됩니다.
1) 표준프레임워크 라이브러리를 포함하여 아파치 Log4j-core를 패치하는 경우
표준프레임워크 개발환경에서
로컬 메이븐 레포지토리 "/egovframework/" 하위 디렉토리 삭제후
프로젝트 우클릭후
Maven > Update Project를 선택하여 업데이트 합니다.
pom.xml 파일을 오픈후 Dependency Hierarchy 탭을 클릭한 후
Filter "log4j"를 입력합니다.
우측 "Resolved Dependency" 목록에서 log4j-core : 2.12.4이 적용되었는지 확인합니다.
2) JDK8의 경우 Apache Log4j를 패치하는 경우
pom.xml에 다음을 추가합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
3) JDK7의 경우 Apache Log4j를 패치하는 경우
pom.xml에 다음을 추가합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.4</version>
</dependency>
4. 표준프레임워크 v3.0 ~ v3.1을 사용하는경우 패치 방법이 어떻게 되나요?
※ 다음 2가지 방법중 하나를 선택하여 조치하시면 됩니다.
1) 표준프레임워크 라이브러리를 포함하여 아파치 Log4j-core를 패치하는 경우
표준프레임워크 개발환경에서
로컬 메이븐 레포지토리 "/egovframework/" 하위 디렉토리 삭제후
프로젝트 우클릭후
Maven > Update Project를 선택하여 업데이트 합니다.
pom.xml 파일을 오픈후 Dependency Hierarchy 탭을 클릭한 후
Filter "log4j"를 입력합니다.
우측 "Resolved Dependency" 목록에서 log4j-core : 2.3.2이 적용되었는지 확인합니다.
2) JDK6의 경우 Apache Log4j를 패치하는 경우
pom.xml에 다음을 추가합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.3.2</version>
</dependency>
5. 표준프레임워크 v1.0 ~ v2.x를 사용하고 있는데 어떻게 해야 하나요?
1) 임시조치 방법
o JMSAppender 사용시 설정 삭제
o JMSSink 클래스 파일 삭제
zip -q -d log4j-*.jar org/apache/log4j/net/JMSSink.class
o JDBCAppender 클래스 파일 삭제
zip -q -d log4j-*.jar org/apache/log4j/jdbc/JDBCAppender.class
o Chainsaw 관련 클래스 삭제
zip -q -d log4j-*.jar org/apache/log4j/chainsaw/*
2) JDK7 이상인경우 Log4j-core 최신버전으로 업데이트 하기위해 표준프레임워크 버전을 최신버전으로 업그레이드 합니다.
* 다음 업그레이드 가이드를 참조하여 표준프레임워크를 최신버전으로 업그레이드 합니다.
https://www.egovframe.go.kr/home/ntt/nttRead.do?pagerOffset=0&searchKey=&searchValue=&menuNo=75&bbsId=3&nttId=1778
6. 우선 임시 조치를 하고 Log4j 패치버전 업그레이드를 대응하려고 하는데 어떻게 해야할까요?
o JndiLookup 클래스를 경로에서 제거 :
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
* 해당 명령이 수행되지 않는 경우 다른 압축해제 툴을 사용하여 압축을 해제한후 "JndiLookup.class"를 삭제후 동일한 파일명으로 다시 압축을 합니다.
o 다음 설정을 사용하는 경우 아래의 조치방안으로 조치 적용
- PatternLayout에서 ${ctx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
- ${ctx:loginId} 또는 $${ctx:loginId}를 제거
※ 본 방법은 임시조치 방법이며 향후 운영서버 JDK7이상으로 업그레이드 하고 표준프레임워크 및 Log4j-core 최신 버전을 적용하셔야 합니다.
7. log4j 1.x에서 보안이슈에 해당사항이 없는 경우는 아무런 조치를 안 해도 되나요?
log4j 1.x버전의 경우 Apache 재단의 추가적인 업그레이드 및 기술지원 중지로 인해 다른 보안위협에 노출될 가능성이 높아
향후 JDK7 이상으로 업그레이드 후 프레임워크 및 Log4j-core 최신 버전 적용을 권고 합니다.
8. 로그처리 라이브러리로 보안이슈가 있는 Log4j가 아닌 Logback을 쓰면 되나요?
Logback은 log4j 1.x 버전을 기반으로 개발한 로깅 라이브러리로서
취약점이 존재하여 v1.2.9 이상으로 업데이트 하여야 합니다.
9. Log4j 보안이슈는 표준프레임워크를 적용하고 있지 않은 JVM기반 서비스인데 대상이 되나요?
Java 기반 JVM 환경을 사용하는 모든 서비스에서
아파치 재단에서 배포하는 Log4j2를 사용하는 시스템은 모두 조치 대상입니다.
10. 개발환경에서 테스트 없이 운영서버에 바로 반영해도 문제가 없나요?
개발시 다양한 라이브러리가 추가로 적용되어 있을수 있으므로
반드시 개발환경이나 테스트베드 환경에서 확인 후 운영서버에 반영해야 합니다.