Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
log4shell_sentinel — 스마트 Log4Shell/Log4j/CVE-2021-44228 스캐너 | Kitploit
도구/GitHubGitHub/ossie-git/log4shell_sentinel
Vulnerability ScannersContainer SecurityVulnerability AnalysisForensicsIncident ResponseLog Analysis
GitHubossie-git/log4shell_sentinel

log4shell_sentinel

스마트 Log4Shell/Log4j/CVE-2021-44228 스캐너

저장소 보기
141264년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Log4Shell Sentinel - 스마트 CVE-2021-44228 스캐너

소개

조직이 중요한 Log4J / CVE-2021-44228 취약점에 노출된 애플리케이션을 검색하도록 도와주는 훌륭한 도구들이 이미 많이 나와 있지만, 제가 접한 도구 중에는 분석가가 수정(remediation) 과정 전반에 걸쳐 특정 발견 항목을 추적할 수 있게 해주는 도구는 없었습니다. Log4Shell Sentinel은 발견 결과를 CSV 형식으로 출력하여 분석가가 Excel에서 결과를 여러 각도로 분석하고, 일부 발견 항목을 무시 목록에 추가한 후 스캔을 다시 실행하거나, 스캔 결과를 비교하고, 스캔 결과에 데이터를 추가하는 등의 작업을 할 수 있도록 설계되었습니다.

  • 파일 기반 스캐너는 특히 컨테이너 환경에서 분석가가 처리해야 할 작업이 많습니다.

그래서 Log4Shell Sentinel이 탄생했습니다. Log4Shell Sentinel은 몇 가지 고유한 기능을 갖춘 파일 기반 스캐너입니다. 다른 도구들을 대체하기 위한 것이 아니라 보완할 수 있습니다.

기능

Log4Shell Sentinel은 파일 기반 스캐너입니다. 대상 시스템에서 다음 파일 형식의 아티팩트를 검색하여 Java 기반 애플리케이션을 찾습니다.

파일 유형설명
단순 jarlog4j-core 파일이 포함되지 않은 경우입니다.
Fat / Uber jaruber jar는 클래스/패키지와 애플리케이션의 모든 종속성(라이브러리, 리소스, 메타데이터 파일)을 단일 jar 파일에 포함하고 있는 jar입니다. 가장 일반적으로 사용되는 배포 방식입니다.
WARwar(Web Application Archive) 파일은 라이브러리와 기타 리소스 외에도 JSP, HTML, JavaScript 코드를 포함하는 파일입니다. 이 형식은 덜 일반적으로 사용됩니다.
EARear(Enterprise Application Archive)는 Jakarta EE 배포에서 더 일반적으로 사용되었던 또 다른 형식입니다.

취약한 log4j-core jar 인스턴스를 검색합니다. 그런 다음 다음 작업을 수행합니다.

  • 아티팩트의 MD5 해시를 계산합니다. 이를 통해 분석가는 다른 머신/컨테이너에서 실행 중인 동일한 애플리케이션을 식별하고 이를 단일 발견 항목으로 취급할 수 있습니다.

  • 컨테이너에 속하는 것으로 확인된 파일(예: /var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar)의 경우, 해당 파일을 해당 이미지로 매핑하는 작업을 처리합니다. 예를 들어 위 경로를 ghcr.io/christophetd/log4shell-vulnerable-app:latest 이미지로 변환합니다. 다양한 컨테이너 런타임이 이 매핑을 서로 다른 방식으로 저장하므로 분석가의 수많은 불필요한 작업을 줄일 수 있습니다. 또한 분석가는 단일 애플리케이션을 실행하는 여러 컨테이너를 단일 발견 항목으로 취급할 수 있습니다.

  • 현재 실행 중이 아닌 컨테이너(캐시된 이미지 포함)에 해당하는 매칭과 같은 의미 없는 매칭을 제거합니다. 이를 통해 분석가는 중요한 항목에 집중할 수 있으며 불필요한 작업 시간을 절약할 수 있습니다.

  • 분석가가 다음 항목을 기준으로 매칭을 무시할 수 있습니다:

    • MD5 해시
    • 파일 경로
    • 컨테이너 이미지

    이를 통해 분석가는 취약하지 않은 것으로 알려진 애플리케이션이나 위협이 되지 않는 CLI 기반 애플리케이션을 제거할 수 있습니다. 예를 들어 Logstash 인스턴스가 감지된 경우, 분석가는 해당 도구를 실행하지 않거나 가끔 CLI에서만 실행한다면 이를 무시하도록 선택할 수 있습니다.

  • 구성 관리 도구(예: Ansible)와 함께 사용하도록 최적화되어 있어 몇 분 안에 환경을 빠르게 스캔할 수 있습니다.

메타데이터 보강

Log4Shell Sentinel이 추가하는 메타데이터 보강에 대한 자세한 내용은 제 블로그 게시물을 참조하세요.

설치

가장 쉬운 방법은 미리 컴파일된 바이너리를 다운로드하는 것입니다.

소스에서 빌드

이 역시 간단합니다. 다만 환경의 GLIBC 관련 차이를 피하기 위해 정적으로 컴파일된 버전을 빌드하고 싶을 것입니다. 이 도구는 기본적으로 CGO를 사용하는 다음 모듈을 사용합니다:

  • os/user
  • net

정적으로 컴파일된 버전을 빌드하려면 이 Go 버전의 라이브러리를 사용하도록 저장소를 클론한 후 다음을 실행하세요:

$ CGO_ENABLED=0 go build -ldflags="-s -w"
$ ldd log4shell_sentinel
        not a dynamic executable

사용법

$ ./log4shell_sentinel -h
NAME:
   Log4Shell Sentinel - by Osama Elnaggar

USAGE:
   log4shell_sentinel [global options] command [command options] [arguments...]

VERSION:
   v1.0.0

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --path value, -p value       Path to search (default: ".")
   --no-banner, --nb            Suppress banner (default: false)
   --no-messages, --nm          Suppress messages except for CSV output (default: false)
   --no-header, --nh            Suppress header in CSV output (default: false)
   --imd5 value, --im value     Ignore MD5 hashes. Refer to the GitHub page for expected format
   --ipath value, --ip value    Ignore file path matches. Refer to the GitHub page for expected format
   --icimage value, --ic value  Ignore container image matches. Refer to the GitHub page for expected format
   --print-headers, --ph        Print CSV Headers only (default: false)
   --help, -h                   show help (default: false)
   --version, -v                print the version (default: false)

기본적으로 스캔은 현재 디렉터리만 스캔합니다. 예를 들어:

$ ./log4shell_sentinel

░█░░░█▀█░█▀▀░█░█░█▀▀░█░█░█▀▀░█░░░█░░░░░█▀▀░█▀▀░█▀█░▀█▀░▀█▀░█▀█░█▀▀░█░░
░█░░░█░█░█░█░░▀█░▀▀█░█▀█░█▀▀░█░░░█░░░░░▀▀█░█▀▀░█░█░░█░░░█░░█░█░█▀▀░█░░
░▀▀▀░▀▀▀░▀▀▀░░░▀░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀▀░░░▀▀▀░▀▀▀░▀░▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀▀▀

- A CVE-2021-44228/CVE-2021-45046/CVE-2021-45105 Scanner
- v1.0.0
- by Osama Elnaggar

[*] WARNING: Running as non-root user.
             Non-readable files / dirs will be skipped
             Container mapping will fail

[*] Starting shallow scan ............ [DONE]
[*] Starting deep scan ............... [DONE]
[*] Calculating MD5 hashes ........... [DONE]
[*] Performing container image lookups [DONE]
[*] Processing ignore list(s) ........ [DONE]
[*] Generating output ................ [DONE]

IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

루트 사용자가 아닌 상태로 실행하면 WARNING 메시지가 즉시 표시됩니다. 다음 작업을 수행하려면 root 권한이 필요하기 때문입니다.

  • 전체 파일 시스템을 스캔하려는 경우(권장)
  • 컨테이너 -> 이미지 조회( Docker 데몬, 설정 파일 등에 대한 접근 필요)를 수행하려는 경우

root 권한이 없어도 작동하지만 최상의 결과를 얻지 못할 수 있습니다.

발견 항목 이해하기

샘플 발견 항목은 다음과 같습니다:

IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

