# VPN, wie es funktioniert und warum wir es nicht brauchen
## Einleitung
### was ist das Thema?
* **VPN** (Virtual Private Networks)\
Verschlüsselung, Authentifizierung, Fernzugriff
* **nicht** Verschleierung oder Umgehung von Geofencing
(keine kommerziellen Anbieter)

* **Quizfrage**: Was war das wirklich Neue am Internet?

### wer bin ich?
Goesta Smekal\
https://smekal.at @goesta@social.smekal.at goesta@smekal.at

* habe mein halbes Leben in einem anderen Jahrhundert verbracht
* beschäftige mich seit den frühen 90ern mit Freier Software, Computernetzwerken, IT-Security und dem Layer 8
* beruflich leite ich eine IT-Abteilung
 
## Grundlagen
### End to End Connection
* Der IP-Stack verbindet erstmals Teilnehmer unterschiedlicher Netzwerke direkt miteinander
* Durch ein einheitliches Adressschema: IP Adressen
* verwendet anfangs unsichere Protokolle (Telnet, FTP, POP, ...)
* IPv4 Adressraum ist (aus heutiger Sicht) klein und schlecht aufgeteilt
* RFC 1918, CIDR -> NAT
* Ende der e2e Verbindungen

### VPN verbindet (wieder)
* verschlüsselter Tunnel zwischen zwei öffentlichen IPv4 Adressen
* andere Clients können durch den Tunnel kommunizieren
* Vertraulichkeit (durch Authentifizierung und Verschlüsselung)
* End to End ... unter Voraussetzungen

### Betriebsarten
#### Transport Mode
* Verbindung zwischen zwei Knoten
* Inhalt der Pakete wird geschützt

#### Tunnel Mode
* Verbindung wird zwischen zwei Routern aufgebaut
* dahinter liegende Netze werden verbunden
* Pakete werden in Pakete verpackt
* transparent für Knoten hinter den Routern

#### Road Warrior
* (mobiler) Client verbindet sich zu bekanntem Endpunkt
* typisch für Telearbeit 

### Nutzen
* Authentizität und Integrität der Daten sichergestellt
* bei Verschlüsselung für Dritte verschleiert
* Verbindung zwischen Subnetzen aus RFC1918

## Evolution
### ... aus meiner persönlichen Sicht
* IPSec (mit diversen Implementierungen)
* OpenVPN
* Wireguard

### IPSec
* operiert am Internet Layer / OSI Layer 3
* AH und ESP als fixer Bestandteil von IPv6
* Backport aus Gründen
* unterstützt Tunnel- und Transport-Mode (P2P)
* Protokoll und Konfiguration sind komplex

#### Protokolle
* **A**uthentication **H**aeder
  * stellt die Integrität der Tunnelendpunkte sicher, HMAC aus
    * dem geheimen Schlüssel der Tunnelpartner
    * der Paket Payload
    * den fixen Teilen des IP Headers
  * **AH** ist ein eigenes IP Protokoll mit der Protokollnummer 51

* **E**ncapsulated **S**ecurity **P**ayload
  * stellt sicher:
    * Integrität des Pakets mittels HMAC
    * Vertraulichkeit des Inhalts mittels Verschlüsselung
  * **ESP** ist ein eigenes IP Protokoll mit der Protokollnummer 50

* **I**nternet **K**ey **E**xchange Protocol
  * tauscht die symmetrischen Session Keys über die noch unsicheren Verbindungen aus.
  * wird nicht vom Kernel abgewickelt.
  * Phase 1: Authentifizierung der Tunnelpartner
  * Phase 2: Austausch der Sessionkeys (Diffie Hellman) 
    * möglich mit PSK, Zertifikaten oder Kerberos
  * **IKE** verwendet UDP-Port 500

#### weitere Artefakte
* **S**ecurity **A**ssociation: alle Parameter, die zu einer IPSec Verbindung gehören.
  * IP Adressen der Tunnelendpunkte
  * Algorithmen
  * Schlüssel
  * SPI

* **S**ecurity **P**arameter **I**ndex: eine eindeutige Kennung einer SA
* **S**ecurity **A**ssiciation **D**atabase: der Ort an dem die SAs der einzelnen Tunnel gespeichert sind
* **S**ecurity **P**olicy: bestimmt, welcher Traffic verschlüsselt werden soll
  * Quell- und Zieladressen
  * (optional) Protokolle und Ports, die verschlüsselt werden sollen
  * die SA die zur Anwendung kommt
