Безпека сайтів на 1С-Бітрікс: аудит, захист, моніторинг
Останній серйозний масовий злам Бітріксів — літо 2022, вразливість у модулі vote (BDU:2022-05127). Через неї заливали веб-шели пачками. Причина? Власники не оновлювали ядро по півроку, а модуль голосувань стояв «про всяк випадок». Відтоді мало що змінилося в підході: Бітрікс випускає патч, а його ставлять через три місяці. Ми вибудовуємо захист так, щоб між виходом патча і його застосуванням проходили дні, а не місяці. І щоб навіть без патча сайт не ліг від типової атаки.
Модуль «Проактивний захист» — потужний, але не з коробки
Модуль security встановлений майже на кожному Бітріксі, але налаштований правильно — від сили на кожному п'ятому. Що конкретно потрібно ввімкнути й підкрутити:
-
WAF (Веб-антивірус) — фільтрує SQL-ін'єкції, XSS, CSRF, path traversal на рівні
OnPageStart. Ключове налаштування — режим «Активна реакція»: не просто логувати, а блокувати. У/bitrix/admin/security_filter.phpперевіряємо, що всі типи атак увімкнені, а винятки — мінімальні -
Контроль активності (
/bitrix/admin/security_iprule.php) — ліміти на кількість запитів з одного IP. За замовчуванням 100 запитів на хвилину. Для API-ендпоінтів, куди стукаються мобільні застосунки, потрібні винятки — інакше заблокуєте своїх же користувачів -
2FA — OTP через Google Authenticator. Вмикається в налаштуваннях користувача. Для групи «Адміністратори» робимо обов'язковим через
OnAfterUserAuthorize— без другого фактора в адмінку не пускаємо -
Контроль цілісності (
/bitrix/admin/security_file_verifier.php) — хеші системних файлів. Якщо хтось змінив файл у/bitrix/modules/— система помітить. Запускаємо перевірку по cron щодня через агентCSecurityFileVerifier::Verify() -
Стоп-лист —
b_security_filter_stoplist. Автоматичне блокування IP при спрацюванні WAF. Ручне додавання підмереж — коли бачимо сканери -
Журнал безпеки —
b_event_log. Хто, коли і що змінював в адмінці. Зберігання мінімум 90 днів. При розслідуванні інциденту — безцінно
Аудит безпеки: що саме перевіряємо
Серверний рівень — тут найчастіше й дірки:
-
phpinfo()доступний за/info.phpабо/phpinfo.php— зустрічається на кожному третьому проєкті. Атакувальник отримує версію PHP, шляхи, модулі, конфігурацію. Видаляємо -
display_errors = Onна продакшні — стектрейси з шляхами до файлів та іменами таблиць летять користувачу в браузер - PHP-функції
exec,system,passthru,proc_openне вимкнені вphp.ini. Якщо веб-шел таки заллють — із цими функціями він отримає повний контроль над сервером - Версія PHP < 8.1 — без security-оновлень. PHP 7.4 помер у листопаді 2022, але досі живе на чверті проєктів
Рівень застосунку:
- Застарілі модулі:
vote,forum,blog— часто стоять невикористані, але з активними обробниками. Деактивуємо й видаляємо - Кастомний код: grep по
$DB->Query(з конкатенацією$_REQUEST— класична SQL-ін'єкція. Мають бути$DB->ForSql()або D7 ORM - Завантаження файлів: якщо
CFile::CheckFile()не викликається або перевіряє тільки розширення без MIME-типу — через форму зворотного зв'язку заллють.phpфайл -
dbconn.phpі.env— мають бути закриті правилами веб-сервера. Перевіряємо:curl https://site.ua/bitrix/.settings.phpне повинен віддавати нічого, окрім 403
SSL/TLS:
- Перевірка через SSL Labs — рейтинг A або вище
- HSTS з
max-ageвід 31536000 (рік) - Редирект HTTP -> HTTPS на рівні Nginx, не на рівні Бітрікса
Результат аудиту — звіт із пріоритетами: Critical / High / Medium / Low. Критичні закриваємо в перший день.
Лікування зламаних сайтів — протокол дій
Сайт уже скомпрометовано — SEO-спам, редиректи на казино, веб-шел у /upload/. Порядок дій:
- Ізоляція — знімаємо сайт, ставимо заглушку. Якщо шкідник шифрує файли або поширюється — кожна хвилина на рахунку
-
Визначення вектора — логи доступу (
access.log), логи помилок,b_event_log. Шукаємо POST-запити до нетипових файлів, звернення до/upload/*.php, підозрілі user-agent -
Пошук шкідливого коду —
grep -r "eval(base64_decode" /home/bitrix/www/— класика. Також шукаємоassert(,preg_replaceз модифікаторомe,${"_GET"}, обфусковані змінні виду$GLOBALS['x46x65'] -
Перевірка БД —
b_iblock_element_propertyіb_iblock_elementна інʼєктовані скрипти та приховані посилання.SELECT * FROM b_iblock_element WHERE DETAIL_TEXT LIKE '%<script%' AND DETAIL_TEXT NOT LIKE '%bitrix%' - Очищення або відновлення — якщо зараження масштабне, простіше відновити з чистого бекапу й накотити тільки контентні зміни з БД
- Закриття вразливості — оновлення ядра, видалення невикористаних модулів, правка кастомного коду
- Запит пересканування — Google Search Console → «Запросити перевірку», Яндекс.Вебмайстер → «Я все виправив»
Захист від DDoS — рівень інфраструктури
- Cloudflare / DDoS-Guard / Qrator — проксування трафіку. L3/L4 атаки фільтруються на їхньому боці. L7 — через правила та challenge-сторінки. Важливо: після підключення сховати реальну IP сервера, інакше сенс губиться
-
Rate limiting на Nginx:
limit_req_zoneдля/bitrix/admin/,/api/, форм. Окремі ліміти для авторизованих і анонімних користувачів -
CAPTCHA —
\Bitrix\Main\Captcha\CaptchaManagerдля форм Бітрікса або reCAPTCHA v3 для кастомних. v3 не дратує користувачів — працює у фоні - Bot management — пропускаємо Googlebot, YandexBot (перевірка через reverse DNS), блокуємо сканери та скрейпери за User-Agent і поведінкою
Резервне копіювання — останній рубіж
- Щоденні бекапи: файли через rsync + дамп PostgreSQL/MySQL через
pg_dump/mysqldump - Зберігання в ізольованому S3-сумісному сховищі. Ключове слово — ізольованому. Якщо бекапи лежать на тому ж сервері, що й сайт, зловмисник видалить і їх
- Ротація: daily × 7, weekly × 4, monthly × 12
- Тестування відновлення — раз на квартал розгортаємо бекап на тестовому сервері. Бекап, із якого неможливо відновитися, — просто файл на диску
- Моніторинг: якщо бекап не пройшов — алерт у Telegram протягом години
Моніторинг — виявити до того, як подзвонить клієнт
- Uptime — перевірка кожні 60 секунд через UptimeRobot / Zabbix / кастомний скрипт. Алерт у Telegram + дзвінок при даунтаймі > 5 хвилин
-
Файловий моніторинг — inotify (Linux) або cron +
md5sumпо критичних директоріях. Новий.phpу/upload/? Алерт негайно - Сканування на малвар — AI-BOLIT або ClamAV за розкладом. Перевірка і файлів, і бази
- SSL-сертифікат — попередження за 30/14/7 днів до закінчення. Let's Encrypt оновлюється автоматично через certbot, але certbot теж може зламатися
- Чорні списки — перевірка домену та IP в Google Safe Browsing, PhishTank, Spamhaus. Потрапляння = втрата трафіку
152-ФЗ і персональні дані
- HTTPS скрізь — редирект на рівні Nginx
- Шифрування в БД: паролі через
\Bitrix\Main\Security\Password::hash()(bcrypt), токени — черезopenssl_encrypt - Політика конфіденційності + cookie-банер (модуль
mainпідтримує з коробки черезCOption::SetOptionString("main", "cookie_agreement", "Y")) - Журналювання доступу до ПД — хто і коли переглядав дані клієнтів
Терміни
| Послуга | Терміни | Результат |
|---|---|---|
| Експрес-аудит | 1-2 дні | Критичні вразливості + план |
| Повний аудит | 3-5 днів | Детальний звіт, OWASP Top 10 |
| Усунення вразливостей | 1-2 тижні | Пропатчений проєкт |
| Лікування злому | 1-3 дні | Чистий сайт + закритий вектор |
| Моніторинг (абонемент) | Безперервно | Алерти + щомісячний звіт |
Працюємо разово та на абонементі з фіксованим SLA. Для абонементних клієнтів — виділений інженер, який знає проєкт.
Чек-лист: 15 пунктів, які перевіряємо на кожному проєкті
- Ядро 1С-Бітрікс і модулі — актуальна версія, невикористані модулі видалені
- Модуль
securityактивний, WAF у режимі «Активна реакція» - 2FA ввімкнена для всіх облікових записів із доступом до адмінки
-
/bitrix/admin/закрито за IP або за додатковою HTTP-авторизацією - Політика паролів: від 12 символів, mixed case, цифри, спецсимволи
- SSL/TLS: рейтинг A+ на SSL Labs, HSTS увімкнено
- Службові файли (
dbconn.php,.settings.php,.env, бекапи, логи) — 403 з браузера - Права: 644 файли, 755 директорії. Веб-сервер не owner системних файлів
- Security-заголовки:
Content-Security-Policy,X-Frame-Options: DENY,X-Content-Type-Options: nosniff,Strict-Transport-Security,Referrer-Policy - Контроль цілісності файлів — щоденна перевірка через агент
- Бекапи: щоденні, ізольоване зберігання, перевірка відновлюваності
-
b_event_log— зберігання від 90 днів, регулярний перегляд - PHP 8.1+,
display_errors = Off, небезпечні функції вимкнені - Моніторинг uptime + алерти при зміні файлів у
/upload/ - Reverse proxy або CDN із DDoS-захистом для високонавантажених проєктів







