Offcanvas

랜섬웨어 / 보안 / 악성코드

기고ㅣ애플리케이션에서 ‘Log4j’ 취약점을 탐지하는 방법

2021.12.14 Josh Bressers  |  InfoWorld
널리 사용되는 ‘Log4j’ 라이브러리에 버그가 있으면 공격자는 Log4j를 사용하여 로그를 작성하는 모든 시스템에서 임의의 코드를 실행할 수 있다. 

아파치 재단이 거의 모든 자바 애플리케이션에 포함된 로깅 도구 Log4j의 치명적인 제로데이 취약점에 관한 긴급 업데이트를 발표했다. 이는 ‘Log4Shell’로 명명됐으며, 식별자는 CVE-2021-44228이다. 

이 취약점은 Log4j 라이브러리의 버그를 통해 발생하는데, 이를 통해 공격자는 Log4j를 사용하여 로그 메시지를 작성하는 시스템에서 임의의 코드를 실행할 수 있다. 따라서 Log4j를 포함하는 애플리케이션 사용자라면 누구나 즉시 주의를 기울여야 한다. 
 
ⓒGetty Images

Log4Shell을 해결해야 하는 이유
Log4j는 많은 자바 애플리케이션에서 사용되는 라이브러리다. 현재 가장 널리 쓰이는 자바 라이브러리이기도 하다. 대부분의 자바 애플리케이션은 데이터를 기록하며, Log4j가 주로 활용된다.  

여기서 문제는 Log4j를 찾는 것이다. 자바 패키징의 작동 방식 때문에 Log4j가 애플리케이션의 어딘가 숨어 있을 수 있고, 심지어는 그 사실을 모르고 있을 가능성이 크다. 

자바 생태계에서 종속성은 자바 라이브러리로 사용할 수 있는 패키지인 JAR(Java archive) 파일로 배포된다. 메이븐(Maven), 그래들(Gradle) 등 일반적으로 사용되는 도구는 자바 애플리케이션을 빌드할 때 JAR 파일을 자동으로 추가할 수 있다. JAR이 종속성을 충족하기 위해 다른 JAR을 포함할 수도 있다. 

즉, 취약점이 애플리케이션에서 여러 수준 아래에 숨겨질 수 있다. 어떤 경우에는 하나의 종속성이 수백 개의 다른 종속성을 가져와 (이를) 찾기 훨씬 더 어려울 수 있다. 

기본적으로 자바 세계에서는 JAR에 중첩된 JAR에 JAR이 중첩될 수 있다. 이는 모든 것을 조사해야 하는 수많은 계층을 만든다. 이에 따라 Log4j가 다른 JAR 파일에 숨어 있을 수 있기 때문에 프로젝트가 직접 가져온 JAR을 보는 것만으로는 충분하지 않다. 

오픈소스 도구로 Log4j 스캔하기 
앵커(Anchore)의 2가지 오픈소스 도구는 수많은 패키지 종속성 형식을 스캔하고, 존재를 식별하며, 취약점이 포함돼 있는지 보고하는 기능을 제공한다. 이 경우에 있어서 JAR 파일, 특히 JAR 파일의 중첩 계층을 스캔할 수 있는 기능이 유용하다.

‘시프트(Syft)’는 SBOM(Software Bill of Materials)을 생성하고, ‘그리프(Grype)’는 취약성을 스캔한다. 이 2가지 도구는 JAR 아카이브의 중첩된 여러 계층을 검사하여 Log4j 버전을 찾아 식별할 수 있다. 

또한 시프트는 자바 애플리케이션에 포함된 Log4j 버전을 식별할 수 있다. Log4j JAR은 프로젝트에 직접 포함되거나 포함된 종속성 중 하나에 숨겨질 수 있다. 예를 들면 시프트를 사용하여 다음의 샘플 자바 프로젝트를 스캔하면 Log4Shell에 취약한 Log4j 버전 2.14.1이 포함돼 있음을 알 수 있다. 
 
ⓒAnchore

이 밖에 포함된 Log4j 버전에 관계없이 SBOM을 생성하고 저장하여 제공하는 모든 소프트웨어 구성요소 또는 애플리케이션에 포함된 모든 내용을 기록할 수 있다. Log4Shell과 같은 새로운 취약점이 발견되면 모든 자바 애플리케이션을 찾아 검색하는 것보다 SBOM의 리포지토리를 검색하는 게 훨씬 더 빠르다. 

그리프는 소프트웨어에 어떤 특정 취약점이 있는지 알려주는 기능을 제공하는 스캐너다. 애플리케이션에 종속성을 포함할 때 여러 수준의 중첩을 통해 종속성에 포함된 취약점을 식별할 수도 있다. 

아울러 소프트웨어를 직접 스캔하거나 시프트에서 생성된 SBOM을 스캔할 수도 있다. 이를 통해 소프트웨어가 배포되거나 고객에게 제공된 후에도 SBOM에서 새로운 취약점을 다시 검사할 수 있다. 

그리프를 사용하여 위의 샘플 자바 프로젝트를 스캔하면 Log4j 취약점을 찾아 치명적인 심각도로 식별된다. 
 
ⓒAnchore

시프트 및 그리프는 어디에 있든 애플리케이션을 검색할 수 있다. 디스크의 디렉토리를 검사하거나 컨테이너 이미지를 로컬로 검사하거나 원격 레지스트리의 컨테이너를 검사할 수 있다. 

아울러 빌드하기 전에 소스 코드를 스캔하거나 빌드 후 최종 애플리케이션을 스캔할 수도 있다. 소스 코드 스캔이 깨끗하다고 해서 최종 빌드가 된 것은 아니다. 따라서 모든 개발 단계에서 애플리케이션을 검사하는 게 중요하다. 배포 후 스캔도 중요하다. 지난 주에는 Log4j 취약점을 발견하지 못했지만 이번 주에는 발견할 수 있어서다. 

새로운 제로데이 취약점이 발견될 때마다 이를 신속하게 해결하기 어려울 수 있다. 가장 중요한 첫 번째 단계는 특정 취약점이 사용자에게 영향을 미치는지 파악하는 것이다. 여기서 JAR 파일은 도구 없이 이해하기가 어려울 수 있다. 앵커의 오픈소스 도구 그리프와 시프트는 종속성 트리의 맨 아래까지 파고들어 어딘가 숨어 있는 Log4j 사본이 있는지 확인한다. 

제로데이 취약점이 발생했을 때 어떻게 대응하고 지원하는지는 무엇보다 중요하다. 이러한 취약점을 방지하는 데 도움이 될 솔루션과 사고방식을 공유해야 할 때다. 

* Josh Bressers는 앵커의 보안 부문 부사장이다. ciokr@idg.co.kr

 
Sponsored
추천 테크라이브러리

회사명:한국IDG 제호: ITWorld 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아00743 등록일자 : 2009년 01월 19일

발행인 : 박형미 편집인 : 박재곤 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2022 International Data Group. All rights reserved.