Close

WPScan — “швейцарський ніж” для аудиту й пентесту WordPress

В українському сегменті Інтернету близько 80% сайтів створено на базі WordPress. Вона займає друге місце за популярністю серед усіх CMS. Поряд з цим це одна з найбільш атакованих систем. Щорічно зламуються сотні,  а то й тисячі сайтів. Тому захисту WordPress необхідно приділяти якомога більше уваги. У цій статті я розкажу, як ефективно використовувати WPScan — один з найпотужніших інструментів для пошуку вразливостей у WordPress, та як з його допомогою забезпечити безпеку вашого сайту.

Зміст статті

Що таке WPScan і які його можливості?

WPScan — це багатофункціональний кросплатформний інструмент безпеки, який включає консольний BlackBox-сканер вразливостей (WPScan CLI), плагін для CMS WordPress, базу даних вразливостей і API для інтеграції (безкоштовне / платне).

WPScan розроблений у 2011 році на мові програмування Ruby дослідником кібербезпеки Ryan Dewhurst, відомим під псевдонімом @ethicalhack3r. Йому також допомагали Erwan LR (@erwan_lr) та Christian Mehlmauer (@firefart).

Сьогодні проєкт підтримується та розвивається однойменною компанією “WPScan”, яка є частиною команди Automattic, що стоїть за розробкою WordPress.

Існує також форк WPScan – WPSeku, який має деякі додаткові можливості. Наприклад, з його допомогою можна аналізувати параметри URL і виявляти SQL/XSS/LFI вразливості. Фактично, ця утиліта є доповненням до існуючого функціоналу WPScan й може допомогти у пентестах.

Список функціональних можливостей WPScan:

  1. Сканування ядра WordPress:
    • Визначає версію WordPress, встановлену на сайті.
    • Перевіряє відомі вразливості для цієї версії через свою базу даних.
  2. Сканування плагінів:
    • Виявляє встановлені плагіни та перевіряє їх на наявність відомих вразливостей.
    • Аналізує навіть приховані або вимкнені плагіни.
  3. Сканування тем:
    • Визначає активні та встановлені теми.
    • Шукає відомі вразливості в темах, які можуть бути небезпечними для сайту.
  4. Перевірка безпеки конфігурації:
    • Виявляє потенційні проблеми конфігурації, такі як доступ до конфігураційних файлів або інших критично важливих файлів (наприклад, wp-config.php).
    • Перевіряє налаштування загальних директорій та їх захист.
  5. Сканування бази даних вразливостей WPScan:
    • Використовує власну базу даних WPScan з актуальними вразливостями для сканування.
    • Оновлює базу даних для отримання свіжої інформації про нові загрози.
  6. Сканування користувачів:
    • Виявляє імена користувачів на сайті WordPress.
    • Може використовуватися для пошуку слабких місць у облікових записах адміністраторів.
  7. Перевірка захисту від Brute Force-атак:
    • Виявляє наявність механізмів захисту від brute force атак (наприклад, захист від багаторазових спроб входу).
    • Виконує прості brute force атаки для перевірки міцності паролів користувачів.
  8. Перевірка безпеки XML-RPC:
    • Виявляє проблеми з безпекою в XML-RPC інтерфейсі, який може використовуватись для атак.
    • Перевіряє, чи не є XML-RPC відкритим для несанкціонованого доступу.
  9. Аналіз HTTP-заголовків:
    • Виявляє відсутність або неправильні налаштування заголовків безпеки (наприклад, X-Frame-Options, X-Content-Type-Options, Content Security Policy тощо).
  10. Формування звітів:
    • Генерує звіти в різних форматах (текст, JSON, HTML).
    • Може бути використано для подальшого аналізу або надання інформації для фахівців з безпеки.
  11. Автоматичне сканування та планування:
    • Можливість автоматизованого регулярного сканування сайту за розкладом.
    • Інтеграція з системами CI/CD для постійної перевірки безпеки під час розробки.
  12. Сканування директорій і файлів:
    • Виявляє публічно доступні або неправильно захищені файли та директорії.
    • Перевіряє наявність критичних конфігураційних файлів.
  13. Маскування та обходження захисних механізмів:
    • Може спробувати обійти певні захисні механізми (WAF, фільтри) для отримання доступу до вразливих ресурсів.
  14. Інтеграція з базою CVE:
    • Включає можливість інтеграції з іншими базами даних вразливостей (наприклад, CVE), що дозволяє додатково перевіряти нові загрози.

Встановлення WPScan

