Apache 재단은 보안 취약점 1 ~ 10 구분하고 있는데 이번에 알려진 Apache Log4j 2 에서 발생하는 원격코드 실행 취약점(CVE-2021-44228)은 가장 높음 10단계에 해당하는 아주 심각한 보안 취약점이다.
KISA 에서는 긴급 보안 업데이트 권고 형태로 즉각적인 조치를 권하고있다. (12/13)
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389
스프링 기반의 전자정부 프레임워크를 사용하는 환경우 경우 아래와 같은 절차로 처리가 가능하다.
대상 환경은 아래와 같다.
- 전자정부 프레임워크 버전 : 3.6.0
- Spring : Spring 4.1.2-RELEASE
- Java : 1.8 이상
조치 방법
① 전자정부 프레임워크 기반 자바 프로그램을 maven 도구를 사용하도록 되어 있다. 프로젝트에서 Log4J2 의 의존성을 제거하기 위하여 pom.xml 설정에서 아래와 같이 exclusion 을 설정을 추가한다.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 31 | <!--xml version="1.0" encoding="UTF-8"?--> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > < properties > < egovframework.rte.version >3.6.0</ egovframework.rte.version > </ properties > < dependencies > < dependency > < groupid >egovframework.rte</ groupid > < artifactid >egovframework.rte.psl.dataaccess</ artifactid > < version >${egovframework.rte.version}</ version > < exclusions > < exclusion > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-api</ artifactid > </ exclusion > < exclusion > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-core</ artifactid > </ exclusion > < exclusion > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-slf4j-impl</ artifactid > </ exclusion > < exclusion > < groupid >org.slf4j</ groupid > < artifactid >log4j-over-slf4j</ artifactid > </ exclusion > </ exclusions > </ dependency > </ dependencies > </ project > |
② pom.xml 에 최신 LOG4J 2 버전으로 의존성을 추가한다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <!--xml version="1.0" encoding="UTF-8"?--> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > < properties > < egovframework.rte.version >3.6.0</ egovframework.rte.version > < project.dependency.log4j.version >2.15.0</ project.dependency.log4j.version > < project.dependency.slf4j.version >1.7.32</ project.dependency.slf4j.version > </ properties > < dependencies > < dependency > < groupid >egovframework.rte</ groupid > < artifactid >egovframework.rte.psl.dataaccess</ artifactid > < version >${egovframework.rte.version}</ version > < exclusions > < exclusion > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-api</ artifactid > </ exclusion > < exclusion > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-core</ artifactid > </ exclusion > < exclusion > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-slf4j-impl</ artifactid > </ exclusion > < exclusion > < groupid >org.slf4j</ groupid > < artifactid >log4j-over-slf4j</ artifactid > </ exclusion > </ exclusions > </ dependency > <!-- LOG4J2 START --> < dependency > < groupid >org.slf4j</ groupid > < artifactid >slf4j-api</ artifactid > < version >${project.dependency.slf4j.version}</ version > </ dependency > < dependency > < groupid >org.slf4j</ groupid > < artifactid >jcl-over-slf4j</ artifactid > < version >${project.dependency.slf4j.version}</ version > < scope >runtime</ scope > </ dependency > < dependency > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-api</ artifactid > < version >${project.dependency.log4j.version}</ version > </ dependency > < dependency > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-core</ artifactid > < version >${project.dependency.log4j.version}</ version > </ dependency > <!--For and sfl4j Bridge --> < dependency > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-slf4j-impl</ artifactid > < version >${project.dependency.log4j.version}</ version > </ dependency > <!--For and sfl4j Bridge --> < dependency > < groupid >org.apache.logging.log4j</ groupid > < artifactid >log4j-web</ artifactid > < version >${project.dependency.log4j.version}</ version > < scope >runtime</ scope > </ dependency > <!-- LOG4J2 END --> </ dependencies > </ project > |
⓷ 기존 프로젝트에서 Spring 에서 제공하는 log4j 설정 기능을 사용하고 있었다면 아래와 같이 web.xml 파일에서 해당 설정을 제거한다.
1 2 3 4 5 6 7 8 | <!--xml version="1.0" encoding="UTF-8"?--> < web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id = "WebApp_ID" version = "2.5" > <!-- <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> --> </ web-app > |
④ 기존 프로젝트를 새롭게 빌드하여 배포한다.
댓글 없음:
댓글 쓰기