Wordpress - sucuri-scanner - антивірусний плагін - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Published: 2026-08-18


Загальні відомості

Sucuri Security (технічний slug — sucuri-scanner, у спільноті частіше кажуть просто Sucuri Scanner) — безкоштовний антивірусний плагін для WordPress від компанії Sucuri Inc., яка тепер належить GoDaddy. У каталозі WordPress.org він зареєстрований під повною назвою «Sucuri Security — Auditing, Malware Scanner and Security Hardening» і позиціонується як комплексний захисний набір: журналювання подій, пошук шкідливого коду, перевірка цілісності файлів і набір засобів посилення захисту (hardening).

Станом на серпень 2026 року плагін працює на понад 600 000 сайтах, має 4,2 зірки з 5 (384 відгуки) і входить до сотні найпопулярніших плагінів каталогу. Остання стабільна версія — 2.7.4 (вийшла 7 липня 2026 року), а в офіційному репозиторії на GitHub гілка main уже містить 2.7.5 з одноразовими резервними кодами для двофакторної автентифікації, пошуком і фільтрами в журналі аудиту та експортом журналу у формат CSV.

Ліцензія — GPL v2. Мінімальні вимоги: WordPress 6.0+, PHP 7.4+. Плагін протестовано до WordPress 7.0. Цікава особливість: преміальні функції (сканування вразливостей ядра, PHP, плагінів і тем, темна тема) не потребують окремого встановлення — вони активуються після введення ключа API хмарного фаєрволу Sucuri (WAF).

Історія розвитку

Плагін дебютував у каталозі WordPress.org 18 листопада 2011 року. З того часу він пройшов кілька етапів:

  • 2011–2013 (1.1–1.5) — перші публічні версії: сканування сайту, «одноклікове посилення захисту», перевірка цілісності WordPress, журнал останніх входів, підтримка IPv6.
  • 2014 (1.6) — нова панель керування, інтеграція з віддаленим сканером SiteCheck, сторінка «Системна інформація».
  • 2015–2016 (1.7) — становлення системи аудиту: журнал подій, обробка невдалих входів, звіти про brute-force атаки, черги журналів, режим зворотного проксі.
  • 2017–2021 (1.8) — наймасштабніший період: повний редизайн інтерфейсу, перенесення налаштувань з бази даних у файл, інтернаціоналізація, підтримка PHP 8, перехід власності до GoDaddy (1.8.29), відключення залежності від API wordpress.sucuri.net (1.8.37), автоматичне оновлення секретних ключів, розділ «Рекомендації з безпеки WordPress».
  • 2022 (1.9) — керування заголовками Cache-Control, CSP, CORS, фільтри в журналі аудиту.
  • 2023–2024 (2.0–2.4) — сканери вразливостей ядра, PHP, плагінів і тем; темна тема; попередження про невідповідність домену WAF.
  • 2024 (2.5) — вбудована двофакторна автентифікація (TOTP) з QR-кодами.
  • 2025 (2.6–2.7) — нова бібліотека прав, шифрування ключа WAF алгоритмом AES-256-GCM, виправлення за результатами Plugin Check, явна карта AJAX-диспетчера.
  • 2025–2026 (2.7.1–2.7.4) — виправлення шифрування, пагінація сторінки 2FA для великих сайтів, пошук користувачів, вимкнення XML-RPC однією кнопкою, маскування ключів у журналі аудиту, виправлення фатальної помилки PHP 8.
  • 2.7.5 (у розробці) — резервні коди 2FA, пошук/фільтри/CSV журналу аудиту, виправлення порожнього журналу на неангломовних сайтах.

Варто окремо зазначити: у версії 1.8.37 розробники вимкнули публічний API wordpress.sucuri.net. Відтоді для хмарного аудиту власник сайту мусить сам визначити константу

SUCURISCAN_API_URL

у файлі wp-config.php. Тож «з коробки» сучасні версії працюють суто локально.

Вимоги та встановлення

Системні вимоги

  • WordPress 6.0+ (перевірено до 7.0);
  • PHP 7.4+;
  • права адміністратора;
  • розширення openssl (бажано) для шифрування ключа WAF;
  • системна команда
    diff
    (опціонально, для утиліти порівняння файлів ядра).

