HTTPS nije uvijek tako siguran kao što se čini. Ranjivosti pronađene u 5,5% HTTPS stranica

HTTPS nije uvijek tako siguran kao što se čini. Ranjivosti pronađene u 5,5% HTTPS stranica
Jedno od Alexa-inih najboljih mjesta (središnji krug), zaštićeno HTTPS-om, s poddomenama (sivo) i ovisnostima (bijelo), među kojima ima ranjivih (isprekidano sjenčanje)

Danas je ikona HTTPS sigurne veze postala standard, pa čak i neophodan atribut svake ozbiljne stranice. Ako certifikat nedostaje, gotovo svi noviji preglednici prikazuju upozorenje da veza sa web mjestom "nije sigurna" i ne preporučuju prijenos povjerljivih podataka na njega.

Ali ispada da prisutnost "brave" u adresnoj traci ne jamči uvijek zaštitu. Provjera 10 000 vodećih stranica iz ocjene, Alexa je pokazala da su mnogi od njih podložni kritičnim ranjivostima u SSL/TLS protokolima, obično putem poddomena ili ovisnosti. Prema autorima studije, složenost modernih web aplikacija uvelike povećava površinu napada.

Rezultati istraživanja

Istraživanje su proveli stručnjaci sa Sveučilišta u Veneciji Ca' Foscari (Italija) i Tehničkog sveučilišta u Beču. Oni će predstaviti detaljno izvješće na 40. IEEE simpoziju o sigurnosti i privatnosti koji će se održati od 20. do 22. svibnja 2019. u San Franciscu.

Testirano je 10 000 najboljih HTTPS stranica s liste Alexa i 90 816 povezanih hostova. Ranjive kriptografske konfiguracije otkrivene su na 5574 računala, odnosno približno 5,5% od ukupnog broja:

  • 4818 ranjiv na MITM
  • 733 su ranjivi na potpunu TLS dešifriranje
  • 912 su ranjivi na djelomičnu TLS dešifraciju

898 stranica potpuno je otvoreno za hakiranje, odnosno dopuštaju ubacivanje stranih skripti, a 977 stranica učitava sadržaj sa slabo zaštićenih stranica s kojima napadač može komunicirati.

Istraživači naglašavaju da su među 898 "potpuno ugroženih" resursa internetske trgovine, financijske usluge i druge velike stranice. 660 od 898 stranica preuzima vanjske skripte s ranjivih hostova: ovo je glavni izvor opasnosti. Prema autorima, složenost modernih web aplikacija uvelike povećava površinu napada.

Uočeni su i drugi problemi: 10% obrazaca za autorizaciju ima problema sa sigurnim prijenosom informacija, što prijeti curenjem lozinki, 412 stranica dopušta presretanje kolačića i otmicu sesije, a 543 stranice podložne su napadima na integritet kolačića (putem poddomena) .

Problem je što se posljednjih godina u SSL/TLS protokolima i softveru identificirao niz ranjivosti: PUDLICA (CVE-2014-3566), ZVIJER (CVE-2011-3389), ZLOČIN (CVE-2012-4929), POVREDA (CVE-2013-3587) i Heartbleed (CVE-2014-0160). Za zaštitu od njih potrebne su brojne postavke na strani poslužitelja i klijenta kako bi se izbjeglo korištenje starih ranjivih verzija. Ali ovo je prilično netrivijalan postupak, jer takve postavke uključuju odabir iz opsežnog skupa šifri i protokola, koje je prilično teško razumjeti. Nije uvijek jasno koji se paketi šifri i protokoli smatraju "dovoljno sigurnima".

Preporučene postavke

Ne postoji službeno odobren i dogovoren popis preporučenih HTTPS postavki. Tako, Mozilla SSL konfiguracijski generator nudi nekoliko opcija konfiguracije, ovisno o potrebnoj razini zaštite. Na primjer, ovdje su preporučene postavke za poslužitelj nginx 1.14.0:

Moderan način

Najstariji podržani klijenti: Firefox 27, Chrome 30, IE 11 na Windows 7, Edge, Opera 17, Safari 9, Android 5.0 i 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>;

....
}

Srednja podrška

Najstariji podržani klijenti: 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>;

....
}

Stara podrška

Najstariji podržani klijenti: 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>;

....
}

Preporuča se da uvijek koristite potpuni paket šifri i najnoviju verziju OpenSSL-a. Paket šifri u postavkama poslužitelja određuje prioritet u kojem će se koristiti, ovisno o postavkama klijenta.

Istraživanja pokazuju da nije dovoljno samo instalirati HTTPS certifikat. "Iako ne rukujemo kolačićima kao što smo radili 2005., a 'pristojan TLS' je postao uobičajen, ispada da ove osnovne stvari nisu dovoljne da osiguraju iznenađujuće velik broj vrlo popularnih stranica," reći autori djela. Kako biste pouzdano zaštitili kanal između poslužitelja i klijenta, morate pažljivo pratiti infrastrukturu s vlastitih poddomena i hostova trećih strana s kojih se isporučuje sadržaj za web mjesto. Možda ima smisla naručiti reviziju od neke treće strane koja se bavi informacijskom sigurnošću.

HTTPS nije uvijek tako siguran kao što se čini. Ranjivosti pronađene u 5,5% HTTPS stranica

Izvor: www.habr.com