오늘 주제는 Log4j의 보안 취약점을 확인하는 방법과 조치방법을 작성해보겠습니다.
아래는 이슈가 되었던 Log4j의 보안뉴스들입니다! 상세한 취약한 이슈들이 상세히 적혀있습니다! 미리 취약점을 짚고 넘어가면 더욱 흥미가 돋겠죠? 참고로만 살펴봐주세요!
https://news.v.daum.net/v/20211212123623912
http://m.boannews.com/html/detail.html?idx=104304&tab_type=1
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 파일이 존재하는 폴더 위치로 이동한 뒤, 임위의 폴더에 복사합니다.
이미 취약점이 발견된 버전에서는 취약 class가 존재할 것이라 예상되지만, 그래도 자신의 프로젝트에서 취약점이 존재하는지 먼저 파악해보겠습니다.
jar 파일은 자바 프로젝트에서 라이브러리를 배포하기 위해 관련 기능들이 함축된 일종의 압축파일입니다.
우리는 jar 파일을 압축 해제해볼 것입니다.
1. 미리 복사한 log4j 파일이 있는 위치에서 명령 프롬프트를 실행해줍니다.
2. 아래 명령어를 실행하여 압축을 해재해줍니다.(window & linux 모두 가능)
> jar xvf log4j-[해당버젼].jar
3. 압축해제 후 META-INF, org 폴더를 확인
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(&폴더)가 존재하는지 확인합니다.
직접 지워도 되지만, 아래에서 간단한 명령어로 취약점을 제거하는 방법을 알려드리겠습니다.
Log4j 취약점 제거
[대상 2.0-beta9 ~ 2.10.0, 1.X]
이제 jar 파일을 재압축하는 작업을 진행할 것입니다.
1. 압축을 진행할 log4j-[버젼].jar 파일의 위치로 이동합니다.
1-5. zip 명령어가 없는 경우 개인의 PC에 zip 명령어를 실행할 준비를 해둡니다.
https://lee-mandu.tistory.com/530
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/*
변화된 점은 보이지 않지만, 수정한 날짜를 봐주시면 파일 내용이 변경된 것을 확인할 수 있고, 더욱 정확히 확인하는 방법은 제일 처음 설명한 방법대로 다시 확인해주시면 위 명령어에서 작성한 class(&폴더)등이 제거되어 압축되었음을 확인할 수 있습니다.
> jar xvf log4j-[해당버젼].jar
3. 마지막으로 프로젝트에서 log4j 파일을 뽑아왔던 위치에 취약점을 제거한 log4j로 바꿔주기!
이렇게 마무리가 됩니다.
모두 즐거운 하루들 보내세요!!