* **S**ecurity **P**olicy **D**atabase: der Ort an dem die SP gespeichert sind
* **H**ash **M**essage **A**uthentication **C**ode: ein Hashwert aus wesentlichen Teilen des verschlüsselten IP Pakets

#### Beispiel Konfiguration Tunnel Mode
```
#!/usr/sbin/setkey -f
#ipsec.config
flush;
spdflush;
spdadd 192.168.0.0/16 172.19.19.0/24 any -P out ipsec esp/tunnel/a.b.c.d-e.f.g.h/require;
spdadd 172.19.19.0/24 192.168.0.0/16 any -P in ipsec esp/tunnel/e.f.g.h-a.b.c.d/require;
```

```
#ipsec.secrets
a.b.c.d e.f.g.h: PSK "putsomebloodykeyhere"
e.f.g.h a.b.c.d: PSK "putsomebloodykeyhere"
```

```
#racoon.conf
path pre_shared_key "/etc/racoon/psk.txt";
log notify;
remote a.b.c.d {
        exchange_mode main;
        proposal_check obey;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group modp1024;
                lifetime time 1440 minutes;
        }
}
sainfo address 192.168.0.0/16 any address 172.19.19.0/24 any {
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1;
        lifetime time 60 minutes;
        compression_algorithm deflate;
}
```

#### Verwandte
* PPTP (Point to Point Tunneling Protocol) - seit einigen Jahren gebrochen
* L2TP (Layer 2 Tunneling Protocol)
* Varianten sind in vielen Routern eingebaut, meist mit obskuren Parametern

### OpenVPN
* verwendet TLS für Crypto
* nutzt UDP (optional TCP) für den Transport
   * vielfältige Varianten (UDP Port 53, wer möchte ...)
* einfachere Konfiguration
* Routing Mode und Bridging Mode (Verbindung von Layer 2)
* Authentifizierung über PSK oder Zertifikate

#### Beispiel Konfiguration statische Keys

```
# server
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key
```

```
# client
remote myremote.mydomain
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key
```

### Sonderfall SSH
* SSH kann ebenfalls Tunnel herstellen
* Vorteil: Tools fast überall vorhanden
* Nachteil: Admins Albtraum

#### verwandte Tools
* stunnel
  * kann einzelne Services über TLS verfügbar machen
  * bietet keine Netz zu Netz Verbindung
* socat 
  * netcat on Steroids
  * kann über virtuelle Interfaces Netze verbinden
  * kann TLS nutzen

### Spezialfall Tor
* verschleiert die Quelladresse
* dient vorwiegend dem Schutz der Privatsphäre
* nutzt massiv verteilte Infrastruktur
* Kontrolle der Exit Nodes ist problematisch

### Abgrenzung Snakeoil VPN

#### "SSL-VPN"
* Applikationen werden via Webservice oder Remotedesktop im Browser angeboten
* keine echte Verbindung zweier Netzwerke
#### kommerzielle Angebote
* Software, Crypto und Infrastruktur aus einer Hand\
gute Idee?
* bieten Verschlüsselung und Verschleierung der Quelle
* könnten "Generalschlüssel" besitzen (z.B. US Patriot Act)

## Exkurs Wireguard
### was ist neu?
* verpackt die verschlüsselten Pakete in UDP
* Authentifizierung über Public/Private Keys
* Wireguard verzichtet auf komplexe Protokolle
  * weniger Protokolle - weniger Angriffsfläche
  * manueller Schlüsselaustausch
  * manuelle Synchronisation der Konfiguration

#### Beispiel Konfiguration

```
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24
```

```
[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
ListenPort = 21841

[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:51820
AllowedIPs = 0.0.0.0/0
```

## Ausblick IPv6

### was macht es besser?
* größerer Adressraum 128 statt 32 Bit
* daher keine "privaten" Subnetze mehr nötig
* relevante Protokolle sind verschlüsselt (auch unter legacy IP)
* Firewalls müss(t)en kein NAT mehr machen
* e2e Verbindungen mit e2e Crypto möglich
* Mobile IPv6
	* Knoten kann seine "lokale" IPv6 Adresse auf Reisen "mitnehmen"
	* ist dadurch unter seiner angestammten Adresse global erreichbar
	* Security Policy kann unverändert angewendet werden

### was löst es nicht?
* verschleiert den Traffic nicht
* Metadaten und Timing Attacken
* es ist immer noch nicht da ...
