Tools/logging

[log4j] log4j-1.x.x 취약점 업데이트

MOMOBOB 2022. 1. 21. 01:23
반응형

 

[2021.12] 시절 log4j 보안 취약점 사태가 발생함.

 

나는 관여된 시스템들 중 log4j을 사용중인 시스템에 대해서 버전업데이트를 해야하는 업무가 주어졌음.

 

당시 취약점(아래) 취약점들은 높은 수준의 취약점이었기에 상당한 이슈였고 각 시스템을들 업데이트를 하게 되었음.

 

실질적인 취약점이 발생한 라이브러리는 log4j-core-2.x이고, 대상 시스템 5곳 중 3곳은 log4j-2.x(2점대 버전)를 사용하는 곳이라 그냥 버전만 올리면 되었음.

 

하지만, 이 취약점 사태로인해 다른버전의 log4j의 취약점도 수면위로 올라온것이 화근...

 

 log4j-1.x의 버전들도 취약점이 존재하는 생태기에 취약수준이 높진 않아도 하는김에 이 취약점을 해결하기로 함.

 

 

log4j-1.x을 log4j-2.x로 업데이트하는 것이 쉽지 않았을 것이라고 생각했는데 그 이유가 log4j-1.x와 업데이트 해야할 log4j-core-2.x가 완전히 다른 프로젝트이기 때문..

 

그래서 조금 찾아보니 log4j-1.x를 log4j-2.x 버전으로 마이그레이션하는 방법을 아파치에서 가이드를 해주고 있었음.

https://logging.apache.org/log4j/2.x/manual/migration.html

 

반응형

 

 

요약해보자면, 2가지 방법이 있음.

  1. 1. log4j-api.jar(브릿지), log4j-core.jar, log4j-1.2-api.jar(브릿지) 세개의 라이브러리를 더 추가해서 코드 수정 없이 마이그레이션하는 방법.
  2. log4j-2.x-api를 직접 사용하는 방법 (문법차이에 따른 코드 수정 필요)

 

 

이 두가지 방법을 예상하고 log4j.1.x를 사용하는 두 시스템을 들여다봄...

 

시스템을 들여다보니 둘다 Spring기반이긴하나, 하나는 Maven기반 Legacy 시스템이고 하나는 순수 Spring으로 구성되어 있었음..

 

먼저 금방 할 수 있을거라고 생각한 maven기반 프로젝트의 라이브러리를 살펴보니, slf4j-api와 slf4j-log4j12라는 라이브러리를 사용하고 있었고  slf4j-log4j12에서 log4j를 직접적으로 의존하고 있었음.

 

구조를 조금 살펴보니 slf4j-log4j12가 slf4j-api의 구현체였고 소스코드에서는 slf4j-api라이브러리의 인터페이스만 사용중이었음. (인터페이스의 중요성, 필요성을 다시 한번 깨닫는다.....)

 

그래서 아파치에서 가이드하는 log4j 1.x마이그레이션 방법은 다른 직접사용한 라이브러리를 뜯어고치지 않는 이상 쉽게하기 힘들어보였고, slf4j-api의 인터페이스를 구현한 구현체들을 찾기 시작함.

 

아니나다를까, slf4j-simple, slf4j-jdk14, slf4j-nop, slf4j-jcl 등을 mvn repository에서 찾았지만 log4j기능을 대체할만한게 없다고 생각할 때, logback도 slf4j-api을 구현한 구현체가 있다는 것을 발견했다.

 

그것이 바로 springboot에서도 사용하는 logback-classic!! 직접적인 취약점은 없기에 이걸로 구현체만 변경하면 log4j.xml등 설정파일 말고는 코드수정 하나 없이 취약점 보완이 가능했다. (log4j-2.x.x를 사용하려면 java, tomcat버전도 맞췄어야 헀다는....)

 

그렇게 maven기반 legacy프로젝트의 취약점 보완은 해결하였으나, 순수 Spring으로 되어있는 시스템은 slf4j-api등 인터페이스를 사용하지 않고, log4j.1.2.16라이브러리를 직접 바라보고 있어서, 위의 slf4j-api와 logback-classic을 이용하여 로깅하는 것으로 전체 로깅 코드를 일괄 수정하여 보완하였다...

 

끝.

 

 


Thank you!

 

 

반응형