Кроки встановлення

Усе стандартно: «Плагіни → Додати новий» у консолі WordPress, пошук за словом «sucuri», встановлення варіанта «By Sucuri Inc.». Після активації в бічному меню з'являється розділ із логотипом Sucuri. Для хмарного моніторингу подій натискають «Generate API Key» — плагін створить унікальний ключ аутентифікації сайту. Без ключа плагін функціонує повністю локально.

Корисні константи wp-config.php

// перенесення сховища даних в іншу директорію
define('SUCURI_DATA_STORAGE', '/path/to/custom/storage');
// власний API-сервіс аудиту
define('SUCURISCAN_API_URL', 'https://your-api.example.com/');
// налагоджувальні режими
define('SUCURISCAN_THROW_EXCEPTIONS', true);
define('SUCURISCAN_NO_API_HANDLE', true);
define('SUCURI_CLEAR_CACHE_ON_PUBLISH', true);

Внутрішня будова

Точка входу

Єдина точка входу — файл

sucuri.php

. Його логіка жорстко регламентована:

  1. спершу визначається guard-константа
    SUCURISCAN_INIT
    — кожен файл із
    src/
    перевіряє її і відповідає кодом 403 Forbidden на прямий запит;
  2. перевіряються залежності WordPress (wp_die, add_action, wp_remote_get, wp_remote_post тощо);
  3. оголошуються константи плагіна;
  4. підключаються ~35 бібліотек із
    src/
    ;
  5. реєструються хуки деактивації та видалення.

Основні константи

Ключові константи плагіна
Константа Значення Призначення
SUCURISCAN
sucuriscan Ідентифікатор і префікс опцій
SUCURISCAN_VERSION
2.7.5 Версія
SUCURISCAN_API_VERSION
v1 Версія API аудиту
SUCURISCAN_CLOUDPROXY_API
https://waf.sucuri.net/api API Sucuri Firewall
SUCURISCAN_CLOUDPROXY_API_VERSION
v2 Версія API WAF
SUCURISCAN_SCANNER_FREQUENCY
10800 Інтервал сканування файлів (сек)
SUCURISCAN_SITECHECK_LIFETIME
21600 Час життя кешу SiteCheck (6 год)
SUCURISCAN_MAX_REQUEST_TIMEOUT
5 Таймаут запитів до API (сек)
SUCURISCAN_AUDITLOGS_PER_PAGE
25 Записів аудиту на сторінку

Ієрархія класів

Код написано в процедурно-класовому стилі PHP 7.4 без просторів імен. Усі класи статичні й утворюють ланцюжок успадкування: SucuriScan (база: шляхи, визначення IP, валідація) → SucuriScanRequest (санітизація запитів) → SucuriScanOption (зберігання налаштувань, шифрування) → SucuriScanAPI (зовнішні API) → SucuriScanSiteCheck / SucuriScanFirewall / SucuriScanMail (спеціалізовані обгортки) → SucuriScanEvent (події, черги, сповіщення) → SucuriScanHook (перехоплювачі подій WP).

Шаблонна система

Інтерфейс будується на файлових шаблонах

