Як захистити веб-додатки: основні поради, інструменти, корисні посилання


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

Загальнодоступні веб-додатки цікаві хакерам як ресурси або інструменти заробітку. Спектр застосування отриманої в результаті злому інформації широкий: платне надання доступу до ресурсу, використання у бот-сетях і т. д. Особа власника не важлива, оскільки процес злому автоматизований і поставлений на потік. Вартість інформації пропорційна популярності і впливовості компанії.

Якщо задатися метою, уразливість в додатку знайдеться. У звіті про хакерські атаки на сайти за 2016 рік експерти Google повідомили про те, що кількість зламаних ресурсів збільшилася на 32% в порівнянні з 2015 роком, і це не межа. Пам’ятайте про це і відкиньте помилки про неприступність своїх веб-ресурсів, коли плануєте роботи по інформаційній безпеці.

Поради, описані нижче, допоможуть розібратися і закрити першочергові проблеми по технічному захисту сайту.

Поради із захисту веб-додатків від хакерів

Використайте інструменти для аналізу захищеності

Перш ніж шукати уразливості вручну перевірте додаток автоматизованими засобами. Вони виконують тести на проникнення, намагаються його зламати, наприклад, за допомогою SQL- ін’єкції.

Нижче приведена підбірка безкоштовних інструментів.

Додатки і фреймворки

  • OpenVAS сканує вузли мережі на наявність уязвимостей і дозволяє управляти уязвимостями.
  • OWASP Xenotix XSS Exploit Framework сканує ресурс на можливість експлуатації XSS- уязвимостей.
  • Approof від Positive Technologies перевіряє конфігурацію веб-додатків, сканує на наявність уразливих компонентів, незахищених чутливих даних і шкідливого коду.

Онлайн-сервіси

  • SecurityHeaders.io перевіряє на наявність і коректність заголовків відповіді сервера, які відповідають за безпеку веб-додатку.
  • Observatory by Mozilla сканує ресурс на наявність проблем безпеки. Окрім своїх результатів, при виборі відповідної опції, збирає і додає до звіту аналітику із сторонніх сервісів аналізу захищеності.
  • One button scan сканує на наявність уязвимостей компоненти ресурсу: DNS, HTTP-заголовки, SSL, чутливі дані, використовувані сервіси.
  • CSP Evaluator перевіряє правильність складання політики безпеки вмісту (CSP) і стійкість до XSS.
  • SSL Server Test виконує аналіз SSL- конфігурації веб-сервера.
  • ASafaWeb перевіряє на наявність поширених уязвимостей конфігурації сайтів, написаних на ASP.NET.
  • Snyk сканує JavaScript, Ruby і Java-додатка на наявність уязвимостей і, при необхідності, виправляє проблеми безпеки. Інтегрується з GitHub репозиторієм для проведення автоматичної перевірки і оповіщає про знайдені уязвимостях.

Перед скануванням веб-додатку онлайн-сервісами звернить увагу на умови використання. Деякі з них публікують звіти про перевірені сайти у відкритому виді.

Результати автоматизованих тестів бентежать, оскільки показують всілякі різновиди потенційних загроз. Але до кожної виявленої проблеми додається пояснення. В першу чергу проаналізуйте і виправіть критичні зауваження.

Після того, як в додаток внесені рекомендовані зміни по безпеці, проскануйте повторно, щоб переконатися в правильності прийнятих заходів.

Якщо автоматичної перевірки мало, спробуйте вручну зламати свій ресурс, змінюючи значення POST і GET запитів. Тут може допомогти налагоджувальний проксі-сервер (наприклад, Fiddler), оскільки він перехоплює значення HTTP запитів між браузером і сервером. Приділіть окрему увагу формам – спробуйте обійти валідацію, щоб впровадити XSS-ін’єкцію.

Якщо на сайті є сторінки, які доступні тільки після аутентифікації, спробуйте видати себе за іншого користувача. Для цього зміните параметри URL (наприклад, ID користувача) або значення Cookie.

Захистіть призначені для користувача дані за допомогою HTTPS

HyperText Transfer Protocol Secure (HTTPS) – розширення HTTP, яке підтримує шифрування і захищає дані користувачів при передачі в Інтернеті. HTTPS гарантує цілісність і конфіденційність взаємодії з сервером. У березні цього року популярність HTTPS досягла переломного моменту, і незабаром його використання стане “нормою”, а не виключенням, як це було раніше.

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

Це просто: SSL-сертифікат генерується безкоштовно (наприклад, на Let’s Encrypt), для більшості платформ створені інструменти автоматичного отримання і установки сертифікату. Залишається тільки включити на сервері підтримку HTTPS.

Відмітно, що компанія Google оголосила плани про надання сайтам, що використовують захищене з’єднання, переваги в результатах пошуку. Це пряник. Кнутом стануть попередження про небезпечне з’єднання у браузерах, кількість яких буде рости. HTTP відходить в минуле, тому самий час перейти на HTTPS.

Якщо HTTPS вже налагоджений, хорошою практикою вважається використання HTTP Strict Transport Security (HSTS) – заголовка відповіді сервера, який забороняє для домена використання незахищеного з’єднання.

