
Проверки безопасности Linux
Инструмент для обнаружения, удаления криптомайнеров и усиления защиты серверов Linux.
Создан на основе реального реагирования на инциденты — обнаруживает майнеры, которые скрываются от
ps,top,htopиbtopс помощью руткит-техник.
git clone https://gitlab.com/abdom.seada/security-checks.git
cd security-checks
sudo bash setup.sh
🔀 Ветка:
master— этот инструментарий находится в веткеmaster. Другие скрипты безопасности могут быть добавлены в отдельных ветках в будущем.
⚠️ Запустите
setup.shсразу после клонирования — пропуск этого шага является причиной №1 ошибок.
sudo bash setup.sh
setup.sh делает всё автоматически:
| Шаг | Что делает |
|---|---|
| ✅ Права | chmod +x для miner-hunter и всех скриптов lib/*.sh |
| ✅ Каталоги | Создаёт /var/log/miner_hunter/ и /var/lib/miner_hunter/ (только для root, 700) |
| ✅ Зависимости | Проверяет perf, mpstat, iptables, fail2ban, bc, strings — автоматически устанавливает отсутствующие |
| ✅ Самопроверка | Запускает ./miner-hunter --version, чтобы убедиться, что всё настроено правильно |
Ожидаемый вывод при успешной настройке:
✅ Setup complete — all checks passed!
Next steps:
sudo ./miner-hunter scan # Safe read-only scan
sudo ./miner-hunter full # Scan → Kill → Harden
💡 Зачем это нужно? Linux не выполнит файл, если у него нет флага
+x. Git и SCP-передачи удаляют его.setup.shисправляет все файлы за один раз, включая модулиlib/, от которых зависит основной скрипт.
sudo ./miner-hunter scan # ✅ Safe — read-only, zero changes
sudo ./miner-hunter full # ⚠️ Full pipeline: Scan → Kill → Harden
sudo ./miner-hunter scan --dry-run # 👁️ Preview mode — shows what would happen
| Команда | Описание | Изменяет систему? |
|---|---|---|
scan | Полное сканирование обнаружения — скрытые процессы, ЦП, сеть, персистентность | ✅ Нет |
kill | Убить обнаруженные майнеры, заблокировать IP-адреса пулов, удалить артефакты | ⚠️ Да |
harden | Усиление защиты после инцидента — SSH, брандмауэр, сторожевой пёс, базовая линия целостности | ⚠️ Да |
full | Запускает scan → kill → harden с запросами подтверждения между фазами | ⚠️ Да |
report | Показать последний отчёт сканирования | ✅ Нет |
| Параметр | Описание |
|---|---|
-d, --dry-run | Предварительный просмотр всех действий без внесения изменений |
-e, --evidence DIR | Сохранить доказательства в пользовательский каталог вместо /root/miner_evidence_* |
-h, --help | Показать справку |
-v, --version | Показать версию |
Реальные ситуации и что именно запускать в каждой из них.
top ничего не показывает"Это классический симптом руткита. Майнер скрывается от инструментов пользовательского пространства, но не может скрыться от счётчиков производительности оборудования.
# Step 1: Run a safe scan first — confirm what's there before touching anything
sudo ./miner-hunter scan
Что вы увидите, если майнер присутствует:
🚨 [CRITICAL] CPU anomaly: 97% user CPU but top shows max 2% per process
🚨 [CRITICAL] perf detected 4 hidden threads consuming ~94% total CPU
🚨 [CRITICAL] Active connection to 185.x.x.x:9200 (known mining port)
🚨 [CRITICAL] Fake kernel thread PID=3421 NAME=[kworker/0:1] EXE=/tmp/.x/miner
# Step 2: Kill the miner and block its pool
sudo ./miner-hunter kill
# Step 3: Harden the server so it can't come back
sudo ./miner-hunter harden
Вы заметили что-то подозрительное — необычный исходящий трафик, задание cron, которое вы не создавали, процесс со странным именем — но вы не уверены.
# Run a full scan — completely safe, read-only, zero changes
sudo ./miner-hunter scan
# Then read the structured report
sudo ./miner-hunter report
Отчёт в /root/miner_evidence_*/report.txt категоризирует каждую находку по серьёзности:
[CRITICAL] → немедленно переходите к kill[WARNING] → просмотрите вручную перед действиемУ майнера есть механизм персистентности — задание cron, служба systemd, запись PM2 или бэкдор в профиле оболочки, которые возрождают его после убийства.
sudo ./miner-hunter scan
Ищите это в выводе:
⚠️ [WARN] Suspicious cron entry: * * * * * /tmp/.x/update
🚨 [CRITICAL] Malicious systemd service: /etc/systemd/system/update-check.service
🚨 [CRITICAL] PM2 process 'app-worker' has 8432 restarts — likely miner respawn loop
🚨 [CRITICAL] Shell profile backdoor detected in /root/.bashrc
# kill removes ALL persistence artifacts — not just the running process
sudo ./miner-hunter kill
# Then harden to install the watchdog so you're alerted if anything respawns
sudo ./miner-hunter harden
💡 После
kill, сторожевой cron запускается каждые 5 минут и записывает в/var/log/miner_hunter/watchdog_alerts.log— вы сразу узнаете, если что-то вернётся.
Упреждающее усиление защиты перед развёртыванием — нет майнера, нет инцидента, просто блокировка системы.
# Run harden standalone — no scan or kill needed
sudo ./miner-hunter harden
Это сделает:
sshd/usr/bin (контрольные суммы MD5 — чтобы вы могли позже обнаружить подменённые бинарники)После kill, шаг проверки сообщает, что майнер может всё ещё работать:
⚠️ MINER MAY HAVE RESPAWNED
CPU: 89% | Mining conns: 1
Firewall blocks are in place — miner can't reach pool
Consider a REBOOT or OS REINSTALL
# 1. Firewall blocks are already in place — miner CANNOT reach its pool
# Confirm blocks are active:
iptables -L OUTPUT -n | grep DROP
# 2. Run a second scan to see what survived
sudo ./miner-hunter scan
# 3. Check for a kernel module rootkit hiding the process
lsmod | grep -iE 'diamorphine|reptile|kovid|rootkit'
# 4. Non-zero taint = out-of-tree kernel modules loaded (rootkit indicator)
cat /proc/sys/kernel/tainted
Если значение taint ядра не равно нулю или появляется известный модуль руткита — майнер имеет контроль уровня ядра. Самым безопасным путём на этом этапе является полная переустановка ОС из известной чистой резервной копии.
После harden сторожевой cron уже установлен. Вот как с ним работать:
# Watch the alert log in real time
tail -f /var/log/miner_hunter/watchdog_alerts.log
# Confirm the watchdog cron job is registered
cat /etc/cron.d/miner-watchdog
# Check for /usr/bin binary changes since your baseline was taken
md5sum --check /var/lib/miner_hunter/usrbin_baseline.md5 --quiet
Любой вывод последней команды означает, что системный бинарник был изменён после создания базовой линии — немедленно проведите расследование.