Kingsing의 진화 | Akamai 블로그

서론
지속적인 대규모 암호화 봇넷이 인터넷 전반에 걸쳐 시스템을 감염시키고 있습니다.
이 캠페인은 2021년 2월 16일에 Akamai SIRT에서 처음 발견한 것으로, Windows와 Linux 시스템을 모두 대상으로 하는 것으로 보입니다. 이 봇넷은 미주, 유럽, 아시아 등 다양한 지역에서 활발하게 활동하는 것으로 나타났기 때문에 우리의 관심을 끌었습니다. 이 봇넷은 6개월 이상 회전할 필요 없이 동일한 배포 IP 주소(194.38.20.199)를 사용하여 현재 운영되고 있습니다. 이 캠페인은 이전에는 Linux 시스템만 표적으로 삼았지만 최근에는 Windows 시스템에도 확장되었습니다.
Windows 시스템 감염
Windows 시스템을 감염시키기 위해 봇넷은 Oracle WebLogic 서버의버전 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 및 14.1.1.0.0에 영향을 주는 취약점인 CVE-2020-14883를 활용합니다. 이 취약점을 악용하면 공격자가 원격 코드 실행(RCE)을 수행하여 결국 Oracle WebLogic Server를 탈취할 수 있습니다.
감염은 피해 시스템이 wbw.xml이라는 XML 파일을 다운로드하여 실행하도록 하는 것으로 시작됩니다. Windows 시스템에서 ClassPathXmlApplicationContext 클래스를 통해 XML 파일이 실행됩니다.

가져온 wbw.xml 파일에는 피해 시스템에서 실행되는 임베딩된 PowerShell 명령어가 포함되어 있습니다. 명령어는 다음과 같습니다.

이것은 System.Net.WebClient.DownloadString 방법을 사용해 피해 시스템에"1.ps1"라는 PowerShell 스크립트를 다운로드하려고 합니다. 또한 Set-ExecutionPolicy Bypass 플래그를 활용하여 어떤 것도 차단되지 않도록 하고 실행 중에 프롬프트 또는 경고가 생성되지 않도록 합니다.

그런 다음 1.ps1 스크립트는 xmrig.exe라는 크립토마이너 실행 파일과 config.json 파일을 다운로드 합니다. config.json에는 암호 지갑 주소, 암호 풀 엔드포인트, 추가 구성 설정 등과 같이 마이너가 소비하는 설정 정보가 포함됩니다. 또한 1.ps1 스크립트에는 $miner_name 변수가 포함됩니다. 이 변수는 크립토마이너 실행 파일인 xmrig.exe의 바뀌게 될 새 이름을 저장합니다. 이 경우 xmrig.exe는 “sysupdate”로 이름을 바꾼 후에 실행됩니다,


1.ps1 스크립트가 config.json 파일과 마이너를 업데이트하기 위해 피해 시스템에 지속성을 설정합니다. 이 스크립트는 PowerShell을 통해로컬 또는 원격 시스템에서 예약된 작업을 생성, 삭제 및 실행할 수 있는 SchTasks.exe를 활용합니다. SchTasks.exe에 대한 자세한 정보는 여기에서 확인할 수 있습니다. 여기에서확인하세요. 예약된 작업에는 “Update service for Windows Service"라는 이름이 지정되고, 이것은 숨겨진 상태를 유지하는-windowstyle 숨김 플래그뿐 아니라 실행 중에 경고 또는 프롬프트가 표시되지 않도록 하기 위해 -ExecutionPolicy 바이패스 플래그를 다시 활용합니다.

Linux 시스템 감염
이 캠페인은 Linux 시스템을 감염시키기 위해 RCE를 달성하는 여러 CVE를 활용하고 있습니다. 크립토마이너가 포함된 Kinsing 멀웨어와 함께 Linux 페이로드는 원격 접속 트로이 목마(RAT)도 가집니다. 표적이 되는 서비스에는 Oracle WebLogic Server, Redis, Apache Solr, PHPUnit, Supervisor XML-RPC 등이 포함됩니다.
Oracle WebLogic Server CVE-2020-14883은 Linux 시스템에 대한 이 캠페인에서도 활용됩니다. 그러나 RCE가 ClassPathXmlApplicationContext 클래스를 통해 발생하는 이 취약점의 Windows 버전과 달리, Linux에서는 FileSystemXmlApplicationContext 클래스를 통해 발생합니다. 악성 XML 파일은 wb.xml로 불리며, PowerShell 스크립트를 다운로드하는 Windows를 위한 이전의 wbw.xml 대신에 Bash 스크립트를 다운로드합니다


Linux 시스템에서 감염은 아래 표에 나와 있는 모든 CVE를 사용하여 RCE에 도달하여 Bash 스크립트 파일을 피해 시스템에 다운로드하는 것으로 시작됩니다.



Bash 스크립트 파일 이름은 s.sh, p.sh, sup.sh, d. sh, ex.sh, r.sh, SPR.sh, tf.sh 혹은 wb.sh 간에 다르지만 그들은 모두 거의 같은 일을 합니다.
Bash 스크립트는 시스템에 이미 있을 수 있는 경쟁 마이너를 종료시키고 보안 및 로깅 기능을 비활성화합니다. 그런 다음 Golang으로 작성된 Kinsing 멀웨어를 다운로드하고 crontab을 사용하여 지속성을 설정한 다음 암호 마이닝을 시작합니다.

피해자의 시스템에서 일단 실행되면 Kinsing 멀웨어는 xmrig 크립토마이너인 /tmp 디렉토리의 kdevtmpfsi라는 두 번째 프로세스를 생성해 실행합니다. Kinsing 멀웨어는 kdevtmpfsi 프로세스를 지속적으로 모니터링하여 그 실행 여부를 확인합니다.
명령어 & 제어 IP 주소 디코딩
멀웨어가 C2 서버와 통신하는 방법은 getActiveC2CUrl이라는 함수를 사용하여 런타임 시 C2 IP 주소를 디코딩하는 것입니다. getActiveC2CUrl 함수는 RC4 스트림 암호화를 사용하여 이진 파일에 저장된 일반 텍스트 키를 가진 일반 텍스트 16진수 데이터를 XOR 합니다.
모든 정적 문자열이 기본적으로 서로 연결되어 하나의 큰 문자열 Blob이 발생하는, 문자열이 Golang 바이너리 내에 저장되는 방식의 특성 때문에 일반 텍스트 키와 16진수 데이터를 대량 문자열 내에 쉽게 숨길 수 있습니다. getActiveC2CUrl 함수를 어느 정도 리버싱한 후에 키 및 16진수 데이터의 메모리 내 위치와 길이를 찾을 수 있습니다.


getActiveC2CUrl 함수 16진수는 C2 16진수 데이터를 디코딩한 다음 키와 함께 RC4라는 두 번째 함수에 모두 전달됩니다. 사용자 정의 RC4 함수는 rc4 Golang 패키지에서 내부적으로 함수 func (c *Cipher) XORKeyStream(dst, src []byte)을 사용해 C2 IP 주소를 생성합니다.
C2 16진수 데이터와 키를 모두 확보했으므로 활성 C2 IP 주소를 계산하기 위해 Golang에서 getActiveC2CUrl 함수를 리버스 엔지니어링하고 다시 작성할 수 있습니다.


RAT 기능
Kinsing 멀웨어는 바이너리 내에 doTask()라는 함수에서 찾을 수 있는 원격 접속 트로이 목마(RAT) 기능을 갖추고 있습니다. doTask 함수에는 주어진 입력을 기반으로 실행되는 다음과 같은 몇 가지 흥미로운 함수 호출이 포함되어 있습니다.
runTaskWithScan()
updateTask()
startCmd()
TaskTaskOut()
masscan()
socks()
backconnect()
runTaskWithHttp()
downloadAndExecute()
이러한 흥미로운 기능 중 하나가 피해자의 시스템에서 실행되는 임의의 명령어를 허용하는 startCmd()입니다.

명령어 & 제어 통신
멀웨어는 HTTP를 통해 C2,185.154.53.140과 통신합니다. C2 HTTP 요청을 정기적으로 전송하고, 실행할 명령어를 수신하며, 간단한 상태 검사를 제공합니다.
감염된 시스템은 코어 수, 메모리, 운영 체제, 루트 권한 획득 여부 등과 같은 현재 상태 및 시스템 리소스에 대한 모든 HTTP 요청과 함께 C2 정보를 전송합니다. 이러한 모든 매개변수는 사용자 지정 HTTP 헤더를 사용하여 C2 서버에 제공됩니다.

감염된 시스템이 명령어를 수신하기 위해 지속적으로 요청하는 엔드포인트는 /get입니다. 감염된 시스템이 C2의 /get 엔드포인트에 GET 요청을 하는 경우, 멀웨어는 원본 배포 IP 194.38.20.199에서 새로운 추가 악성 셸 스크립트를 즉시 다운로드하려고 시도합니다.

그런 다음 C2의 /get 엔드포인트를 누르면 원본 배포 IP 194.38.20.199에서 다운로드된 Bash 스크립트는 ph.sh 및 spre.sh로 불립니다. 이 두 파일은 앞서 살펴본 초기 감염 Bash 스크립트와 다르며, 각각 목적은 서로 다르며 추가 감염 기법을 포함하고 있습니다.
먼저 ph.sh 스크립트를 살펴보겠습니다. 이것은 피해자 시스템의 기존 Kinsing 멀웨어뿐 아니라, 194.38.20.199/libsystem.so에서 libsystem.so라는 루트킷을 다운로드합니다. 그런 다음 ph.sh 스크립트는 이 루트킷을 /etc/ld.so.preload에 미리 로딩합니다.

또한 ph.sh 스크립트는 이전에 초기 스크립트에 의해 삽입된 기존 크론잡 외에도 두 번째 지속성 메커니즘을 설정합니다. 이 스크립트는 호스트를 정기적으로 다시 감염시키는 시스템 서비스를 등록하여 이를 수행합니다.

ph.sh 스크립트가 설치하는 libsystem.so 루트킷과 내부 작동에 대해 자세히 알고 싶은 분들을 위해 Trend Micro는 여기서 찾을 수 있는 이러한 특정 루트킷에 대한 환상적인 블로그를 작성했습니다.
C2 엔드포인트에서 /get 응답을 통해 가져오는 두 번째 흥미로운 Bash 스크립트 파일은 spre.sh입니다. 이것의 목적은 ~/.ssh/config , ~/.bash_history 및 .ssh/known_hosts를 검사하여피해자가 접속하는 모든 호스트에 대한 ssh 인증증보를 찾아 추가 호스트에 감염을 확산시키는 것입니다 그런 다음 spre.sh 스크립트는 발견된 인증정보를 사용하여 검색된 호스트에 ssh를 시도하고 이들을 감염시킵니다.

감염된 시스템이 명령어를 요청하는 또 다른 흥미로운 C2 엔드포인트는 /mg 엔드포인트입니다. 감염된 시스템이 /mg 엔드포인트에 GET 요청을 할 때 C2는 몇 개의 문자로 응답하면, 감염된 시스템은 즉시 세 번째 IP 주소 95.181.179.88과 통신을 시작합니다. 이 주소는 HTTP를 통해 JSON-RPC 페이로드의 형태로 감염된 시스템에 마이닝 명령어를 제공하는 역할을 하는 것으로 보입니다.

수행할 작업
Akamai SIRT는 이러한 위협을 방어하기 위해 시스템의 프로세스를 모니터링하여 비정상적으로 높은 리소스 소모와 의심스러운 네트워크 활동이 있는지 확인할 것을 권장합니다. 특정 프로세스에서 CPU 사용량이 비정상적으로 높을 경우 크립토마이닝 활동의 지표가 될 수 있습니다.
또한 Akamai SIRT는 크론잡이 알려지지 않은 IP 주소와 통신하지 않도록 시스템의 크론탭 아래에 등록된 크론잡을 자주 확인하도록 권장합니다. 이는 Linux 멀웨어가 지속성을 설정하는 일반적인 기술이며, 논의된 캠페인도 예외가 아닙니다.
Windows 시스템의 경우 이 캠페인에 의해 생성된 예약된 작업을 모두 표시하려면 PowerShell에서 SchTasks.exe /Query를 사용하여 동일한 작업을 수행해야 합니다. 또한 Linux 시스템에서 실행 중인 프로세스를 확인하고 kinsing 또는 kdevtmpfsi 이름의 프로세스가 실행되고 있지 않은지, 그리고 sysupdate라는 프로세스가 Windows 시스템에서 실행되고 있지 않은지 확인합니다.
가능한 경우 시스템에 강력한 인증을 추가합니다. 취약한 암호는 손쉽게 무차별 암호 대입을 적용할 수 있습니다. 또한 Oracle WebLogic Server, Redis, Apache Solr, PHPUnit 및 Supervisor XML-RPC와 같은 캠페인의 표적이 되는 서비스가 필요하지 않은 경우 인터넷에 연결되지 않도록 하여 이러한 서비스가 감염될 리스크를 크게 줄입니다. 예를 들어 Redis 인스턴스가 내부 시스템에서만 사용되는 경우 인터넷에 연결할 필요는 없습니다.
또한 Akamai SIRT는 아래 IOC 섹션에 제공된 IOC(Indications of Compromise)를 기준으로 시스템을 확인하여 시스템이 이미 감염되지 않았는지 확인할 것을 권장합니다. 아울러 정기적으로 시스템에 패치를 적용하고 모범 사례를 따르세요.
IOC(Indications of compromise)
IPs
IP |
설명 |
185.154.53.140 |
명령어 & 제어 |
194.38.20.199 |
멀웨어 배포 |
95.181.179.88 |
크립토마이닝 작업 관리 |
195.3.146.118 |
백업 멀웨어 배포 |
파일
SHA-256 |
이름 |
설명 |
8ca0229fb64e3f1819375cf1daf32104c37c0d0923bdc35cb6bea655ecd1a6a4 |
s.sh |
194.38.20.199/ssh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
ede8fdb68d777efcc0538b465d640cbb2c061bd49461f76d65f68c135ff8bbb6 |
p.sh |
194.38.20.199/p.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
0e79ec7b00c14a4c576803a1fd2e8dd3ea077e4e98dafa77d26c0f9d6f27f0c9 |
d.sh |
194.38.20.199/d.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
6e35b5670953b6ab15e3eb062b8a594d58936dd93ca382bbb3ebdbf076a1f83b |
spr.sh |
194.38.20.199/spr.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
818179ac928027a5c26c9b13d3d830b7331c3e4c46ba1e305867e3d4accaf3ef |
r.sh |
194.38.20.199/r.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
56ac2321e481708ea72e2bf7710e66c3455afa729b24f6a6ba9065ae0cca8fb3 |
ex.sh |
194.38.20.199 /ex.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
05e5ad89443b58805ae2eb2628d3eef1d6cbcc338bced23f422abe5ce60ff82d |
tf.sh |
194.38.20.199/tf.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
274b11542fcb30065c4cc0976ce33252ba2812756f7e22f6d80fae1acadf5c4c |
wb.sh |
194.38.20.199 /wb.sh, Kinsing 멀웨어를 다운로드하는 Bash 스크립트 |
6e25ad03103a1a972b78c642bac09060fa79c460011dc5748cbb433cc459938b |
kinsing |
194.38.20.199/kinsing, Kinsing 멀웨어 바이너리 |
7d31843ce5231c95ce07a609cb4473fe53b95a8d0685df9d666de348d17c69ff |
config.json |
194.38.20.199/config.json, XMRIG miner용 json 설정 |
c38c21120d8c17688f9aeb2af5bdafb6b75e1d2673b025b720e50232f888808a |
libsystem.so |
194.38.20.199/libsystem.so, 루트킷 바이너리 |
5e5b5171a95955ecb0fa8f9f1ba66f313165044cc1978a447673c0ac17859170 |
xmrig.exe |
194.38.20.199/xmrig.exe, Windows용 XMRIG 마이너 |
49ff0329b9ad42c7fb17e6a2d80b316ed6b759ab5dfd04a5aba42b97225494cf |
wbw.xml |
194.38.20.199/wbw.xml, PowerShell 스크립트를 다운로드하여 Windows 시스템을 감염시키는 xml 파일 |
25b545dc3423d5c3c0181f559486643a7097b5fd87b32f0347ed667cbf3fb38e |
wb.xml |
194.38.20.199/wb.xml, Linux 시스템을 감염시키기 위해 Bash 스크립트를 다운로드하는 xml 파일 |
6b9e23cb675be370a18a0c4482dc566be28920d4f1cd8ba6b4527f80acf978d3 |
curl-amd64 |
194.38.20.199/curl-amd64, curl 바이너리 |
fecd30cd7802f8ac4137a2d0659b3052411a99d809a5aefb48f8b821905100f3 |
al.sh |
194.38.20.199/al.sh, aegis 서비스를 중지시키는 Bash 스크립트 |
cb2ca16246a687b34fa1ba76015cb4aa3b50b4ecca4550478eb580c4725ab48f |
cron.sh |
194.38.20.199/cron.sh, 크론탭을 업데이트하는 Bash 스크립트 |
d7cda9e427d0848352a1158c68a2577c1600965fb9dbb32bc1e10af1a442d284 |
ph.sh |
194.38.20.199/ph.sh, Kinsing 멀웨어 및 libsystem.so 루트킷을 다운로드하는 Bash 스크립트 |
f4c319e43296ab323615ac4bd4b7601991218ecb6d6043b1c040a96f1a33f14f |
spre.sh |
194.38.20.199/spre.sh, ssh를 통해 감염을 다른 호스트로 확산시키는 Bash 스크립트 |
dd603db3e2c0800d5eaa262b6b8553c68deaa486b545d4965df5dc43217cc839 |
kdevtmpfsi |
Kinsing 크립토마이너 프로세스 |