Встановлення WPScan в ОС Ubuntu/Debian Linux:

sudo apt update && sudo apt upgrade
sudo apt install git curl ruby ruby-dev build-essential libcurl4-openssl-dev libssl-dev zlib1g-dev
sudo gem install wpscan
wpscan --help

Встановлення WPScan в MacOS:

brew install wpscanteam/tap/wpscan
sudo gem install wpscan
wpscan --help

Встановлення WPScan в ОС Windows:

wsl --install
wpscan --help

Встановлення WPScan через Docker:

docker pull wpscanteam/wpscan
docker run -it --rm wpscanteam/wpscan --url http://example.com
docker run -it --rm wpscanteam/wpscan --help

☝ WPScan попередньо встановлений в ряді пентестерських ОС, таких як: Kali Linux, SamuraiWTF, Pentoo, BlackArch.

Робота з WPScan

Конфігурація

Щоб WPScan міг отримувати дані про вразливості, необхідно вказати API-ключ через --api-token або через файл конфігурації ~/.wpscan/scan.yml. Якщо його немає, створіть вручну з наступним вмістом:

cli_options:
api_token: 'YOUR_API_TOKEN'

Маркер API можна отримати, зареєструвавши обліковий запис на WPScan.com. Користувачу надається 25 безкоштовних лімітів API  на день. Коли їх буде вичерпано, WPScan продовжить працювати, але тільки у звичайному режимі, без жодних даних про вразливості.

База даних WPScan знаходиться в ~/.wpscan/db

Перед початком роботи рекомендується оновити базу даних вразливостей WPScan, щоб інструмент працював із найсвіжішими даними: wpscan --update

Приклади команд WPScan

  • wpscan --url https://example.com --enumerate u,ap,vt,tt,cb,dbe,m --random-user-agent — комплексне сканування з режимом випадкового User-Agent браузера та енумерацією користувачів (u), плагінів (ap), тем (vt), timthumbs (tt), файлів конфігурації бекапів (cb), дампів баз даних (dbe), медіафайлів (m);
  • wpscan --url http://example.com --enumerate u,ap,vt,tt,cb,dbe,m --random-user-agent | tee wpscan_log.txt — комплексне сканування зі збереженням результатів виводу у файл;
  • wpscan --stealthy --url https://example.com — режим прихованого сканування;
  • wpscan --url https://example.com --enumerate u --random-user-agent — енумерація імен користувачів WordPress;
  • wpscan --url http://example.com -e u --passwords /path/to/password_file.txt — енумерація імен користувачів і брутфорс атака на них з підбором паролів, використовуючи словник;
  • wpscan --url https://example.com --passwords ~/passwords.txt --usernames administrator --max-threads 50 — брутфорс атака на користувачів WordPress;
  • wpscan --url https://example.com/ -U user.txt -P /usr/share/wordlists/rockyou.txt — брутфорс атака на облікові записи користувачів WordPress, використовуючи список імен користувачів та паролів;
  • wpscan --url https://example.com --plugins-detected agressive --random-user-agent — агресивна енумерація плагінів WordPress;
  • wpscan --url https://example.com --max-threads 1 --throttle 3000 -f cli-no-color --proxy socks5://127.0.0.1:8085 — сканування по одному потоку, затримка між кожним запитом буде 3 секунди, виведення результатів буде в текстовому форматі без кольорових елементів, усі запити проходитимуть через проксі-сервер SOCKS5;
  • wpscan --url https://example.com --disable-tls-checks — сканування без перевірки SSL/TLS;
  • wpscan --url https://example.com/ --http-auth user:pass — сканування сайту з увімкненою HTTP-преавторизацією, вказавши дані входу;
  • wpscan --url http://example.com --force — сканування сайту у примусовому режимі, навіть якщо WPScan не може визначити, що сайт працює на WordPress;
  • wpscan --url http://example.com --wp-content-dir /custom-content/ — сканування вказаної директорії WordPress, якщо вона відрізняється від стандартної.

Масове сканування сайтів з WPScan + mass-wpscan

Незалежні дослідники розробили та виклали на GitHub скрипт mass-wpscan, який дозволяє проводити масове сканування сайтів WordPress з допомогою WPScan.

Встановлення:

git clone https://github.com/l50/mass-wpscan
cd mass-wpscan
go mod init mass-wpscan
go mod tidy
go mod vendor
make build
make test

Запуск:

./mass-wpscan -i domains.txt -p "--enumerate u,ap,vt,cb,dbe,m --api-token *** --random-user-agent" -o outputmasscan.txt

