이슈/취약점

Log4j 취약점 조치방법

wonhy2ok 2022. 1. 25. 03:05

오늘 주제는 Log4j의 보안 취약점을 확인하는 방법과 조치방법을 작성해보겠습니다.

 

아래는 이슈가 되었던 Log4j의 보안뉴스들입니다! 상세한 취약한 이슈들이 상세히 적혀있습니다! 미리 취약점을 짚고 넘어가면 더욱 흥미가 돋겠죠? 참고로만 살펴봐주세요!


https://news.v.daum.net/v/20211212123623912

 

'최대 보안 취약점 발견' 보안 업데이트 필수

해커. 게티이미지 제공 [파이낸셜뉴스] 대부분의 인터넷 서버에 사용되는 소프트웨어(SW)에서 심각한 보안 취약점이 발견돼 세계가 발칵 뒤집혔다. 이는 보안위협 최고등급으로 분류됐다. 우리

news.v.daum.net

http://m.boannews.com/html/detail.html?idx=104304&tab_type=1

 

2022년에도 계속되는 로그4j 사태... 3가지 취약점 추가 공개

아파치재단이 로그4j(Log4j)에 대한 보안공지를 발표했다. 이번 공지는 CVE-2022-23302, CVE-2022-23305, CVE-2022-23307 취약점에 대한 내용이며, 취약점은 각각 JMSSink, JDBCAppender, Chainsaw 모듈에 존재한다.

m.boannews.com

 

Log4j 취약점이 발견된 버전인지 확인

[대상 2.0-beta9 ~ 2.10.0, 1.X]

 

Log4j 취약점은 최신 버전(22.01.25 기준 2.17.1)으로 업데이트 해주시면 해결이 되겠지만 그렇지 못한 경우는 우리가 문제가 되는 취약점을 제거하는 작업이 필요합니다.

 

최근 발생한 1.x 버전 취약점을 기준으로 설명할게요.
※ 본 포스트는 2.10 ~ 2.14.1 에 대해선 설명하지 않습니다.

 

우선, 프로젝트에서 log4j-*.jar 파일이 존재하는 폴더 위치로 이동한 뒤, 임위의 폴더에 복사합니다.

log4j jar파일

이미 취약점이 발견된 버전에서는 취약 class가 존재할 것이라 예상되지만, 그래도 자신의 프로젝트에서 취약점이 존재하는지 먼저 파악해보겠습니다.

 

jar 파일은 자바 프로젝트에서 라이브러리를 배포하기 위해 관련 기능들이 함축된 일종의 압축파일입니다.

 

우리는 jar 파일을 압축 해제해볼 것입니다.

 

1. 미리 복사한 log4j 파일이 있는 위치에서 명령 프롬프트를 실행해줍니다.

 

2. 아래 명령어를 실행하여 압축을 해재해줍니다.(window & linux 모두 가능)

> jar xvf log4j-[해당버젼].jar

jar 명령어 실행 전

3. 압축해제 후 META-INF, org 폴더를 확인

jar 명령어 실행 후 압축해제된 모습

4. 취약점이 발견된 class 및 폴더 찾기

[2.0-beta9 ~ 2.10.0 기준]

org/apache/logging/log4j/core/lookup/JndiLookup.class

 

[1.X 기준]

org/apache/log4j/net/JMSSink.class

org/apache/log4j/jdbc/JDBCAppender.class

org/apache/log4j/chainsaw/*

 

5. 위 버전과 파일의 위치를 확인해서 취약 class(&폴더)가 존재하는지 확인합니다.

1.2.14 버젼의 취약점 중 JMSSink.class

직접 지워도 되지만, 아래에서 간단한 명령어로 취약점을 제거하는 방법을 알려드리겠습니다.

 

Log4j 취약점 제거

[대상 2.0-beta9 ~ 2.10.0, 1.X]

 

이제 jar 파일을 재압축하는 작업을 진행할 것입니다.

 

1. 압축을 진행할 log4j-[버젼].jar 파일의 위치로 이동합니다.

 

1-5. zip 명령어가 없는 경우 개인의 PC에 zip 명령어를 실행할 준비를 해둡니다.

https://lee-mandu.tistory.com/530

 

윈도우 cmd 명령어로 압축 및 압출해제 하기 (zip, unzip)

안녕하세요. 저는 대용량 파일에대해 처리를 할때 CMD창을 자주 활용합니다. 특히 복사나 삭제같은 경우에는 처리속도가 훨씬 빠르죠 앞서 포스팅도 하였습니다. [개발/윈도우] - 윈도우 cmd 명령

lee-mandu.tistory.com

 

2. 명령 프로프트에서 zip 명령어를 실행합니다.(window & linux 모두 가능)

(-q : 메시지 출력안함, -d 특정 파일 제외하고 압축)

 

[대상 2.0-beta9 ~ 2.10.0]

> zip –q –d log4j-core-[버젼].jar org/apache/logging/log4j/core/lookup/JndiLookup.class

 

[대상 1.X]

> zip -q -d log4j-[버젼].jar org/apache/log4j/net/JMSSink.class
> zip -q -d log4j-[버젼].jar org/apache/log4j/jdbc/JDBCAppender.class
> zip -q -d log4j-[버젼].jar org/apache/log4j/chainsaw/*

zip 명령어로 재압축

 

 변화된 점은 보이지 않지만, 수정한 날짜를 봐주시면 파일 내용이 변경된 것을 확인할 수 있고, 더욱 정확히 확인하는 방법은 제일 처음 설명한 방법대로 다시 확인해주시면 위 명령어에서 작성한 class(&폴더)등이 제거되어 압축되었음을 확인할 수 있습니다.

> jar xvf log4j-[해당버젼].jar

JMSSink.class가 제거된 모습

3. 마지막으로 프로젝트에서 log4j 파일을 뽑아왔던 위치에 취약점을 제거한 log4j로 바꿔주기!

 

 

이렇게 마무리가 됩니다.

 

모두 즐거운 하루들 보내세요!!