HTTPS не е секогаш толку безбеден како што изгледа. Пронајдени пропусти во 5,5% од HTTPS-страниците

HTTPS не е секогаш толку безбеден како што изгледа. Пронајдени пропусти во 5,5% од HTTPS-страниците
Една од најдобрите страници на Alexa (централен круг), обезбедена со HTTPS, со поддомени (сива) и зависности (бела), меѓу кои има и ранливи (испрекинат засенчување)

Денес, иконата за безбедно поврзување HTTPS стана стандарден, па дури и неопходен атрибут на која било сериозна локација. Ако сертификат недостасува, речиси сите неодамнешни прелистувачи покажуваат предупредување дека врската со страницата не е „безбедна“ и не препорачувајте пренесување доверливи информации на него.

Но, излегува дека присуството на „брава“ во лентата за адреси не секогаш гарантира заштита. Проверка на 10 водечки сајтови од рејтингот, Alexa покажа дека многу од нив се предмет на критични пропусти во протоколите SSL / TLS, обично преку поддомени или зависности. Според авторите на студијата, сложеноста на модерните веб-апликации во голема мера ја зголемува површината на нападот.

Резултати од истражувањето

Студијата беше спроведена од експерти од Универзитетот во Венеција Ка' Фоскари (Италија) и Техничкиот универзитет во Виена. Тие ќе презентираат детален извештај на 40-тиот IEEE Symposium on Security and Privacy, кој ќе се одржи од 20 до 22 мај 2019 година во Сан Франциско.

Беа тестирани топ 10 HTTPS-страници на списокот Alexa и 000 поврзани хостови. Ранливи криптографски конфигурации беа откриени на 90 хостови, што е приближно 816% од вкупниот број:

  • 4818 ранливи на MITM
  • 733 се ранливи на целосна декрипција на TLS
  • 912 се ранливи на делумно TLS дешифрирање

898 сајтови се целосно отворени за хакирање, односно дозволуваат инјектирање на скрипти од трети страни, а 977 сајтови вчитуваат содржина од слабо заштитени страници со кои напаѓачот може да комуницира.

Истражувачите нагласуваат дека меѓу 898-те „целосно компромитирани“ ресурси се онлајн продавници, финансиски услуги и други големи сајтови. 660 од 898 сајтови преземаат надворешни скрипти од ранливи домаќини: ова е главниот извор на опасност. Според авторите, сложеноста на модерните веб-апликации во голема мера ја зголемува површината на нападот.

Откриени се и други проблеми: 10% од формуларите за овластување имаат проблеми со безбедниот пренос на информации, што се заканува да протече лозинки, 412 страници дозволуваат пресретнување на колачиња и киднапирање на сесии, а 543 локации се предмет на напади на интегритетот на колачињата (преку поддомени) .

Проблемот е што во последниве години во SSL / TLS протоколите и софтверот идентификуваше голем број ранливости: ПУДЛА (CVE-2014-3566), ЅВЕР (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) и Heartbleed (CVE-2014-0160). За да се заштитите од нив, потребни се бројни поставки на страната на серверот и клиентот за да се избегне користење на стари ранливи верзии. Но, ова е прилично нетривијална процедура, бидејќи таквите поставки вклучуваат избор од широк сет на шифри и протоколи, кои се прилично тешки за разбирање. Не е секогаш јасно кои пакети и протоколи за шифри се сметаат за „доволно безбедни“.

Препорачани поставки

Нема никој официјално одобрен и договорен список со препорачани поставки за HTTPS. Значи, Генератор за конфигурација на Mozilla SSL нуди неколку опции за конфигурација, во зависност од потребното ниво на заштита. На пример, тука се препорачаните поставки за серверот nginx 1.14.0:

Модерен режим

Најстари поддржани клиенти: Firefox 27, Chrome 30, IE 11 на Windows 7, Edge, Opera 17, Safari 9, Android 5.0 и Java 8

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;


# modern configuration. tweak to your needs.
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

Средна поддршка

Најстари поддржани клиенти: Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

Стара поддршка

Најстари поддржани клиенти: Windows XP IE6, Java 6

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# old configuration. tweak to your needs.
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

Се препорачува секогаш да го користите целосниот пакет со шифри и најновата верзија на OpenSSL. Пакетот шифри во поставките на серверот го одредува приоритетот во кој тие ќе се користат, во зависност од поставките на клиентот.

Истражувањата покажуваат дека не е доволно само да инсталирате сертификат за HTTPS. „Иако не ракуваме со колачиња како во 2005 година, а „пристојниот TLS“ стана вообичаен, се испостави дека овие основни работи не се доволни за да се обезбеди изненадувачки голем број на многу популарни сајтови“. велат тие авторите на делото. За сигурно да го заштитите каналот помеѓу серверот и клиентот, треба внимателно да ја следите инфраструктурата од вашите сопствени поддомени и хостови од трети страни од кои се обезбедува содржината за страницата. Можеби има смисла да се нарача ревизија од некоја трета компанија која е специјализирана за безбедност на информации.

HTTPS не е секогаш толку безбеден како што изгледа. Пронајдени пропусти во 5,5% од HTTPS-страниците

Извор: www.habr.com