Я обновился. Что дальше?
Если Вы обновили плагин или свою CMS после получения одного из моих уведомлений о безопасности, это хорошо. Это был главный шаг, и для многих сайтов он единственный необходимый.
Обновление закрывает брешь с этого момента. Оно не может сказать Вам, нашёл ли кто-нибудь эту брешь до того, как Вы её закрыли. Эта страница представляет собой практическую самопроверку примерно на 30 минут, которая поможет Вам ответить на этот вопрос самостоятельно. Она написана для владельцев сайтов, у которых нет ни подготовки в области безопасности, ни бюджета на неё. Это общие рекомендации, а не вывод о Вашем сайте: снаружи я вижу только то, о какой версии программного обеспечения сообщает сайт, и ничего больше.
Шаг 1: Выясните, что именно позволяла сделать уязвимость
Не каждая уязвимость заслуживает одинаковой реакции. Найдите своё уведомление на странице уведомлений и посмотрите, к какому классу оно относится (каждая страница уведомления указывает это вверху):
- Захват учётной записи или выполнение кода (злоумышленник мог получить права администратора или запустить свой код): пройдите весь приведённый ниже список.
- Чтение данных (злоумышленник мог прочитать сведения из Вашей базы данных, но не изменить сайт): сосредоточьтесь на шагах 2 и 5. Вопрос в том, какие данные там хранились, а не в том, был ли изменён сайт.
- Более узкие проблемы (уязвимости, требующие определённой конфигурации, или затрагивающие только административный экран): страница уведомления для Вашего компонента сообщает, что именно стоит проверить, если вообще стоит. Часто достаточно одного обновления.
Шаг 2: Определите окно уязвимости
Период, который имеет значение, ограничен двумя датами:
- Когда брешь открылась на Вашем сайте. Обычно это день, когда Вы установили затронутую версию. Если Вы его не знаете, разумной заменой будет дата бюллетеня CVE из уведомления (ссылка есть на каждой странице уведомления): с момента публикации о проблеме знали и злоумышленники.
- Когда Вы обновились. День, когда Вы её закрыли.
Всё изложенное ниже касается этого окна. Если оно короткое, скажем, Вы обновились в течение дня или двух после выхода бюллетеня, риск реален, но невелик. Если окно растянулось на месяцы, отнеситесь к списку проверок серьёзно.
Шаг 3: Проверьте, кто имеет доступ к Вашему сайту
Злоумышленник, который проник внутрь, почти всегда оставляет себе путь обратно. Проверьте по порядку:
- Учётные записи администраторов. В WordPress: Users, затем фильтр по Administrator. В Joomla: Users, затем User Manager. Ищите любую учётную запись, которую Вы не создавали. Оговорка: некоторые уязвимости (например, в Simple Membership) позволяют злоумышленнику захватить существующую учётную запись вместо создания новой, поэтому одна эта проверка ничего не доказывает. Именно поэтому смена учётных данных из шага 4 важна даже тогда, когда список пользователей выглядит чистым.
- Недавно добавленные плагины, темы или расширения, которые Вы не устанавливали.
- Запланированные задачи (в WordPress их показывает плагин WP Crontrol; многие бэкдоры переустанавливают себя из запланированной задачи).
- Пароли приложений (WordPress: Users, Profile, Application Passwords), тихий способ сохранить доступ к API после смены пароля.
Шаг 4: Смените учётные данные
Если Ваше уведомление относилось к классу захвата учётной записи или выполнения кода, а окно уязвимости было больше нескольких дней, смените учётные данные, даже если шаг 3 ничего не выявил:
- Пароли всех учётных записей администраторов.
- Секретные ключи и соли в
wp-config.php(WordPress). Это завершит сеансы всех пользователей, включая злоумышленника с украденным сеансом; свежие значения выдаёт официальный генератор. В Joomla этому соответствует значение$secretв файлеconfiguration.php. - Пароли панели управления хостингом и FTP/SFTP, если они с кем-то общие или давние.
Это займёт десять минут и закроет дверь для украденных сеансов и подобранных хешей паролей независимо от того, был ли взлом.
Шаг 5: Просканируйте и проверьте файлы
- Запустите проверку на вредоносный код от Вашего хостинг-провайдера, если она есть в панели управления (у большинства виртуальных хостингов есть), либо воспользуйтесь надёжным бесплатным сканером. Для WordPress бесплатная проверка Wordfence сравнивает Ваши файлы с официальными копиями.
- Посмотрите на недавно изменённые файлы в период с начала Вашего окна уязвимости и позже, особенно на файлы PHP в каталогах загрузок. Там PHP не должно быть в принципе.
- Если Ваш хостинг хранит журналы доступа, просмотрите этот период на предмет запросов к уязвимому компоненту с незнакомых Вам адресов. Отсутствие находок здесь мало о чём говорит, поскольку журналы ротируются, но находка решает дело.
Если самопроверка что-то выявила
Пока ничего не удаляйте. Сначала сделайте полную резервную копию, файлов и базы данных, чтобы произошедшее ещё можно было изучить. Затем, по возрастанию затрат:
- Ваш хостинг-провайдер. У большинства есть услуга по удалению вредоносного кода или они хотя бы подтвердят, что видят их собственные сканеры. Для большинства небольших сайтов это правильное первое обращение.
- Специалист. Если сайт работает с данными клиентов или платежами, либо проверка обнаружила бэкдор, стоит заплатить кому-то за установление того, к чему получили доступ; во многих странах законодательство о защите данных опирается именно на этот ответ.
- Радикальный вариант, который срабатывает всегда: восстановитесь из резервной копии, сделанной до начала окна уязвимости, либо переустановите CMS и плагины из официальных источников, сохранив только своё содержимое. Затем обновите и смените всё перечисленное выше.
Если Вы не уверены, на что смотрите, Вы можете просто ответить на письмо с уведомлением. Я читаю каждый ответ, и подсказать человеку верное направление это часть того, ради чего я вообще рассылаю эти уведомления. Я не продаю услуги по очистке сайтов, и эта страница не является рекламным предложением; см. политику раскрытия информации.
Если Вы обновились ещё до того, как пришло моё письмо
Логика та же: уведомление означает, что Ваш сайт недавно сообщал о затронутой версии, значит окно существовало, даже если сейчас оно закрыто. Шаги 2, 3 и 4 по-прежнему отвечают на важный вопрос.