Log4Shell(CVE-2021-44228)은 수많은 사이버 보안 연구자와 전문가들이 '역대 가장 치명적인 제로데이 취약점'으로 평가하는 보안 결함입니다. 이 취약점은 2001년부터 사용되어 온 Java 로깅 유틸리티인 Log4j에 영향을 미칩니다. Log4j는 시스템 운영 기록이나 소프트웨어 오류 같은 이벤트를 기록하고 전달하는 데 널리 활용되는 라이브러리입니다. 이 글에서는 Linux 시스템을 Log4Shell로부터 보호하는 방법을 단계별로 살펴봅니다.
Log4Shell 취약점은 어떻게 작동하나요?
근본적으로 이 취약점은 부적절한 입력 검증에서 비롯됩니다. 소프트웨어가 수신한 데이터를 제대로 검증하지 않으면, 공격자는 잘못 검증된 입력을 이용해 프로그램이 의도하지 않은 동작을 수행하도록 만들 수 있습니다.
Log4Shell은 특히 Log4j가 LDAP과 JNDI를 통해 서버로 전송하는 요청을 악용합니다. 이 요청을 조작하면 공격자는 취약한 시스템에서 임의의 코드를 실행할 수 있으며, 그 결과 시스템 전체를 장악해 랜섬웨어를 설치하거나 데이터를 탈취하는 일도 가능해집니다.
Log4Shell의 영향을 받는 대상은?
Java는 매우 널리 쓰이는 프로그래밍 언어이기 때문에, 로깅 기능에 Log4j를 사용하는 Java 기반 소프트웨어 대부분이 이 취약점의 영향을 받습니다. Apache 웹 서버와 게임 Minecraft처럼 잘 알려진 소프트웨어들도 예외가 아닙니다.
어떤 소프트웨어가 취약한지 확인하는 방법
다른 보안 취약점과 마찬가지로 Log4Shell 역시 해당 소프트웨어에 패치를 적용하면 해결됩니다. 다만 영향 범위가 매우 광범위해서 어떤 소프트웨어가 취약한지 목록을 직접 관리하기는 쉽지 않습니다.
다행히 네덜란드 국립 사이버 보안 센터(NCSC)가 GitHub에 종합 목록을 공개했습니다. 여러 조직이 개발한 소프트웨어별로 Log4Shell 취약 여부를 확인할 수 있으니 적극적으로 활용해 보세요.
Apache 서버 취약점 점검 방법
이 취약점이 보안 및 소프트웨어 업계에 큰 파장을 일으킨 만큼, 관리자가 서버의 취약 여부를 점검할 수 있는 도구들도 다양하게 등장했습니다.
그중 하나인 Log4j-RCE-Scanner는 여러 주소를 대상으로 Apache Log4j의 원격 명령 실행(RCE) 취약점을 스캔할 수 있는 도구입니다.
Log4j-RCE-Scanner 설치
시작하기 전에 의존성 패키지인 httpx와 curl을 먼저 설치해야 합니다.
Ubuntu나 Debian 계열 시스템에서는 apt 명령으로 curl을 간단히 설치할 수 있습니다:
sudo apt install curl
Arch Linux에서는 pacman 명령을 사용합니다:
sudo pacman -Sy curl
CentOS와 Fedora에서는 yum 명령을 사용합니다:
sudo yum install curl
httpx는 다음 명령으로 설치합니다:
git clone https://github.com/projectdiscovery/httpx cd httpx/cmd/httpx && go build . sudo mv httpx /usr/local/bin/
필요한 의존성 설치가 끝나면 Log4j-RCE-Scanner 저장소를 클론합니다:
git clone https://github.com/adilsoybali/Log4j-RCE-Scanner
새로 생성된 디렉터리로 이동합니다:
cd Log4j-RCE-Scanner/
마지막으로 Bash 스크립트에 실행 권한을 부여합니다:
chmod +x log4j-rce-scanner.sh
Log4j-RCE-Scanner 사용법
스캐너 설치를 마쳤다면 이제 실제로 사용해 볼 차례입니다.
다음 명령으로 스크립트의 도움말을 확인할 수 있습니다:
bash log4j-rce-scanner.sh -h
이제 Apache 서버의 Log4Shell 취약점을 스캔할 수 있습니다:
bash log4j-rce-scanner.sh -d [domain] -b [Burp collaborator]
-d 플래그로 도메인을, -b 플래그로 Burp Collaborator 주소를 지정합니다. 해당 도메인이 취약하다면 취약 도메인 이름이 담긴 DNS 콜백이 Burp Collaborator로 전송됩니다.
또한 -l 플래그를 사용하면 도메인 목록 파일을 한 번에 스캔할 수도 있습니다.
Python 기반 스캐너 설치 및 사용
Bash 대신 Python 스크립트를 선호한다면, 미국 사이버보안·인프라보안국(CISA)이 개발한 log4j-scanner를 사용할 수 있습니다.
설치 방법은 다음과 같습니다:
git clone https://github.com/cisagov/log4j-scanner/
디렉터리로 이동합니다:
cd log4j-scanner/log4-scanner/
Python 패키지 관리 도구 pip3로 필요한 의존성을 설치합니다:
pip3 install -r requirements.txt
-h 플래그로 스크립트가 제공하는 도움말을 확인할 수 있습니다:
python3 log4j-scan.py -h
단일 URL 스캔은 -u 플래그로 간단히 수행할 수 있습니다:
python3 log4j-scan.py -u example.com
-l 플래그를 사용하면 URL 목록 파일을 한 번에 스캔할 수 있습니다:
python3 log4j-scan.py -l list.txt
Apache 패치 방법
이 취약점에 효과적으로 대응하려면 Apache 설정을 항상 최신 상태로 유지하는 것이 무엇보다 중요합니다.
Apache 버전은 CPanel이나 WebHost Manager 같은 관리 패널에서 확인할 수도 있고, -v 플래그와 함께 httpd 명령을 실행해 확인할 수도 있습니다:
httpd -v
Debian과 Ubuntu 계열에서는 apt 명령으로 최신 보안 버전으로 업데이트할 수 있습니다:
sudo apt update && sudo apt upgrade apache2
CentOS에서는 yum 명령으로 동일한 작업을 수행합니다:
sudo yum install httpd
자주 묻는 질문(FAQ)
1. 어떤 버전의 Log4j가 취약한가요?
2.17.1 미만 버전은 이 취약점 계열에 노출되어 있습니다. 2.15.0에서 가장 악용하기 쉬운 원격 코드 실행 경로가 수정되었고, 2.17.1에서 악용 조건이 까다로운 RCE 취약점이 최종적으로 패치되었습니다.
2. DNS 콜백을 받으려면 Burp Collaborator가 필수인가요?
Bash 기반 스캐너 개발자에 따르면, 취약 도메인 이름이 담긴 DNS 콜백을 수신하려면 스크립트와 함께 Burp Collaborator를 사용해야 합니다. 대안으로 Interact.sh 주소를 사용할 수도 있습니다.
3. Bash 기반 스캐너에 다른 의존성도 필요한가요?
기본적인 사용에는 httpx와 Curl만 시스템에 설치되어 있으면 됩니다. 다만 일부 고급 기능을 활용하려면 Subfinder, Assetfinder, Amass도 추가로 설치해야 합니다.