Nightward
Монітор безпеки WordPress

Знайте, який плагін це зробив.

Nightward спостерігає за WordPress зсередини. Кожен вихідний запит, підроблена відповідь, новий адміністратор і змінений файл прив'язуються до файлу й рядка плагіна, який за це відповідає. Звіт приходить на пошту щовечора, а все критичне - в момент виявлення.

  • WordPress 6.2+
  • PHP 7.4+
  • Українська та англійська
  • Без акаунта і зовнішніх сервісів
КритичнийПерехоплення HTTP20:14

Відповіді для licensing.turbocache.example підробляє Turbo Cache Helper

Один і той самий callback підробив відповіді для 3 різних доменів: він може перехопити будь-який вихідний запит сайту.

Callback
{closure}
Розташування
wp-content/plugins/turbo-cache-helper/turbo-cache-helper.php:14
Підроблена відповідь
200 {"valid":true,"license":"valid"}
Підроблені домени
turbocache.example, wordpress.org, partner-stats.example
Надіслано на admin@maple.exampleТестовий плагін, реальний результат
Навіщо він

Плагіни безпеки кажуть, що щось не так. Nightward каже, хто.

Більшість інструментів безпеки WordPress дивляться на сайт ззовні: звіряють файли з відомим шкідливим кодом і блокують підозрілих відвідувачів. Це корисно, але рідко відповідає на питання, яке виникає, коли на сайті відбувається щось дивне.

Сканер сигнатур

каже, що файл схожий на відомий шкідливий код. Новий чи написаний під вас бекдор не схожий ні на що.

Файрвол

каже, що запит ззовні заблоковано. Що робить встановлений код усередині сайту, він не бачить.

Nightward

каже, який саме плагін чи тема що зробили, в якому файлі, на якому рядку й коли.

  • Який плагін надсилає адресу сайту на сервер, про який я ніколи не чув?
  • Хто створив цього адміністратора і з якого запиту?
  • Чому преміум-плагін показує дійсну ліцензію, яку я не купував?
  • Чи змінився файл плагіна без оновлення?
  • Звідки насправді завантажується це «оновлення»?
  • Чи є адміністратор, якого не видно в «Користувачах»?
Монітори

Десять моніторів, у кожного - файл і рядок

Монітори реального часу бачать, що робить код, поки завантажуються сторінки. Планові перевірки щогодини й щоночі дивляться на файли, користувачів і конфігурацію. Усе потрапляє в один журнал подій з п'ятьма рівнями серйозності.

Поки сайт працює

Вихідні запитиwp_remote_*

Кожен запит сайту, згрупований за хостом і плагіном, який його зробив. Сервіси вставок, тунелі, сервіси перехоплення запитів, динамічний DNS, Telegram-боти й вебхуки Discord позначаються окремо.

Перехоплення HTTPpre_http_request

Код, який сам відповідає на запит, і той так і не виходить за межі сервера. Називається конкретний callback, навіть коли кілька анонімних функцій висять на одному пріоритеті.

Чутливі хукиauthenticate · user_has_cap

Хто підключений до входу, прав доступу, списків користувачів і плагінів, оновлень і пошти. Нові callback і код, скомпільований через eval(), потрапляють у звіт.

Користувачі та праваuser_register · set_user_role

Адміністратори, створені кодом, вставлені прямим SQL або приховані зі списку користувачів. Зміна облікових даних адміна плагінами, нові паролі застосунків, входи з нових мереж.

Опціїsiteurl · default_role

Адреса сайту, e-mail адміністратора, роль за замовчуванням, реєстрація, права ролей, плагіни, активовані кодом. Опції, які записуються майже на кожному перегляді. Вага autoload.

Щогодини і щоночі

Цілісність файлівchecksums · snapshot

Ядро і плагіни з WordPress.org - за офіційними контрольними сумами. Преміум-плагіни й теми - за їхнім першим знімком: зміна без зміни версії потрапляє у звіт.

Виконувані файлиuploads · mu-plugins

Скрипти в uploads, PHP, схований у зображеннях, трюки з .htaccess і .user.ini, невідомі PHP-файли в wp-content, нові must-use плагіни.

Заплановані завданняwp-cron

Нові завдання, випадкові імена, PHP чи base64 в аргументах, завдання без обробника, що лишилися від видалених плагінів.

Канал оновленьupgrader_pre_download

Звідки приходять оновлення, що очікують, і ті, що завантажуються. Оновлення плагіна з WordPress.org з іншого сервера блокується.

Захищеністьloopback

Перевіряється ззовні: відкриті логи, .env і копії wp-config, виконання PHP в uploads (справжнім тестовим файлом), XML-RPC, перелік користувачів, заголовки.

Перехоплення

Конкретний callback, який підробив відповідь

Піратські плагіни самі відповідають на власні перевірки ліцензії, і запит не виходить з вашого сервера. Nightward ставить мітку після кожного callback на pre_http_request, тож знає, який саме підмінив відповідь.

  • Перевірки ліцензії та оновлень, на які відповіли локально, мають рівень «високий».
  • Підроблені відповіді WordPress.org - «високий»: інформація про оновлення може бути хибною.
  • Один callback, що підробляє три й більше доменів, - «критичний».
Деталі події Nightward: відповіді для api.wordpress.org підробляє плагін, з callback, файлом, рядком і підробленою відповіддю
Огляд Nightward: потрібна дія, список критичних знахідок
Користувачі та права

Адміністратори, яких не має бути