Оновлюйте програмне забезпечення

Це життєво важливо для безпеки веб-додатків. Хакери регулярно виявляють і відразу ж застосовують нові уразливості операційних систем та іншого програмного забезпечення: HTTP-серверів чи систем управління контентом (CMS).

Якщо ресурс розташований на сервері хостинг-провайдера, то установка оновлень для операційної системи входить в комплекс послуг. Інакше треба самостійно оновлювати операційну систему.

Якщо ресурс працює на базі движка стороннього виробника (CMS або форуму), встановлюйте виправлення безпеки відразу після випуску. Більшість розробників інформують про оновлення через розсилку або RSS-канал з описом виправлених проблем. WordPress та Umbraco, крім того, повідомляють про доступні оновлення при вході в панель управління.

Багато разрабників використовують менеджери пакетів (наприклад, Composer, NPM или RubyGems), щоб встановлювати залежні компоненти для додатків. У цих пакетах також виявляють уразливості, тому стежте за їх оновленням. Щоб автоматично отримувати повідомлення про проблеми безпеки пакетів проекту, використовуйте інструменти на кшталтGemnasium.

Запобігайте SQL-ін’єкції

SQL-ін’єкція є виконанням довільного запиту до бази даних додатка за допомогою поля форми або параметра URL. У разі використання стандартної мови Transact SQL можливо вставити шкідливий код. Внаслідок чого будуть отримані, змінені або видалені дані таблиць. Щоб запобігти цьому, використайте запити, які параметризуються, які підтримуються більшістю мов веб-програмування.

Розглянемо запит:

SELECT * FROM table WHERE column = 'parameter';

Якщо зловмисник змінить значення parameter на ' OR '1'='1, запит набере наступного вигляду:

SELECT * FROM table WHERE column = '' OR '1'='1';

Оскільки '1' рівний '1', той, що атакує отримає доступ до усіх даних таблиці. Це дозволить виконати довільний запит, додавши в кінець вираження SQL.

Уразливість цього запиту легко усунути за допомогою параметризації. Наприклад, для додатка, написаного з використанням PHP і MySQLi, він виглядає так:

$stmt = $pdo ->prepare ('SELECT * FROM table WHERE column = :value');$stmt ->execute (array ('value' => $parameter));

Запобіжіть межсайтовий скриптинг

Межсайтовий скриптинг (XSS) – тип атаки на веб-ресурси, який полягає у впровадженні в сторінку сайту шкідливого коду, який виконується на комп’ютері користувача, змінює сторінку і передає вкрадену інформацію зловмисникові.

Наприклад, якщо на сторінці коментарів немає перевірки вхідних даних, зловмисник впроваджує шкідливий код JavaScript. В результаті у користувачів, які переглядають коментар, виконується код, і дані про авторизацію з cookies-файлів вирушають тому, що атакує.

Особливо схильні до цього виду атаки сучасні веб-додатки, де сторінки побудовані з призначеного для користувача контенту, фронтенд-фреймворками, що інтерпретуються, ніби Angular і Ember. У ці фреймворки вбудований захист від межсайтового скриптинга, але змішане формування контенту на стороні сервера і клієнта створює нові комплексні атаки: впровадження директив Angular або хелперів Ember.

При перевірці зосередьтеся на призначеному для користувача контенті, щоб уникнути некоректної інтерпретації браузером. Це схоже на захист від SQL-ін’єкцій. При динамічній генерації HTML- коду використайте спеціальні функції для зміни і набуття значень атрибутів (наприклад, element.setAttribute і element.textContent), а також шаблонизатори, які виконують екранізацію спеціальних символів автоматично.

Політика безпеки вмісту (CSP) – ще один інструмент захисту від XSS-атак. CSP – заголовки сервера, що визначають білий список джерел, звідки дозволено завантаження даних для різних типів ресурсів. Наприклад, заборона запуску скриптів із стороннього домена або відключення функції eval (). Завдяки політикам CSP навіть при впровадженні шкідливого коду в сторінку, його виконання стає неможливим. На офіційному сайті Mozilla розміщено керівництво по CSP з прикладами конфігурацій.

Перевіряйте і шифруйте паролі

Бережіть паролі у вигляді хеша, причому краще використати алгоритми одностороннього хешування, наприклад, SHA. В цьому випадку для авторизації користувачів порівнюються хешированні значення. Якщо зловмисник зламає ресурс і отримає хешированні паролі, збиток буде понижений за рахунок того, що хеш має безповоротню дію, і отримати з нього початкові дані практично неможливо. Але хеши на популярні паролі легко перебираються по словнику, тому використайте також “сіль”, унікальну для кожного пароля. Тоді злом великої кількості паролів стає ще повільніше і вимагає великих обчислювальних витрат.

Що стосується валідації, встановите обмеження на мінімальну довжину пароля, а також робіть перевірку на збіг з логіном, e – mail і адресою сайту.