일부 필드는 의도적으로 비워 두며 Excel 등에서 분석가가 채우도록 남겨 둡니다. 각 필드에 대한 간단한 설명은 다음과 같습니다:

필드예시설명
IP192.168.121.121인스턴스에 여러 IP가 있는 경우 기본 IP가 추가됩니다.
Hostnameserver3호스트 이름
AppName스캔 완료 후 사용자가 작성해야 합니다.
Team스캔 완료 후 사용자가 작성해야 합니다.
Ignore (Y/N)스캔 완료 후 사용자가 작성해야 합니다.
Comment스캔 완료 후 사용자가 작성해야 합니다.
MD5Hash4e615cd580758b70c49ade1f79103328애플리케이션의 고유 지문(fingerprint)
Timestamp2021-12-21T07:38:09Z스캔이 수행된 시각. 동일 호스트에 대한 여러 스캔을 집계하려는 경우 유용합니다.
ContainertrueTrue = 컨테이너임을 의미합니다.
ContainerImageghcr.io/christophetd/log4shell-vulnerable-app:latest컨테이너가 감지된 경우 해당 이미지입니다.
FullPath/run/containerd/io.containerd.
runtime.v2.task/k8s.io/.../spring-boot-application.jar
발견 항목의 전체 경로. 이 예에서 취약한 JAR 파일은 fat / uber jar의 일부입니다.
Versionlog4j-core-2.14.1.jar감지된 lo4j-core 버전

옵션

이 도구는 다음 옵션을 제공합니다:

옵션설명
--path value, -p value검색할 경로를 지정합니다. 기본값은 현재 디렉터리입니다. 중요 전체 파일 시스템을 포함하려면 /로 설정하는 것이 좋습니다.
--no-banner, --nb배너를 숨깁니다.
--no-messages, --nm진행 관련 메시지와 같은 메시지를 숨깁니다.
--no-header, --nhCSV 출력의 헤더를 숨깁니다. 여러 서버에서 실행할 때 권장됩니다.
--imd5 value, --im valueMD5 해시를 무시합니다. 자세한 내용은 무시 목록 섹션을 참조하세요.
--ipath value, --ip value파일 경로 매칭을 무시합니다. 자세한 내용은 무시 목록 섹션을 참조하세요.
--icimage value, --ic value컨테이너 이미지 매칭을 무시합니다. 자세한 내용은 무시 목록 섹션을 참조하세요.
--print-headers, --phCSV 헤더만 출력합니다. 여러 서버에서 Log4Shell Sentinel을 실행하고 결과를 집계할 때 일반적으로 헤더 출력을 비활성화합니다. 이 명령은 헤더만 출력하므로 Excel 시트에 추가할 수 있습니다.

컨테이너 매핑 -> 이미지 지원

Log4Shell Sentinel의 다른 도구에는 없는 고유한 기능 중 하나는 파일 시스템 스캔에서 발견된 jar 파일(예: /var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar)을 해당 컨테이너 이미지(위 예의 경우 ghcr.io/christophetd/log4shell-vulnerable-app:latest로 변환)로 변환할 수 있다는 것입니다. 다양한 컨테이너 런타임이 이 매핑을 서로 다른 방식으로 저장하므로 분석가의 수많은 불필요한 작업을 줄일 수 있습니다. 또한 분석가는 단일 애플리케이션을 실행하는 여러 컨테이너를 단일 발견 항목으로 취급할 수 있습니다. 현재 이 솔루션은 다음 조회를 지원합니다:

  • Docker (overlay2 스토리지 드라이버 사용)
  • Docker (aufs 스토리지 드라이버 사용)
  • CRI-O
  • containerd

무시 목록

처음에는 식별된 애플리케이션 수가 압도적일 수 있으며, 외부 사용자에게 노출된 애플리케이션과 같은 특정 하위 집합에 집중하고 싶을 수도 있습니다. 또는 특정 규정 준수 범위에 집중하고 싶을 수도 있습니다. 이를 지원하기 위해 애플리케이션은 목록 지정을 지원합니다. Log4Shell은 현재 3가지 무시 목록을 지원합니다:

  • MD5 해시 무시 목록
  • 컨테이너 이미지 무시 목록
  • 경로 무시 목록
도구 다운로드