Адміністратор, створений на екрані «Користувачі», - звична річ. Створений плагіном під час анонімного запиту - ні. Nightward записує, хто це зробив і з якого файлу.

  • Адмінів, записаних напряму в базу, знаходить щогодинний аудит.
  • Адміни, прибрані фільтром зі списку користувачів, позначаються як приховані.
  • Паролі застосунків для адмінів потрапляють у звіт, бо вони обходять двофакторний вхід.
Цілісність файлів

Оновлення змінює версію. Ін'єкція - ні.

У преміум-плагінів немає публічних контрольних сум, тому Nightward робить знімок під час першого сканування. Далі файл, який змінився при тому самому номері версії, потрапляє у звіт. Файли з відомими ознаками шкідливого коду на кшталт eval(base64_decode( отримують рівень «критичний».

Сканування йде невеликими порціями через WP-Cron, тому завершується навіть на шаред-хостингу без виходу за ліміти часу.

Екран «Хуки й Cron» зі сторонніми callback на хуках автентифікації та оновлень
Звіти

Звіт о 20:00 або в будь-який інший час

Щоденний звіт показує, що сталося від попереднього, найсерйозніше першим. Критичні знахідки його не чекають: вони надсилаються в момент виявлення.

Лист щоденного звіту з лічильниками і знахідками
Щоденний звіт
Миттєве сповіщення про підроблені HTTP-відповіді
Миттєве сповіщення
Ваша година, ваш часовий поясОберіть будь-який час. Розклад іде за часовим поясом сайту, з урахуванням переходу на літній час.
«Усе чисто» тежСпокійний вечір теж отримує короткий звіт. Якщо він перестав приходити, щось перестало працювати.
Без лавини сповіщеньКількість миттєвих сповіщень на годину обмежена. Решта збирається в один лист.
Мовою читачаЗвіт пишеться мовою отримувача в WordPress: українською або англійською.
Адмінка

Один екран на одне питання

Усі хости, з якими сайт зв'язувався за 30 днів, який плагін до них звертався, як часто і скільки відповідей підроблено. Довіряйте хосту одним кліком.

Екран «Мережа» з адресами і кількістю підроблених відповідей
Межі

Чого Nightward не бачить

Монітор, якому довіряють, має чесно казати, де закінчується його огляд. Ці межі перелічені й у самому плагіні.

«Сирі» мережеві викликиЗапити через cURL, сокети чи file_get_contents() оминають HTTP API WordPress.
Код, що стартує ранішеwp-config.php, drop-in файли на кшталт db.php і must-use плагіни, що завантажуються раніше за завантажувач Nightward.
Прямі зміни в базіЇх знаходить щогодинний аудит, не в момент зміни і без файлу, який її зробив.
Перший знімокПреміум-плагіни вважаються довіреними в стані першого сканування. Попередні зміни не виявляються.
Це не файрволNightward виявляє і повідомляє. Той, хто має доступ до сервера, може вимкнути будь-який плагін, тому відсутній щоденний звіт - уже тривога.
Питання

Часті питання

Чи можна використовувати разом з Wordfence, Sucuri чи MalCare?

Так. Nightward не блокує трафік і не шукає сигнатури, тож з ними не конкурує. Він покриває те, чого вони не бачать: поведінку встановленого коду з прив'язкою до файлу. На тестовому сайті з Sucuri, MalCare і Atlant Security усі чотири працювали поруч.

Чи сповільнює він сайт?

Моніторинг на кожному запиті - це кілька перевірок у пам'яті. Трасування стеку робиться лише тоді, коли сайт робить вихідний HTTP-запит. Перевірка хуків порівнює коротку сигнатуру з однієї autoload-опції, а записи опцій перевіряються вибірково на одному перегляді з двадцяти. Сканування файлів, аудити й перевірки захищеності йдуть у фоні через WP-Cron.

Чи надсилає Nightward мої дані кудись?

Ні. Немає акаунта, телеметрії чи зовнішнього сервісу. Єдині вихідні запити Nightward - до сервісів контрольних сум WordPress.org і до вашого ж сайту для перевірок захищеності. Звіти надсилаються через wp_mail() вашого сайту.

Що відбувається в першу добу?

Перші 24 години Nightward вивчає, що для вашого сайту норма: з якими хостами зв'язуються плагіни, які хуки вони використовують, які є заплановані завдання. Це записується мовчки. Критичні знахідки надходять з першої хвилини.

Я сам змінив файл плагіна. Про нього нагадуватимуть вічно?

Ні. Перегляньте знахідку й натисніть «Прийняти поточні файли» для цього пакета на екрані «Цілісність». Поточні файли стануть новим еталоном.

Чому його немає на WordPress.org?

Nightward розповсюджується з цього сайту. Нові версії публікуються тут, список змін є в документації, а вихідний код - на GitHub.

Чи працює він на мультисайті?

Nightward зроблений і протестований для окремих сайтів. Його можна активувати на всю мережу, але звіти й налаштування поки не розділені за сайтами.

Ігор Музиченко
Про розробника

Nightward створив Ігор Музиченко, WordPress-розробник з України з понад десятирічним досвідом роботи з клієнтськими сайтами на Bricks, ACF, WooCommerce і Polylang.

Плагін виріс з регулярних аудитів плагінів з неофіційних джерел, де питання ніколи не звучало як «чи це шкідливий файл?», а як «що цей код робить на живому сайті?». Більше - на .

Встановіть сьогодні ввечері. Прочитайте перший звіт завтра.

Завантажте zip у розділі Плагіни → Додати → Завантажити плагін і активуйте.

Версія 1.0.2 · вийшла 28 вересня 2026 · WordPress 6.2+ · PHP 7.4+