2021년 12월 13일

전자정부프레임워크 3.6.0 환경에서 아파치 Log4j 제로데이 취약점 (CVE-2021-44228) 조치 방법

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"?-->
    <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"?-->
    <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"?-->
 
    <!--
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener> -->
</web-app>


④ 기존 프로젝트를 새롭게 빌드하여 배포한다.

댓글 없음:

댓글 쓰기