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 이다.
필자의 조치 내역은 말그대로 임시 조치이기 때문에, 참고용으로만 읽어주길 바란다.
임시 조치 내역
- 솔루션 라이브러리 폴더에 있는 log4j-core-2.0-rc1.jar 파일을 연결프로그램 반디집으로 연다.
- org/apache/logging/log4j/core/lookup 경로의 JndiLookup.class를 클릭 및 Delete키를 이용하여 jar파일에서 해당 class파일을 삭제한다.
- Interpolator.class 수정없이 서버 실행하는 경우, NoClassDefError 오류가 발생하며 서버가 정상적으로 실행되지 않는다. (rc2 이전 버전에 해당)
- org/apache/logging/log4j/core/lookup 경로의 Interpolator.class가 JndiLookup을 호출하기 때문에 소스 수정이 필요하다.
- 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 버튼을 클릭하여 파일 저장
'etc' 카테고리의 다른 글
[CS 공부] Network (0) | 2022.03.20 |
---|---|
[AWS] 8080포트 접속 시, 로그인 화면이 나타나는 경우 (0) | 2022.01.19 |
[maven] maven repository 경로 확인 방법 (0) | 2021.12.18 |
[git] git 특정 파일들 커밋 목록에 나타나지 않도록 하기 (0) | 2021.12.17 |
[Git] 커밋 시, 잔디가 제대로 안심어지는 경우 해결 방법 (0) | 2021.12.16 |