
Een van de topwebsites van Alexa (centrale cirkel), beveiligd met HTTPS, met subdomeinen (grijs) en afhankelijkheden (wit), waaronder kwetsbare (gestreepte vulling).
Tegenwoordig is het pictogram voor een beveiligde HTTPS-verbinding een standaard en zelfs noodzakelijk kenmerk van elke serieuze website. Als ontbreekt, geeft bijna elke moderne browser een waarschuwing dat en raadt aan geen vertrouwelijke informatie ernaartoe te sturen.
Maar het blijkt dat de aanwezigheid van het "slotje" in de adresbalk niet altijd bescherming garandeert. uit de Alexa-lijst heeft aangetoond: veel ervan zijn kwetsbaar voor kritieke kwetsbaarheden in de SSL/TLS-protocollen, meestal via subdomeinen of afhankelijkheden. Volgens de onderzoekers vergroot de complexiteit van moderne webapplicaties meerdere keren het aanvalsoppervlak.
Onderzoeksresultaten
Het onderzoek is uitgevoerd door specialisten van de Vrije Universiteit van Venetiƫ (Italiƫ) en de Technische Universiteit Wenen. Ze zullen een gedetailleerd rapport presenteren op het 40e IEEE-symposium over veiligheid en privacy, dat van 20-22 mei 2019 in San Francisco plaatsvindt.
Er zijn 10.000 meest populaire HTTPS-websites uit de Alexa-lijst en 90.816 gerelateerde hosts gecontroleerd. Kwetsbare cryptografische configuraties zijn gevonden op 5574 hosts, wat overeenkomt met ongeveer 5,5% van het totaal:
- 4818 zijn kwetsbaar voor MITM-aanvallen.
- 733 zijn kwetsbaar voor volledige decryptie van TLS.
- 912 zijn kwetsbaar voor gedeeltelijke decryptie van TLS.
898 sites zijn volledig ongeĆÆntrigeerd, wat betekent dat ze de injectie van externe scripts toelaten, en 977 sites laden inhoud van slecht beveiligde pagina's, waarmee kwaadwillenden kunnen communiceren.
Onderzoekers benadrukken dat onder de 898 "volledig gecompromitteerde" bronnen - webshops, financiƫle diensten en andere grote sites. 660 van de 898 sites laden externe scripts van kwetsbare hosts: dit is de belangrijkste bron van gevaar. Volgens de auteurs vergroot de complexiteit van moderne webapplicaties meerdere keren het aanvalsoppervlak.
Er zijn ook andere problemen gevonden: 10% van de formulieren voor autorisatie heeft problemen met veilige gegevensoverdracht, wat kan leiden tot het lekken van wachtwoorden, 412 websites staan cookie-interceptie en 'sessie-diefstal' toe, en 543 websites zijn kwetsbaar voor aanvallen op cookie-integriteit (via subdomeinen).
Het probleem is dat de afgelopen jaren in SSL/TLS-protocollen en software : POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) en Heartbleed (CVE-2014-0160). Om jezelf tegen deze kwetsbaarheden te beschermen, zijn er verschillende instellingen aan zowel de server- als de cliƫntkant nodig, om het gebruik van oudere kwetsbare versies te vermijden. Dit is echter een vrij complexe procedure, omdat deze instellingen een keuze uit een uitgebreide set versleutelingen en protocollen vereisen, waarvan het vrij moeilijk is om de juiste te begrijpen. Het is soms onduidelijk welke versleutelingssets en protocollen als 'voldoende veilig' moeten worden beschouwd.
Aanbevolen instellingen
Er bestaat geen officieel goedgekeurd en overeenstemming bereikt lijst van aanbevolen HTTPS-instellingen. Zo biedt verschillende configuratie-opties, afhankelijk van het gewenste beschermingsniveau. Hier zijn bijvoorbeeld de aanbevolen instellingen voor nginx server 1.14.0:
Moderne modus
De oudste ondersteunde clients zijn: Firefox 27, Chrome 30, IE 11 op Windows 7, Edge, Opera 17, Safari 9, Android 5.0 en Java 8
server {
listen 80 default_server;
listen [::]:80 default_server;
# Redirect alle HTTP-verzoeken naar HTTPS met een 301 Moved Permanently response.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# certificaten die naar de client worden verzonden in SERVER HELLO worden samengevoegd 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;
# moderne configuratie. pas aan naar jouw behoeften.
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 vereist) (15768000 seconden = 6 maanden)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# haal OCSP-records op van de URL in het ssl_certificate en cache deze
ssl_stapling on;
ssl_stapling_verify on;
## controleer de vertrouwensketen van het OCSP-antwoord met behulp van Root CA en Intermediate certificaten
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
resolver ;
....
}Gemiddelde ondersteuning
De oudste ondersteunde clients zijn: 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;
# Redirecteer alle HTTP-verzoeken naar HTTPS met een 301 Moved Permanently-respons.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# certificaten die naar de client in SERVER HELLO worden verzonden zijn samengevoegd in ssl_certificate
ssl_certificate /pad/naar/getekend_cert_plus_intermediates;
ssl_certificate_key /pad/naar/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets uit;
# Diffie-Hellman-parameter voor DHE-ciphersuites, aanbevolen 2048 bits
ssl_dhparam /pad/naar/dhparam.pem;
# tussenliggende configuratie. Pas deze aan uw behoeften aan.
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 aan;
# HSTS (ngx_http_headers_module is vereist) (15768000 seconden = 6 maanden)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# haal OCSP-opvraagdossiers op van de URL in ssl_certificate en cache ze
ssl_stapling aan;
ssl_stapling_verify aan;
## verifieer de vertrouwensketen van het OCSP-antwoorde met behulp van Root CA en tussencertificaten
ssl_trusted_certificate /pad/naar/root_CA_cert_plus_intermediates;
resolver ;
....
}Oude ondersteuning
De oudste ondersteunde clients zijn: Windows XP IE6, Java 6
server {
listen 80 default_server;
listen [::]:80 default_server;
# Redirecteer alle HTTP-verzoeken naar HTTPS met een 301 Moved Permanently-respons.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# certificaten die naar de client in SERVER HELLO worden verzonden zijn samengevoegd in ssl_certificate
ssl_certificate /pad/naar/getekend_cert_plus_intermediates;
ssl_certificate_key /pad/naar/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets uit;
# Diffie-Hellman-parameter voor DHE-ciphersuites, aanbevolen 2048 bits
ssl_dhparam /pad/naar/dhparam.pem;
# oude configuratie. Pas deze aan uw behoeften aan.
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 aan;
# HSTS (ngx_http_headers_module is vereist) (15768000 seconden = 6 maanden)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# haal OCSP-opvraagdossiers op van de URL in ssl_certificate en cache ze
ssl_stapling aan;
ssl_stapling_verify aan;
## verifieer de vertrouwensketen van het OCSP-antwoorde met behulp van Root CA en tussencertificaten
ssl_trusted_certificate /pad/naar/root_CA_cert_plus_intermediates;
resolver ;
....
}Het wordt aanbevolen om altijd de volledige set aan versleutelingen en de laatste versie van OpenSSL te gebruiken. De versleutelingsset in de serverinstellingen geeft de prioriteit aan waarmee ze zullen worden gebruikt, afhankelijk van de instellingen van de client.
Onderzoek toont aan dat het niet voldoende is om simpelweg een HTTPS-certificaat te installeren. āHoewel we cookies niet meer behandelen zoals in 2005, en āfatsoenlijke TLSā gemeengoed is geworden, blijkt dat deze basisdingen verrassend vaak niet voldoende zijn om de veiligheid van een groot aantal zeer populaire websites te waarborgen,ā - de auteurs van het onderzoek. Voor een betrouwbare bescherming van de verbinding tussen server en client is het belangrijk om de infrastructuur van zowel eigen subdomeinen als externe hosts van waaruit de content voor de website wordt geleverd, nauwlettend in de gaten te houden. Misschien is het verstandig om een audit te laten uitvoeren door een extern bedrijf dat gespecialiseerd is in informatiebeveiliging.
Bron: habr.com
