OpenVPN härten: Unterschied zwischen den Versionen

Aus
(Die Seite wurde neu angelegt: „=Einleitung OpenVPN Verbindung= Eine OpenVPN-Verbindung zwischen Server und Client besteht aus zwei Kanälen. Einem Steuer-/Kontrollkanal und einem Datenkanal.…“)
 
Zeile 52: Zeile 52:
Mit einer HMAC Signatur werden alle Pakete die bei der TLS Handshake involviert sind signiert. Werden Pakete ohne die richtige HMAC Signatur gesendet/empfangen werden sie auf der Stelle verworfen. Damit verhindert man:
Mit einer HMAC Signatur werden alle Pakete die bei der TLS Handshake involviert sind signiert. Werden Pakete ohne die richtige HMAC Signatur gesendet/empfangen werden sie auf der Stelle verworfen. Damit verhindert man:


* DoS- Attacken oder Port-flooding auf dem OpenVPN UDP port.
* DoS- Attacken oder Port-flooding auf dem OpenVPN UDP port.
* Port scanning um zu verhindern ob der Server UDP Port abhört
* Port scanning um zu verhindern ob der Server UDP Port abhört
* Buffer overflow Sicherheitslecks in the SSL/TLS-Implementation
* Buffer overflow Sicherheitslecks in the SSL/TLS-Implementation
* SSL/TLS Handshake Initiierung eines nicht-autorisierenden Computers (Grundsätzlich wird die Verbindung fehlschlagen, da das Zertifikat falsch sein wird. Mit der tls-auth Methode wird aber die Verbindung schon an einem früheren Zeitpunkt gekappt)
* SSL/TLS Handshake Initiierung eines nicht-autorisierenden Computers (Grundsätzlich wird die Verbindung fehlschlagen, da das Zertifikat falsch sein wird. Mit der tls-auth Methode wird aber die Verbindung schon an einem früheren Zeitpunkt gekappt)


Wir generieren wie folgt eine Signatur:
Wir generieren wie folgt eine Signatur:

Version vom 10. Juni 2016, 07:37 Uhr

Einleitung OpenVPN Verbindung

Eine OpenVPN-Verbindung zwischen Server und Client besteht aus zwei Kanälen. Einem Steuer-/Kontrollkanal und einem Datenkanal. Der Client initiiert die Verbindung durch eine TLS-Sitzung innerhalb der Kontrollkanal bei der Anmeldeinformationen ausgetauscht werden. Wurde diese Erfolgreich durchgeführt, wird der Datenkanal etabliert. Im Datenkanal wird sämtlicher Traffic verschlüsselt übertragen.

OpenVPN Standard

Die Standardkonfiguration des OpenVPN auf einem Synology Server ist im Default auf AES 128 (CBC), SHA-1 eingestellt. In der Regel genügt dieser Wert. Will man eine erhöhte Sicherheit, kann man dies härten. Dazu muss man Shell-Zugriff auf seinem Server haben.

Voraussetzungen

  • Umgang mit der Konsole (bei Verwendung des SSH-Zuganges)
  • Grundkenntnisse im Umgang mit Shell (vi, nano usw.)

DSM/Clients

  • getestet mit DS716+ und DS211+
  • DSM 6.x
  • Windows 10, Android 5.0, OpenVPN 2.3.10

Wichtige Pfade

Folgende Pfade sind für die härtung wichtig, bez. zum testen erforderlich:

OpenVPN starten/neu starten/stoppen:

/bin/sh /var/packages/VPNCenter/target/scripts/openvpn.sh (start|restart|stop)

Konfiguration, hier werden die jeweiligen zuätzlichen Optionen eingetragen:

vi /usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf

1. nobody für den Deamon

Standardmässig läuft der OpenVPN Dienst mit dem User root. Dies ist z.b. bei einem Einbruch ins System ein grosses Problem, da damit der Einbrecher hohe Rechte besitzt. Es empfiehlt sich einen neuen Benutzer „openvpn_server“ zu erstellen oder den User/Gruppe „nobody“ zu verwenden:

Den Benutzer, die Gruppe hinterlegt man in der openvpn.config:

user nobody
group nobody

Nach dem neustart des Dienstes kann man die Berechtigungen kontrollieren:

netstat -tlnp | grep openvpn
tcp 0 0 127.0.0.1:1195 0.0.0.0:* LISTEN 10268/openvpn
ps aux | grep openvpn

Der OpenVPN Server wird neben dem Hauptprozess (als nobody) auch 2 Childprozesse gestartet. Diese werden benötigt um Routing zu löschen, da der Hauptprozess zu wenige Privilegien hat.

2. tls-auth

Mit einer HMAC Signatur werden alle Pakete die bei der TLS Handshake involviert sind signiert. Werden Pakete ohne die richtige HMAC Signatur gesendet/empfangen werden sie auf der Stelle verworfen. Damit verhindert man:

  • DoS- Attacken oder Port-flooding auf dem OpenVPN UDP port.
  • Port scanning um zu verhindern ob der Server UDP Port abhört
  • Buffer overflow Sicherheitslecks in the SSL/TLS-Implementation
  • SSL/TLS Handshake Initiierung eines nicht-autorisierenden Computers (Grundsätzlich wird die Verbindung fehlschlagen, da das Zertifikat falsch sein wird. Mit der tls-auth Methode wird aber die Verbindung schon an einem früheren Zeitpunkt gekappt)

Wir generieren wie folgt eine Signatur:

openvpn --genkey --secret usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key

Auf dem OpenVPN Server tragen wir folgende Zeile ein:

tls-auth /usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key 0

Auf dem OpenVPN Client (Windows) tragen wir folgende Zeile ein:

tls-auth hmac.key 1

3. Cipher (Chiffre)

Der VPN Datenkanal kann auf der Synology (DS716+) problemlos auf AES 256bit, im CBC Modus umgestellt werden. Im Standard wird Blowfish-128, bez. bei Synology AES 128 verwendet. Um generell herauszufinden, welche Cipher verfügbar sind, kann diese mit folgendem Befehl anzeigen lassen:

openvpn --show-ciphers

Auf dem OpenVPN Server/Client tragen wir folgende Zeile ein:

cipher AES-256-CBC

Hinweis: Auf Android Geräten ist AES, Blowfish, und DES Ciphers supportet. Gerade AES ist die beste Wahl für Android mit ARM Prozessoren da sie am effizientesten arbeiten.

4. authentication digest (Kryptologische Hashfunktion)

Es empfiehlt sich die Hashfunktion von SHA-1 auf einen SHA-2 Standard anzuheben. Hier kann man SHA-512 verwenden.

Man kann mit folgenden Befehl alle Digests anzeigen lassen:

openvpn --show-digests

Auf dem OpenVPN Server/Client tragen wir folgende Zeile ein:

auth SHA512


5. tls-cipher (Cipher Suite, Chiffrensammlung)

In der letzten Option legt man die Cipher Suite fest, die der Server unterstützen wird. Dies hilft dabei, dass man keine unsicheren Methoden verwendet.

Damit man den Kontroll-Kanal mit dem stärksten Chiffrensammlung (cipher suites) einstellen kann muss man sich bewusst sein, das nicht jede Chiffrensammlung in jeder OpenVPN Version verfügbar ist. Die Verschlüsselung AES in GCM Modus mit TLS 1.2 verwendet SHA2, AES und Camellia in CBC Modus verwendet SHA1 über TLS 1.0.

[1]

Eine Auflistung aller Cipher Suiten kann man sich mittels folgendem Befehl holen:

openvpn --show-tls

Erklärung:

* CBC = Cipher Block Chaining Mode
* GCM = Galois/Counter Mode
* AES = Advanced Encryption Standard