30억 장치에서 임의의 코드를 실행할 수 있는 Java
이 글이 소개한 내용은 교육 목적이나 취약성의 구조를 이해하고 전달하며 계발하기 위해 만들어졌다.
절대 남용하지 마세요.
기재된 코드를 집행할 때 발생하는 손해는 일체 책임을 지지 않는다.
이해한 사람만 아래로 굴러주세요.
경과
2021/12/9에서 유명한 로그 출력 라이브러리
log4j
의 2세대가 임의의 코드를 실행할 수 있음을 보고했다.Apache Log4j2 jndi RCE #apache #rce https://t.co/ZDmc7S9WW7 pic.twitter.com/CdSlSCytaD — p0rz9 (@P0rZ9) December 9, 2021
※ 위에서 설명한 대로 특정 문자열을 출력하고, 드로잉 도구(draw.exe)를 실행합니다.
마인크래프트(Java 버전)의 채팅 기능에서 이 취약한 공격을 이용해 패치를 수정하는 데 바쁘다고 한다.br/>
[Minecraft 중요·희망 확산]
— SaziumR (@SaziumR) December 10, 2021https://t.co/FypiEhclAI
log4j는
자바 언어로 웹 응용 프로그램이나 시스템을 구축할 때의 로그인 라이브러리입니다br/>
Apache 재단 OSS를 지원하는 단체에서 제공, 유지 보수br/>
가져오기도 쉽습니다. 설정 파일에 따라 상세한 로그 설정을 할 수 있습니다. 일본을 제외한 전 세계 시스템에서도 1p>
원인
출력 문자열의 로그 기능이 왜 문제가 되었는지
log4j2
다른 기록 라이브러리와 달리 확인 문자열 중 특정한 문자열의 경우 변수로 바꾸는 기능이 있다.(lookup이라고 하는 것 같다)
위만 해도 문제없지만 이번에 남용된 구조Jdni Lookup
는 인터넷을 통해 변수를 검색하는 구조입니다.br/>
검색된 값이 서버에서 실행되기 때문에 서버에서 임의의 프로그램을 실행할 수 있습니다p>
구조
는 단지 하나의 예일 뿐이지만, 나는 그림으로 구조를 표시해 보았다br/>
부식 9450; 전제2
- 사용자가 입력한 문자열을 그대로 출력하는
- 시스템 속성의
log4j2.formatMsgNoLookups
가 잘못되었습니다 - 시스템 속성의
com.sun.jndi.ldap.object.trustURLCodebase
유효
① 공격 코드 입력
채팅 등 로그 입력값을 직접 출력하는 기능에 대해 임의의 코드를 입력합니다.
② 중간 서버 액세스
서버(Minecraft)는 Jndi Lookup
기능을 사용하여 공격자가 준비한 중계 서버에 변수를 검색합니다br/>
트렁크 서버는 공격자가 준비한 웹 서버로도 리디렉션됩니다.
③ 웹 서버로 리디렉션
웹 서버에서 요청 경로에 기재된 값과 일치하는 프로그램 파일을 되돌려줍니다.Java의 경우.class
파일이죠.
④ 악성 프로그램의 실행
.class
서버 실행 파일에 기재된 내용입니다.여기 와서 뭘 당할지 모르겠어요.p>
검증
상기 메커니즘을 이용하여 현지 환경에서 취약성을 검증하였습니다
- 사용 환경(OS): MacBook
- Mincraft3(왼쪽): Eclipse2021-03(4.19.0)
중계 서버 (오른쪽 위):marshalsec.jndi.LDAPRefServer - 웹 서버(오른쪽 아래): 파이톤HTTP.Serverモジュール
- 악성 프로그램(왼쪽 아래): 서버 내의 Calculator.app(계산기) 시작
대책
이 취약성은 CVE-2021-44228로 정의됩니다.글의 내용을 요약합니다.
-
log4j-api
및 log4j-core
의 버전을 2.15.0
로 설정- 시스템 속성 활성화
log4j2.formatMsgNoLookups
- 시스템 속성 해제
com.sun.jndi.ldap.object.trustURLCodebase
- 클래스 경로에서 JndiLoop 클래스 제거
log4j를 사용하지 않기 위해 시스템 수정 방법이 비현실적이라고 생각하기 때문에 임의의 방법으로 해결할 필요가 있다p>
자신의 클럽에서 노는 아이들 또는 상기 관련 서버 운영자br/>
빨리 처리하십시오.
총결산
제가 이렇게까지 열정을 쏟고 기사를 쓸 줄은 몰랐어요.br/>
자바를 사랑하는 IT 강사로서 IT 엔지니어를 양성하고 이 소동이 빨리 가라앉고 안심하고 수업을 했으면 좋겠다
그래서 Java남에게 말하고 싶지 않다p>
iCloud, Steam 등 세계적으로 사용자가 많은 서비스에도 영향을 미친다https://www.itmedia.co.jp/news/articles/2112/10/news157.html↩
NIST https://nvd.nist.gov/vuln/detail/CVE-2021-44228 ↩
Minecraft를 사용할 수 없기 때문에 간단한 웹 응용 프로그램으로 제작↩
log4j2
다른 기록 라이브러리와 달리 확인 문자열 중 특정한 문자열의 경우 변수로 바꾸는 기능이 있다.(lookup이라고 하는 것 같다)구조
부식 9450; 전제2
log4j2.formatMsgNoLookups
가 잘못되었습니다com.sun.jndi.ldap.object.trustURLCodebase
유효① 공격 코드 입력
② 중간 서버 액세스
Jndi Lookup
기능을 사용하여 공격자가 준비한 중계 서버에 변수를 검색합니다br/>트렁크 서버는 공격자가 준비한 웹 서버로도 리디렉션됩니다.
③ 웹 서버로 리디렉션
.class
파일이죠.④ 악성 프로그램의 실행
.class
서버 실행 파일에 기재된 내용입니다.여기 와서 뭘 당할지 모르겠어요.p>검증
상기 메커니즘을 이용하여 현지 환경에서 취약성을 검증하였습니다
- 사용 환경(OS): MacBook
- Mincraft3(왼쪽): Eclipse2021-03(4.19.0) 중계 서버 (오른쪽 위):marshalsec.jndi.LDAPRefServer
- 웹 서버(오른쪽 아래): 파이톤HTTP.Serverモジュール
- 악성 프로그램(왼쪽 아래): 서버 내의 Calculator.app(계산기) 시작
대책
이 취약성은 CVE-2021-44228로 정의됩니다.글의 내용을 요약합니다.
-
log4j-api
및log4j-core
의 버전을2.15.0
로 설정 - 시스템 속성 활성화
log4j2.formatMsgNoLookups
- 시스템 속성 해제
com.sun.jndi.ldap.object.trustURLCodebase
- 클래스 경로에서 JndiLoop 클래스 제거
log4j를 사용하지 않기 위해 시스템 수정 방법이 비현실적이라고 생각하기 때문에 임의의 방법으로 해결할 필요가 있다p>
자신의 클럽에서 노는 아이들 또는 상기 관련 서버 운영자br/>
총결산
제가 이렇게까지 열정을 쏟고 기사를 쓸 줄은 몰랐어요.br/>
자바를 사랑하는 IT 강사로서 IT 엔지니어를 양성하고 이 소동이 빨리 가라앉고 안심하고 수업을 했으면 좋겠다
그래서 Java남에게 말하고 싶지 않다p>
iCloud, Steam 등 세계적으로 사용자가 많은 서비스에도 영향을 미친다https://www.itmedia.co.jp/news/articles/2112/10/news157.html↩
NIST https://nvd.nist.gov/vuln/detail/CVE-2021-44228 ↩
Minecraft를 사용할 수 없기 때문에 간단한 웹 응용 프로그램으로 제작↩
iCloud, Steam 등 세계적으로 사용자가 많은 서비스에도 영향을 미친다https://www.itmedia.co.jp/news/articles/2112/10/news157.html↩
NIST https://nvd.nist.gov/vuln/detail/CVE-2021-44228 ↩
Minecraft를 사용할 수 없기 때문에 간단한 웹 응용 프로그램으로 제작↩
Reference
이 문제에 관하여(30억 장치에서 임의의 코드를 실행할 수 있는 Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shun-g/items/93d05d9ce9681e50c18a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)