취약점 개요 (나무위키)

https://namu.wiki/w/2021%EB%85%84%20%EC%9E%90%EB%B0%94%20%EB%B3%B4%EC%95%88%20%EC%B7%A8%EC%95%BD%EC%A0%90%20%EC%82%AC%ED%83%9C

 

요약

log4j 가 내부적으로 사용하고 있는 JNDI와 LDAP을 기능을 이용해 서버 권한을 탈취할 수 있는 취약점

log4j core v2.0 ~ v2.14.x 까지 해당

 

조치 권고

  • log4j core 모듈 v2.15로 업그레이드
  • 2.0-beta9 ~ 2.10.0 : log4j-core-*.jar 파일에서 org/apache/logging/log4j/core/lookup/JndiLookup.class 클래스를 제거 후 리빌드
  • 2.10 ~ 2.14.1 : log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경 변수를 true로 설정

 

나의 현황

운영중인 Spring Boot 어플리케이션을 점검한 결과 log4j의 상위 버전인 logback + slf4j 로 로깅을 하고 있어서 큰 문제는 없는 것으로 판단

Maven dependency 확인 결과 Spring Boot 프로잭트를 생성하면서 자동으로 추가된 log4j 1.6 이 포함되어 있으나 사용하지 않은 패키지로 배포파일에는 포함되어 있지 않은 것으로 확인됨

 

추가로 검증을 위해 취약점을 확인 할 솔루션을 찾아보니 오픈소스인 로그프레소 제품 제작사에서 스케너를 배포한 것이 있었습니다.

로그프레소 스캐너 관련 기사

http://www.weeklypost.kr/news/articleView.html?idxno=2890 

 

로그프레소, 로그4셸 취약점 대응 스캐너 배포 - 위클리포스트(weeklypost)

로그4셸 보안 취약점이 보고 되면서, 이를 통해 발생할 원격으로 악성코드를 실행하는 문제점이 우려되고 있다. 사실상 거의 모든 자바 서버가 대상인 취약점으로 업계 전문가는 신속하게 취약

www.weeklypost.kr

스캐너 소스 : https://github.com/logpresso/CVE-2021-44228-Scanner


스캐너 검증

실 운영서버에 적용하기 전에 소스 부터 확인 해보았습니다.

https://github.com/logpresso/CVE-2021-44228-Scanner/blob/main/src/main/java/com/logpresso/scanner/Log4j2Scanner.java

 

GitHub - logpresso/CVE-2021-44228-Scanner: Vulnerability scanner and mitigation patch for Log4j2 CVE-2021-44228

Vulnerability scanner and mitigation patch for Log4j2 CVE-2021-44228 - GitHub - logpresso/CVE-2021-44228-Scanner: Vulnerability scanner and mitigation patch for Log4j2 CVE-2021-44228

github.com

내용은 간단해 보였습니다. 지정된 경로의 jar파일을 해제 해서 

org/apache/logging/log4j/core/lookup/JndiLookup.class

클래스가 존재 하는지 체킹하고 실행 파라메터에 추가에 따라 해당 클래스를 삭제해주는 내용이었습니다.

간단해 보이지만 취약점의 원인을 정확히 모르는 우리에겐 이런 것을 만들어서 공개 해주시는 분들께 그저 감사할 따름 입니다.

소스를 살펴 보고 실제 취약점을 찾아 내는지 검증 해보았습니다.

간단한 Spring Boot 프로잭트를 생성후 정상 동작 하는 것을 확인 하고

1. Maven > Update Project

2. Run > Maven Install

3. 커맨드 창에서 스캐너 실행

C:\temp\logpresso-log4j2-scan-1.2.1-win64>log4j2-scan.exe C:\temp\log4j_test\workspace\demo\target

Scanned 26 directories and 16 files
Found 0 vulnerable files
Completed in 0.90 seconds

C:\temp\logpresso-log4j2-scan-1.2.1-win64>

문제 없음

문제가 된 log4j 2.14 버전 추가

pom.xml 추가

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.0</version>
</dependency>

1. Maven > Update Project

2. Run > Maven Install

3. 커맨드 창에서 스캐너 실행

C:\temp\logpresso-log4j2-scan-1.2.1-win64>log4j2-scan.exe C:\temp\log4j_test\workspace\demo\target
[*] Found CVE-2021-44228 vulnerability in C:\temp\log4j_test\workspace\demo\target\demo-0.0.1-SNAPSHOT.jar (BOOT-INF/lib/log4j-core-2.14.0.jar), log4j 2.14.0

