Руководства по безопасности
Как проверить, не взломан ли ваш сайт или сервер: пошаговые проверки для виртуального хостинга, WordPress и VPS и что делать в первую очередь, если вы что-то нашли
Как проверить свой сайт или сервер на вторжение с учётом среды: виртуальный хостинг, WordPress, Linux VPS и Google Search Console. Администраторы, wp core verify-checksums, история входов, authorized_keys, cron и прослушиваемые порты, а также порядок действий, если вы что-то нашли.
Для кого: для частных лиц и небольших компаний с сайтом на виртуальном хостинге, WordPress или VPS, которые сейчас задаются вопросом «меня взломали?». Руководство показывает, как самостоятельно проверить собственный сайт и сервер. Оно основано на официальной документации WordPress.org, WP-CLI, Google Search Central, страницах руководства (man) каждой команды, материалах японских IPA и JPCERT/CC, а также GDPR. Техники атак здесь не рассматриваются.
Если что-то не так прямо сейчас, сделайте только это
Прежде чем удалять или перезаписывать какие-либо файлы сайта, сделайте копию журналов и всего сайта (файлов и базы данных). Когда они исчезнут, понять, как проник злоумышленник, уже не получится. Меняйте пароли с другого, чистого устройства, проверенного антивирусом.
Признаки, при которых стоит заподозрить вторжение
Если что-то из этого подходит, переходите к проверкам по средам ниже. В «FAQ My site was hacked» на WordPress.org тоже перечислены явные признаки взлома, в том числе попадание в чёрный список поисковых систем, отключение сайта хостингом и несанкционированные действия, например создание новых пользователей.
| Признак | Где вы это заметите |
|---|---|
| Search Console показывает проблему безопасности, или Google присылает письмо | Google Search Console |
| В результатах поиска написано «This site may be hacked» (Этот сайт может быть взломан) | Поиск Google |
| Браузеры предупреждают, что сайт опасен, или антивирус посетителей его блокирует | Сообщения от посетителей |
| Хостинг предупреждает о дефейсе, спаме или избыточной нагрузке или приостанавливает сайт | Письмо от хостинга |
| Администраторы, которых вы не создавали | Консоль WordPress |
| В поиске появились страницы, которых вы не создавали (лекарства, брендовые товары, массовые страницы на японском) | Поиск site: |
| Перенаправление на другой сайт только на телефоне или только при переходе из поиска | Проверка на телефоне |
| Ваш сервер рассылает спам или упирается в лимит отправки | Уведомления хостинга, вернувшиеся письма |
| Без причины растут нагрузка на CPU или трафик | Мониторинг сервера |
«У меня на компьютере всё нормально» ничего не доказывает
Google (web.dev) поясняет, что некоторые взломанные сайты показывают разное содержимое разным типам пользователей (клоакинг): у вас страница может выглядеть пустой, а Google видит на ней спамные слова и ссылки. В блоге Google Search Central также отмечается, что взломанный сайт может перенаправлять на спамные домены только мобильных пользователей, и для проверки рекомендуется открыть свой сайт из результатов поиска Google на смартфоне.
Проверки по средам
Проверьте строки, которые соответствуют вашей конфигурации. Если у вас WordPress на виртуальном хостинге, подходят обе первые строки.
| Среда | Где смотреть | Что искать |
|---|---|---|
| Виртуальный хостинг | Журналы доступа и ошибок в панели управления, файловый менеджер, история отправки почты | Запросы к незнакомым URL или потоки POST-запросов, недавно изменённые файлы, незнакомые .htaccess или PHP-файлы, всплеск исходящей почты |
| WordPress | «All Users» (Все пользователи) и «Installed Plugins» (Установленные плагины) в консоли, WP-CLI | Незнакомые администраторы, плагины или темы, которые вы не устанавливали, изменённые файлы ядра |
| VPS (Linux) | Журналы SSH, authorized_keys, cron, список пользователей, прослушиваемые порты, проверка пакетов | Входы из неизвестных источников, незнакомые открытые ключи, незнакомые запланированные задания, новые пользователи, незнакомые программы на прослушивании |
| Google Search Console | «Security issues» (Проблемы безопасности), инструмент проверки URL, поиск site: | Проблемы и примеры URL, найденные Google, и то, что Google видит на странице |
Виртуальный хостинг
Даже без SSH панель управления обычно позволяет проверить эти три вещи (названия у разных хостингов отличаются).
- Откройте публичную папку в файловом менеджере и отсортируйте по дате изменения. Обращайте внимание на файлы, изменённые в дни, когда вы их не трогали, PHP-файлы с бессмысленными именами и PHP-файлы в папках для изображений, например
uploads - Скачайте журналы доступа и ошибок и проверьте, откуда и когда приходили запросы к админке (на WordPress —
/wp-login.phpи/wp-admin/), а также запросы к незнакомым URL - Если видны счётчики или история отправки почты, поищите большие объёмы, которые вы не отправляли
Проверьте и .htaccess. WordPress.org называет .htaccess одним из файлов, которые чаще всего изменяют и используют во вред независимо от типа заражения, и отмечает, что index.php, header.php и footer.php — ценные цели, потому что влияют на каждый запрос страницы.
WordPress
В консоли проверьте два места.
- «Users» (Пользователи) → «All Users» (Все пользователи): есть ли кто-то с ролью «Administrator» (Администратор), кого вы не создавали?
- «Plugins» (Плагины) → «Installed Plugins» (Установленные): есть ли плагин, который вы не устанавливали? Так же проверьте «Appearance» (Внешний вид) → «Themes» (Темы)
Если на сервере доступен WP-CLI (официальный инструмент командной строки для WordPress), файлы можно автоматически сверить с официальным выпуском.
# Check WordPress core files against WordPress.org checksums
wp core verify-checksums
# Also warn about non-WordPress files in the WordPress root directory
wp core verify-checksums --include-root
# Verify plugins distributed on WordPress.org
wp plugin verify-checksums --all
# List administrator accounts with their registration dates
wp user list --role=administratorПри чистом результате выводится Success: WordPress installation verifies against checksums. Для несовпадающего файла выводится Warning: File doesn't verify against checksum: и его имя. Проверка плагинов сравнивает их с контрольными суммами WordPress.org, поэтому премиум-плагины и собственные темы так проверить нельзя. Для них заново скачайте ту же версию у разработчика и сравните.
VPS (Linux)
На VPS ищите то, что злоумышленник оставляет, чтобы вернуться: открытые ключи, запланированные задания, новых пользователей и программы, ожидающие подключений. Выполняйте всё это на своём сервере с правами администратора.
# SSH login records (the unit is ssh on Debian/Ubuntu, sshd on RHEL-family)
sudo journalctl -u ssh --since "2026-10-01"
# Recent logins (on Debian 13, use wtmpdb last instead; install the wtmpdb and libpam-wtmpdb packages)
last -a
# Each user's last login (on Debian 13, use lastlog2 instead; install the lastlog2 and libpam-lastlog2 packages)
lastlog
# SSH public keys: the current user's (other users: /home/*/.ssh/authorized_keys) and root's
cat ~/.ssh/authorized_keys
sudo cat /root/.ssh/authorized_keys
# Scheduled jobs (per user and system-wide)
crontab -l
sudo crontab -l -u root
sudo cat /etc/crontab
sudo ls -la /etc/cron.d
# Users, and the group with admin rights (wheel on RHEL-family)
getent passwd
getent group sudo
# Listening TCP ports and the programs behind them
sudo ss -tlnp
# Files in the web root whose contents changed in the last 7 days
sudo find /var/www -type f -mtime -7
# Have package files changed since they were installed?
sudo debsums -s # Debian/Ubuntu (needs the debsums package)
sudo rpm -Va # RHEL-familyКак читать результаты:
- В выводе
journalctlпроверьте IP-адреса источников успешных входов (Accepted): нет ли среди них чужих. Если ничего не выводится, имя юнита может отличаться; узнайте имя службы SSH командойsystemctl list-units --type=service - В
authorized_keysищите открытые ключи, которые вы не добавляли. Управление ключами, которыми можно войти на сервер, разобрано в статье минимальные привилегии для SSH-ключей - В cron ищите строки, которые скачивают и запускают что-то с незнакомого URL
- В списке
ssищите программы на прослушивании, которые вы не запускали debsums -sсообщает только о проблемных файлах;rpm -Vaпомечает изменённые файлы кодами, например размер (S), дайджест (5) и время изменения (T)
Не полагайтесь слишком сильно на журналы и вывод команд
find -mtime смотрит на время изменения файла, а его можно подделать. В руководстве debsums прямо сказано, что как средство безопасности он ограниченно полезен. Журналы исчезают по окончании срока хранения. А в Debian 13 команды last, lastb и lastlog больше не поставляются из-за проблемы 2038 года. Каждая проверка может дать свидетельство вторжения, но если вы ничего не нашли, это не доказывает, что всё чисто.
Google Search Console
Если сайт ещё не добавлен в Search Console, сначала добавьте его и подтвердите права владельца.
- В отчёте «Security issues» (Проблемы безопасности) посмотрите, указаны ли проблемы. Они делятся на три большие категории: «Hacked content» (Взломанный контент), «Malware and unwanted software» (Вредоносное и нежелательное ПО) и «Social engineering» (Социальная инженерия), обычно с примерами URL. Некоторые проблемы приходят без примеров URL; Google поясняет, что это не значит, что затронутых страниц нет
- Выполните в Google поиск
site:вашдомени поищите страницы, которых вы не создавали. Google сообщает, что так выводятся страницы вашего сайта, включая те, что мог добавить взломщик - Проверьте подозрительные страницы инструментом проверки URL, чтобы увидеть, как их видит Google
О терминах: следы уже произошедшей компрометации, как описанные выше, называют IOC (индикаторы компрометации). См. что такое IOC, а о распознавании атаки по поведению, пока она ещё идёт, — что такое IOA.
Что делать в первую очередь, если вы что-то нашли
Если перепутать порядок, вы либо уничтожите улики, либо восстановите сайт, оставив точку входа злоумышленника открытой. Действуйте сверху вниз.
1 — Изолировать
Отключите сайт или поставьте страницу обслуживания
2 — Сохранить улики
Скопируйте журналы, файлы и базу данных за пределы сервера
3 — Сменить все учётные данные
Консоль, FTP, SSH-ключи, база данных, API-ключи (с чистого устройства)
4 — Вернуться к чистому состоянию
Восстановите резервную копию, сделанную до вторжения, или пересоберите
5 — Закрыть точку входа
Обновите, удалите неиспользуемые плагины, найдите причину
6 — Проверка и уведомления
Запросите проверку в Search Console; сообщите об утечке данных, если это требуется
Изолировать: временно отключите сайт
Чтобы посетителям не отдавались вредоносные программы или мошеннические страницы, отключите сайт или покажите страницу обслуживания. На VPS ограничьте внешний трафик, сохранив доступ, нужный для расследования. На виртуальном хостинге свяжитесь с поддержкой и договоритесь, как отключить сайт и что они сделают со своей стороны. WordPress.org тоже советует связаться с хостингом, потому что на виртуальном хостинге взлом может затронуть не только ваш сайт.
Сохранить улики: копируйте до очистки
WordPress.org рекомендует сделать ещё один снимок среды перед началом очистки, даже если она заражена. Google тоже советует перед очисткой сделать резервную копию всего сайта и базы данных в место за пределами сервера. Журналы доступа, ошибок и SSH удаляются по расписанию, поэтому сохраните их в первую очередь. Подход из статьи основы резервного копирования применим напрямую.
Смените все учётные данные с чистого устройства
WordPress.org просит сменить пароли для всех точек доступа — FTP/SFTP, консоли WordPress, панели управления хостингом и MySQL — и сделать это для всех пользователей с доступом к среде, а не только для себя. Перегенерация секретных ключей (salts) в wp-config.php также завершает сеансы всех, кто ещё вошёл. На VPS создайте новые SSH-ключи и оставьте в authorized_keys только свои. Перевыпустите все сторонние API-ключи, хранящиеся в файлах вроде .env.
WordPress.org отмечает, что атаки часто начинаются с компьютера самого владельца, и рекомендует проверить и его. Вносите изменения с чистого, проверенного устройства и включите многофакторную аутентификацию.
Вернитесь к чистому состоянию: резервная копия до вторжения или пересборка
Если у вас есть резервная копия, которая точно сделана до вторжения, восстановитесь из неё. Если вы не знаете, когда проник злоумышленник, чем новее копия, тем выше вероятность, что она заражена. На WordPress замените wp-admin и wp-includes той же версией из официальной загрузки, а темы и плагины в wp-content заново получите из их источников. На VPS, где root мог быть скомпрометирован, собрать новый сервер и перенести на него только проверенные данные надёжнее, чем чистить.
Закройте точку входа, чтобы тем же путём не вернулись
Обновите ядро WordPress, плагины и темы и удалите всё, чем не пользуетесь. Частые причины — уязвимости в устаревших плагинах, повторно используемые пароли и файлы конфигурации, утёкшие из публичных папок. Google предупреждает: если не устранить уязвимость, через которую произошло заражение, сайт может быть заражён снова. Укрепление WordPress разобрано в статье безопасность WordPress, а где хранить файлы конфигурации — в статье не оставили ли вы секретный файл в публичном каталоге? WordPress.org также рекомендует ещё раз сменить пароли, когда сайт будет очищен.
Проверка и уведомления: Search Console и утёкшие персональные данные
Если Search Console указала проблемы, устраните их по всему сайту, затем выберите «Request Review» (Запросить проверку) в отчёте «Security issues» (Проблемы безопасности). В запросе опишите проблему, внесённые исправления и результат. Google сообщает, что проверка занимает от нескольких дней до нескольких недель и что вы получите письма о её приёме и завершении. Повторная отправка до решения может удлинить проверку.
Если могли утечь персональные данные, например отправки контактной формы или записи участников, см. раздел «Если могли утечь персональные данные» ниже.
Взгляд этого сайта: цель проверки не объявить себя чистым, а решить, насколько можно доверять
Частая ошибка небольших сайтов — найти один подозрительный файл, удалить его и считать дело сделанным. Но найденный файл — результат вторжения, а не точка входа. Если не закрыть точку входа и пути возврата, которые оставил злоумышленник (открытые ключи, администраторы, запланированные задания), всё повторится.
Поэтому мы предлагаем оценивать находки по тому, насколько ещё можно доверять системе. Если изменены только файлы ядра WordPress, замена ядра и смена учётных данных, скорее всего, всё вернут. Если на сервере мог быть захвачен root, нельзя доверять ни его журналам, ни выводу команд, поэтому пересоберите его. Если провести эту границу рано, вы не потратите дни на очистку, чтобы в итоге всё равно пересобирать.
Если могли утечь персональные данные
Если вы обрабатываете персональные данные как бизнес и могли утечь отправки контактной формы или записи участников, проверьте правила там, где вы работаете.
- ЕС и Великобритания (GDPR, статья 33): уведомите надзорный орган без неоправданной задержки и, если это возможно, в течение 72 часов с момента, когда вы узнали об утечке персональных данных, кроме случаев, когда она вряд ли создаёт риск для прав и свобод людей. Статья 34 описывает, когда нужно также сообщить пострадавшим
- Япония: Комиссия по защите персональной информации (PPC) перечисляет четыре категории, о которых нужно сообщать, — чувствительные данные, риск финансового ущерба, подозрение на неправомерную цель и более 1000 человек. Утечка в результате несанкционированного доступа приводится как пример категории неправомерной цели. Предварительный отчёт подаётся в течение 3–5 дней с момента обнаружения, окончательный — в течение 30 дней (60 дней для категории неправомерной цели), и пострадавших тоже нужно уведомить
- В других странах: уточните у национального органа по защите данных
Куда обратиться за помощью
| Куда | Чем могут помочь |
|---|---|
| Ваш хостинг или VPS-провайдер | Приостановить сайт, проверить журналы на стороне провайдера, оценить последствия для того же сервера |
| Запрос на реагирование на инцидент в JPCERT/CC (Япония) | Принимает сообщения об инцидентах от широкой публики; при дефейсе сайта связывается с администратором сайта и просит исправить. Сообщение через веб-форму или по электронной почте |
| Сообщение в IPA о компьютерных вирусах и несанкционированном доступе (Япония) | Принимает сообщения об ущербе от несанкционированного доступа, включая попытки без фактического вреда |
| Национальный CERT или орган по защите данных вашей страны | Сообщения об инцидентах и уведомления об утечках данных за пределами Японии |
| Форумы поддержки WordPress.org | Подробно опишите симптомы и получите помощь сообщества |
Источники (официальные)
- WordPress.org: FAQ My site was hacked — wordpress.org
- WordPress.org: Administration Screens — wordpress.org
- WP-CLI: wp core verify-checksums — developer.wordpress.org
- WP-CLI: wp plugin verify-checksums — developer.wordpress.org
- WP-CLI: wp user list — developer.wordpress.org
- Google: отчёт «Security issues» (Справка Search Console) — support.google.com
- Google: How do I know if my site was hacked? (web.dev) — web.dev
- Google: Fix the cloaked keywords and links hack (web.dev) — web.dev
- Блог Google Search Central: Detect and get rid of unwanted sneaky mobile redirects (октябрь 2015 г.) — developers.google.com
- Справка Google Поиска: Report a problem with Google Search (о пометке «This site may be hacked») — support.google.com
- Страницы руководства Debian: journalctl(1), last(1), lastlog(8), sshd(8), crontab(1), cron(8), ss(8), find(1), debsums(1) — manpages.debian.org
- RPM: rpm(8) (как читать вывод --verify) — rpm.org
- Примечания к выпуску Debian 13 (trixie): команды last, lastb и lastlog заменены — debian.org
- GDPR (Регламент (ЕС) 2016/679), статьи 33 и 34 — eur-lex.europa.eu
- Комиссия по защите персональной информации, Япония: обязательные отчёты об утечках и уведомление пострадавших (на японском) — ppc.go.jp
- Комиссия по защите персональной информации, Япония: реагирование на утечки данных (на японском) — ppc.go.jp
- JPCERT/CC: запрос на реагирование на инцидент (на японском) — jpcert.or.jp
- IPA: сообщения о компьютерных вирусах и несанкционированном доступе (на японском) — ipa.go.jp
Читать дальше
- Для личных аккаунтов: Как проверить, не заходил ли кто-то в ваш аккаунт
- Если взломан сам хостинг: Что делать клиентам, когда взломан ваш веб-хостинг (на английском; подготовка к тому, что ваши собственные настройки не предотвратят)
- Где лежат файлы: Не оставили ли вы секретный файл в публичном каталоге? / Как не выставить .env в интернет на виртуальном хостинге
- WordPress: Безопасность WordPress — справочник по укреплению в продакшене / частая точка входа: уязвимости загрузки файлов (на английском)
- Термины: Что такое IOC? / Что такое IOA? / Что такое бэкдор? (на английском) / Что такое вредоносное ПО?
- Восстановление: Основы резервного копирования
FAQ
QКак проверить, не взломан ли мой сайт?
Начните с отчёта «Security issues» (Проблемы безопасности) в Google Search Console и посмотрите, указаны ли там проблемы. Затем выполните в Google поиск site:вашдомен и поищите страницы, которых вы не создавали. Наконец, откройте свой сайт на смартфоне из результатов поиска Google и посмотрите, не перенаправляет ли вас куда-то ещё. Взломанный контент иногда делают так, чтобы он оставался невидимым, когда владелец заходит на сайт напрямую.
QКак проверить, не захвачен ли мой сайт на WordPress?
В консоли откройте «Users» (Пользователи) → «All Users» (Все пользователи) и поищите администраторов, которых вы не создавали, затем «Plugins» (Плагины) → «Installed Plugins» (Установленные) — нет ли плагинов, которые вы не устанавливали. Если есть WP-CLI, команда wp core verify-checksums сверяет файлы ядра WordPress с официальным выпуском. Плагины, распространяемые через WordPress.org, можно проверить командой wp plugin verify-checksums --all.
QСайт открывается нормально, но в результатах поиска написано, что он может быть взломан.
Возможно, используется клоакинг (показ разного содержимого разным посетителям). Взломанные страницы иногда показывают спам или перенаправления только поисковым системам или только тем, кто приходит с телефона из результатов поиска. Google сообщает, что пометка остаётся, пока владелец не устранит проблемы безопасности в Search Console и не запросит проверку. Посмотрите примеры URL в отчёте «Security issues» и с помощью инструмента проверки URL узнайте, что видит Google.
QУ меня виртуальный хостинг без SSH. Как проверить?
В файловом менеджере панели управления отсортируйте файлы по дате изменения, скачайте журналы доступа и ошибок и поищите запросы к незнакомым URL или входы в админку. На WordPress проверьте пользователей и плагины в консоли. Если сомневаетесь, обратитесь в поддержку хостинга. На виртуальном хостинге провайдер иногда может проверить последствия для всего сервера, включая других клиентов.
QЕсли я ничего не нашёл, значит, всё в порядке?
Нет. Время изменения файлов можно подделать, журналы исчезают по окончании срока хранения, а на сервере, где злоумышленник получил root, выводу собственных команд сервера уже нельзя доверять. Если есть внешние свидетельства, например предупреждение Search Console или уведомление от хостинга, считайте сайт скомпрометированным, даже если ничего не нашли, и планируйте смену учётных данных и пересборку.
QС моего сайта могли утечь персональные данные. Куда сообщать?
Зависит от того, где вы работаете. В Японии Комиссия по защите персональной информации приводит утечки в результате несанкционированного доступа как пример случая, о котором нужно сообщать: предварительный отчёт — в течение 3–5 дней с момента обнаружения, окончательный — в течение 30 дней (60 дней, если подозревается неправомерная цель). В ЕС и Великобритании GDPR требует уведомить надзорный орган в течение 72 часов, если это возможно, кроме случаев, когда утечка вряд ли создаёт риск для людей. Уточните требования органа по защите данных в своей стране.