Apache Log4j 취약점 정리

Jisoo Choi·2021년 12월 16일
0
post-thumbnail

🙋‍♀️ 개요

지난 주말 Apache Log4j2 보안 이슈(CVE-2021-44228)가 터졌다.

Log4j2는 자바 기반 로깅을 위한 라이브러리로 개발자가 로그를 남기는 용도이고, 이번 이슈는 지난달 알리바바 클라우드 보안팀에서 발견하여 디스코드 서버를 통해 이슈가 크게 번지게 되었다고 한다.

이후, 마인크래프트에서도 보안 이슈를 발견하여 수정했다는 발표를 시작으로 해외 여러 그룹에서도 많이 사용되고 있기 때문에 해당 취약점을 공격해서 '악성파일 감염 등 해커들이 목표 대상 컴퓨터의 모든 권한을 취득 할 수 있다' 고 발표가 났고, 이 취약점은 "로그4셸"(Log4shell)이라는 별칭으로 불린다.

  • 보안 취약점 영향을 받는 버전은 아래와 같다.
□ CVE-2021-44228 (원격 코드 실행 취약점)
  ▪ 2.0-beta9 ~ 2.14.1 버전 
    ▫ Log4j 2.12.2 버전 제외
   
□ CVE-2021-45046 (서비스 거부 취약점)
  ▪ 2.0-beta9 ~ 2.12.1 버전
  ▪ 2.13.0 ~ 2.15.0 버전

□ CVE-2021-4104 (원격 코드 실행 취약점)
  ▪ 1.2.x 모든 버전
    ▫ Log4j 1.x 버전 사용자는 Log4j 2.x 버전대로 업그레이드 권장

💊 취약점 대응 방안

⑴ 제조사 홈페이지를 통해 최신 버전으로 업데이트한다.

(2021년 12월 14일 기준 2.16.0 최신 업데이트 이상 설치 권장)
 → 기본적으로 JNDI를 비활성화하는 Log4j 2.16.0 버전으로 업데이트하는 것을 권장

⑵ 신규 업데이트가 불가할 경우 취약점 완화 적용 방안

  ▪ Log4j 2.0-beta9 이상 2.15.0 이하 버전 (Log4j 2.12.2 버전 제외)
    ▫ JndiLookup 클래스를 다음과 같이 제거
    # zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

  ▪ Log4j 1.x 버전
    ▫ Log4j 1.x에서 JMSAppender 사용 여부 확인 후 코드 수정 또는 삭제
    → log4j 1.x 낮은 버전 사용자의 경우 추가적인 업그레이드 지원 중지로 다른 보안위협에 노출될 가능성이 높아 최신버전(2.x) 업데이트 적용을 권고한다.


느낀점

예전에 팀에서 '어떤 프로젝트'에서 전자정부 프레임워크로 인해 log4j 관련하여 이슈가 있어서, 1.x의 낮은 버전에서 Slf4j로 변경한 사례가 있다고 한다.

그렇기 때문에 이번 취약점 이슈가 생기고 현재 진행중인 프로젝트에 log4j를 사용하고 있는지 여기저기서 연락이 왔지만 미리 log4j를 걷어내고 Slf4j로 변경한 덕분에(?) 무난히 넘어갈 수 있었다.

또한 현재 스프링 부트에서 Slf4j, Logback을 사용 중인데, Maven dependencies에 log4j-to-slf4j-2.11.2.jar, log4j-api-2.11.2.jar 라이브러리가 발견되어 깜짝 놀랐다..😨😢

하지만 스프링 부트에서는 log4j-core-.jar 파일이 아닌 log4j-api-.jar 파일만 사용하는 경우 위 취약점의 영향을 받지 않는다고 한다.

Spring Boot users are only affected by this vulnerability if they have switched the default logging system to Log4J2. 
The log4j-to-slf4j and log4j-api jars that we include in spring-boot-starter-logging cannot be exploited on their own. 
Only applications using log4j-core and including user input in log messages are vulnerable.


Reference

profile
👩‍🚀 No worries! Just record

0개의 댓글