본문 바로가기

카테고리 없음

Elasticsearch logstash log4j 취약점 대응

Apache Struts, Apache Solr, Apache Druid, Apache Flink, ElasticSearch, Flume, Apache Dubbo, Logstash, Kafka, Spring-Boot-starter-log4j2
Log4j 취약점 영향받는 소프트웨어에 적혀있는 반가운 이름..




2021/12/03 log4j 2.15.0 으로 변경한 7.16.1 버전 릴리즈https://www.elastic.co/guide/en/elasticsearch/reference/current/release-notes-7.16.1.html

 

Elasticsearch version 7.16.1 | Elasticsearch Guide [7.16] | Elastic

www.elastic.co

JndiLookup 클래스 제거했다는 부분으로 보아 CVE-2021-45046 Apache Log4j 2.15.0 취약점에도 안전할 것으로 보인다..

Elasticsearch Log4j
0.90 ~ 2.4.6 1.12.7
5.0.0 ~ 2.6.2
5.1.1 ~ 2.7 ~ 2.9.1
6.5.4 ~ 2.11.1
7.16.1 ~ 2.15.0

1. elasticsearch
(1) 영향 받는 버전
5.0 이상 취약 버전 log4j 포함
but elasticsearch6, 7 에 설정되어있는 security manager가 원격 코드 실행 공격을 완화함
(elasitc에서는 6,7 버전이 영향받지 않는다고 하나 위험하다는 의견도 다수 있음..)
(2) 대응방법
-Dlog4j2.formatMsgNoLookups=true
설정 elasticsearch 재시작
or
7.16.1 버전 업그레이드


2. logstash
(1) 영향 받는 버전
Logstash 버전 6.8.x 7.16.0 이하 버전 8u191 11.0.1 미만의 JDK에서 실행되도록 구성된 경우 Java 클래스의 원격 로드를 허용함.

(2) 대응방법
-Dlog4j2.formatMsgNoLookups=true
Logstash 플래그가 효과가 없는 방식으로 Log4j 사용하기 때문에 광범위한 플래그 모든 경우에 Logstash 취약점을 완화하기에 충분하지 않음
따라서 다음 명령을 사용하여 log4j2 코어 jar에서 JndiLookup 클래스를 제거해야 .
zip -q -d <LOGSTASH_HOME>/logstash-core/lib/jars/log4j-core-2.* org/apache/logging/log4j/core/lookup/JndiLookup.class
변경 사항을 적용하려면 Logstash 프로세스를 재시작
or
7.16.1 버전 업그레이드



대응 방법
(1) jvm option 변경
#cat /etc/elasticsearch/jvm.options
-Dlog4j.formatMsgNoLookups=true
#cat /etc/logstash/jvm.options
-Dlog4j.formatMsgNoLookups=true

(2) logstash 아래 명령 사용으로 log4j2 코어 jar에서 jndilookup 클래스 제거
# zip -q -d <LOGSTASH_HOME>/logstash-core/lib/jars/log4j-core-2.* org/apache/logging/log4j/core/lookup/JndiLookup.class

(3) log4j2.16.0 버전으로 변경 (Logstash 만 가능) 
LSS_HOME(LS_HOME)/lib/log4j2* 를 log4j2.16.0.jar 변경

(3-1) core와 api 만 업그레이드 
maven repository에서 core-2.16.0 , api-2.16.0다운
https://mvnrepository.com/search?q=Log4j
log4j-core-2.x
log4j-api-2.x  -> log4j-api-2.16.0
변경 후 재시작
(버전 에러 없이 잘 돌아간다)

 

(3-2) elasticsearch는 불가능하고 logstash 만 가능한 이유

elasticsearch java security manager 가 변경된 jar 파일에 대해 권한 문제를 발생시킨다.

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader" 

 

jvm.option에 log4j2.formatMsgNoLookups=true 내용을 추가하거나

# zip -q -d usr/share/elasticsearch/lib/log4j-core-2.* org/apache/logging/log4j/core/lookup/JndiLookup.class

클래스를 삭제하거나

elasticsearch 7.16.2 버전으로 업그레이드 해야한다.


2. docker 환경
# cat elasticsearch/Dockerfile
ENV LOG4J_FORMAT_MSG_NO_LOOKUPS=true
# cat logstash/Dockerfile
ENV LOG4J_FORMAT_MSG_NO_LOOKUPS=true
RUN zip -q -d <LOGSTASH_HOME>/logstash-core/lib/jars/log4j-core-2.* org/apache/logging/log4j/core/lookup/JndiLookup.class


추가 후 재시작