inc/tpl/*.html.tpl

(~120 файлів). Використовуються три типи токенів:

  • %%SUCURI.X%%
    — екранована підстановка;
  • %%%SUCURI.X%%%
    — сира підстановка;
  • {{Текст}}
    — локалізований рядок (лише при локалі, відмінній від en_US).

Усі AJAX-запити йдуть на admin-ajax.php з параметрами action=sucuriscan_ajax, nonce sucuriscan_page_nonce і змінною form_action, яку диспетчер зіставляє з явною картою з 26 обробників.

Ключові можливості

Журнал аудиту подій (Audit Logs)

Плагін перехоплює близько 45 подій WordPress і записує їх із рівнями серйозності Debug, Notice, Info, Warning, Error, Critical. Охоплено: входи (успішні та невдалі), відновлення паролів, реєстрацію й видалення користувачів, зміни профілів; публікацію, редагування, видалення й переходи статусів записів; життєвий цикл плагінів і тем; віджети, категорії, посилання, вкладення; оновлення ядра; зміну налаштувань.

Принципово важливо: журнал не зберігається в базі даних WordPress. Події накопичуються у файловій черзі auditqueue і пачками надсилаються на віддалений API. Перед записом конфіденційні дані маскуються регулярними виразами — значення полів password|passwd|pwd|secret|token|api_key|access_key|private_key|client_secret|authorization|cookie|salt замінюються на [redacted].

Сторінка журналу («Events Reporting») підтримує фільтри за часом, типами подій, користувачами, плагінами, темами, пошук (до 200 символів), пагінацію та кнопку відправлення черги. У 2.7.5 з'явився CSV-експорт (7 колонок) із захистом від формульних ін'єкцій: значення, що починаються з =, +, -, @, |, %, доповнюються апострофом.

Перевірка цілісності файлів ядра

Інструмент порівнює локальні файли з офіційними контрольними сумами:

  • стандартно —
    https://api.wordpress.org/core/checksums/1.0/?version={v}&locale={l}
    (MD5);
  • за налаштування checksum_api — репозиторій GitHub (SHA-1 для git-blob).

Скануються ABSPATH, wp-admin, wp-includes. Результати групуються: added, removed, modified, stable; для кожного файла вказується можливість автоматичного відновлення (перевірка права на запис). Передбачено гнучке ігнорування: статичні імена (php.ini, .htaccess, wp-config.php, readme.html), регулярні вирази (файли sucuri_*.php, дампи БД, зображення, локалізації, верифікаційні файли Google/Pinterest) і користувацький список «позначених як виправлені» (ключ — md5 шляху).

Утиліта Diff завантажує оригінал із

https://core.svn.wordpress.org/tags/{version}/{file}

і виконує системну команду diff -u --. Відновлення файлів захищено від path-traversal функцією resolveIntegrityPath — саме це виправлення з'явилося у 2.7.4 після знахідки CVE-2026-73033.

Віддалене сканування (SiteCheck)

Інтеграція з безкоштовним сканером Sucuri SiteCheck:

  • запит на
    https://sitecheck.sucuri.net/
    (json=1, fromwp=2, таймаут 60 с);
  • кешування результату на 6 годин;
  • примусове оновлення — параметр sucuriscan_sitecheck_refresh=true.

Сканер повертає дані про шкідливий код (тип загрози, заражений URL, документація), статуси блок-списків (Sucuri Labs, Google Safe Browsing, Norton, AVG, Phish Tank, ESET, McAfee, Yandex, SpamHaus, Bitdefender), рекомендації та статистику посилань, iframe і скриптів. Сканування імітує звичайного відвідувача, тож виявляє «прихований» шкідливий код.

Моніторинг блок-списків

Окрема цінність — контроль занесення сайту до блок-списків. Потрапляння в Google Safe Browsing, наприклад, позначає сайт у видачі та браузерах, що безпосередньо б'є по репутації.

Посилення захисту (Hardening)

Розділ «Hardening & Prevention» пропонує 13 опцій:

Опції посилення захисту
Опція Призначення
Firewall Статус підключення Sucuri Firewall
WPVersion Актуальність версії WordPress
RemoveGenerator Видалення мета-тега генератора (незворотно)
NginxPHPFPM Довідкова опція для nginx
WPUploads Блокування PHP у /wp-content/uploads
WPContent Блокування PHP у /wp-content
WPIncludes Блокування PHP у /wp-includes (з винятками wp-tinymce.php і ms-files.php)
Readme Видалення readme.html
AdminUser Перевірка акаунта з логіном «admin»
FileEditor Константа DISALLOW_FILE_EDIT у wp-config.php
SecKeyUpdater Автооновлення секретних ключів за розкладом
XMLRPC Повне вимкнення XML-RPC (із попередженням про Jetpack)
AllowPHPFiles Білий список окремих PHP-файлів у заблокованих директоріях

Блокування PHP реалізується через .htaccess із сумісністю з Apache 2.2/2.4:

<FilesMatch "\.(?i:php)$">
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
</FilesMatch>

Плагін коректно прибирає власні правила (зокрема легасі-правила старих версій) і не працює з .htaccess на серверах nginx та IIS.

Пост-хак інструменти

Розділ відновлення після компрометації містить чотири кроки:

  • Оновлення секретних ключів — нові ключі з
    https://api.wordpress.org/secret-key/1.1/salt/
    , перезапис блоку define() у wp-config.php із LOCK_EX;
  • Скидання паролів — генерація 15-символьного пароля, reset-ключ, лист користувачу;
  • Перевстановлення плагінів — резервна копія директорії, перевстановлення через Plugin_Upgrader, відкат за збою;
  • Доступні оновлення — зведення оновлень плагінів і тем, надсилання поштою.

Журнали входів (Last Logins)

Розділ показує: усі користувачі (пагінація по 25), адміністратори (останні 5 входів із прапорами країн), невдалі спроби та «зараз в мережі» (transient, оновлення кожні 15 хв, життя 30 хв). Невдалі входи зберігаються у файлах failedlogins та oldfailedlogins; після перевищення порога (30 спроб на годину) надсилається звіт про brute-force.

Де зберігаються дані

Головний принцип плагіна — відмова від бази даних WordPress для власних даних:

  • корінь сховища:
    wp-content/uploads/sucuri/
    (змінюється константою SUCURI_DATA_STORAGE);
  • кожен файл —
    sucuri-<ім'я>.php
    із PHP-guard
    <?php exit(0); ?>
    ;
  • налаштування — файл sucuri-settings.php: один рядок JSON після guard-рядка;
  • ключі сховищ — лише символи [0-9a-zA-Z_].

Використовувані сховища: sitecheck, auditqueue, auditlogs, trustip, integrity, ignorescanning, vulnerabilities, plugindata, lastlogins, failedlogins, oldfailedlogins, hookdata.

Шифрування секретів: ключ WAF (формат k/s — дві 32-символьні hex-стрічки) зберігається в опції cloudproxy_apikey у зашифрованому вигляді — AES-256-GCM із 12-байтовим випадковим IV (поля iv/tag/ct у base64). Ключ шифрування похідний від солей, які плагін записує у wp-config.php (SUCURI_PLUG_KEY / SUCURI_PLUG_SALT), а ті, своєю чергою, виводяться з wp_salt('auth'). Підтримується міграція легасі-формату v1 у v2; без openssl або при недоступному для запису wp-config.php активується режим зберігання без шифрування (флаг no_salt_encryption).

Налаштування

Сторінка налаштувань має п'ять вкладок:

Вкладки налаштувань
Вкладка Зміст
General Settings Сховище даних, Self-Hosting (експорт логів у власний файл), Reverse Proxy, визначення IP, часовий пояс, імпорт/експорт, скидання опцій
Scanner Розклад задач (cron), утиліта Diff, кеш цілісності, ігноровані директорії
Alerts Отримувачі, тема листа, ліміт листів на годину (5–160 або unlimited), поріг brute-force (30–480/год), перемикачі 25 типів подій, ігноровані типи записів, довірені IP
API Service Communication Статус сервісу, проксі, API контрольних сум, цільовий URL SiteCheck
Website Info Відомості про сайт, вміст .htaccess

Довірені IP зберігаються в сховищі trustip (ключ — md5 адреси), підтримують CIDR /8, /16, /24 і виключають події з цих адрес із відправлення на сервіс. Імпорт/експорт виконується за суворим білим списком із 35 опцій — ключі API свідомо не експортуються. Скидання опцій вимагає підтвердження й деактивує плагін.

Керування HTTP-заголовками

Через хук send_headers плагін може керувати трьома групами заголовків:

  • Cache-Control — режими disabled/static/occasional/frequent/busy/custom; для 13 типів сторінок налаштовуються max-age, s-maxage, stale-if-error, stale-while-revalidate, множники пагінації та «старіння». Пресет static задає max-age 604800;
  • CSP (Content-Security-Policy) — лише режим report-only, щоб не ламати сайт;
  • CORS — режими disabled/enabled.

Для WooCommerce у таблиці з'являються додаткові рядки (товари та категорії).

Двофакторна автентифікація (2FA)

Із версії 2.5 плагін має власну реалізацію 2FA на основі TOTP (RFC 6238):

  • HMAC-SHA1, 6 цифр, крок 30 секунд, вікно допуску ±2 тики, порівняння через hash_equals;
  • секрет (160 біт, base32) генерується random_bytes і зберігається в метаданих користувача;
  • QR-код рендериться на клієнті вбудованою бібліотекою qrcode-generator (MIT, вендорена копія — через побоювання компрометації npm-пакетів);
  • після логіну користувач отримує transient-токен (600 секунд) і переходить на сторінку введення коду;
  • захист від повторного використання — запам'ятовування останнього успішного тику;
  • ліміти спроб: 5 для TOTP, 3 для резервних кодів — перевищення знищує сесію;
  • політика: disabled / all_users / selected_users; списки понад 25 000 користувачів вимикають політику (fail-closed).

У 2.7.5 додано одноразові резервні коди: 10 кодів по 8 символів з алфавіту 23456789ABCDEFGHJKMNPQRSTUVWXYZ (без схожих 0/O/1/I/L), формат XXXX-XXXX. Коди зберігаються лише як хеші wp_hash_password і витрачаються одноразово зі захистом від гонок (умовне оновлення метаданих). Про залишок ≤2 кодів надсилається попередження.

Інтеграція з фаєрволом Sucuri (WAF)

Інтеграція з хмарним Web Application Firewall (платна послуга):

  • API:
    https://waf.sucuri.net/api
    (v2);
  • операції: show_settings, audit_trails, blacklist_ip / delete_blacklist_ip, clear_cache;
  • після введення ключа автоматично вмикається reverse proxy і заголовок HTTP_X_SUCURI_CLIENTIP;
  • очищення кешу при публікації записів (auto_clear_cache);
  • визначення «за фаєрволом» — за наявністю заголовка HTTP_X_SUCURI_CLIENTIP;
  • попередження про невідповідність доменів.

Ключ WAF доступний лише підписникам Sucuri; безкоштовна версія показує рекламні панелі та модальне вікно активації.

Сканери вразливостей

Преміальні сканери перевіряють версії ядра, PHP, плагінів і тем проти бази вразливостей:

  • API:
    https://wp-plugin.sucuri.net/v1/vulnerabilities/{php|core|plugin|theme}/{slug}/{version}
    ;
  • автентифікація: Bearer-токен ключа WAF, заголовок X-Sucuri-WAF: 1 за фаєрволом;
  • кеш результатів — 1 година (сховище vulnerabilities);
  • дані надаються в партнерстві з проєктом WPVulnerability.

Робота з терміналом (wp-cli)

# реєстрація сайту або встановлення ключа API
wp sucuri register
wp sucuri register 0123456789abcdef0123456789abcdef

# ігнорування файлу в перевірці цілісності
wp sucuri integrity ignore /path/to/file.php
wp sucuri integrity ignore /path/to/file.php --reason=modified

# скасування ігнорування
wp sucuri integrity unignore /path/to/file.php

Планувальник задач

Плагін використовує стандартний WP-Cron:

  • sucuriscan_scheduled_scan — щодня (через 10 с після встановлення): скан дерева файлів із MD5-сумами (тротлінг 3 год), звіт про версію, перевірка цілісності, перевірка оновлень, відправлення черги логів (бюджет max_execution_time − 6 с);
  • sucuriscan_autoseckeyupdater — щотижня: оновлення секретних ключів;
  • додаткові частоти: weekly, monthly, quarterly; є опція «Never (no execution)»;
  • керування — з вкладки Scanner (runnow / remove / перепланування).

Безпека та відомі вразливості

Захисні механізми

  • guard прямого доступу (403) у всіх PHP-файлах;
  • nonce sucuriscan_page_nonce на всіх формах;
  • AJAX-диспетчер вимагає manage_options, строго валідує form_action (^[a-z0-9_]+$);
  • валідація вводу регулярними виразами (заголовок IP, часовий пояс UTC±XX.XX, типи записів до 20 символів, тема листа, URL контрольних сум — лише GitHub);
  • захист шляхів від виходу за ABSPATH, білий список імен сховищ;
  • маскування секретів у логах і CSV; виключення ключів API з експорту;
  • cookie-хелпер: whitelist-патерни, httponly, Secure на HTTPS, SameSite=Lax;
  • 2FA-токени прив'язані до сесії, user-agent і валідації редиректів.

Відомі CVE

Відомі CVE
CVE Опис CVSS Версії Виправлено
CVE-2022-29489 CSRF: створення записів журналу подій (CWE-352) 4.3 (Medium) ≤ 1.8.33 1.8.34
CVE-2026-73033 Path traversal → видалення довільних файлів через sucuriscan_integrity[]=../../../wp-config.php (CWE-22) 6.5 (CVSS 3.1) / 7.0 (CVSS 4.0) ≤ 2.7.3 2.7.4

Додатково: збережений XSS через неекрановані імена файлів у журналі аудиту (виправлено в 2.7.4) та історичний XSS у 1.7.16. За 15 років — лише дві офіційні CVE, обидві закриті оперативно.

Тестування та CI/CD

Репозиторій вирізняється зрілою інженерною культурою:

  • PHPUnit: 25 тест-класів (~196 методів) із Brain\Monkey; покриття — вектори TOTP RFC 6238, міграція AES-GCM v1→v2, інваріанти маскування секретів, захист CSV від формул, заборона path-traversal;
  • Playwright: 21 e2e-спека на єдиному wp-env; workers=1, бо тести мутують глобальний стан; артефакти браузера вимкнені, щоб не захоплювати паролі й TOTP-секрети;
  • phpcs.xml — явний allowlist снифів: лише security-групи (EscapeOutput, NonceVerification, ValidatedSanitizedInput, PreparedSQL, i18n, Capabilities); повний WPCS давав би ~19 000 порушень;
  • GitHub Actions: unit-тести на PHP 7.4/8.5, e2e на 7.4/8.0, передрелізні перевірки, аудит залежностей composer/npm лише на релізах, деплой на WordPress.org через 10up/action-wordpress-plugin-deploy;
  • маніфест дистрибутива — білий список із 7 елементів (LICENSE, inc, index.html, lang, readme.txt, src, sucuri.php).

Порівняння з іншими плагінами

Порівняння з популярними рішеннями
Критерій Sucuri Security Wordfence MalCare iThemes Security
Локальний скан файлів MD5-дерево хешів Власний двигун сигнатур Хмарний скан Власний двигун
Віддалений скан SiteCheck Так (безкоштовно) Ні Так (платно) Ні
Журнал подій Файли + API База даних Так Так
2FA Вбудована (TOTP) з 2.5 Вбудована Ні Вбудована
Сканер вразливостей плагінів Преміум (ключ WAF) Вбудований Платно Вбудований
WAF Хмарний Sucuri (платно) Вбудований (ліміт) Хмарний (платно) Хмарний (платно)
Зберігання даних Файли, без БД База даних База даних База даних

Головна відмінність Sucuri — зв'язка безкоштовного локального інструментарію з платними сервісами Sucuri (SiteCheck, WAF, гарантоване очищення заражених сайтів). Слабке місце безкоштовної версії — відсутність власного локального сигнатурного двигуна: виявлення шкідливого коду переважно делеговано хмарі.

Резюме

Sucuri Security (sucuri-scanner) — зрілий і поширений антивірусний плагін WordPress (600 000+ встановлень, 2 CVE за 15 років, обидві закриті). Сильні сторони:

  • повний локальний набір: журнал подій, перевірка цілісності ядра з diff, 13 опцій hardening, пост-хак відновлення, журнали входів;
  • принцип «без бази даних» — файлове сховище з PHP-guard і шифруванням секретів AES-256-GCM;
  • вбудований TOTP 2FA з резервними кодами;
  • віддалений скан SiteCheck і моніторинг блок-списків;
  • інтеграція з хмарним WAF;
  • серйозна інженерна культура: тести, CI, явні security-снифи.

Обмеження: для хмарного аудиту потрібна константа SUCURISCAN_API_URL (офіційний сервіс вимкнено), преміальні сканери вразливостей вимагають платного ключа WAF, а локальне виявлення шкідливого коду поступається двигунам Wordfence/MalCare. Плагін годиться як базова система моніторингу та посилення захисту, особливо для сайтів, що планують підключення платних сервісів Sucuri.

Посилання

×
Реклама
ИКС