본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


웹 취약점(Web vulnerability)

아파치 ‘로그4j’ 2 취약점(log4j LDAP, Apache Log4j 2)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 12. 13.

 

최근 아파치재단에서 배포하여 스프링, 전자정부 및 스프링부트 등 Java 기반의 어플리케이션 서버에서 범용적으로 쓰이는 로깅 라이브러리인 log4j 취약점이 발생했다는 소식이 들려 왔습니다.

또한 한국인터넷진흥원에서 아래와 같은 공지사항을 안내하였습니다.

https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389 

 

KISA 인터넷 보호나라&KrCERT

KISA 인터넷 보호나라&KrCERT

www.boho.or.kr

 

아파치 log4j에 대한 아파치 웹 페이지에서도 해당 이슈에 대해서 설명하고 있습니다.

* 해당 사이트를 등록하셔서 바뀌는 버전과 이슈를 자주 확인하셔야 합니다. 한국인터넷진흥원보다 소식이 더 빠릅니다.

https://logging.apache.org/log4j/2.x/

 

Log4j – Apache Log4j 2

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apa

logging.apache.org

 

이러한 이슈를 간략하게 정리하여보면,

log4j에서 사용하는 라이브러리가 LDAP 취약점이 발견이 되어 해커가 이를 탈취할 경우에는 서버에 대한 정보를 획득하여 임의로 데이터를 위변조 하거나 탈취 할 수 있다라는 내용 입니다.

* org.apache.logging.log4j 패키지의 라이브러리 뿐만 아니라 org.slf4j 패키지에서 사용하는 로거도 대상입니다.

 

 

이에 대한 조치방법은 매우 간단합니다.

log4j 라이브러리 버전을 가장 최신버전2.15.0 버전으로 상향시키면 됩니다  * 2021-12기준 입니다.

log4j 라이브러리 버전을 가장 최신버전2.17.0 버전으로 상향시키면 됩니다 

* 2021-12-28 기준 입니다. 버전이 계속 바뀔 수 있습니다.

샘플로 pom.xml에서 버전을 올리는 모습 입니다.

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.17.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.0</version>
</dependency>

 

그러나 해당 라이브러리는 java 8 이하에서는 동작하지 않으므로 자바 7이하의 모든 프로젝트는 적용 할 수가 없습니다.

이럴 때는 눈물을 머금고 아래처럼 클래스를 제거 하거나 설정파일의 값을 변경 합니다.

- (조치방법) 2.0-beta9 ~ 2.10.0
  ※ JndiLookup 클래스를 경로에서 제거 : zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- (조치방법) 2.10 ~ 2.14.1
  ※ log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경변수를 true로 설정

 

 

#환경변수를 변경하는 방법 (대상 버전 : 2.10 ~ 2.14.1)

아래 3가지 방법 중 1가지를 선택 합니다.

아무래도 가장 쉬운 2번과  3번을 주로 하겠네요.

# 3가지 방법 중 1가지를 선택 합니다.

1) Java 실행 값에 Arguments 에 시스템 속성을 추가한다. -Dlog4j2.formatMsgNoLookups=true

2) java 명령어를 통하여 아래 변수값을 변경한다
 * 명령어 : java -Dlog4j2.formatMsgNoLookups=true -jar log4j.버전.버전.jar
 
3) Java 실행 계정의 환경 변수 혹은 시스템 변수로 LOG4J_FORMAT_MSG_NO_LOOKUPS=true를 설정한다.

 

 

#클래스 제거 방법 설명 (대상 버전 : 2.0.x ~ 2.10.0)

클래스를 제거하는 방법을 간단하게 소개 합니다.

 

1) 제거할 lib 디렉토리 까지 이동 합니다.

그리고 대상 파일을 복사하여 임의의 디렉토리를 만들어 복사 붙여넣기 한 다음 아래 명령어를 입력 합니다.

jar -xvf log4j-core-2.버전.버전.jar

요렇게 jar파일의 압축을 풀어 줍니다.

 

2) 그리고 JndiLookup.class를 삭제 합니다.

삭제합니다.

 

3) 삭제를 하였으니 해당 파일을 다시 압축 합니다.

아래 명령어를 입력 합니다.

jar -cvf log4j-core-2.버전.버전.jar ./

요렇게 해당 파일이 제거 된 jar가 다시 탄생 했습니다.

 

 

이상으로 아파치 로그4j2 취약점(log4j LDAP, Apache Log4j 2)에 대해서 살펴보았습니다.

빠른 조치를 통해 피해가 없으시길 바랍니다.

틀린부분 또는 궁금한 점은 언제든 연락주세요! 👻

반응형

'웹 취약점(Web vulnerability)' 카테고리의 다른 글

취약한 printStackTrace 메소드(CWE-497)  (0) 2022.01.17
웹 표준 취약점 대비 후기  (0) 2021.12.11
28. 쿠키변조(CC)  (0) 2021.12.10
27. 데이터 평문전송(SN)  (0) 2021.12.10
26. 위치공개(PL)  (0) 2021.12.10
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글