Log4j 취약점(Log4Shell) 정리 영향 받는 버전과 해결 방법 (CVE-2021-44228)
들어가며
최근 Java 기반 서비스에서 널리 사용되는 Log4j 라이브러리의 심각한 보안 취약점이 발견되면서 전 세계적으로 큰 이슈가 되었다.
이 취약점은 Log4Shell(CVE-2021-44228) 이라는 이름으로 알려져 있으며, 많은 Java 기반 서비스와 서버 환경에 영향을 줄 수 있어 빠른 대응이 필요한 상황이다. 이번 글에서는 Log4j 취약점의 원인, 영향을 받는 버전, 그리고 대응 방법을 정리해 보겠다.
Log4j란 무엇인가
Log4j는 Java 애플리케이션에서 로그(Log)를 기록하기 위해 사용되는 오픈소스 라이브러리다.
애플리케이션 실행 과정에서 발생하는
- 오류 로그
- 시스템 로그
- 디버깅 로그
등을 기록하기 위해 사용되며, 다양한 기능과 높은 확장성 때문에 많은 Java 기반 서비스에서 기본적으로 사용되는 라이브러리라고 볼 수 있다. 문제는 이러한 Log4j가 대규모 서비스에서 널리 사용되고 있기 때문에 취약점이 발견될 경우 그 영향 범위가 매우 넓다는 점이다.
Log4j 취약점(Log4Shell) 문제점
이번에 발견된 취약점은 Log4j의 JNDI Lookup 기능을 악용한 원격 코드 실행(Remote Code Execution) 취약점이다.
이 취약점을 이용하면 공격자는
- 서버에 임의 코드 실행
- 악성 프로그램 설치
- 내부 네트워크 접근
- 데이터 탈취
- 시스템 제어
등을 수행할 수 있다.
특히 별도의 인증 과정 없이 로그 처리 과정에서 취약점이 발생할 수 있기 때문에 보안 위험도가 매우 높은 취약점으로 평가되고 있다.
주요 취약점 정보
이번 Log4j 보안 이슈와 관련된 주요 CVE는 다음과 같다.
CVE-2021-44228
Apache Log4j 2에서 발생하는 원격 코드 실행(RCE) 취약점
CVE-2021-45046
Apache Log4j 2에서 발생하는 서비스 거부(DoS) 취약점
CVE-2021-4104
Log4j 1.x 버전에서 발생하는 원격 코드 실행 취약점
영향을 받는 Log4j 버전
CVE-2021-44228
다음 버전이 영향을 받는다.
- Log4j 2.0-beta9 ~ 2.14.1
- 단, Log4j 2.12.2 제외
CVE-2021-45046
다음 버전이 영향을 받는다.
- Log4j 2.0-beta9 ~ 2.12.1
- Log4j 2.13.0 ~ 2.15.0
CVE-2021-4104
다음 버전이 영향을 받는다.
- Log4j 1.2.x
단, JMSAppender 기능을 사용하지 않는 경우 취약점 영향은 제한적이다. 또한 Log4j 1.x 버전은 이미 지원 종료(EOL) 상태이므로 보안 문제를 고려하여 최신 버전으로 업그레이드하는 것이 권장된다.
취약점 확인 방법
Log4j 취약점 여부는 취약점 스캐너 프로그램을 통해 확인할 수 있다. 대표적으로 Logpresso에서 제공하는 Log4j 취약점 검사 도구를 사용할 수 있다. 해당 도구는 시스템 내에서 취약한 Log4j 라이브러리를 자동으로 탐지할 수 있다.
취약점 검사 실행 방법(명령어 입력 방법)
운영체제에 따라 다음과 같이 실행할 수 있다.
[Windows] log4j2-scan [--fix] target_path [Linux] ./log4j2-scan [--fix] target_path [UNIX (AIX, Solaris 등)] java -jar logpresso-log4j2-scan-1.1.0.jar [--fix] target_path
취약점 검사 실행 방법(프로그램 사용하기)
o 취약점 검출 프로그램 사용 방법(각 시스템 별 맞는 파일을 다운로드 하여 사용하면 되고 긴급 fix도 가능하나 임시조치일 뿐이다. 버전 업데이트는 필요하다.)
대상 디렉토리 경로에서 log4j2-scan.exe 또는 log4j2-scan을 아래와 같이 실행
- Windows : log4j2-scan [–fix] target_path
- Linux : ./log4j2-scan [–fix] target_path
- UNIX(AIX, Solaris 등): Java -jar logpresso-log4j2-scan-1.1.0.jar [–fix] target_path
덧붙여 위 프로그램 실행 시 –Fix 옵션을 추가하면, 이 프로그램은 취약한 원본 JAR 파일을 .bak 파일에 복사하고 org/apache/logging/log4j/core/lookup/JndiLookup.class 항목 없이 새 JAR 파일을 만드는 작업을 진행한다. 위 옵션으로 실행 하면 지금 문제가 되는 JNDI lookUp 기능이 비활성화 처리 되는데, 보안 문제라고 하더라도 특정 기능을 비활성화 처리하는 작업이다. 엔터프라이즈 환경이라면 영향도 검토 및 내부 결제 라인의 승인을 받은 다음 진행하길 권고 한다. 그리고 만약 패치를 적용하기로 결정했다면 실행 중인 JVM 프로세스를 종료하고, 패치 적용 후 JVM 프로세스를 시작하면 된다.
스캐너 실행 시 임시 대응 방법
스캐너 실행 시 –fix 옵션을 사용하면 다음 작업이 수행된다.
- 취약한 JAR 파일을 .bak 파일로 백업
- JndiLookup.class 제거
- 새로운 JAR 파일 생성
이 방법은 임시 대응 방식이며, 장기적으로는 라이브러리 버전 업데이트가 필요하다.
Log4j 취약점 해결 방법
가장 확실한 대응 방법은 Log4j 최신 버전으로 업그레이드하는 것이다. 권장 버전은 다음과 같다.
[Java8 환경]
Log4j 2.16.0 이상
[Java7 환경]
Log4j 2.12.2 이상
바로 어려운 경우 임시 조치 방법
버전 업데이트가 어려운 경우 다음 명령어로 취약 기능을 제거할 수 있다.
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
마무리
Log4j 취약점(Log4Shell)은 Java 생태계 전반에 영향을 줄 수 있는 매우 심각한 보안 이슈다. 특히 Log4j는 많은 Java 기반 서비스에서 기본적으로 사용되고 있기 때문에 자신의 시스템에서 취약한 버전을 사용하고 있는지 반드시 확인할 필요가 있다.
운영 환경에서는
- 취약점 여부 점검
- 라이브러리 버전 확인
- 최신 버전 업데이트
를 빠르게 진행하여 보안 문제를 예방하는 것이 중요하다.
Java 기반 서비스를 운영하고 있다면 Log4j 취약점 대응 여부를 반드시 점검해 보도록 하자.
첫 댓글을 남겨보세요