끄적끄적

gradle 환경에서 apache log4j 2.15.0 버전 업데이트하기 본문

Back-end/Java

gradle 환경에서 apache log4j 2.15.0 버전 업데이트하기

mashko 2021. 12. 13. 21:23
반응형

최근에 보안 취약점으로 문제가 있었던 log4j에 대해 어디를 업데이트해야되는지 기록해두려한다.
취약 버전은 2.0 beta9 <= Log4j2 <= 2.14.1 (1.x 버전은 해당사항 없음) 이라고 한다.
문제사항은 Log4j의 ldap JNDI 파서를 통한 원격 코드 실행(RCE - Remote Code Execution) 취약점이 있다는 것이고, 정확히 어떻게
코드를 실행시키는지는 잘모르겠다. log4가 로그를 출력할 때 로그에 사용자ID 등이 있을때 자동으로 내부에서 운영중인 LDAP 서버 등에 접속을 해서 변환하는 기능을 제공하는데 이 기능을 이용하면 해커의 서버로 접속해서 해커가 만든 악성 코드를 서버로 다운로드 받게 하고 이 코드를 이용해서 서버를 탈취할 수 있다고 한다..
대충 알겠고, 그럼 얼른 업데이트를 해보자.
먼저 내가 어떤 버전을 쓰는지 확인하는 방법은 몇가지 있다.
1.External Libraries에 세팅되어있는 패키지를 보는 방법

나의 경우엔 log4j-core에 대한 사항은 없지만 저기 부분에 log4j-core가 디펜던시 걸려있다면 해당대상이 된다고 한다.

2.터미널을 통해 확인하는 방법

./gradlew dependencies | grep log4j
or
gradle dependencies | grep log4j
or
springboot maven plugin > pom.xml

log4j-core 가 2.15.0 미만이라면 문제가 있으니. 그럼 이 버전을 변경해 보자.
방법은 간단하다.

implementation ('org.apache.logging.log4j:log4j-api:2.15.0')
implementation ('org.apache.logging.log4j:log4j-to-slf4j:2.15.0')
implementation ('org.apache.logging.log4j:log4j-core:2.15.0')

또는 강제 디펜던시가 걸려있는경우

implementation ('org.apache.logging.log4j:log4j-api:2.15.0'){force = true}
implementation ('org.apache.logging.log4j:log4j-to-slf4j:2.15.0'){force = true}
implementation ('org.apache.logging.log4j:log4j-core:2.15.0'){force = true}

force로 강제 업데이트 시켜주면된다.
변경되었는지 확인해보자.


변경하면 위와 같은 형태로 변경된다.
정상적으로 변경된 것으로 보인다.
위와 같이 버전을 업데이트를 하는건 java8이상이 필요하다. 내 환경은 java11의 환경이였고, 그렇기 때문에 그냥 업데이트를 시켜주면 간단했지만, 버전이 낮거나 업데이트를 하기 힘든 상황이라면 아래와 같은 방법으로 해결할 수 있다고 한다. 하지만 아무래도 가장 안전한 방법은 2.15.0으로 올리는 것을 추천한다.
log4j 2.10.0 이상 사용 시 다음의 방법 중 한 가지 이상의 방법을 사용한다.
1.Java 실행 인자(Arguments) 에 시스템 속성을 추가한다. -Dlog4j2.formatMsgNoLookups=true
2.Java 실행 계정의 환경 변수 혹은 시스템 변수로 LOG4J_FORMAT_MSG_NO_LOOKUPS=true를 설정한다.
log4j 2.7.0 이상 사용 시 log4j 설정(log4j.xml 등)에 PatternLayout 속성에 있는 %m 부분을 %m{nolookups} 으로 교체한다.
log4j 상기버전 미만일 경우 가장 어려운 상황으로, JndiLookup 클래스와 JndiManager 클래스를 읽지 못하도록 조치해야 한다. log4j-core.jar 를 직접 빌드하거나, 자바 프로젝트에 패키지명까지 맞춰가면서 dummy화 시켜야 한다.
log4j 외에 다른 로깅 모듈로의 교체를 검토한다.

반응형
Comments