etc

[보안취약점] log4j 보안 취약점 사태(log4jShell) 조치 방법

멍목 2021. 12. 22. 15:24
반응형

log4j 보안 취약점 사태(log4jShell, 관련 링크)로 인하여 log4j 2버전을 사용하고 있는 사내 솔루션들에 대한 조치가 필요해졌다.

 

□ 영향을 받는 버전
 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 버전
    ※ JMSAppender를 사용하지 않는 경우 취약점 영향 없음
    ※ log4j 1.x버전 사용자의 경우 추가적인 업그레이드 지원 중지로 인해 다른 보안위협에 노출될 가능성이 높아 최신버전 업데이트 적용 권고

 

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

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

 

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

 

 

 

필자의 조치방법

필자는 JndiLookup.class 파일을 삭제하고 로컬환경에서 테스트겸 서버를 키니 아래와 같이 NoClassDefError가 발생하였다.

 

그리하여 JndiLookup을 호출하는 Interpolator.class 파일도 수정하였다.

참고로 필자가 사용하는 log4j 버전은 log4j-core-2.0-rc1 이다.

 

필자의 조치 내역은 말그대로 임시 조치이기 때문에, 참고용으로만 읽어주길 바란다.

 

 

임시 조치 내역 

  1. 솔루션 라이브러리 폴더에 있는 log4j-core-2.0-rc1.jar 파일을 연결프로그램 반디집으로 연다.
  2. org/apache/logging/log4j/core/lookup 경로의 JndiLookup.class를 클릭 및 Delete키를 이용하여 jar파일에서 해당 class파일을 삭제한다.
  3. Interpolator.class 수정없이 서버 실행하는 경우, NoClassDefError 오류가 발생하며 서버가 정상적으로 실행되지 않는다. (rc2 이전 버전에 해당)
  4. org/apache/logging/log4j/core/lookup 경로의 Interpolator.class가 JndiLookup을 호출하기 때문에 소스 수정이 필요하다.
    1. class파일이고, import하는 것이 많기 때문에 java 파일에서 class 파일로 compile하는 것은 쉽지 않다고 판단하여 바이트코드 에디터(JBE, Java Bytecode Editior)를 이용하여 class파일 자체를 수정했다.

수정 전 Interpolator.class(디컴파일한 캡쳐본)

수정 후 Interpolator.class(디컴파일한 캡쳐본)

 

솔루션 라이브러리 폴더에 있는 log4j-core-2.0-rc1.jar을 반디집으로 열고 org/apache/logging/log4j/core/lookup 경로의 Interpolator.class파일을 바이트코드 에디터로 수정한 class파일로 교체한다.

 

바이트코드 에디터 사용방법

- 바이트코드 에디터 설치 링크 : http://set.ee/jbe/,

- 바이트코드 해석 참고 링크 : https://en.wikipedia.org/wiki/List_of_Java_bytecode_instructions

 

a. 바이트코드 에디터 실행 및 왼쪽 위 돋보기 모양으로 수정할 class 파일 OPEN

b. Methods - 수정할 함수이름 - [0] Code - Code Editor 탭에서 내용 수정

c. Save method 버튼을 클릭하여 파일 저장

 

반응형