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

HTTPS nije uvijek siguran kao što se čini. Ranjivosti pronađene na 5,5% HTTPS stranica
Jedna od Alexinih top lokacija (centralni krug), zaštićena HTTPS-om, sa poddomenima (siva) i ovisnostima (bijela), među kojima ima i ranjivih (isprekidano sjenčanje)

Danas je ikona HTTPS sigurne veze postala standardni, pa čak i neophodan atribut svake ozbiljne stranice. Ako sertifikat nedostaje, skoro svi noviji pretraživači prikazuju upozorenje da veza sa sajtom "nije sigurna" i ne preporučujemo prenošenje povjerljivih informacija na njega.

Ali ispostavilo se da prisustvo "brave" u adresnoj traci ne garantuje uvek zaštitu. Provjeravamo 10 vodećih sajtova iz rejtinga, Alexa je pokazala da su mnogi od njih podložni kritičnim ranjivostima u SSL/TLS protokolima, obično kroz poddomene ili zavisnosti. Prema autorima studije, složenost modernih web aplikacija uvelike povećava površinu napada.

Rezultati studije

Studiju su sproveli stručnjaci sa Univerziteta u Veneciji Ca' Foscari (Italija) i Tehničkog univerziteta u Beču. Oni će predstaviti detaljan izvještaj na 40. IEEE simpozijumu o sigurnosti i privatnosti, koji će se održati od 20. do 22. maja 2019. u San Franciscu.

Testirano je 10 najboljih HTTPS lokacija na Alexa listi i 000 povezanih hostova. Ranjive kriptografske konfiguracije otkrivene su na 90 hosta, odnosno oko 816% od ukupnog broja:

  • 4818 ranjiv na MITM
  • 733 su ranjivi na potpuno TLS dešifriranje
  • 912 su osjetljivi na djelomično TLS dešifriranje

898 sajtova je potpuno otvoreno za hakovanje, odnosno dozvoljavaju ubacivanje stranih skripti, a 977 sajtova učitava sadržaj sa loše zaštićenih stranica sa kojima napadač može da komunicira.

Istraživači naglašavaju da su među 898 „potpuno ugroženih“ resursa online prodavnice, finansijske usluge i drugi veliki sajtovi. 660 od 898 lokacija preuzima vanjske skripte sa ranjivih hostova: ovo je glavni izvor opasnosti. Prema autorima, složenost modernih web aplikacija uvelike povećava površinu napada.

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

Problem je što su posljednjih godina u SSL/TLS protokolima i softveru identifikovao niz ranjivosti: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) i Heartbleed (CVE-2014-0160). Da bi se zaštitili od njih, potrebna su brojna podešavanja na strani servera i klijenta kako bi se izbjeglo korištenje starih ranjivih verzija. Ali ovo je prilično netrivijalan postupak, jer takve postavke uključuju izbor 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 odobrena i usaglašena lista preporučenih HTTPS postavki. dakle, Mozilla SSL konfiguracijski generator nudi nekoliko opcija konfiguracije, ovisno o potrebnom nivou zaštite. Na primjer, evo preporučenih postavki za nginx 1.14.0 server:

Moderan način rada

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čuje se da uvijek koristite kompletan paket šifara i najnoviju verziju OpenSSL-a. Paket šifri u postavkama servera 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. godine, a 'pristojan TLS' je postao uobičajena pojava, ispostavilo se da ove osnovne stvari nisu dovoljne da osiguraju iznenađujuće veliki broj vrlo popularnih stranica," kažu autori dela. Da biste pouzdano zaštitili kanal između servera i klijenta, morate pažljivo pratiti infrastrukturu sa svojih poddomena i hostova trećih strana sa kojih se isporučuje sadržaj za sajt. Možda ima smisla naručiti reviziju od neke treće strane koja je specijalizovana za sigurnost informacija.

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

izvor: www.habr.com