Как проверить Linux-сервер на вредоносные процессы
02 Sep 2026, 04:37:26
Linux-сервер может работать медленнее обычного не только из-за высокой нагрузки или большого количества запросов. Причиной могут быть вредоносные программы, майнеры, бэкдоры и другие нежелательные процессы. При этом сам факт высокой загрузки CPU ещё не говорит о заражении — сначала необходимо определить источник нагрузки и проверить сервер на другие признаки компрометации.Когда стоит проверить сервер
Проверку стоит провести, если:- процессор постоянно загружен без очевидной причины;
- появились неизвестные процессы;
- сервер начал использовать значительно больше сетевого трафика;
- появились неизвестные открытые порты;
- неожиданно увеличилось потребление оперативной памяти;
- появились новые пользователи или SSH-ключи;
- в системе обнаружены неизвестные cron-задачи или systemd-сервисы;
- файлы изменяются или появляются без действий администратора;
- сервер начал выполнять неизвестные задачи.
1. Проверка запущенных процессов
Первым шагом стоит посмотреть процессы, работающие в системе:ps auxДля более удобного просмотра можно использовать:
top
или:
htopВ списке следует обратить внимание на процессы с:
- необычными именами;
- высокой загрузкой CPU;
- большим потреблением RAM;
- неизвестным пользователем;
- подозрительным расположением исполняемого файла.
2. Поиск процессов с высокой загрузкой CPU
Чтобы быстро найти наиболее ресурсоёмкие процессы:ps aux --sort=-%cpu | headНапример, можно увидеть:

Сам по себе высокий CPU у mariadbd, php-fpm или другого известного сервиса не является признаком вредоносной активности.
А вот неизвестный исполняемый файл из /tmp или другого временного каталога требует дополнительной проверки.
3. Проверка расположения процесса
Получить информацию о конкретном процессе можно через /proc.Например:
readlink -f /proc/67580/exe
Также можно посмотреть команду, с которой процесс был запущен:
tr '\0' ' ' < /proc/67580/cmdline
И пользователя, которому принадлежит процесс:
ps -o user,pid,ppid,cmd -p 67580
Расположение исполняемого файла имеет значение. Например, системные программы обычно находятся в /usr/bin, /usr/sbin и других стандартных каталогах.
Неизвестный бинарный файл в /tmp, /var/tmp или /dev/shm сам по себе не доказывает наличие вредоносного ПО, но является поводом для дальнейшего анализа.
4. Проверка сетевых соединений
Вредоносный процесс может устанавливать исходящие соединения с внешними серверами или открывать собственные порты.Посмотреть активные соединения и слушающие порты можно с помощью:
ss -tulpn
Для просмотра текущих TCP-соединений:
ss -tpВ выводе можно определить PID и название процесса, который использует соединение.
Особое внимание стоит уделить:
- неизвестным процессам, слушающим сетевые порты;
- неожиданным исходящим соединениям;
- соединениям с неизвестными внешними адресами;
- процессам, которые не должны иметь сетевой активности.
5. Проверка открытых портов
Для внешней проверки можно использовать nmap с другого сервера или компьютера:nmap -Pn SERVER_IPЕсли обнаружен порт, который не должен быть открыт, сначала нужно определить, какая служба его использует:
ss -lntupНе стоит автоматически считать любой неизвестный порт вредоносным. Его может использовать установленное администратором программное обеспечение.
6. Проверка пользователей
Следующий этап — проверка пользователей системы:cat /etc/passwdДля поиска пользователей, имеющих shell:
grep -E '/bin/(bash|sh|zsh)$' /etc/passwd
Также полезно проверить последние входы:
lastИ неудачные попытки авторизации:
lastbЕсли на сервере появился неизвестный пользователь или обнаружены неожиданные успешные входы, необходимо выяснить их происхождение.
7. Проверка SSH-ключей
Если используется авторизация по SSH-ключам, необходимо проверить файл:~/.ssh/authorized_keysДля пользователя root:
/root/.ssh/authorized_keysНеизвестный ключ может предоставить постоянный доступ к серверу даже после удаления отдельного вредоносного процесса.
Поэтому при подозрении на компрометацию нужно проверить SSH-ключи всех пользователей, имеющих доступ к серверу.
8. Проверка cron-задач
Вредоносное ПО может использовать cron для автоматического запуска после перезагрузки или через определённые промежутки времени.Задачи текущего пользователя:
crontab -lЗадачи другого пользователя:
crontab -u USERNAME -lТакже стоит проверить системные каталоги:
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
ls -la /etc/cron.weekly/
ls -la /etc/cron.monthly/Особенно внимательно нужно изучать недавно появившиеся задания, запускающие неизвестные скрипты или бинарные файлы.
9. Проверка systemd
Современные Linux-дистрибутивы используют systemd для управления службами.Список запущенных служб:
systemctl --type=service --state=runningСписок служб, запускающихся автоматически:
systemctl list-unit-files --state=enabledЕсли обнаружена неизвестная служба, можно посмотреть её конфигурацию:
systemctl cat SERVICE_NAMEЭто позволяет определить, какой файл запускается и от какого пользователя работает служба.
10. Проверка временных каталогов
Стоит обратить внимание на:/tmp
/var/tmp
/dev/shm
Можно посмотреть недавно изменённые файлы:
find /tmp /var/tmp /dev/shm -type f -mtime -1 -lsОднако удалять найденные файлы сразу не следует. Сначала необходимо установить, какой процесс их создал и используется ли файл в данный момент.
11. Анализ логов
Системные журналы помогают определить, когда появилась подозрительная активность.Для просмотра сообщений systemd:
journalctlНапример, последние сообщения:
journalctl -n 100Или события за последний час:
journalctl --since "1 hour ago"Для SSH можно искать успешные и неудачные попытки входа. Конкретные файлы зависят от дистрибутива. Например, в Debian и Ubuntu часто используется:
/var/log/auth.log
а в RHEL-подобных системах:
/var/log/secure
При анализе важно сопоставлять время подозрительного входа с моментом появления неизвестного процесса.
12. Проверка файлов на изменения
Если известно, какие системные файлы должны находиться на сервере, можно проверить их целостность с помощью соответствующих средств конкретного дистрибутива.Также полезно найти недавно изменённые файлы в системных каталогах:
find /etc /usr/bin /usr/sbin -type f -mtime -3 -ls
Но результат такого поиска требует ручного анализа: обновление пакетов также приводит к изменению системных файлов.
13. Использование антивирусных и специализированных инструментов
Для дополнительной проверки можно использовать инструменты вроде ClamAV и rkhunter.Например, после установки ClamAV можно выполнить проверку:
clamscan -r /path/to/checkПри этом антивирусная проверка не является гарантией того, что сервер безопасен. Отсутствие найденных угроз не исключает компрометацию, особенно если злоумышленник использует собственные скрипты или изменённые системные компоненты.
Поэтому автоматические сканеры следует использовать как дополнительный инструмент, а не как единственный способ диагностики.
14. Как отличить вредоносный процесс от обычного
Не каждый неизвестный процесс является вредоносным.Перед тем как завершать процесс, необходимо выяснить:
- Как называется процесс?
- От какого пользователя он запущен?
- Где находится исполняемый файл?
- Кто является родительским процессом?
- Какие аргументы переданы при запуске?
- Какие файлы использует процесс?
- Какие сетевые соединения он устанавливает?
- Как процесс запускается после перезагрузки?
15. Что делать при обнаружении подозрительного процесса
Не рекомендуется сразу выполнять:kill -9 PIDСначала стоит сохранить информацию о процессе для дальнейшего анализа:
ps auxww
readlink -f /proc/PID/exe
tr '\0' ' ' < /proc/PID/cmdline
ss -tpnПосле этого необходимо определить механизм запуска процесса и проверить, не сохранился ли другой компонент вредоносного ПО.
Если есть основания считать сервер скомпрометированным, наиболее безопасным вариантом может быть переустановка операционной системы из доверенного источника с последующим восстановлением только проверенных данных.
Простое удаление одного процесса не гарантирует устранение компрометации.
Как предотвратить появление вредоносных процессов
Для снижения риска компрометации Linux-сервера рекомендуется:- регулярно устанавливать обновления безопасности;
- использовать SSH-ключи вместо паролей;
- отключать ненужные сервисы;
- ограничивать доступ к административным портам через firewall;
- использовать принцип минимальных привилегий;
- не запускать приложения от root без необходимости;
- контролировать установленные пакеты и службы;
- регулярно проверять SSH-доступ;
- следить за CPU, RAM, диском и сетевым трафиком;
- хранить резервные копии отдельно от сервера.
Заключение
Проверка Linux-сервера на вредоносные процессы не сводится к запуску антивируса. Сначала необходимо определить, какие процессы работают на сервере, какие ресурсы они используют и какие сетевые соединения устанавливают. Затем следует проверить пользователей, SSH-ключи, cron-задачи, systemd-сервисы и системные журналы.Высокая нагрузка CPU сама по себе не является доказательством заражения. Гораздо важнее совокупность признаков: неизвестный процесс, подозрительное расположение файла, необычные сетевые соединения, неизвестная задача автоматического запуска и несанкционированный доступ к серверу.