Überblick. kurze Einführung in SSL Stand der Unterstützung von SSL in Perl



Ähnliche Dokumente
Netzsicherheit I, WS 2008/2009 Übung 12. Prof. Dr. Jörg Schwenk

Übersicht. Was ist FTP? Übertragungsmodi. Sicherheit. Öffentliche FTP-Server. FTP-Software

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Ein Hinweis vorab: Mailkonfiguration am Beispiel von Thunderbird

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Installationsanleitung SSL Zertifikat

FL1 Hosting Technische Informationen

Praktikum IT-Sicherheit

Freie Zertifikate für Schulen und Hochschulen

Ist das so mit HTTPS wirklich eine gute Lösung?

WLAN Konfiguration. Michael Bukreus Seite 1

Step by Step Webserver unter Windows Server von Christian Bartl

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Öffnen Sie den Internet-Browser Ihrer Wahl. Unabhängig von der eingestellten Startseite erscheint die folgende Seite in Ihrem Browserfenster:

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

5. Testen ob TLS 1.0 auf Ihrem System im Internet-Explorer fehlerfrei funktioniert

Programmiertechnik II

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Anleitung über den Umgang mit Schildern

Das Leitbild vom Verein WIR

Virtual Private Network

Internet online Update (Mozilla Firefox)

FL1 Hosting FAQ. FL1 Hosting FAQ. V1.0 (ersetzt alle früheren Versionen) Gültig ab: 18. Oktober Telecom Liechtenstein AG

FTP-Leitfaden RZ. Benutzerleitfaden

Internet online Update (Internet Explorer)

Verteilte Systeme Unsicherheit in Verteilten Systemen

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Zertifikatssperrliste(n) in Active Directory veröffentlichen

Installation SQL- Server 2012 Single Node

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Anbindung des eibport an das Internet

WLAN und VPN im b.i.b. mit Windows (Vista Home Premium SP1) oder Windows 7

Informatik für Ökonomen II HS 09

Schritt 1: Starten Sie Hidemyass, wählen Sie "IP: Port Proxies"

Drucken von Webseiten Eine Anleitung, Version 1.0

COMPUTER MULTIMEDIA SERVICE

Guide DynDNS und Portforwarding

IAC-BOX Netzwerkintegration. IAC-BOX Netzwerkintegration IACBOX.COM. Version Deutsch

Sie müssen sich für diesen Fall mit IHREM Rechner (also zeitgut jk o.ä.) verbinden, nicht mit dem Terminalserver.

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Verteilte Systeme. Übung 10. Jens Müller-Iden

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

QTS. Qualitätssicherungs-Teileverfolgungs- System online. Benutzung der grafischen Oberfläche via Internetbrowser

Collax VPN. Howto. Vorraussetzungen Collax Security Gateway Collax Business Server Collax Platform Server inkl. Collax Modul Gatekeeper

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Bernd Blümel. Verschlüsselung. Prof. Dr. Blümel

Professionelle Seminare im Bereich MS-Office

1 Konto neu in Mailprogramm einrichten

Nutzung der VDI Umgebung

ICT-Triengen - Zugang für Lehrpersonen

Leichte-Sprache-Bilder

Schritt 1: Auswahl Schritt 3 Extras > Konten Schritt 2: Konto erstellen Konto hinzufügen klicken

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Steganos Secure Schritt für Schritt-Anleitung für den Gastzugang SCHRITT 1: AKTIVIERUNG IHRES GASTZUGANGS

Netzwerk einrichten unter Windows

Installation der SAS Foundation Software auf Windows

Helmut Kleinschmidt. Pflicht ab

Collax PPTP-VPN. Howto

Was ich als Bürgermeister für Lübbecke tun möchte

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

SSL/TLS-VERBINDUNGEN ZU MOODLE

Apache HTTP-Server Teil 1

Was meinen die Leute eigentlich mit: Grexit?

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

SHAREPOINT Unterschiede zwischen SharePoint 2010 & 2013

MSXFORUM - Exchange Server 2003 > Konfiguration NNTP unter Exchange 2003

ICS-Addin. Benutzerhandbuch. Version: 1.0

Dokumentation für Windows

Anwendungsprotokolle: HTTP, POP, SMTP

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Datensicherung. Beschreibung der Datensicherung

Application Layer Active Network

Was ist Sozial-Raum-Orientierung?

ISA Server 2004 Erstellen einer Webverkettung (Proxy-Chain) - Von Marc Grote

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

Bedienungsanleitung für den SecureCourier

Abruf und Versand von Mails mit Verschlüsselung

1 Schritt: Auf der Seite einloggen und. ODER Zertifikat für VPN, wenn sie nur VPN nutzen möchten

Wie funktioniert das WWW? Sicher im WWW

