2024. 12. 2. 03:11ㆍSTUDY/survey
Log4j 취약점 사건
2021년 12월, Log4j라는 오픈소스 라이브러리의 취약점이 악용된 공격 기법이 Github에 공개되었다. 이 취약점이 세상에 알려지면서 다양한 공격이 시작되었고, 최초의 공격은 MS 온라인 게임인 Minecraft에서 이루어진 것으로 알려졌다. 이후 디도스 공격, 랜섬웨어 유포 등 여러 형태의 공격이 이어졌다.
사건 배경
Log4j는 Apache 소프트웨어 재단에서 개발한 오픈소스 프로그램으로, Java 언어로 작성된 대부분의 인터넷 서비스에서 사용된다. 2021년, 이 Log4j에서 원격 코드 실행 취약점(CVE-2021-44228)이 발견되었고, 공격자는 이를 악용하여 Log4j를 사용하는 모든 애플리케이션에서 임의의 코드를 실행할 수 있었다.
이 취약점은 Java 기반의 많은 서버와 애플리케이션에서 발생했기 때문에 보안상 큰 위협을 초래했고, 특히 해당 취약점을 악용하는 공격 기법이 빠르게 공개되면서 전 세계적으로 심각한 이슈로 떠올랐다.
개념 정의
Log4j는 Java 기반 프로그램에서 로그를 기록하는 도구로, Apache 재단의 무료 오픈 소스 라이브러리이다.
Log는 프로그램이 실행된 시점에 일어난 사건들을 기록한 것으로, 소프트웨어의 유지보수와 관리에 필수적인 역할을 한다. Log4j는 Java 애플리케이션에서 이러한 로그를 작성하는 데 널리 사용된다.
JNDI(Java Naming and Directroy Interface)는 Java 프로그램이 디렉토리 서비스를 통해 객체를 Lookup(검색) 할 수 있게 해주는 JavaAPI이다. 쉽게 말해, 외부에 있는 객체를 찾아 가져오는 기술이다. LDAP(Lightweight Directory Access Protocol)는 JNDI를 위해 존재하는 다양한 인터페이스 중 하나로, 데이터를 검색하거나 찾는 데 사용된다.
JNDI는 사용자가 입력한 값을 기반으로 Lookup을 수행하며, 이를 통해 LDAP를 사용해 외부 서버에 접근할 수 있다.
작동 원리
Java 프로그램들은 JNDI와 LDAP를 통해 Java 객체를 찾을 수 있다. 예를 들어 ldap://localhost:216/o=JNDITutorial과 같은 URL을 통해 LDAP 서버에서 JNDITutorial 객체를 찾을 수 있다.
이러한 접근 인터페이스가 치명적인 이유는, Log4j가 편리하게 사용하기 위해 ${prefix:name} 형식으로 Java 객체를 볼 수 있게 하는 문법을 제공하기 때문이다. 예를 들어 ${java:version}은 현재 실행 중인 Java 버전을 볼 수 있게 한다.
이 문법은 로그가 기록될 때도 사용되며, 공격자가 로그에 기록되는 곳을 찾아 ${jndi:sndi"snd://example.com/a}과 같은 값을 추가하면 취약점을 이용할 수 있게 된다. 이러한 값은 HTTP 헤더나 다른 방법을 통해 삽입될 수 있다.
공격 영향
이 취약점을 악용하면 공격자는 원격지에서 피해자의 시스템에 악성 코드를 실행하거나, 시스템의 권한을 탈취할 수 있다. 이는 기업의 서버나 개인 사용자의 컴퓨터를 포함한 모든 Java 기반 시스템에 심각한 영향을 미칠 수 있다.
다음 글로 Log4j 실습 과정을 정리하여 업로드하겠습니다.
'STUDY > survey' 카테고리의 다른 글
Typosquatting (1) | 2024.11.16 |
---|---|
DDoS : 서버를 위협하는 좀비 PC의 습격 (0) | 2024.11.07 |
랜섬웨어 : 데이터를 인질로 돈을 요구하는 사이버 위협 (8) | 2024.09.09 |