본문 바로가기

프로그래밍 회고록/Java & Spring

Apache Log4j2 보안이슈 와 문제해결

728x90
반응형

# 서론

 전세계적으로 역대급 보안이슈가 터졌다. 한번쯤은 들어봤을법한 마인크래프트 라는 게임에서 서비스를 하는 한 회사가  보안취약점을 이용한 해킹 시도를 찾아 내면서 해당 보안이슈가 밝혀졌다.

Apache에서 제공하는 오픈소스 라이브러리인 Log4j의 취약점을 통해 상대방 컴퓨터에 원격접속해 온갖짓을 다할 수 있다는 것이다.

해당 취약점이 발생하는 log4j버전은 2.0-beta9 ~ 2.14.1 모든 버전이다 내가 받은 프로그램에 Log4j의 해당 버전이
포함된다면 중요파일 삭제, 컴퓨터 끄기, 웹캠 켜기같은 나쁜짓들을 나쁜 마음 먹은 사람들이 얼마든지 할 수 있게 한다.

그럼 이 문제를 어떻게 해결할 수 있을지에 대해 몇가지 찾아보았고 글로 남겨두려 한다.

#본론

 해결 방법은 

  • log4j 를 버전업을 해 2.15버전 이상으로 설치한다.
    • 웹서버 에서 많이 쓰는 빌드 프로그램 기준으로 한다면 Maven 프로젝트 에서는 다음과 같은 버전명시
      구문 추가

      <properties>
          <log4j2.version>2.15.0</log4j2.version>
      </properties>​

    • gradle 에서는 gradle.build파일에

      ext['log4j2.version'] = '2.15.0'​

      구문을 추가해 버전을 명시함으로써 해결된다.
    • 개인적인 의견으로는 밑에 서술할 몇가지 문제 해결법보다 라이브러리 교체라는 훨씬 근본적인 문제 해결이라고 판단하기 때문에 가장 좋은 해결법이라고 본다.
  • 2.0-beta9 버전 부터 2.10 버전에서는 Log4j 라이브러리 내부의  /apache/logging/log4j/core/lookup/jndi.lookup.class
    jndi.lookup클래스를 삭제해 해당 보안이슈가 나는 클래스를 삭제하면 된다.
    개인적인 생각인데 대부분이 jdbc를 사용하기 때문에 이부분을 없애면 문제가 해결될거라고 판단하지만
    결국은 이번 기회에 log4j를 버전업 해 해결하는게 더 근본적인 해결책이라고 생각 한다.

  • 2.10 ~ 2.14버전 까지는 프로그램이 실행될때 JVM에 환경변수를 넣어주면서 해결할 수 있게된다

    java -Dlog4j2.formatMsgNoLookups=true -jar [프로젝트명].jar​

     하지만 이 방법도 실행될때 실행변수로 매번 해주어야 한다는 불편함 때문에 근본적인 해결책이라곤 생각하지 않는다.
    • 웹서버의 경우 톰캣이나 아파치 그리고 제우스 같은 서블릿 컨테이너기반의 프로그램은 해당 서버가 실행될때 JVM옵션으로 넣어주는 설정을 만져 저 커맨드라인 부분을 넣어준다면 해결될 것 이다.
      이와 관련된 Documentation 은 다음과 같다.
      https://tomcat.apache.org/tomcat-9.0-doc/config/index.html

      ps.톰캣의 경우 내부에 존재하는 catalina.properties 파일에서 변수를 추가해주면 된다.

 

 

Apache Tomcat 9 Configuration Reference (9.0.56) - Overview

This manual contains reference information about all of the configuration directives that can be included in a conf/server.xml file to configure the behavior of the Tomcat Servlet/JSP container. It does not attempt to describe which configuration directive

tomcat.apache.org

# 여담

 진짜 원격접속으로 무엇이든지 할 수 있게 하는 치명적인 보안이슈라니...
영화에서 엄청 핸섬하거나 멋있는 해커들이 타자를 미친듯이 쳐가면서 해킹하는 그런 모습이 떠오르는 그런 정말 말도안되는 큰 이슈가 아닐까 생각한다.

심지어 log4j는 자바기반의 서버일 경우 안쓰는 웹어플리케이션이 없을정도인데 이번기회에라도 발견되서 사람들이 너도나도 발빠르게 문제해결을 위한 커뮤니티 형성이 되는것을 보고 세계가 정말 하나가 되었구나 그리고 문제가 발생해도 긴급하게 문제를 해결 할 수 있구나 라는것을 느꼈다.

또한 컴퓨터 보안이나 해킹에 관해 많은 관심이 생겼고 내 분야는 아니지만 조금씩 취미 레벨에서 공부를 해보면 좋겠다는 생각을 하게 되었다.

 

#출처

https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-boot

 

Log4J2 Vulnerability and Spring Boot

<p>As you may have seen in the news, a new zero-day exploit has been reported against the popular Log4J2 library which can allow an attacker to remotely execute code. The vulnerability has been reported with <a href="https://nvd.nist.gov/vuln/detail/CVE-20

spring.io

 

728x90