На щастя, більшість CMS надають інструменти управління політиками безпеки, але для використання “солі” або установки мінімальної складності пароля, іноді потрібно додаткове налаштування або установку модуля. При використанні .NET варто застосувати провайдери членства, тому що в них закладена вбудована система безпеки з великою кількістю налаштувань і готовими елементами для аутентифікації і зміни паролю.

Контролюйте процес завантаження файлів

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

Навіть якщо встановлено обмеження на тип (наприклад, тільки зображення), відноситеся до завантажуваних користувачами файлів з підозрою. Розширення або MIME-тип легко підробити, читання заголовка або використання функцій перевірки розміру зображення не дають 100% гарантії, у більшість форматів зображень можливо впровадити код PHP, який буде виконаний на сервері.

Щоб це запобігти, заборонить виконання завантажуваних файлів користувачами. За умовчанням веб-сервери не намагаються виконати файли з розширеннями зображень, але не варто покладатися тільки на розширення. Відомі випадки, коли файл image.jpg.php обходив цю перевірку.

Способи обмеження доступу:

  • перейменовувати або змінювати розширення файлів при завантаженні;
  • змінювати дозволи, наприклад, на chmod 0666;
  • створити файл .htaccess (див. приклад нижче), який відкриє доступ тільки до вказаних типів файлів.
deny from all  order deny, allow allow from all 

Безпечніший спосіб – заборонити прямий доступ до завантажуваних файлів, розмістивши їх, наприклад, поза текою кореня сайту. Проте в цьому випадку потрібно буде створити скрипт (чи обробник HTTP в .NET), щоб витягати файли із закритої частини і видавати користувачеві.

 

Заходи захисту веб-застосувань для власників власних серверів:

  1. Настройте міжмережевий екран, у тому числі на блокування невживаних портів.
  2. За наявності доступу до сервера з локальної мережі створіть демілітаризовану зону (DMZ), відкривши доступ із зовнішнього світу тільки до портів 80 і 443.
  3. За відсутності доступу до сервера з локальної мережі використайте захищені методи (SFTP, SSH та ін.) для передачі файлів і управління сервером ззовні.
  4. Якщо можливо, виділите окремий сервер для баз даних, який не буде безпосередньо доступний із зовнішнього світу.
  5. Відмежуйте фізичний доступ до сервера.

Стежте за повідомленнями про помилки

Будьте обережні з тим, що відображається в повідомленнях про помилки додатка. Повідомляйте користувачеві інформацію про помилки в максимально лаконічній формі, яка виключає наявність будь-якої технічної інформації. Детальні відомості зберігаєте в лог-файлах сервера. Адже маючи повну інформацію, зловмисникові простіше зробити комплексні атаки ніби SQL-ін’єкції.

Щоб тримати руку на пульсі проекту, встановить систему моніторингу помилок. Наприклад, Sentry, яка автоматично отримує помилки від обробників в коді додатка і через форму від користувачів, а також надає панель для управління ними в реальному часі.

Перевіряйте дані, що входять

Контролюйте дані, отримані з веб-форм, як на стороні клієнта, так і на стороні сервера. У браузері перевіряються прості помилки на зразок незаповненого обов’язкового поля або тексту, введеного в числове поле. Ці перевірки обходяться, тому контроль на стороні сервера обов’язковий. Відсутність перевірки на стороні сервера призводить до експлуатації зловмисником ін’єкцій і інших видів атак.

Розподіляйте права доступу до файлів

Дозволи файлу (file permissions) визначають ХТО і ЩО може з ним робити.

У *nix системах у файлів 3 варіанти доступу, які представляються у вигляді цифр:

  • “Read” (4) – читання утримуваного файлу;
  • “Write” (2) – зміна утримуваного файлу;
  • “Execute” (1) – виконання програми або скрипта.

Щоб встановити множинні дозволи, досить скласти їх числові значення:

  • “Читання” (4) + “запис” (2) = 6;
  • “Читання” (4) + “запис” (2) + ” виконання” (1) = 7.

При розподілі прав користувачі діляться на 3 типи:

  • “Owner” (власник) – творець файлу (змінюємо, але може бути тільки один);
  • “Group” (група) – група користувачів, які отримують дозволи;
  • “Others” (інші) – інші користувачі.

Установка власникові прав доступу на читання і запис, групі – на читання, іншим – заборона доступу виглядає так:

Читання

Запис

Виконання

Власник

2

4

0

Група

0

4

0

Інші

0

0

0

Підсумкове представлення: 640.

Для каталогів аналогічно, але прапорець “виконати” означає зробити робочою директорією.

При установці CMS-дозволу, як правило, встановлюються коректно з точки зору безпеки. Проте в Інтернеті часто радять вирішувати проблеми прав доступу установкою на усі файли значення 666 чи 777. Ця порада допомагає розв’язати проблему, але відкриває серйозну уразливість, тому що усім з’являється право змінити (вставити шкідливий код) або видалити файли на сервері. Розподіляйте права доступу до файлів на сервері відповідно до завдань користувачів.

Корисні посилання для використання в роботі

При підготовці використовувалися матеріали: “9 security tips to protect your website from hackers”, “10 Tips to Improve Your Website Security” і “Web Application Security Testing Cheat Sheet”

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *