Dark background with blue code overlay
블로그

Kingsing의 진화 | Akamai 블로그

Evyatar Saias

에 의해 작성

Evyatar Saias

September 16, 2021

Evyatar Saias

에 의해 작성

Evyatar Saias

에비아타 사이아스(Evyatar Sais)는 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 파일이 실행됩니다.

그림 1) 피해 시스템이 ClassPathXmlApplicationContext 클래스인 CVE-2020-14883을 통해 원격 xml 파일을 다운로드하여 실행합니다. 그림 1) 피해 시스템이 ClassPathXmlApplicationContext 클래스인 CVE-2020-14883을 통해 원격 xml 파일을 다운로드하여 실행합니다.

 

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

 

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

그림 2) 피해 시스템에 1.ps1이라는 PowerShell 스크립트를 다운로드하는 PowerShell 명령어가 포함된 wbw.xml 파일의 콘텐츠 그림 2) 피해 시스템에 1.ps1이라는 PowerShell 스크립트를 다운로드하는 PowerShell 명령어가 포함된 wbw.xml 파일의 콘텐츠

 

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

그림 3) PowerShell 스크립트 1.ps1의 일부 그림 3) PowerShell 스크립트 1.ps1의 일부
그림 4) 마이닝 풀 엔드포인트 마이닝, 암호 지갑 주소 등 마이너 실행 파일에 대한 설정이 포함된 config.json의 일부. 그림 4) 마이닝 풀 엔드포인트 마이닝, 암호 지갑 주소 등 마이너 실행 파일에 대한 설정이 포함된 config.json의 일부.

 

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

그림 5) PowerShell 스크립트 1.ps1은 설정 파일 및 마이너 실행 파일에 업데이트를 푸시하기 위해 “Update service for Windows Service”라는 예약된 작업을 생성해 지속성을 설정합니다. 그림 5) PowerShell 스크립트 1.ps1은 설정 파일 및 마이너 실행 파일에 업데이트를 푸시하기 위해 “Update service for Windows Service”라는 예약된 작업을 생성해 지속성을 설정합니다.

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 스크립트를 다운로드합니다

그림 6) 피해 시스템은 FileSystemXmlApplicationContext 클래스 CVE-2020-14883을 통해 원격 xml 파일을 다운로드하여 실행합니다. 그림 6) 피해 시스템은 FileSystemXmlApplicationContext 클래스 CVE-2020-14883을 통해 원격 xml 파일을 다운로드하여 실행합니다.
그림 7) 피해 시스템에서 wb.sh라는 Bash 스크립트를 다운로드한 후 실행하는 Bash 명령어가 포함된 wb.xml 파일의 콘텐츠 그림 7) 피해 시스템에서 wb.sh라는 Bash 스크립트를 다운로드한 후 실행하는 Bash 명령어가 포함된 wb.xml 파일의 콘텐츠

 

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

그림 8) 피해 시스템을 감염시키는 캠페인에서 활용되는 CVE 그림 8) 피해 시스템을 감염시키는 캠페인에서 활용되는 CVE

 

Bash 스크립트 파일 이름은 s.sh, p.sh, sup.sh, d. sh, ex.sh, r.sh, SPR.sh, tf.sh 혹은 wb.sh 간에 다르지만 그들은 모두 거의 같은 일을 합니다.

Bash 스크립트는 시스템에 이미 있을 수 있는 경쟁 마이너를 종료시키고 보안 및 로깅 기능을 비활성화합니다. 그런 다음 Golang으로 작성된 Kinsing 멀웨어를 다운로드하고 crontab을 사용하여 지속성을 설정한 다음 암호 마이닝을 시작합니다.

그림 9) 피해자 Linux 시스템에 Kinsing 크립토마이너를 다운로드하는 악성 Bash 스크립트의 일부 그림 9) 피해자 Linux 시스템에 Kinsing 크립토마이너를 다운로드하는 악성 Bash 스크립트의 일부

 

피해자의 시스템에서 일단 실행되면 Kinsing 멀웨어는 xmrig 크립토마이너인 /tmp 디렉토리의 kdevtmpfsi라는 두 번째 프로세스를 생성해 실행합니다. Kinsing 멀웨어는 kdevtmpfsi 프로세스를 지속적으로 모니터링하여 그 실행 여부를 확인합니다.

