Як використовувати HTTP-заголовки для попередження вразливостей



Чи знаєте ви, що в більшості випадків вразливість системи безпеки можна усунути, додавши необхідні заголовки відповіді?

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

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

Зауваження:
  • До внесення змін раджу зробити резервну копію файлу конфігурації;
  • Деякі заголовки можуть не підтримуватися на всіх браузерах, тому до виконання коштує перевірити сумісність;
  • Mod_headers повинен бути включений в Apache для використання цих заголовків. Наступна рядок повинна бути раскомментирована в httpd.conf file: LoadModule headers_module modules/mod_headers.so
Якщо ви користуєтеся SUCURI Cloud WAF, то про налаштування сервера вручну можете не турбуватися, більшість параметрів вже автоматично включено.

Список заголовків HTTP
X-XSS-Protection
HTTP Strict Transport Security
X-Frame-Options
X-Content-Type-Options
HTTP Public Key Pinning

Content Security Policy
X-XSS-Protection
Заголовок X-XSS-Protection може запобігти деякі XSS-атаки («міжсайтовий скриптінг»), він сумісний з IE 8+, Chrome, Opera, Safari і Android.

Google, Facebook, Github використовують цей заголовок, і більшість консультантів з попередження проникнень порекомендують Вам його використовувати.

Всього існує чотири варіанти конфігурації:
Значення Зміст
0 XSS-фільтр вимкнено
1 XSS-фільтр включений, і, в разі виявлення атаки, сторінка піддається цензурі
1;mode=block XSS-фільтр включений, і, в разі виявлення атаки, запобігає обробку сторінки
1;report=http://example.com/report_URI XSS-фільтр включений, і, в разі виявлення атаки, надсилається звіт про порушення
Давайте використаємо 1;mode=block для наступних веб-серверів.

Apache HTTP-сервер

Додайте наступний запис у httpd.conf вашого сервера Apache:

Header set X-XSS-Protection "1; mode=block"

Для перевірки перезапустіть Apache.

Nginx

Додайте наступне в nginx.conf в розділі HTTP:

add_header X-XSS-Protection "1; mode=block";

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

max-cdn

Якщо ви використовуєте max-cdn, додати заголовок — простіше простого. Зайдіть в Edge Rules, натисніть «New Rule» і виберіть «Add X-XSS-Protection Header» з випадаючого списку.



Microsoft IIS

  • Відкрийте Диспетчер IIS;
  • Виберіть сайт, для якого необхідно включити заголовок;
  • Зайдіть в «Заголовки відповіді HTTP»
  • Натисніть «Додати» в розділі дій.
  • Введіть назву, значення і натисніть OK.


  • Перезапустіть IIS, щоб побачити результати.


HTTP Strict Transport Security
Заголовок HSTS (HTTP Strict Transport Security) гарантує, що весь обмін даними з браузера здійснюється по протоколу HTTPS (HTTP Secure). Це запобігає спроби обійти HTTPS і перенаправляє всі HTTP запити на HTTPS.

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

Заголовок HSTS сумісний з останніми версіями більшості браузерів (IE, Firefox, Opera, Safari і Chrome). Всього є три варіанти конфігурації.
Значення Зміст
max-age Інтервал (у секундах) для вказівки браузеру, що запити слід надсилати тільки через HTTPS.
includeSubDomains Конфігурація поширюється на піддомени.
preload Використовуйте, якщо хочете додати домен зумовлений список HSTS.
В якості прикладу давайте налаштуємо HSTS на рік і додамо домен і піддомени зумовлений список HSTS.

Apache HTTP-сервер

Щоб використовувати HSTS в Apache, додайте в файл httpd.conf наступний запис:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Щоб побачити результат, перезапустіть Apache.

Nginx

Щоб налаштувати HSTS в Nginx, додайте наступний запис у nginx.conf в директиві Server (SSL):

add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';

Як завжди, для перевірки доведеться перезавантажити Nginx.

Cloud Flare

Якщо ви використовуєте Cloud Flare, то включити HSTS можна всього за пару кліків миші.
  • Увійдіть Cloud Flare та виберіть потрібний сайт.
  • Перейдіть у вкладку «Crypto» і натисніть «Enable HSTS.»




Виберіть необхідні вам параметри зміни вступлять в дію одразу ж.

Microsoft IIS

Запустіть Диспетчер IIS і додайте заголовок, перейшовши в «Заголовки відповіді HTTP» для відповідного сайту.



Перезапустіть сайт.

X-Frame-Options
Заголовок X-Frame-Options дозволяє знизити вразливість вашого сайту для кликджекинг-атак. Цей заголовок служить інструкцією для браузера не завантажувати вашу сторінку в frame/iframe. Не всі браузери підтримують цей варіант, так що перевірте заголовок на сумісність перед тим, як додавати.

Є три варіанти конфігурації.
Значення Зміст
SAMEORIGIN Дозволяє завантаження контенту в frame/iframe тільки якщо кадр і сторінка, його загружающая, розташовані на одному домені.
DENY Забороняє завантаження контенту в frame/iframe.
ALLOW-FROM Допускає завантаження контенту в кадрах тільки для певного URI.
Давайте розглянемо, як додати конфігурацію "DENY" для заборони вбудовування.