Scanned 26 directories and 16 files
Found 1 vulnerable files
Completed in 0.95 seconds

C:\temp\logpresso-log4j2-scan-1.2.1-win64>

취약점 발견됨

같은 방법으로 업데이트 권고 버전인 log4j 2.15로 변경 후 테스트 결과

C:\temp\logpresso-log4j2-scan-1.2.1-win64>log4j2-scan.exe C:\temp\log4j_test\workspace\demo\target

Scanned 26 directories and 16 files
Found 0 vulnerable files
Completed in 0.90 seconds

C:\temp\logpresso-log4j2-scan-1.2.1-win64>

취약점 발견 안됨

 

같은 방법으로 

서버에서 실행

[myservice@MY_HOST_NAME ~]$ pwd                 <== 경로 확인
/home/myservice/log4j_scan
[myservice@MY_HOST_NAME ~]$ mkdir log4j_scan    <== 스케너 다운로드 경로 확인
[myservice@MY_HOST_NAME ~]$ cd log4j_scan/
[myservice@MY_HOST_NAME log4j_scan]$ wget https://github.com/logpresso/CVE-2021-44228-Scanner/releases/download/v1.2.1/logpresso-log4j2-scan-1.2.1-linux.tar.gz
--2021-12-13 14:39:38--  https://github.com/logpresso/CVE-2021-44228-Scanner/releases/download/v1.2.1/logpresso-log4j2-scan-1.2.1-linux.tar.gz
Resolving github.com (github.com)... 15.164.81.167
Connecting to github.com (github.com)|15.164.81.167|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/437261211/2c31e904-1f15-4f6d-93f4-aa6c8b3df5b5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211213%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211213T053815Z&X-Amz-Expires=300&X-Amz-Signature=003efe369b272cca8846a43f4b0b38bd45e47ec82c7613612cdb12c49ba851d3&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=437261211&response-content-disposition=attachment%3B%20filename%3Dlogpresso-log4j2-scan-1.2.1-linux.tar.gz&response-content-type=application%2Foctet-stream [following]
--2021-12-13 14:39:38--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/437261211/2c31e904-1f15-4f6d-93f4-aa6c8b3df5b5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211213%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211213T053815Z&X-Amz-Expires=300&X-Amz-Signature=003efe369b272cca8846a43f4b0b38bd45e47ec82c7613612cdb12c49ba851d3&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=437261211&response-content-disposition=attachment%3B%20filename%3Dlogpresso-log4j2-scan-1.2.1-linux.tar.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2957824 (2.8M) [application/octet-stream]
Saving to: ‘logpresso-log4j2-scan-1.2.1-linux.tar.gz’

100%[================================================================================================================================================================================================================================================>] 2,957,824   11.8MB/s   in 0.2s

2021-12-13 14:39:39 (11.8 MB/s) - ‘logpresso-log4j2-scan-1.2.1-linux.tar.gz’ saved [2957824/2957824]

[myservice@MY_HOST_NAME log4j_scan]$ ls -al    <== 스캐너 다운로드 확인
합계 2892
drwxrwxr-x 2 myservice dev      54 12월 13 14:39 .
drwx------ 5 myservice dev     124 12월 13 14:39 ..
-rw-rw-r-- 1 myservice dev 2957824 12월 13 12:34 logpresso-log4j2-scan-1.2.1-linux.tar.gz
[myservice@MY_HOST_NAME log4j_scan]$ tar zxvf logpresso-log4j2-scan-1.2.1-linux.tar.gz     <== 압축 해제
log4j2-scan
[myservice@MY_HOST_NAME log4j_scan]$ ls
log4j2-scan  logpresso-log4j2-scan-1.2.1-linux.tar.gz
[myservice@MY_HOST_NAME log4j_scan]$ ./log4j2-scan /usr/local/myservice/apiserver     <== jar 파일이 존재하는 경로 지정하여 스캔

Scanned 4 directories and 40 files
Found 0 vulnerable files                 <== 취약점 0 발견
Completed in 6.92 seconds
[myservice@MY_HOST_NAME log4j_scan]$

확인 완료 후 스캐너 파일 삭제함.

소중한 소스코드 공유해 주신 로그프레소 제작사께 감사드립니다.

https://ko.logpresso.com/

+ Recent posts