(2021.12.14 업데이트) 그 사이 log4j 의 패치 버전이 나오고, 패치된 log4j를 탑재한 Logstash의 새로운 버전이 공개되었습니다. 자세한 내용은 새로 올린 아래 포스팅을 참고해 보세요!
주말 내내 log4j 에 대한 폭풍이 계속 이어지고 있습니다. 직접 개발한 소스코드를 이용하는 경우 새로 공개된 log4j 의 바이너리(2.15.0+)를 이용해 빌드를 다시 하면 되지만 그렇지 않은 오픈소스나 외부의 패키지를 이용한 경우들이 계속 발견되고 보고되고 있습니다.
저 역시 로그 수집을 위해 Logstash 클러스터를 운영하고 있던 관계로 log4j 에 대한 취약점 대응을 해야 했습니다. 직접 만든 코드가 아니다보니 log4j 에 대한 대응을 어떻게 해야 하나 찾아본 결과를 정리해 봅니다.
혹시나, "이게 머선일이고!?" 하는 분이 계시다면 아래의 링크로 빠르게! 취약점을 내것으로 만들어 보시기 바랍니다! |
https://ondemand.tistory.com/345
영향받는 logstash 버전은?
Logstash의 6.8.20 이하, 혹은 7.16.0 이하 버전은 모두 영향범위에 들어갑니다. 오래된 버전은 log4j 의 낮은 버전이 탑재되어 있을 수 있겠지만 기본적으로 현시점까지 릴리즈된 버전은 모두 영향범위로 보는 것이 맞겠습니다.
// logstash의 경로는 사용 환경에 따라 다를 수 있습니다
//
$ /usr/share/logstash/bin/logstash --version
logstash 7.3.1
새로운 버전의 릴리즈는?
가장 확실한 방법은 새로운 버전의 릴리즈를 기다리는 것입니다. Logstash의 가장 최신 버전은 7.16.0 버전으로 확인됩니다 (2021.12.13 오전 7:38 기준) 이 버전에서 사용하고 있는 log4j 는 취약점이 있는 버전으로 조치가 필요합니다.
현재 예고되어 있는 패치 버전의 공개는 한국 시간으로 늦어도 14일까지 릴리즈 될 예정입니다. 따라서 아직까지는 보안 취약점이 제거된 새로운 릴리즈 버전을 사용할 수 없고, log4j 의 취약점 대응을 다른 방식으로 해야만 합니다.
Logstash core-jar 파일에서 jdni 클래스를 삭제하기
elastic 에서 logstash 의 log4j 취약점 제거를 위해 공식 가이드하고 있는 방법은 logstash 패키지에 포함된 core-jar 파일에서 jdni 클래스를 제거하는 방법입니다. 느낌이 왔겠습니다만 아주 확실하고 강려크한 방법이라고 생각합니다. 참고로 한때 유통되던 log4j 의 실행시 옵션을 주는 방법은 유효하지 않다고 합니다. 클래스를 확 날려버리는게 현재로서는 가장 확실한 방법입니다.
// jdnilookup.class 를 삭제합니다
// 경로 (/usr/share/logstash)는 각자의 환경에 맞추어 수정합니다
//
sudo zip -q -d /usr/share/logstash/logstash-core/lib/jars/log4j-core-2.* org/apache/logging/log4j/core/lookup/JndiLookup.class
// 자바 클래스 재로딩을 위해 logstash 를 재기동합니다
//
sudo systemctl restart logstash
log4j 처럼 광범위하게 사용되는 패키지의 취약점 발견으로 여기저기 들썩들썩합니다. 모두들 무탈히 이슈 대응 하시길 기원합니다!