Анализ ботнета DarkSky
ims0rry![](https://i.imgur.com/2BzceS4.png)
Админ-панель
Оболочка
Сразу хочется отметить, что в плане внешности, панелька очень даже неплохая.
![](https://image.prntscr.com/image/-v3loq32RAi5v1eG8J21zQ.png)
Тут же отмечу, что имеются некоторые баги:
1) Я запускал файл на дедике - он отстучал в двух разных ботов, хотя по данным они идентичны
2) Неправильно определяется версия Windows: на дедике Windows Server 2012 R2, а в панели Win8/10x64
Присутствует удобная настройка панели, страница тасков, логов, последних действий.
Внутренности
Вот тут уже начинается темная сторона этого продукта. Из серьезных недоработок я нашел:
1) Update - автообновление панели, которое можно использовать как бекдор
Класс:
![](https://image.prntscr.com/image/CiRauliAT6ut7GDjLRQBpQ.png)
Использование:
![](https://i.imgur.com/tyqSbeA.png)
Возможно, сделано это ненамеренно, но риск остается.
2) Уязвимость к SQL-инъекциям - хоть и используется mysqli, но толку от него ноль:
![](https://image.prntscr.com/image/zQAxjXjtTq_enBo26q-CrQ.png)
Данные вставляются в принятом формате (я где-то видел метод, который регулярками что-то либо сравнивает, либо чистит, но регулярки, я слышал, не спасают):
![](https://image.prntscr.com/image/ru7QvAf6RB6MdruU7HJCkQ.png)
3) "Шифрование данных" - это HEX. Если уж заявили о шифровании, нужно его сделать адекватно, а не так, чтобы все это через любой онлайн-декодер расшифровывалось:
![](https://image.prntscr.com/image/Z7R4JYdGQHitZiG03fFVCw.png)
Анализ файла
PE
Смотрим через PE-сканнеры:
![](https://image.prntscr.com/image/sc3i8uNhRCmtvrICmA2d0A.png)
Файл ничем не запакован, ЯП - Delphi.
Данные
Открываем файл в IDA и первое, на что обращаем внимание - строки:
![](https://image.prntscr.com/image/K0pb5WRtQguxpovAe2mEWg.png)
Очень много hex-строк, а как мы уже знаем, в софте именно это является основным шифрованием данных. При декодировании можно найти пару интересных строк:
User-Agent с которым делается http-запрос:
![](https://i.imgur.com/PPvdrrC.png)
Хост на который привязан лоадер:
![](https://i.imgur.com/Ofd4NCQ.png)
Параметры:
![](https://i.imgur.com/GNCf6cO.png)
А тут мы видим что лоадер использует стандартную автозагрузку:
![](https://i.imgur.com/A4Wifsz.png)
Функции
Основной метод выглядит так:
![](https://i.imgur.com/fBUBmqC.png)
Происходят DLL-проверки (чек на песочницу, виртуалку и т.д.), далее происходит запуск в памяти массива байт (предпоследняя строчка).
На графе выглядит примерно так:
![](https://i.imgur.com/3NJ5lWw.png)
Теперь нам нужно отыскать то, что запускается в памяти:
![](https://i.imgur.com/VaFSs0R.png)
Переходим:
![](https://i.imgur.com/IRqx7mR.png)
Далее открываем функцию Main этого массива (sub_420434):
![](https://i.imgur.com/OgmikBU.png)
![](https://i.imgur.com/2mnlrFQ.png)
В функции sub_4213B8 происходит запрос к серверу, там же мы видим захексованный хост и параметры:
![](https://i.imgur.com/dIyZPfR.png)
![](https://i.imgur.com/CA1uxTy.png)
![](https://i.imgur.com/HsIppHX.png)
Далее в цикле происходит запрос текущих тасков и их выполнение. По названиям строк (str_load, str_udp, str_method_http) не трудно догадаться что первое - это таск загрузки и запуска файла, второе - udp-flood, третье - http-flood.
Смотрим функции по порядку:
Загрузка и запуск файла
Загрузка:
![](https://i.imgur.com/xJ9SX3m.png)
![](https://i.imgur.com/9PAz5te.png)
Запуск:
![](https://i.imgur.com/XnmXCYX.png)
UDP-flood
![](https://i.imgur.com/6U2JsNT.png)
HTTP-flood
![](https://i.imgur.com/yjhIMl0.png)
В цикле стартуют потоки этой функции:
![](https://image.prntscr.com/image/LKGBVp14SNe3skknAL6KDg.png)
![](https://image.prntscr.com/image/Ex3SBxqNThKf01Zp35fHfA.png)
Реализация довольно громоздкая, можно было сделать куда проще и эффективнее.
Ссылки
Сорцы панели + семпл - https://github.com/ims0rry/DarkSky-botnet
Продажник - https://lolzteam.net/threads/314749/
-----------------------------
Автор @ims0rry