Як захистити веб-додатки від небезпечного дизайну та ненадійних конфігурацій? Дізнайтесь про головні вразливості, такі як неправильне управління доступом, відкриті порти та застарілі компоненти.
Небезпечний дизайн – це проблеми в архітектурі та дизайні додатка, які можуть призвести до вразливостей безпеки.
Опис: Поганий дизайн або архітектурні рішення, які не враховують питання безпеки.
Приклад: Архітектура, що допускає небезпечні або неконтрольовані дані у внутрішні процеси, що може призвести до витоків інформації або атак.
Опис: Неврахування безпеки на етапі проектування або розробки додатка.
Приклад: Необхідні заходи безпеки не включені в планування та реалізацію додатка, що призводить до вразливостей.
Опис: Неналежне управління доступом до функцій та даних.
Приклад: Відсутність сегментації доступу або захисту чутливих даних, що дозволяє неавторизованим користувачам отримати доступ до критичних функцій.
Single Entry Point, або Front Controller, є архітектурним шаблоном, де всі запити до веб-додатку спрямовуються через одну точку доступу. Це забезпечує централізовану обробку запитів, що спрощує контроль за безпекою та маршрутизацією.
У фреймворках, таких як Symfony, Laravel та Yii2, цей патерн реалізується через єдиний файл, наприклад index.php, який обробляє всі запити до програми.
Якщо Front Controller налаштований неправильно або містить вразливості, зловмисники можуть спробувати обійти його або використати для атак. Це може призвести до того, що вони отримають доступ до файлів або директорій, оминаючи основний механізм контролю. Такі ситуації виникають через некоректну конфігурацію сервера, коли дозволяється прямий доступ до файлів, які повинні бути захищені.
curl http://target-site.com/config.php
Якщо в маршрутизації є помилки, зловмисники можуть спробувати маніпулювати маршрутами для доступу до небажаних частин додатку.
curl http://target-site.com/index.php?controller=Admin&action=editUser&id=1
Можливе використання параметрів запиту для маніпуляцій або виконання небажаних дій.
curl http://target-site.com/index.php?module=User&action=delete&id=1
Зловмисники можуть шукати уразливості в коді, який обробляє запити через Front Controller, такі як SQL ін’єкції або інші атаки на основі вхідних даних.
curl http://target-site.com/index.php?search=’ OR ‘1’=’1
Основні принципи:
Мінімізація відкритих портів: Тільки необхідні порти повинні бути доступні для користувачів. Наприклад, порти для веб-сервера (80/443 для HTTP/HTTPS) або порт для бази даних (якщо він необхідний).
Обмеження доступу до критичних портів: Деякі порти, наприклад, порт 22 для SSH, повинні бути відкриті тільки за вимогою або доступні лише з ізольованого середовища, наприклад, через VPN або з певних IP-адрес.
Моніторинг та аудит: Постійний моніторинг відкритих портів і аудит налаштувань допомагають вчасно виявити та закрити непотрібні порти.
Застосування брандмауера (firewall): Використовуйте правила брандмауера для обмеження доступу до портів, дозволяючи доступ тільки для певних служб та з певних IP-адрес.
Використання інструментів, таких як Nmap, для сканування мережі і виявлення відкритих портів. Це перший крок в атаках на відкриті порти.
nmap -p- target-ip
Після виявлення відкритих портів зловмисники можуть спробувати використовувати уразливості у відповідних службах.
hydra -l username -P password_list.txt ssh://target-ip
Відкриті порти можуть бути використані для проведення атак типу Denial of Service (DDoS), спрямованих на перевантаження ресурсу.
Зловмисник може скористатися відкритим портом для створення тунелю і доступу до внутрішніх ресурсів, які зазвичай не доступні ззовні.
ssh -L 8080:localhost:80 user@target-ip
Deny by Default і Fail Early — це принципи розробки та безпеки додатків, які передбачають, що система автоматично блокує доступ або виконання дій, якщо не виконуються необхідні умови, а також зупиняє роботу коду на ранніх етапах при виявленні помилок або проблем. Це допомагає мінімізувати ризики і підвищує надійність системи.
Deny by Default:
Усі дії та доступи повинні бути заборонені за замовчуванням, і лише після успішного проходження необхідних перевірок дозволяється виконання дій або доступ. Такий підхід мінімізує ризик випадкового або несанкціонованого доступу. Принцип Fail Early:
При виявленні помилки або неправильного стану система повинна негайно припинити подальше виконання, щоб уникнути поглиблення проблем або можливих атак.
Атаки на системи з неправильним впровадженням цих принципів
Якщо в системі є приховані маршрути або функції, які не мають явних перевірок доступу, зловмисник може отримати доступ до них, використовуючи прямий запит.
curl -X POST https://target-app.com/hidden-route
Якщо перевірка автентифікації не виконується належним чином на всіх етапах процесу, зловмисник може залишити сесію відкритою та використовувати її для атаки.
Зловмисник може спробувати виконати адміністративні дії через стандартний інтерфейс користувача, якщо система не перевіряє ролі та дозволи належним чином.
Whitelist та Blacklist є важливими методами для управління доступом і обмеженням дій у системах.
Whitelist (список дозволених): Включає лише ті елементи, які дозволені. Все інше автоматично заборонено. Це підхід, який забезпечує більший рівень безпеки, оскільки він чітко визначає, що можна робити.
Blacklist (список заборонених): Включає лише ті елементи, які заборонені. Все інше автоматично дозволено. Це менш надійний підхід, оскільки він не охоплює всі можливі загрози.
Якщо в Blacklist заборонені лише певні розширення (наприклад, .php), зловмисник може завантажити файл з іншими розширеннями, які все одно можуть бути виконані на сервері (наприклад, .phtml, .php5).
curl -X POST https://target-app.com/upload -F “[email protected]”
Якщо система дозволяє завантажувати певні типи файлів (наприклад, зображення), зловмисник може вбудувати шкідливий код у метадані файлу. Вбудовування шкідливого JavaScript у зображення через XSS-атаку.
Зловмисник може спробувати використовувати нестандартні або нові розширення, які не включені в Whitelist, але можуть бути виконані на сервері. Завантаження файлу з розширенням .phar, яке також може бути виконано на деяких серверах.
Неправильна конфігурація безпеки – це помилки в налаштуваннях безпеки, які можуть залишити додаток або систему вразливими.
Опис: Залишення застарілих або ненадійних налаштувань безпеки.
Приклад: Відкриті порти або сервіси, які не використовуються, але залишені в конфігурації.
Опис: Неналежне налаштування серверів, яке може призвести до вразливостей.
Приклад: Неправильні налаштування для серверів бази даних або веб-серверів, які дозволяють несанкціонований доступ.
Опис: Відсутність належного управління обліковими записами та правами доступу.
Приклад: Облікові записи з надмірними привілеями або з незахищеними паролями.
Blue Team: Використовуйте окремі середовища для розробки, тестування та продуктивної системи. Забезпечте, що тестові середовища не мають доступу до продуктивних даних.
Red Team: Спробуйте знайти URL, пов’язані з тестовими середовищами, або доступ до конфігураційних файлів, які можуть розкрити дані про продуктивне середовище.
Blue Team: Вимкніть HTTP і вимагайте використання HTTPS з актуальними сертифікатами.
Red Team: Перевірте можливість підміни трафіку (MITM) або ін’єкцій даних у випадках використання HTTP.
Blue Team: Перевірте правильність налаштувань SSL/TLS, переконайтесь, що використовуються тільки надійні протоколи та шифри.
Red Team: Перевірте наявність вразливостей SSL/TLS, таких як небезпечні шифри або підтримка застарілих протоколів.
Blue Team: Забороніть доступ до SSH для root-користувача, вимкніть аутентифікацію за паролем на користь ключів SSH.
Red Team: Спробуйте атакувати SSH-конфігурацію, зосередившись на виявленні rootдоступу або слабких паролів.
Blue Team: Забороніть доступ до переліку директорій через серверні налаштування (наприклад, через .htaccess або конфігурацію Nginx/Apache).
Red Team: Перевірте можливість доступу до переліку директорій, шукайте конфіденційні файли або резервні копії.
Blue Team: Відкрийте тільки ті порти, які необхідні для роботи сервісів, закрийте порти баз даних (наприклад, 5432 для PostgreSQL).
Red Team: Проведіть сканування портів для виявлення відкритих портів, які можуть бути використані для атак.
Blue Team: Змініть стандартні логіни та паролі відразу після встановлення системи, вимкніть застарілі облікові записи.
Red Team: Використовуйте атаки типу “Brute Force” або списки стандартних паролів для входу.
Blue Team: Вимкніть або видаліть всі тестові акаунти перед розгортанням продуктивної системи.
Red Team: Спробуйте виявити тестові акаунти через фузінг або атаки словникового типу.
Blue Team: Увімкніть користувацькі сторінки помилок, відключіть показ стека викликів у продуктивному середовищі.
Red Team: Використовуйте інформацію з помилок для подальших атак, наприклад, шляхів до файлів або назви баз даних.
Blue Team: Забезпечте, щоб всі механізми безпеки залишалися ввімкненими навіть під час розробки. Наприклад, вимагайте пароля для використання sudo.
Red Team: Спробуйте скористатися тимчасовими налаштуваннями, які були залишені після тестування.
Уразливі та застарілі компоненти – це використання компонентів, бібліотек або фреймворків, які містять відомі вразливості.
Опис: Використання компонентів, які більше не підтримуються або містять відомі вразливості.
Приклад: Використання старих версій бібліотек, які мають відомі помилки безпеки, які не були виправлені.
Опис: Нехтування оновлення компонентів та бібліотек до останніх версій.
Приклад: Ігнорування патчів або оновлень, які виправляють відомі вразливості.
Опис: Використання сторонніх компонентів без перевірки їхньої безпеки.
Приклад: Інтеграція сторонніх бібліотек або фреймворків без належної перевірки їхньої безпеки та цілісності.
Використовуйте бази даних CVE, такі як CVE.mitre.org або Exploit-DB, для регулярної перевірки використовуваного програмного забезпечення на наявність відомих вразливостей.
Регулярно оновлюйте всі компоненти системи, щоб уникнути використання вразливих версій.
Вразливість CVE-2021-44228 (Log4Shell) у бібліотеці Log4j. Встановлення оновлень або використання налаштувань, що знижують ризик.
Використовуйте відомі CVE для атаки на цільову систему. Шукайте уразливі версії компонентів або посилання на експлойти в базах даних, щоб отримати можливість проникнення. Застосування експлойту для CVE-2021-44228, щоб отримати віддалене виконання коду на сервері.
Використовуйте інструменти для аудиту залежностей PHP, такі як Composer Audit, для виявлення застарілих та уразливих залежностей. Слідкуйте за оновленнями залежностей та регулярно перевіряйте проект на нові уразливості.
Шукайте вразливі залежності у складі проекту. Використовуйте їх для атак, наприклад, через уразливості в бібліотеках або компонентах. Знайти вразливість у старій версії бібліотеки PHP, яка може дозволити виконання шкідливого коду.
Використовуйте інструменти, такі як npm audit або Yarn Audit, для перевірки Node.jsзалежностей на наявність уразливостей. Регулярно перевіряйте проект на наявність вразливих пакетів та оновлюйте їх.
Перевіряйте, чи використовує цільова система старі версії Node.js пакетів, та шукайте експлойти для виявлених вразливостей. Використання уразливості в старій версії бібліотеки для здійснення атак, таких як викрадення даних або виконання коду.