개발/Java

Log4j 라이브러리 보안 이슈(CVE-2021-44228). 영향 받는 버전 및 해결 방안

IT하는 문과생 2021. 12. 13. 10:07

로그를 남기기 위한 라이브러리 가운데 Log4j라는 오픈 소스가 있다.
오픈 소스이면서도 로그 저장에 있어 유용한 기능들이 많아 JAVA 프로그래밍을 하는 대부분의 개발사에서 사용 중인 라이브러리인데, 이번에 문제가 조금 생겼다. 아니 좀 크게 생겼다. 문제가 된 것은 Log4j 라이브러리의 취약점(명령어를 실행시킬 수 있다는) 때문인데, 앞서 말했듯이 JAVA 프로그래밍된 대부분의 사이트 및 프로그램에서 Log4j를 사용 중이기 때문에 더 문제점이 크다고 볼 수 있다. 덧붙여 이 이슈가 문제가 되는 것은 서버에 로그인한 것 만으로 해커가 사용자의 컴퓨터를 사실상 원격 조종할 수 있는 것이기 때문이다. 단순히 원격 조종이라고 하면 실감이 안날 수도 있는데, 구체적으로 설명하자면 비밀번호도 없이 서버를 통해 내부망에 접근해 데이터를 약탈하거나 악성 프로그램을 심어 실행시키고, 심지어는 자료까지도 삭제할 수 있는 이슈다.
KISA에서도 이 문제점에 대해 다음과 같이 해결 방안을 제공하고 있다. 혹시 JAVA 관련 개발을 하고 있다면 아래의 내용을 참고해서 빠르게 보안 패치를 진행할 수 있도록 하자.

□ 주요 내용
o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-44228)
o Apache Log4j 2에서 발생하는 서비스 거부 취약점(CVE-2021-45046)
o Apache Log4j 1.2에서 발생하는 원격코드 실행 취약점(CVE-2021-4104)
※ Log4j : 프로그램 작성 중 로그를 남기기 위해 사용되는 자바 기반의 오픈소스 유틸리티

□ 영향을 받는 버전
o CVE-2021-44228
- 2.0-beta9 ~ 2.14.1 버전 (Log4j 2.12.2 제외)
o CVE-2021-45046
- 2.0-beta9 ~ 2.12.1 및 2.13.0 ~ 2.15.0 버전
o CVE-2021-4104
- 1.2.x 버전
※ JMSAppender를 사용하지 않는 경우 취약점 영향 없음
※ log4j 1.x버전 사용자의 경우 추가적인 업그레이드 지원 중지로 인해 다른 보안위협에 노출될 가능성이 높아 최신버전 업데이트 적용 권고
o 별도 프로그램을 통해 취약점 대상 파일인지 확인하기(출처: Github/국내 개발)

logpresso-log4j2-scan-1.1
0.01MB
logpresso-log4j2-scan-1.1
2.92MB
logpresso-log4j2-scan-1.1
2.81MB


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 프로세스를 시작하면 된다.

□대응방안
o 제조사 홈페이지를 통해 최신버전으로 업데이트 적용
※ 제조사 홈페이지에 신규버전이 계속 업데이트되고 있어 확인 후 업데이트 적용 필요
※ 신규 업데이트가 불가할 경우 임시조치방안 적용 권고
- CVE-2021-44228, CVE-2021-45046
· Java 8 : Log4j 2.16.0으로 업데이트
· Java 7 : Log4j 2.12.2으로 업데이트
· 임시조치방안 : JndiLookup 클래스를 경로에서 제거 : zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
· 위 프로그램을 통한 패치(임시조치로 버전 업데이트는 반드시 필요) 혹은 제조사 홈페이지를 통해 최신 버전(2.15.0)으로 업데이트 적용(링크: Apache Log4j 공식 패치 사이트)
※ 임시조치방안은 게시된 취약점에 대한 임시적 조치로 신규 버전으로 업그레이드를 권장함
※ log4j-core JAR 파일 없이 log4j-api JAR 파일만 사용하는 경우 위 취약점의 영향을 받지 않음

- CVE-2021-4104
· Java 8 : Log4j 2.16.0으로 업데이트
· Java 7 : Log4j 2.12.2으로 업데이트