INSTALLATION ABACUS ABAWEBCLIENT

Meet the Germans. Lerntipp zur Schulung der Fertigkeit des Sprechens. Lerntipp und Redemittel zur Präsentation oder einen Vortrag halten

OP-LOG

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Rechnernetze Praktikum Versuch 8: Zertifikate, Sicherheit in öffentlichen Netzen

Apache Webserver with SSL on Windows

Los geht s. aber Anhand meines Beispiels!

Windows Server 2012 RC2 konfigurieren

Einrichten eines E- Mail Kontos mit Mail (Mac OSX)

Datenempfang von crossinx

IEEE 802.1x, Dynamic ARP Inspection und DHCP Snooping. von Thorsten Dahm

50 Fragen, um Dir das Rauchen abzugewöhnen 1/6

Hilfestellung für den Einsatz von Facebook-Applikationen

Sichere s. Kundeninformation zur Verschlüsselung von s in der L-Bank

Printserver und die Einrichtung von TCP/IP oder LPR Ports

RIZIV INAMI - LIKIV. eid-anleitung für PC

Konfiguration von Exchange 2000 zum versenden und empfangen von Mails & Lösung des SEND after POP Problems

Einrichten eines Exchange-Kontos mit Thunderbird

WINDOWS 10 Upgrade. Beispiel: Desktop-Ausschnitt von vorhandenem WIN 8.1 (rechte Ecke der Taskleiste)

Tutorial -

Transkript:

SSL und Perl

Überblick kurze Einführung in SSL Stand der Unterstützung von SSL in Perl

was ist überhaupt SSL? "Secure Socket Layer", Nachfolger TLS (Transport Layer Security), welches fast das gleiche ist stellt verschlüsselte Verbindung zwischen zwei Endpunkten her optionaler Austausch von Zertifikaten, um Identität zu überprüfen

was sind Zertifikate? "elektronischer Ausweis" enthält Informationen über einen Endpunkt (z.b. Hostnamen, IP-Adressen...) sollte (elektronisch) unterschrieben sein von einer glaubwürdigen Instanz (CA = Certificate Agency, Herausgeber) hat eine Gültigkeitsdauer kann widerrufen werden Spezialfall selbstsignierte Zertifikate: nur der Inhaber des Zertifikates hat unterschrieben ("Glaube mir, ich bins")

Überprüfung von Zertifikaten passt das Zertifikat zu demjenigen, der es mir präsentiert (Identität)? vertraue ich der CA (dem Herausgeber), die es unterschrieben hat? Dazu haben die Browser eine Liste verbreiteter CAs eingebaut. bei selbstsignierten Zertifikaten: Glaube ich, das der mir Unbekannte mich nicht anlügt? ist das Zertifikat abgelaufen? ist das Zertifikat widerrufen worden?

Hintergrund dieses Vortrages 11/07: CVE-2007-5162: "Ruby Net::HTTPS library does not validate server certificate CN" Perl macht es doch auch nicht anders und keiner regt sich auf? Wo ist das Problem? Perl-Workshop 02/2008: "Bist du der IO::Socket::SSL Maintainer?" Ja, aber eigentlich ist das doch nicht die Aufgabe von IO::Socket::SSL sondern des übergeordneten Layers (HTML, SMTP...) Aber: die Nutzer von IO::Socket::SSL checken die Zertifikate selber nicht

Warum überhaupt überprüfen? "ich will doch nur verschlüsseln, warum brauche ich die Unterschrift einer CA?" "Mozilla SSL policy bad for the Web": Abschreckende Firefox3 Warnungen bei selbstsignierten Zertifikaten hindern Verbreitung von Verschlüsselung Problem: kein Schutz vor Man-In-The-Middle Attacken ohne Überprüfung von Zertifikaten

was ist Man-In-The-Middle? Endpunkte: Alice, Bob. Angreifer Mallory Alice will SSL Verbindung zu Bob aufbauen, landet aber bei Mallory. Mallory baut SSL Verbindung weiter zu Bob auf und bekommt von diesem ein Zertifikat präsentiert. Um die Verbindung unverschlüsselt lesen oder manipulieren zu können muss er die Daten von Bob entschlüsseln und für Alice erneut verschlüsseln. Da Mallory das Secret von Bobs Zertifikat nicht hat, erstellt er ein neues, was wie Bobs aussieht (aber andere Unterschrift) Nur wenn Alice das Zertifikat gründlich verifiziert findet sie die falsche Unterschrift.

ist das wirklich eine Gefahr? Verbindungen umleiten mittels ARP Spoofing im lokalen Netz Verbindungen umleiten mittels DNS Spoofing im Internet (z.b. CVE-2008-1447) Exit Node im Tor Netzwerk Tools wie z.b. Ettercap zur Automatisierung des Angriffs sind frei verfügbar wird offensichtlich auch praktiziert: Bugreport, der auf MITM in the wild schließen läßt

