WPScan

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

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

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

WPScan — це багатофункціональний кросплатформний фреймворк для забезпечення безпеки веб-сайтів на базі CMS WordPress. Включає такі компоненти: консольний BlackBox-сканер вразливостей WPScan CLI, плагін для CMS WordPress, базу даних вразливостей і API (безкоштовне / платне). WPScan розроблений у 2011 році на мові програмування Ruby дослідником кібербезпеки Ryan Dewhurst, відомим під псевдонімом @ethicalhack3r. Йому також допомагали Erwan LR (@erwan_lr) та Christian Mehlmauer (@firefart). Сьогодні проєкт підтримується та розвивається однойменною компанією “WPScan”, яка є частиною команди Automattic, що стоїть за розробкою WordPress.

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

  1. Сканування ядра WordPress:
    • Визначає версію WordPress, встановлену на сайті.
    • Перевіряє відомі вразливості для цієї версії через свою базу даних.
  2. Сканування плагінів WordPress:
    • Виявляє встановлені плагіни та перевіряє їх на наявність відомих вразливостей.
    • Аналізує навіть приховані або вимкнені плагіни.
  3. Сканування тем WordPress:
    • Визначає активні та встановлені теми.
    • Шукає відомі вразливості в темах, які можуть бути небезпечними для сайту.
  4. Перевірка безпеки конфігурації WordPress:
    • Виявляє потенційні проблеми конфігурації, такі як доступ до конфігураційних файлів або інших критично важливих файлів (наприклад, wp-config.php).
    • Перевіряє налаштування загальних директорій та їх захист.
  5. Звірка по CVE базі даних вразливостей WPScan:
    • Використовує власну базу даних WPScan з актуальними вразливостями для сканування.
    • Оновлює базу даних для отримання свіжої інформації про нові загрози.
  6. Енумерація користувачів WordPress:
    • Виявляє імена користувачів на сайті 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 – WPSeku, який має деякі додаткові можливості. Наприклад, з його допомогою можна аналізувати параметри URL і виявляти SQL/XSS/LFI вразливості. Фактично, ця утиліта є доповненням до існуючого функціоналу WPScan й може допомогти у пентестах.

Встановлення 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 в OC Arch Linux:

sudo pacman -Sy
sudo pacman -S wpscan

Встановлення 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 --api-token TOKEN — комплексне сканування з режимом випадкового 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 --api-token TOKEN — комплексне сканування зі збереженням результатів виводу у файл;
  • wpscan --stealthy --url https://example.com --api-token TOKEN — режим прихованого сканування;
  • wpscan --url https://example.com --enumerate u --random-user-agent --api-token TOKEN — енумерація імен користувачів 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 --api-token TOKEN — брутфорс атака на користувачів WordPress;
  • wpscan --url https://example.com/ -U user.txt -P /usr/share/wordlists/rockyou.txt --api-token TOKEN — брутфорс атака на облікові записи користувачів WordPress, використовуючи список імен користувачів та паролів;
  • wpscan --password-attack xmlrpc -t 20 -U admin, admin2 -P passwords.txt --url https://example.com --api-token TOKEN — брутфорс атака підбору паролів націлена на заданих користувачів з застосуванням методу входу через xmlrpc;
  • wpscan --url https://example.com --enumerate p --random-user-agent — енумерація плагінів WordPress;
  • wpscan --url https://example.com --plugins-detected agressive --random-user-agent --api-token TOKEN — агресивна енумерація плагінів WordPress;
  • wpscan --url https://example.com --max-threads 1 --throttle 3000 -f cli-no-color --proxy socks5://127.0.0.1:8085 --api-token TOKEN — сканування по одному потоку, затримка між кожним запитом буде 3 секунди, виведення результатів буде в текстовому форматі без кольорових елементів, усі запити проходитимуть через проксі-сервер SOCKS5;
  • wpscan --url https://example.com --disable-tls-checks --api-token TOKEN — сканування без перевірки SSL/TLS;
  • wpscan --url https://example.com/ --http-auth user:pass --api-token TOKEN — сканування сайту з увімкненою HTTP-преавторизацією, вказавши дані входу. Для безпеки, пароль можна задати перемінною export WP_PASS='yourpassword', потім підставивши змінну в login:$WP_PASS;
  • wpscan --url http://example.com --force --api-token TOKEN — сканування сайту у примусовому режимі, навіть якщо WPScan не може визначити, що сайт працює на WordPress;
  • wpscan --url http://example.com --wp-content-dir /custom-content/ --api-token TOKEN — сканування вказаної директорії WordPress, якщо вона відрізняється від стандартної.
ЧИТАЙТЕ ТАКОЖ:  Кращі розширення Firefox і Chrome для хакерів

Масове сканування сайтів з 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 — це інструмент командного рядка, створений сторонніми розробниками, який працює у зв’язці з 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 використовує відкриті бази вразливості та інформацію, доступну через публічнодоступні файли та конфігурації, тому основна мета — обмежити доступ та приховати дані.

ЧИТАЙТЕ ТАКОЖ:  File Upload Attack: експлуатуємо вразливості завантаження файлів

До прикладу, сканер 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.

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

Автор: © Konrad Ravenstone, KR. Laboratories Research Labs

Konrad Ravenstone// про автора

Кібермольфар, хакер, лінуксоїд, дослідник безпеки в KR. Labs Research

Сподобалася стаття? Поділитися в соцмережах:
KR. Labs Research
Рекомендоване:
У цьому матеріалі ми розглянемо основи роботи з таким інструментом…