Apache

Додайте такий рядок у httpd.conf і для перевірки перезавантажте веб-сервер:

Header always append X-Frame-Options DENY

Nginx

Додайте наступне в nginx.conf в директиві Server:

add_header X-Frame-Options "DENY";

Для перевірки результатів необхідне перезавантаження.

F5 LTM

Створіть iRule наступного змісту для відповідного віртуального сервера:

when HTTP_RESPONSE {
HTTP::header insert "X-FRAME-OPTIONS" "DENY"
}

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

WordPress

Цей заголовок можна також використовувати в WordPress. Додайте наступне файл wp-config.php:

header('X-Frame-Options: DENY');

Якщо ви не хочете вносити зміни у файл, то можете скористатися плагіном за цієї інструкції.

Microsoft IIS

Щоб додати заголовок, відкрийте «Заголовки відповіді HTTP» для відповідного сайту.



Щоб зміни відобразилися, потрібно перезапустити сайт.

X-Content-Type-Options
Можна запобігти атаки з використанням підміни MIME типів, додавши цей заголовок відповіді HTTP. Заголовок містить інструкції з визначенням типу файлу і не допускає сниффинг контенту. При конфігурації потрібно буде додати лише один параметр: «nosniff».

Давайте подивимося, як додати цей заголовок.

Apache

Додайте такий рядок у файл httpd.conf:

Header set X-Content-Type-Options nosniff

Не забудьте перезавантажити веб-сервер Apache, щоб конфігурація вступила в дію.

Nginx

Додайте такий рядок у файл nginx.conf в директиві Server:

add_header X-Content-Type-Options nosniff;

Як зазвичай, буде потрібно перезавантажити Nginx для перевірки результатів.

WordPress

Якщо ви використовуєте WordPress, то ви можете скористатися плагіном Security Headers для використання цього заголовку.

Microsoft IIS

Відкрийте IIS і зайдіть у розділ «Заголовки відповіді HTTP»
Натисніть «Додати» введіть назву та значення.



Натисніть OK і перезавантажте IIS, щоб перевірити результат.

HTTP Public Key Pinning
Скоротіть ризик MITM-атаки («людина посередині») з допомогою прив'язки сертифіката. Для цього необхідно додати заголовок HPKP (HTTP Public Key Pinning).

Можна прив'язати кореневий сертифікат відкритого ключа чи проміжний сертифікат. На момент підготовки статті, підтримка HPKP здійснюється в Firefox і Chrome c алгоритму хешування SHA-256.

Є чотири варіанти конфігурації.
Значення Зміст
report-uri=«url» Надіслати звіт на певний URL, якщо прив'язка не відбулася. Це необов'язковий параметр.
pin-sha256=«sha256key» Визначити прив'язку.
max-age= Інструкція для браузера запам'ятати час в секундах, протягом якого сайт буде доступний тільки з використанням одного з прив'язаних сертифікатів.
IncludeSubDomains Застосувати у відношенні піддоменів.
В якості прикладу давайте розглянемо заголовок HPKP для facebook.com:

public-key-pins-report-only:max-age=500; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9Vwugoiud4pb18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E="; pin-sha256="q4PO2G2cbkZhZ82+JgmRUyGMoAeozA+BSXVXQWB8XWQ="; report-uri=http://reports.fb.com/hpkp/

Якщо ви збираєтеся використовувати на своєму сайті, то рекомендую звернутися до керівництву, написаному Scott Helme.

Content Security Policy
Щоб запобігти XSS-атаки, кликджекинг, впровадження коду, можна додати заголовок відповіді Content Security Policy (CSP). CSP містить інструкції про завантаження контенту з дозволених джерел.

Не всі браузери підтримують CSP, так що перед використанням доведеться перевірити це. Є три варіанти використання заголовків CSP:
  1. Content-Security-Policy – Level 2/1.0;
  2. X-Content-Security-Policy – не рекомендується;
  3. X-Webkit-CSP – не рекомендується.

Якщо ви ще користуєтеся застарілим варіантом, то варто задуматися про перехід на оновлений.

Для заголовка CSP можна задати безліч параметрів, їх можна вивчити на OWASP. Пропоную розглянути два найбільш поширених.
Значення Зміст
default-src Завантажувати з певного джерела все.
script src Завантажувати з певного джерела тільки скрипти.
Розглянемо дозвіл завантаження будь-якого контенту з поточного домену для різних веб-серверів.

Apache

Додайте такий рядок у файл httpd.conf і перезавантажте веб-сервер:

Header set Content-Security-Policy "default-src 'self';"

Nginx

Додайте наступну секцію Server в файл nginx.conf:

add_header Content-Security-Policy "default-src 'self';";

Microsoft IIS

Зайдіть в «Заголовки відповіді HTTP» для відповідного сайту Диспетчер IIS і додайте наступні параметри:



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

Останній абзац, заради якого Chandan Kumar пише ці статті, а я їх перекладаю:
будемо раді бачити Вас в числі відвідувачів HOSTING.cafe (пошук віртуальних серверів, віртуального хостингу і не тільки) або POISK.hosting (збірник відгуків про хостерах).

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.