명령어 & 제어 IP 주소  디코딩

멀웨어가 C2 서버와 통신하는 방법은 getActiveC2CUrl이라는 함수를 사용하여 런타임 시 C2 IP 주소를 디코딩하는 것입니다. getActiveC2CUrl 함수는 RC4 스트림 암호화를 사용하여 이진 파일에 저장된 일반 텍스트 키를 가진 일반 텍스트 16진수 데이터를 XOR 합니다. 

모든 정적 문자열이 기본적으로 서로 연결되어 하나의 큰 문자열 Blob이 발생하는, 문자열이 Golang 바이너리 내에 저장되는 방식의 특성 때문에  일반 텍스트 키와 16진수 데이터를 대량 문자열 내에 쉽게 숨길 수 있습니다. getActiveC2CUrl 함수를 어느 정도 리버싱한 후에 키 및 16진수 데이터의 메모리 내 위치와 길이를 찾을 수 있습니다.

그림 10) C2 일반 텍스트 16진수 데이터 및 암호화 키의 메모리 내 위치와 길이가 표시됩니다. 그림 10) C2 일반 텍스트 16진수 데이터 및 암호화 키의 메모리 내 위치와 길이가 표시됩니다.

getActiveC2CUrl 함수 16진수는 C2 16진수 데이터를 디코딩한 다음 키와 함께 RC4라는 두 번째 함수에 모두 전달됩니다. 사용자 정의 RC4 함수는 rc4 Golang 패키지에서 내부적으로 함수 func (c *Cipher) XORKeyStream(dst, src []byte)을 사용해 C2 IP 주소를 생성합니다.

C2 16진수 데이터와 키를 모두 확보했으므로 활성 C2 IP 주소를 계산하기 위해 Golang에서 getActiveC2CUrl 함수를 리버스 엔지니어링하고 다시 작성할 수 있습니다.

그림 11) getActiveC2CUrl() 함수는 확보한 C2 16진수 데이터 및 키를 사용하여 Golang에서 다시 작성되어 활성 C2 IP 주소를 생성합니다. 그림 11) getActiveC2CUrl() 함수는 확보한 C2 16진수 데이터 및 키를 사용하여 Golang에서 다시 작성되어 활성 C2 IP 주소를 생성합니다.

RAT 기능

Kinsing 멀웨어는 바이너리 내에 doTask()라는 함수에서 찾을 수 있는 원격 접속 트로이 목마(RAT) 기능을 갖추고 있습니다. doTask 함수에는 주어진 입력을 기반으로 실행되는 다음과 같은 몇 가지 흥미로운 함수 호출이 포함되어 있습니다.

  • runTaskWithScan()

  • updateTask()

  • startCmd()

  • TaskTaskOut()

  • masscan()

  • socks()

  • backconnect()

  • runTaskWithHttp()

  • downloadAndExecute()

 

이러한 흥미로운 기능 중 하나가 피해자의 시스템에서 실행되는 임의의 명령어를 허용하는 startCmd()입니다.

 

그림 12) 디컴파일된 형태의 doTask() 함수가 멀웨어의 RAT 기능을 보여주고 있습니다. 강조 표시된 것은 피해자의 시스템에서 실행되는 임의의 명령어를 허용하는 임베디드된 startCmd() 함수입니다. 그림 12) 디컴파일된 형태의 doTask() 함수가 멀웨어의 RAT 기능을 보여주고 있습니다. 강조 표시된 것은 피해자의 시스템에서 실행되는 임의의 명령어를 허용하는 임베디드된 startCmd() 함수입니다.

명령어 & 제어 통신

멀웨어는 HTTP를 통해 C2,185.154.53.140과 통신합니다.  C2 HTTP 요청을 정기적으로 전송하고, 실행할 명령어를 수신하며, 간단한 상태 검사를 제공합니다.

감염된 시스템은 코어 수, 메모리, 운영 체제, 루트 권한 획득 여부 등과 같은 현재 상태 및 시스템 리소스에 대한 모든 HTTP 요청과 함께 C2 정보를 전송합니다.  이러한 모든 매개변수는 사용자 지정 HTTP 헤더를 사용하여 C2 서버에 제공됩니다.

 그림 13) 피해자의 시스템 리소스 및 획득한 권한에 대한 정보가 포함된 감염된 시스템에서 C2로 이루어진 POST 요청 그림 13) 피해자의 시스템 리소스 및 획득한 권한에 대한 정보가 포함된 감염된 시스템에서 C2로 이루어진 POST 요청

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

그림 14) 감염된 시스템은 C2의 /get 엔드포인트에 GET 요청을 하고 그 결과 원본 배포 IP 194.38.20.199에서 새 셸 스크립트를 가져옵니다. 그림 14) 감염된 시스템은 C2의 /get 엔드포인트에 GET 요청을 하고 그 결과 원본 배포 IP 194.38.20.199에서 새 셸 스크립트를 가져옵니다.

 

그런 다음 C2의 /get 엔드포인트를 누르면 원본 배포 IP 194.38.20.199에서 다운로드된 Bash 스크립트는 ph.shspre.sh로 불립니다. 이 두 파일은 앞서 살펴본 초기 감염 Bash 스크립트와 다르며, 각각 목적은 서로 다르며 추가 감염 기법을 포함하고 있습니다.


먼저 ph.sh 스크립트를 살펴보겠습니다. 이것은 피해자 시스템의 기존 Kinsing 멀웨어뿐 아니라, 194.38.20.199/libsystem.so에서 libsystem.so라는 루트킷을 다운로드합니다. 그런 다음 ph.sh 스크립트는 이 루트킷을 /etc/ld.so.preload에 미리 로딩합니다.

그림 15) 가져온 libsystem.so 루트킷을 /etc/ld.so.preload에 미리 로딩하는 ph.sh Bash 스크립트의 일부 그림 15) 가져온 libsystem.so 루트킷을 /etc/ld.so.preload에 미리 로딩하는 ph.sh Bash 스크립트의 일부

 

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

그림 16) 지속성을 설정하고 호스트를 정기적으로 감염시키는 시스템 서비스를 생성하는 ph.sh Bash 스크립트의 일부. 그림 16) 지속성을 설정하고 호스트를 정기적으로 감염시키는 시스템 서비스를 생성하는 ph.sh Bash 스크립트의 일부.

 

ph.sh 스크립트가 설치하는 libsystem.so 루트킷과 내부 작동에 대해 자세히 알고 싶은 분들을 위해 Trend Micro는 여기서 찾을 수 있는 이러한 특정 루트킷에 대한 환상적인 블로그를 작성했습니다.

C2 엔드포인트에서 /get 응답을 통해 가져오는 두 번째 흥미로운 Bash 스크립트 파일은 spre.sh입니다. 이것의 목적은 ~/.ssh/config , ~/.bash_history  및  .ssh/known_hosts를 검사하여피해자가 접속하는 모든 호스트에 대한 ssh 인증증보를 찾아 추가 호스트에 감염을 확산시키는 것입니다 그런 다음 spre.sh 스크립트는 발견된 인증정보를 사용하여 검색된 호스트에 ssh를 시도하고 이들을 감염시킵니다.

 

그림 17) spre.sh Bash 스크립트는 ~/.ssh/config~/.bash_history 및 .ssh/known_hosts에서 ssh 인증정보를 찾아 ssh를 사용하는 추가 호스트에 감염을 확산시킵니다 그림 17) spre.sh Bash 스크립트는 ~/.ssh/config~/.bash_history 및 .ssh/known_hosts에서 ssh 인증정보를 찾아 ssh를 사용하는 추가 호스트에 감염을 확산시킵니다

 

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

그림 18) 감염된 시스템이 C2의 /mg 엔드포인트에 GET 요청을 합니다. 그림 18) 감염된 시스템이 C2의 /mg 엔드포인트에 GET 요청을 합니다.

수행할 작업

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 크립토마이너 프로세스



Evyatar Saias

에 의해 작성

Evyatar Saias

September 16, 2021

Evyatar Saias

에 의해 작성

Evyatar Saias

에비아타 사이아스(Evyatar Sais)는 Akamai 보안 인텔리전스 부서의 보안 연구원입니다.