UCSPI-XXL

08734031c152fb64f70dc38a4f632cee?s=47 fraosug
April 15, 2014

 UCSPI-XXL

IPv4/IPv6 Client/Server-Kommunikation mit UCSPI-TCP6/UCSPI-SSL, Vortrag von Erwin Hoffmann

08734031c152fb64f70dc38a4f632cee?s=128

fraosug

April 15, 2014
Tweet

Transcript

  1. © Dr. Erwin Hoffmann - FEHCom UCSPI-XXL ! DAS UNIX

    CLIENT/SERVER PROGRAM INTERFACE FÜR IPV6 UND TLS
  2. UCSPI-xxl | Architektur © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    • Das Unix Client/Server Program Interface UCSPI ist historisch als Alternative zum Unix inetd Dienstes bzw. bei Solaris für mconnect gedacht und von Dan Bernstein (djb) um 1995 als ucspi-tls entwickelt worden. Es steht heute in der Public Domain. •Zentraler Baustein ist der tcpserver, der sowohl ein Socket- Interface für die Netzkommunikation bereitstellt, als auch Filedeskriptoren für die Anwendung. Über eine CDB (constant data base) kann tcpserver wie ein Paketfilter konfiguriert werden. UCSPI-xxl:
  3. UCSPI-xxl | Architektur © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    • ucspi-tcp kennt nur IPv4 Sockets. IPv4-Adressen können nur im Standardformat (‚dotted-decimal‘ Notation) genutzt werden; keine CIDR Unterstützung. • ucspi-tcp steht nur für IPv4 zur Verfügung. • Patches existieren (Felix von Leitner/fefe). • ucspi-tcp kennt keine verschlüsselten Verbindungen via TLS/SSL. • Von Superscript existiert aber das Pendant ucspi-ssl. • Keine AMD64-Unterstützung, kein Clang-Support … UCSPI-xxl - die Probleme:
  4. UCSPI-xxl | Architektur © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    • ucspi-tcp wird ums die fehlenden Funktionen erweitert, • in das /slashpacket Format überführt und • als ucspi-tcp6 veröffentlicht. •Zugleich wird ucspi-ssl um IPv6-Funktionen •auf gleicher Code-Basis weiterentwickelt. ‛ Mit ucspi-tcp6 1.0 und ucspi-ssl 0.94 stehen 
 aktuelle Pakete zur Verfügung. UCSPI-xxl - die Lösung:
  5. UCSPI-xxl | Architektur © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Wie sieht das Konzept von ucspi-xxl aus ? • Wie funktioniert tcpserver/sslserver ? •Wie kann tcpserver/sslserver bei IPv6 eingesetzt werden? •Was ist das /slashpacket Format ? •Hands on! Aufsetzen eines HTTP-Servers ! Überblick:
  6. UCSPI-xxl | Architektur © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Typische Daemons unter Unix wie HTTP sind gelinkt mit • der Socket-Lib, • nutzen DNS-Stub-Resolver, • greifen zurück auf tcp-wrapper 
 (etc/hosts.allow), • sind mit SSL-Libs gebunden, • brauchen ggf. root-Rechte (und droppen diese), • legen sich selbst in den Hintergrund (Daemons), • besitzen eigenes Logging, • nutzen SASL-Lib für Authentisierung, • bilden ggf. Prozessgruppe. Apache Listen: Alle verfügbaren, 
 IP-Adressen, fixer Port (80) Socket-lib Apache Listen: Alle verfügbaren, 
 IP-Adressen, fixer Port (443) Socket-lib conf-Datei conf-Datei
  7. UCSPI-xxl | ucspi-tcp6 © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Mittels tcpserver/tcpclient lassen sich Client/Server-Anwendungen realisieren, ohne dass die Anwendung ein Socket-IF besitzen muss. • TCP-Verbindungen können auf der tcpserver-Seite per IP-Adresse oder per FQDN kontrolliert werden. • Applikation läuft in einer chroot-Umgebung. tcpclient tcpserver Client- Anwendung Server- Anwendung cdb FD 0 FD 1 FD 6 FD 7 Socket-lib FQDN:deny IP:deny :allow,ENV=ok DNS Stubresolver IDENT/TAP IPv4 IPv6 Listen: IP-Adresse, 
 Port Open: IP-Adresse, 
 Port
  8. UCSPI-xxl | ucspi-tcp6 © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    • Für jede Verbindung wird tcpserver bei einlaufendem <SYN> auf der konfigurieren IP Adresse geforked. • Die max. Anzahl der tcpserver-Instanzen kann vorgeben werden. A n w e n d u n g t c p s e r v e r N e t z w e r k F D 0 F D 1 t c p s e r v e r t c p s e r v e r t c p s e r v e r A n w e n d u n g A n w e n d u n g T C P - S Y N I P , Z - P o r t F D 1 F D 0 F D 0 T = a F D 1 T = b T = c a ) b ) g e s c h l o s s e n S o c k e t s
  9. UCSPI-xxl | ucspi-tcp6 © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Aufruf: •tcpserver -v -Rhp -x cdb \
 -c connections \
 -u user -g group \
 -l localhost \
 IP-Adresse Port \
 progX args progX server args ! •tcpserver wird pro Applikation immer explizit auf eine IP-Adresse gebunden; durch Angabe von ‚0‘ auf alle verfügbaren. cdb Statische + verbindungsabhängige Environment-Variablen DNS Lookup Query Response FQDN:deny IP:deny :allow;ENV=x
  10. UCSPI-xxl | ucspi-tcp6 © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    • Standard-Aufruf von tcpserver und gesetzte Environment- Variablen. • Verketteter Aufruf von qmail-smtpd mit rblsmtpd und tcpserver. t c p s e r v e r t c p s e r v e r A n w e n d u n g T C P - S Y N I P , Z - P o r t T = a T = b T = c I D E N T / T A P t c p s e r v e r D N S - Q u e r y t c p s e r v e r t c p s e r v e r D N S - R e s p o n s e T = d I D E N T T i m e o u t $ T C P L O C A L H O S T $ T C P L O C A L I P $ T C P L O C A L P O R T $ T C P R E M O T E I N F O $ T C P R E M O T E I P $ T C P R E M O T E P O R T $ T C P R E M O T E H O S T - h : H o s t n a m e ü b e r P T R - R e c o r d - p : I P - A d r e s s e ü b e r A - R e c o r d - t 1 0 A n w e n d u n g t c p s e r v e r B a n n e r F D 0 F D 1 T = e t c p s e r v e r r b l s m t p d T C P - S Y N I P , Z - P o r t T = a T = b T = c $ T C P R E M O T E I P t c p s e r v e r D N S - Q u e r y D N S - R e s p o n s e T = d $ T C P R E M O T E I P = 1 9 4 . 3 1 . 2 1 2 . 4 $ T C P R E M O T E P O R T - h : H o s t n a m e ü b e r P T R - R e c o r d - p : I P - A d r e s s e ü b e r A - R e c o r d A n w e n d u n g t c p s e r v e r T = e r b l s m t p d R B L - L o o k u p ( D N S A / T X T ) 4 . 2 1 2 . 3 1 . 1 9 4 . r b l . c o m r b l s m t p d t c p s e r v e r t c p s e r v e r t c p s e r v e r T = f S M T P H E L O n a c h $ R B L S M T P D ? $ R B L S M T P D n i c h t g e s e t z t
  11. UCSPI-xxl | ucspi-tcp6 © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •IPv6 Erweiterungen für tcpserver: •tcpserver -4 | -6 -I ifname -Rhp -x cdb \
 -c connections \
 -u user -g group \
 -l localhost \
 IP-Adresse Port \
 progX args progX server args ! •CIDR Unterstützung: • 192.168/16:allow;RELAYCLIENT=„“! • fe80::/10:allow;RELAYCLIENT=„“! • fe80::1:deny Default ist immer IPv6 ! tcpserver versteht ‚kompaktifizierte‘ IPv6-Adressen!
  12. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Return of the … OSI-Model …. TCP/FO IPSec NIC 2: Data-Link-Schicht 3: Netzwerkschicht ICMP ARP 4: Transportschicht Übermittlungsnetze 1: Physikalische Schicht RARP 6: Anwendungs- schicht IGMP Protokolle der Anwendungs- schicht Echtzeit TCP H.323- SIG RSVP OSPF ... SCTP IP DNS, DHCP, SNMP, RIP, NTP, ... UDP Verbindungsorientiert Verbindungslos 5: Supportschicht TLS DTLS HTTPS, SMTPS, IMAP4S, ... HTTP, FTP, SMTP, IMAP4, ... BGP SIP RTCP RTSCP SRTCP SRTP RTP
  13. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •sslserver: •sslserver -4 | -6 -I ifname -Rhp -x cdb \
 -c connections \
 -u user -g group \
 -l localhost \
 IP-Adresse Port \
 progX args progX server args Default ist immer IPv6 ! Keystore und Truststore können pro Verbindung gewählt werden! Key- Store Trust- Store CRL KEYFILE= CAFILE=! CADIR= export DHPARM= CIPHERS=
  14. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •sslserver: Architektur für TLS mod_ssl
  15. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •sslserver: STARTTLS Unterstützung mod_ssl
  16. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Aufbau von TLS: Internet Protocol (IP) Transmission Control Protocol (TCP) HTTP, SMTP, LDAP, ... Applikationsprotokoll T L S Record Layer Protocol Alert Change CipherSpec Hand- shake Heart- beat (Type 24) (Type 22) (Type 20) (Type 21) (Type 23) RFC 6520 Juni 2012 - OpenSSL 1.0.1
  17. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Aufbau von TLS Nachrichten / Cipher Suite: MAC Nachricht(en) RL- Header Protocol (1 Byte) Version (2 Byte) Length (2 Byte) verschlüsselt (optional) Hash-Wert MP PL Padding (optional) Protocol = 20: ChangeCipherSpec Protocol 21: Alert Protocol 22: Handshake Protocol 24: Application Protocol (HTTP, ...) MAC Daten eines Applikationsprotokolls Kompression Segment MAC- Berechnung Verschlüsselung Record Layer Frame Record Layer Header Segment Segment a) b) TLS _ KeyExchange+Authentisierung Verschlüsselung+Betriebs-Mode MAC RSA DH/DHE ECDH Null *RC4(_40/_56/_128) DES(_40/_56) 3DES_EDE(3) AES(_128/_256/_512) RC2(_128/_256) SEED CAMILLA ECB(default) CBC GCM Anonymous RSA RSA (Export) DSA DSS ECDSA Null MD5 SHA(1) SHA256 SHA384 *) Stream Cipher; alle anderen: Block Cipheren _ _ Cipher-Suite:
  18. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •sslserver hängt von OpenSSL ab. • Daher ist sslserver auch vom Heartbleed Bug in OpenSSL 1.0.1 betroffen … aber • er kann nicht ausgenutzt werden, da pro Client-IP eine sslserver-Instanz geöffnet wird (neuer Speicherbereich) und dieser auch nur für diesem Client. • Nach dem Lesen der CA Certs und des Keyfiles erfolgt die eigentliche Verbindungs-ver/entschlüsselung in einer chroot-Umgebung statt. • Diese werden für die aktuelle Verschlüsselung auch gar nicht benötigt; ausser zum Schlüsseltausch bei RSA (keine Perfect Forward Secrecy PFS). • Allerdings stehen die Certs im Kontext der SSL-Verbindung. Heartbleed Bug?
  19. UCSPI-xxl | ucspi-ssl © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    Datagram-TLS (DTLS): Der Heartbeat UDP Listen Internet DTLS- Client DTLS- Server Internet a) b) HelloVerifyRequest (epoch=0,seq=0,Cookie) ClientHello (epoch=0,seq=0) ClientHello (epoch=0,seq=0) HelloVerifyRequest (epoch=0,seq=1,Cookie) ClientHello (epoch=0,seq=1,Cookie) UDP Listen ClientHello HelloVerifyRequest ClientHello ServerHello Certificate ServerKeyExchange CertificateRequest ServerHelloDone Certificate * ClientKeyExchange CertificateVerify * ChangeCipherSpec Finished ChangeCipherSpec Finished TLS Tunnel Flight 1 Flight 2 Flight 3 Flight 3 Flight 4 Flight 5 Epoche 1 Epoche 2 Zeit abge- laufen timer DTLS- Client DTLS- Server Internet c) ClientHello (....) ServerHello (Heartbeat_allowed_to send) Heartbeat_Request (Type=1, Data=X, Padding) UDP Listen Retrans- mission- time = 0 T = 1,2 PLen Payload Padding Record-Layer Frame (Type = 24) DTLS- Client DTLS- Server Heartbeat_Response (Type=2, Data=X, Padding) d)
  20. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •ucspi-tcp6 und ucspi-ssl nutzen die 
 /slashpacket Konvention von djb: • Installationsverzeichnis ist /package • Jedes Package wird mit einem eindeutigen Namen (und Position) hierin in einem Verzeichnis aufgenommen: • /package/host/ucspi-tcp6 • /package/host/superscript/net/ucspi-ssl • djb nimmt die Registrierung der Packages vor und reserviert den Namespace. Packetierung von ucspi-tcp6 und ucspi-ssl: HLQ Fest Name
  21. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Packages kommen als tar-Archiv: •ucspi-tcp6-1.00.tgz •ucspi-ssl-0.94.tgz
 Wir nutzen das Semantic Versioning. •Packages werden unter /package von root entpackt: • mkdir /package; cd /package! • tar -xzf path/ucspi-ssl-0.94.tgz Installation der Packages: Package Name Package Version
  22. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Das Package entpackt sich am vorgegebenen Ort im Verzeichnis mit Versions-Kennung: •ucspi-ssl-0.94.tgz ➭../ucspi-ssl-0.94 •Dann geht alles ganz einfach: • cd /package/…/ucspi-ssl-0.94! • package/install base Compilieren der Packages:
  23. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Die aktuellen Binaries werden immer unter •packagename/command abgelegt •Hierin findet sich also immer die aktuelle Version: 
 ucspi-ssl-0.94.tgz ➭../ucspi-ssl/command •Von ucspi-ssl/command werden Symlinks nach/usr/local/bin gelegt: • /usr/local/bin/sslserver -> /package/host/ superscript.com/net/ucspi-ssl/command/sslserver Verlinkung des Packages:
  24. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Der Entwickler muss sich Überlegungen stellen, dass SW auf OS installiert werden kann (Compiler-Flags etc.) •Kein ‚configure‘. •Automatische Versionierung. •Update im laufenden Betrieb: •Unix install blockiert, falls Dienst aktiv ist. Vorteile von Packages:
  25. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Verzeichnisstruktur: •./src (Quellcode) •./package (Installationsskripte) • ./doc (bei mir) •./man (bei mir) •Nach Kompilierung: •./compile (gelinkte Quellen aus ./src + O’files) •./command (ausführbare Dateien) Packages unter der Haube:
  26. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Partielles Compilieren: • package/install base | perl • package/man (Nachträgliche Installation) •Tests: • package/rts (Entwickler erstellt Test-Output) • package/rts base •Erfolgsreport: • package/report (email mit OS-Parms an feh@fehcom.de) Packages mit Optionen:
  27. UCSPI-xxl | slashpackage © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Keine Dokumentation •Reverse-Engineering von Packages •Eigenes, generisches Build-Skript •Testen der Packages problematisch •Verschiedenes Laufzeit-Verhalten … •Firewall aktiv …. •DNS Libraries … Build der Packages:
  28. UCSPI-xxl | Hands-On © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Installation von ucspi-tcp6 •HTTP-Server: 
 #tcpserver -v -rh ::1 9000 ./hello
 tcpserver -v -rh -x deny.cdb 2001:4dd0:ff00:8d3b::30 9000 ./ hello •Hello: HTML Content: #!/bin/sh echo "HTTP/1.1 200 OK Content-Type: text/html ! <html> <head> <title>My title</title> </head> ! <body> <h1>Hello in big font</h1> </body> </html>“ •Mit Web-Browser hierauf verbinden! Hands-On:
  29. UCSPI-xxl | Hands-On © Dr. Erwin Hoffmann - FEHCom, 15.4.2014

    •Fragen ? •Antworten ! • http://cr.yp.to/ucspi-tcp.html • http://cr.yp.to/slashpackage.html • http://www.fehcom.de/qmail/qmailbook.html • http://www.fehcom.de/qmail/smtptls.html • http://www.fehcom.de/ipnet/ucspi-ssl.html • http://www.fehcom.de/ipnet/ucspi-tcp6.html • http://www.superscript.com/ucspi-ssl/index.html