Überprüfung der Identität Check gegen commonname und/oder subjectaltnames RFC2818 (http), RFC3920 (xmpp) - wenn subjectaltnames existieren wird commonname nicht benutzt, subjectaltname kann auch Wildcard, zb *.example.com aber auch host*.example.com sein. RFC4513 (ldap), RFC2995 (pop,imap...), RFC4642 (nntp) - sowohl commonname wie auch subjectaltname werden überprüft, subjectaltname kann auch *.example.com sein, aber nicht host*.example.com RFC3207 (smtp) - man soll checken ob man dem Zertifikat vertraut, ohne Details zum Vorgang zu geben RFC4217 (FTP über TLS) empfiehlt check wie RFC2818, legt sich aber nicht wirklich fest

Zertifikate checken hilft nicht immer "(Un)trusted Certificates": andere vertraute CA stellt Zertifikat für gleiche Webseite aus Tricks mit subjaltnames zum Akzeptieren von ungültigen Zertifikaten SSL umgehen durch Umschreiben der Webseiten bei MITM: sslstrip MD5 Kollisionen bewusst nutzen um neue Zertifikate zu erzeugen: "MD5 considered harmful today" (25C3) Zertifikat knacken wegen schwachem Zufall: CVE-2008-0166

SSL und Perl

Crypt::SSLeay/Net::SSL nur bei LWP benutzt liefert bei Bedarf commonname zum Check wird bei LWP genutzt um commonname gegen Hostname zu checken, sofern man Pseudo-Header 'If-SSL-Cert-Subject' setzt weitere Entwicklung wohl nur, um es compilierbar zu halten

IO::Socket::SSL basiert auf Net::SSLeay (d.h OpenSSL) unterstützt Checks gegen commonname und subjectaltnames Berücksichtigung von Wildcards verschiedene Verifikationsschemas internationale Domainnames Checks gegen IP checkt aber auch nichts, wenn nicht gesagt was genau gescheckt werden soll (da keine klare Regel, wie in allen Fällen zu checken) braucht daher offizielle Unterstützung im Caller oder Hacks, um diese Unterstützung nachträglich einzubauen

IO::Socket::SSL Client # ohne Verifikation $cl = IO::Socket::SSL->new( 'signin.ebay.de:443' ); # mit Verifikation $cl = IO::Socket::SSL->new( PeerAddr => 'signin.ebay.de:443', SSL_verify_mode => 1, SSL_ca_path => '/etc/ssl/certs', SSL_verifycn_scheme => 'www', ); print $cl "GET / HTTP/1.1\r\n..."

IO::Socket::SSL Server $srv = IO::Socket::SSL->new( LocalAddr => 'signin.ebay.de:443', Listen => 10, SSL_cert_file =>..., SSL_key_file =>..., ); $cl = $srv->accept; <$cl>

weiterhin Crypt::NSS, Net::NSS::SSL Layer über Netscape Security Services (v0.4 11/08) Crypt::MatrixSSL Layer über MatrixSSL.org Bibliothek (v1.86 01/09)

LWP (https) Problem: LWP nimmt via Net::SSL entweder Crypt::SSLeay oder IO::Socket::SSL, wobei es ersteres bevorzugt Daher Hack: Net::SSLGlue::LWP forciert Nutzung von IO::Socket::SSL, da nur dieses richtiges Zertifikatschecking bietet forciert Zertifikatscheck entsprechende RFC2818 leider bietet LWP keinen Mechanismus Optionen an den Socket zu übergeben, daher verbindungsspezifische Optionen nur über local

Net::SSLGlue::LWP - Beispiel use Net::SSLGlue::LWP SSL_ca_path => '/etc/ssl/certs'; use LWP::Simple; get( 'https://signin.ebay.de' );

LWP und https Proxy LWP hat ein einzigartiges Verständnis von https_proxy statt einem CONNECT wird ein plain text Request für eine https:// Resource an den Proxy gesendet die Verbindung mit dem Proxy ist dann unverschlüsselt daher keine Verifikation von Zertifikaten möglich nur wenige Proxies unterstützen das Crypt::SSLeay/Net::SSL hatte Workaround mittels HTTPS_PROXY Environmentvariable (dazu muss env_proxy in LWP aus sein) IO::Socket::SSL hat diesen Workaround nicht Net::SSLGlue::LWP fixt stattdessen https_proxy, sodaß die Variable wie in anderen Programmen funktioniert

SSL und SMTP Net::SMTP::TLS, startet plain und macht dann mit STARTTLS weiter. Seit 01/2006 keine Änderungen mehr (aber auch keine Bugreports), letzte Version 0.12. Nutzt IO::Socket::SSL, macht aber keine Zertifikatschecks und beruht nicht auf Net::SMTP sondern reimplementiert alles :( Net::SMTP::SSL, welches einfach die Abhängigkeit von IO::Socket::INET gegen eine Abhängigkeit von IO::Socket::SSL austauscht und auch keine Zertifikatschecks macht. Daher Hack: Net::SSLGlue::SMTP erweitert Net::SMTP um STARTTLS Kommando (wie Net::SMTP::TLS) und um SSL von Beginn an (wie Net::SMTP::SSL) in beiden Fällen mit korrektem Zertifikatscheck

Net::SSLGlue::SMTP Beispiel use Net::SSLGlue::SMTP; $smtp_ssl = Net::SMTP->new( 'mail.gmx.net', SSL => 1 ); # SSL Port 465 $smtp = Net::SMTP->new( 'mail.gmx.net' ); # Plain Port 25 $smtp->startssl; # switch to SSL Achtung! Da für SMTP kein Standard für das Checken der Zertifikate existiert akzeptieren Mailclients evtl. andere Zertifikate als Net::SSLGlue::SMTP. In diesem Falle SSL_verifycn_scheme anpassen. # mail.gmx.de in subjectaltname, in cn mail.gmx.net $smtp = Net::SMTP->new( 'mail.gmx.de', SSL => 1, SSL_verifycn_scheme => 'http' )

Net::LDAP nur hier aufgenommen, weil der ursprüngliche Request zur Unterstützung sich auf Net::LDAP bezog. nutzt IO::Socket::SSL, aber macht natürlich auch keinen Zertifikatscheck Daher Hack: Net::SSLGlue::LDAP forciert SSL_verify_scheme ldap, sofern über den Net::LDAP Mechanismus verify auf True gesetzt ist ungetestet

weitere Module Net::POP, Net::NNTP könnte man analog zu Net::SMTP mit einem Net::SSLGlue::* aufbohren implicites FTPS (d.h Connection mittels SSL von Anfang an über speziellen Port, analog zu HTTPS, Ports 990/989) könnte über Aufbohren von Net::FTP gemacht werden, allerdings gibt es wohl keine RFC dazu und kein Schema, wie das Zertifikat zu verifizieren ist. explizites FTPS (RFC4217) ist wesentlich schwieriger, da hier einiges an neuen Kommandos unterstützt werden muss. Es scheint einen Versuch Net::FTPSSL zu geben, der seit ein paar Jahren mal wieder auflebt (v0.6, 02/09)

noch offene Fragen Standard-CAs unter Linux i.a. /etc/ssl/certs unter BSD ähnlich unter Windows?? zurückgerufene Zertifikate kann mit heruntergeladenen CRLs umgehen keine Unterstützung von OCSP, welches in den neueren Zertifikaten benutzt wird

Perl im Vergleich

Ruby nach Fix wegen CVE-2007-5162 wird gewarnt, wenn keine Überprüfung gemacht wird (das ist der Default) Net::HTTPS benutzt OpenSSL::SSL::SSLSocket::post_connection_check, welcher das http scheme (RFC2818) implementiert. Net::SMTP benutzt die gleiche Routine, d.h. es wird das http scheme zur Verifikation bei SMTP benutzt. Net::POP und Net::IMAP benutzen ebenfalls das http scheme, das ist falsch.

Python httplib, http.client: "This does not do any certificate verification!" scheint nicht mal die Möglichkeit zu geben, einfach eigene Checks einzubauen (d.h man kann zwar Clientzertifikat übergeben, aber nicht beeinflussen, ob und wie Serverzertifikat verifiziert wird) imaplib, poplib... scheinen ebenfalls keinerlei Checks vorzunehmen ssl: stellt nötige Infos (subjectaltnames, commonname) zur Verfügung, macht aber selber nichts damit und bietet auch keine Convinience Funktion zum Check an

Java in Applets/JRE nur commonname checking aber in JSSE (Java Secure Socket Extension) wohl für HTTPS korrekt implementiert aber keine Ahnung, wie es mit den anderen Verifikationsarten (LDAP..) aussieht

weitere Features von IO::Socket::SSL nonblocking Sockets start_ssl (Upgrade von unverschlüsselt) und stop_ssl (Downgrade auf unverschlüsselt) transparente IPv6 Unterstützung führt dazu, das evtl IPv6 bevorzugt wird, wenn DNS AAAA und A Records liefert kann Problem geben, wenn aber IPv6 Verbindung nicht funktioniert oder DNS spinnt Unterstützung für Windows (alle Tests laufen, aber keine Unterstützung für nonblocking Sockets)

Danke!