Моніторинг безпеки сайтів з допомогою WPScan + WPWatcher

WPWatcher — це інструмент командного рядка, створений сторонніми розробниками, який працює у зв’язці з WPScan. Він автоматизує процес сканування WordPress-сайтів на вразливості. Це дозволяє адміністраторам постійно стежити за безпекою багатьох сайтів одночасно без необхідності вручну запускати WPScan.

WPWatcher можна встановити як на локальній системі Linux, так і на VPS-сервері. Його особливістю є те, що сканування можна запланувати з допомогою планувальника cronjob, а також доставка email-сповіщень, яку можна налаштувати через сторонній SMTP-сервер (напр., скориставшись Mailgun). В якості бази даних вразливостей використовується WPVulnDB API.

Встановлення:

pip install -U 'wpwatcher'

Конфігурація:

cd ~/.wpwatcher
nano wpwatcher.conf

Приклад конфігурації можна знайти тут.

Запуск:

  • wpwatcher --url example1.com example2.com
  • wpwatcher --url example1.com example2.com \
    --wpscan_args "--force --stealthy --api-token <TOKEN>" \
    --follow_redirect --api_limit_wait \
    --send --infos --email_to you@office.ca me@office.ca

Запуск за рокладом:

# Will run at 00:00 on Mondays:
0 0 * * 1 wpwatcher --conf /path/to/wpwatcher.conf --wait > /dev/null

WPWatcher email report

Як захистити сайт від сканування й зламу WPScan?

Чимало хакерів використовують WPScan не тільки для аудиту і тестування на проникнення, а й зловмисних цілей. Щоб захистити свій сайт на WordPress від сканування та потенційного злому з використанням цього інструмента слід впровадити усі необхідні заходи кібербезпеки.

WPScan використовує відкриті бази вразливості та інформацію, доступну через публічнодоступні файли та конфігурації, тому основна мета — обмежити доступ та приховати дані.

До прикладу, сканер WPScan дуже часто визначає плагіни WordPress та їх версії через загальнодоступні файли readme.txt. Ось скрипт, який вилучає всі readme файли з директоріїї вашого сайту:

sudo find /home/example.com/public_html -name "readme*" -exec rm -f {} \;

Ще поради:

  • Встановити фаєрвол: на рівні сервера (CSF Firewall, IPtables, Fail2ban) і на рівні веб-додатку (напр. Wordfence, CleanTalk, GOTMLS Antimalware, Cloudflare);
  • Обмежити доступ до xmlrpc.php;
  • Обмежити доступ до license.txt;
  • Відключити вбудований планувальник WordPress wp-cron.php і перейти на серверний cronjob;
  • Обмежити доступ до файлу /wp-content/debug.log;
  • Обмежити доступ до форми авторизації WordPress: /wp-admin, /wp-login.php;
  • Захистити облікові записи WordPress від енумерації (обмежити доступ до URL типу /?author=1, а також доступ через /wp-json/wp/v2/users);
  • Завжди оновлювати ядро, теми, плагіни WordPress до актуальних версій;
  • Використовувати довгі та складні паролі;
  • Налаштувати багатофакторну авторизацію;
  • Слідкувати за привілегіями користувачів в системі;
  • Встановити коректні права на файли і папки WordPress;
  • Встановити HTTP-заголовки безпеки;
  • Використовувати надійний SSL-сертифікат та TLS не нижче 1.2 версії;
  • Використовувати систему захисту від ботів Captcha;
  • Відключити редагування файлів теми і плагінів у адмін-панелі WordPress;
  • Здійснювати резервне копіювання і зберігати копії у недоступному місці;
  • Оптимізувати службові файли .htaccess, robots.txt, wp-config.php та functions.php;
  • Оптимізувати файл конфігурації PHP.INI;
  • Вести спостереження та аналітику логів – access.log та error.log;
  • Заборонити завантаження файлів з небезпечними розширеннями на сайт;
  • Заборонити виконання php та js файлів в службових директоріях;
  • Проводити перевірку – санітизацію та валідацію будь-яких відправлених даних на сайт;
  • При розробці сайту використовувати правила безпечного кодування, не застосовувати застарілі функції WordPress.

Читайте чек-ліст: 20 порад як захистити сайт на WordPress

Додаткові посилання

ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:

Отримати комерційну пропозицію
Оформити заявку
Замовити консультацію

Заповніть, будь ласка, форму й наш спеціаліст зв’яжеться з Вами та надасть безкоштовну консультацію!

Замовити дзвінок

Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!