Множество IP-адресов активно сканируют и используют уязвимости SQL-инъекций в WHMCS. Вот как заблокировать их с помощью Fail2ban.
Схема атаки:
Злоумышленники используют различные методы SQL-инъекций для атаки на файл /cart.php:
text
/cart.php?domain=transfer&a=addand/**/9503::9537=...
/cart.php?a=add&domain=transferAND/**/JSON_KEYS(...)
/cart.php?domain=transfer&a=add%27%2B%28SELECT...
/cart.php?a=add&domain=transfer/*!50000AND*/JSON_KEYS...
Наиболее часто используемые ключевые слова SQL:
Создать фильтр
Файл:
Создать тюрьму
Файл:
Примените конфигурацию к серверу.
Что делает эта защита?
Если ваша система уже скомпрометирована:
Схема атаки:
Злоумышленники используют различные методы SQL-инъекций для атаки на файл /cart.php:
text
/cart.php?domain=transfer&a=addand/**/9503::9537=...
/cart.php?a=add&domain=transferAND/**/JSON_KEYS(...)
/cart.php?domain=transfer&a=add%27%2B%28SELECT...
/cart.php?a=add&domain=transfer/*!50000AND*/JSON_KEYS...
Наиболее часто используемые ключевые слова SQL:
- JSON_KEYS, CONVERT, CONCAT, ELT
- ВЕРХНИЙ ЭТАЖ, ИНФОРМАЦИОННАЯ СХЕМА
- RAND, Benchmark, CHR
- Подсказки оптимизатора MySQL: /*!50000SELECT*/
- Закодированные символы: %28, %29, %2B, %2F%2A%2A%2F
Создать фильтр
Файл:
/etc/fail2ban/filter.d/whmcs-sqli.conf
Код:
[Definition]
failregex = ^ .* "GET /cart\.php\?.*domain=transfer.*(?:/\*\*/|/\*!\d+|\bAND\b|\bSELECT\b|\bJSON_KEYS\b|\bCONVERT\b|\bCONCAT\b|\bELT\b|\bUPPER\b|\bFLOOR\b|\bINFORMATION_SCHEMA\b|\bRAND\b|\bBENCHMARK\b|\bCHR\b|\bUPDATEXML\b|\bEXTRACTVALUE\b|\bSLEEP\b).* HTTP/\d\.\d" 302
^ .* "GET /cart\.php\?.*domain=transfer.*%%28.*%%29.* HTTP/\d\.\d" 302
^ .* "GET /cart\.php\?.*domain=transfer.*%%2B.* HTTP/\d\.\d" 302
^ .* "GET /cart\.php\?.*domain=transfer.*%%2F%%2A%%2A%%2F.* HTTP/\d\.\d" 302
ignoreregex =
Создать тюрьму
Файл:
/etc/fail2ban/jail.d/whmcs-sqli.conf
Код:
[whmcs-sqli]
enabled = true
port = http,https
filter = whmcs-sqli
logpath = /var/log/apache2/access.log
/var/log/nginx/access.log
/var/www/*/logs/*/access.log
maxretry = 1
findtime = 1
bantime = 2592000 # 30 days
action = iptables-allports[name=whmcs-sqli]
Примените конфигурацию к серверу.
Bash:
# Test the filter
sudo fail2ban-regex /path/to/access.log /etc/fail2ban/filter.d/whmcs-sqli.conf
# Restart Fail2ban
sudo systemctl restart fail2ban
# Check status
sudo fail2ban-client status whmcs-sqli
Что делает эта защита?
- Мгновенная блокировка при первой атаке (maxretry=1)
- 30-дневная блокировка для всех злоумышленников
- Обнаруживает все известные варианты атак (комментарии, закодированные символы, подсказки MySQL)
- Отслеживает все журналы пользователей (в средах общего хостинга)
- Уже обнаружено более 9 злоумышленников за первый час
- Обновляйте WHMCS до последней версии.
- Регулярно отслеживайте свои журналы
Bash:
sudo tail -f /var/log/fail2ban.log | grep whmcs-sqli
Если ваша система уже скомпрометирована:
- Проверьте наличие несанкционированных учетных записей администратора.
- Проверьте базу данных на наличие подозрительных записей.
- Поменяйте все пароли
- При необходимости восстановите данные из чистой резервной копии.
Реакции:
