OpenVPN mit erhöhter Sicherheit

Fragen zu OpenVPN, Netzwerktopologien, usw.
Gesperrt
Benutzeravatar
cerepro
Globaler Moderator
Globaler Moderator
Beiträge: 248
Registriert: Mittwoch 8. April 2009, 23:18
Kontaktdaten:

OpenVPN mit erhöhter Sicherheit

Beitrag von cerepro »

.

letzte Änderung 07.03.2017
Aktuell in Bearbeitung zur Anpassung auf aktuelle Sicherheitsstandards in OpenVPN v2.4


Dieser Thread ist eine Ansammlung von OpenVPN Sicherheitseinstellungen.
Er wird permanent erweitert und den aktuellen Sicherheitsrichtlinien entsprechend immer wieder angepasst.
Der Start war zur OpenVPN-Version 2.3.10.
Die hier gemachten Anmerkungen entsprechen meiner persönlichen Überzeugung und enthalten keinen Anspruch auf Richtigkeit und Fehlerfreiheit!
Ich übernehme keinerlei Haftung für eventuell auftretende Probleme und/oder Schäden jeglicher Art.

Für einige Optionen ist es zwingend erforderlich Zertifikate nach den Bestimmungen der "RFC3280 TLS rules" zu verwenden.
Eine Anleitung, um diese zu erstellen, finden sie HIER.


Einzelne Posts/Themen:
dh -> Primzahl für Diffie Hellmann erzeugen 24.02.2016
cipher - Wahl der richtigen Blockchiffren für die Datenpakete 07.03.2017
tls-crypt -> Zusätzliche Sicherheit durch HMAC-Authentifizierung zum Schutz gegen DOS-Attacken und Verschlüsselung des TLS-Kontrollkanals 07.03.2017
replay-persist -> erweiterter Schutz des TLS-Kontroll-Kanals 07.03.2017

Netzwerkmanagement auf Wakusi
!! KEIN SUPPORT PER PN !!
Wenn es dringend ist, nach dem Admin fragen auf dem:
Teamspeakserver: wakusi.de

Benutzeravatar
cerepro
Globaler Moderator
Globaler Moderator
Beiträge: 248
Registriert: Mittwoch 8. April 2009, 23:18
Kontaktdaten:

Primzahl für Diffie Hellmann erzeugen

Beitrag von cerepro »


Starke Primzahl oder normale Primzahl?
Was ist eigentlich eine starke Primzahl?
mathematisch gesehen:
Für starke Primzahl P gilt das (P-1)/2 auch wieder eine Primzahl ist.
Das erschwert verschiedene Faktorisierungsmethoden wie z.B. Pollard, die mit kleinen Faktoren(p+-1) arbeiten.
Leider erhöht die Suche nach einer solchen Primzahl den Rechenaufwand signifikant, während die Sicherheit nicht wesentlich steigt.
Für weitere Details bitte selbst recherchieren, da das hier kein Kryptografie-Thema werden soll. Genügend Stichworte sind hier ja vorhanden ;)

Lange Rede kurzer Sinn:
Die Fortschritte bei Faktorisierungsmethoden (z.B. elliptische) reduzieren die Sicherheitsvorteile von starken Primzahlen. Es ist somit zur Zeit sinnvoller die Rechenleistung in große Primzahlen zu investieren. Eine wichtige Voraussetzung einer solchen "normalen Primzahl" ist der damit verwendete Algorithmus. Er sollte das "E" enthalten. E steht für ephemeral und bedeutet sinngemäß einmalig. Also bitte nur DHE- und keine DH-Algorithmen verwenden. Z.B.: ECDHE und DHE -> siehe Schlüsselaustausch

Erstellen von Primzahlen:
Die angegebenen Zeiten basieren auf folgende Hardware: Intel Core i7 980x und 24Gb RAM.
Es sind nur Anhaltspunkte und können je nach System stark abweichen. Mehrere Zeiten werden durch ein Semikolon getrennt. Ungenaue Zeitangaben basieren auf Erinnerungswerten ;)
normale Primzahl erstellen:
Befehl:
openssl dhparam -dsaparam -out dh*BITZAHL*.pem *BITZAHL*
Beispiele:
1024 Bit:

Code: Alles auswählen

openssl dhparam -dsaparam -out dh1024.pem 1024
2048 Bit:

Code: Alles auswählen

openssl dhparam -dsaparam -out dh2048.pem 2048
4096 Bit: (0m2.755s; 0m11.138s)

Code: Alles auswählen

openssl dhparam -dsaparam -out dh4096.pem 4096
8192 Bit: (2m37.558s; 7m10.590s)

Code: Alles auswählen

openssl dhparam -dsaparam -out dh8192.pem 8192
16384 Bit: (9m41.650s; 53m38.060s)

Code: Alles auswählen

openssl dhparam -dsaparam -out dh16384.pem 16384
32768 Bit: (572m36.490s)

Code: Alles auswählen

openssl dhparam -dsaparam -out dh32768.pem 32768
65536 Bit: ()

Code: Alles auswählen

openssl dhparam -dsaparam -out dh65536.pem 65536
.......


starke Primzahl erstellen:
Befehl:
openssl dhparam -out dh*BITZAHL*.pem *BITZAHL*
Beispiele:
1024 Bit: (0m0.744s; 0m11.155s)

Code: Alles auswählen

openssl dhparam -out dhs1024.pem 1024
2048 Bit: (0m17.144s; 0m49.177s)

Code: Alles auswählen

openssl dhparam -out dhs2048.pem 2048
4096 Bit: (25m43.456s)

Code: Alles auswählen

openssl dhparam -out dhs4096.pem 4096
8192 Bit: (kann einige Tage dauern)

Code: Alles auswählen

openssl dhparam -out dhs8192.pem 8192
16384 Bit: (kann einige Wochen dauern, ca. 1 Woche und 3 Tage)

Code: Alles auswählen

openssl dhparam -out dhs16384.pem 16384
.......

[/b]

Netzwerkmanagement auf Wakusi
!! KEIN SUPPORT PER PN !!
Wenn es dringend ist, nach dem Admin fragen auf dem:
Teamspeakserver: wakusi.de

Benutzeravatar
cerepro
Globaler Moderator
Globaler Moderator
Beiträge: 248
Registriert: Mittwoch 8. April 2009, 23:18
Kontaktdaten:

Wahl der richtigen Blockchiffren für die Datenpakete

Beitrag von cerepro »



ab OpenVPN v2.4.x:

Die Wahl der richtigen Blockchiffren für die Datenpakete muss einige Faktoren berücksichtigen:
Sicherheit, Geschwindigkeit, Systembelastung, ...
Die aktuelle ciper-suite in OpenVPN sieht folgendermaßen aus.

Code: Alles auswählen

AES-128-CBC  (128 bit key, 128 bit block)
AES-128-CFB  (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-CFB1  (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-CFB8  (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-GCM  (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-OFB  (128 bit key, 128 bit block, TLS client/server mode only)
AES-192-CBC  (192 bit key, 128 bit block)
AES-192-CFB  (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-CFB1  (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-CFB8  (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-GCM  (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-OFB  (192 bit key, 128 bit block, TLS client/server mode only)
AES-256-CBC  (256 bit key, 128 bit block)
AES-256-CFB  (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-CFB1  (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-CFB8  (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-GCM  (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-OFB  (256 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-128-CBC  (128 bit key, 128 bit block)
CAMELLIA-128-CFB  (128 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-128-CFB1  (128 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-128-CFB8  (128 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-128-OFB  (128 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-192-CBC  (192 bit key, 128 bit block)
CAMELLIA-192-CFB  (192 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-192-CFB1  (192 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-192-CFB8  (192 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-192-OFB  (192 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-256-CBC  (256 bit key, 128 bit block)
CAMELLIA-256-CFB  (256 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-256-CFB1  (256 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-256-CFB8  (256 bit key, 128 bit block, TLS client/server mode only)
CAMELLIA-256-OFB  (256 bit key, 128 bit block, TLS client/server mode only)
SEED-CBC  (128 bit key, 128 bit block)
SEED-CFB  (128 bit key, 128 bit block, TLS client/server mode only)
SEED-OFB  (128 bit key, 128 bit block, TLS client/server mode only)

The following ciphers have a block size of less than 128 bits,
and are therefore deprecated.  Do not use unless you have to.

BF-CBC  (128 bit key by default, 64 bit block)
BF-CFB  (128 bit key by default, 64 bit block, TLS client/server mode only)
BF-OFB  (128 bit key by default, 64 bit block, TLS client/server mode only)
CAST5-CBC  (128 bit key by default, 64 bit block)
CAST5-CFB  (128 bit key by default, 64 bit block, TLS client/server mode only)
CAST5-OFB  (128 bit key by default, 64 bit block, TLS client/server mode only)
DES-CBC  (64 bit key, 64 bit block)
DES-CFB  (64 bit key, 64 bit block, TLS client/server mode only)
DES-CFB1  (64 bit key, 64 bit block, TLS client/server mode only)
DES-CFB8  (64 bit key, 64 bit block, TLS client/server mode only)
DES-EDE-CBC  (128 bit key, 64 bit block)
DES-EDE-CFB  (128 bit key, 64 bit block, TLS client/server mode only)
DES-EDE-OFB  (128 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-CBC  (192 bit key, 64 bit block)
DES-EDE3-CFB  (192 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-CFB1  (192 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-CFB8  (192 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-OFB  (192 bit key, 64 bit block, TLS client/server mode only)
DES-OFB  (64 bit key, 64 bit block, TLS client/server mode only)
DESX-CBC  (192 bit key, 64 bit block)
IDEA-CBC  (128 bit key, 64 bit block)
IDEA-CFB  (128 bit key, 64 bit block, TLS client/server mode only)
IDEA-OFB  (128 bit key, 64 bit block, TLS client/server mode only)
RC2-40-CBC  (40 bit key by default, 64 bit block)
RC2-64-CBC  (64 bit key by default, 64 bit block)
RC2-CBC  (128 bit key by default, 64 bit block)
RC2-CFB  (128 bit key by default, 64 bit block, TLS client/server mode only)
RC2-OFB  (128 bit key by default, 64 bit block, TLS client/server mode only)
Seit OpenVPN v2.4.x werden die Chiffren in Blockgrößen von 64 und 128 Bit unterteilt. Von der Wahl von Chiffren mit Blockgrößen von 64 Bit wird mittlerweile aus Sicherheitsgründen abgeraten.
Die meines Erachtens wichtigste(n) Chiffre(n) beschränkt(en) sich somit hier auf AES. AES ist die Abkürzung für Advanced Encryption Standard und beinhaltet den Rijndael-Algorithmus. Dieser setzte sich auf Grund seiner Schnelligkeit durch die einfachen Implementierungsmöglichkeiten in Hardware und nicht aufgrund seiner Sicherheit durch. Die wirklich hoch-sicheren Algorithmen beim AES-Finale waren Twofish, Serpent und MARS. Wobei Twofish der Nachfolger von Blowfish ist und im N2N-VPN zu Einsatz kommt. Leider ist Twofish (noch) nicht in OpenSSL integriert und somit auch unter OpenVPN nicht verfügbar.
GCM,CBC,OFB, CFB, ... stellen die verschiedenen Betriebsarten der Algorithmen dar. Mit ihnen werden die Datenpakete verknüpft, nachdem diese vom Algorithmus verschlüsselt wurden.


Beispiele für die Wahl sicherer Blockchiffren:
1.Wahl für gute Sicherheit bei guter Geschwindigkeit vor allem bei Hardware-unterstützung. Das Sicherheitslevel ist zum aktuellen Zeitpunkt hoch genug.

Code: Alles auswählen

cipher AES-256-GCM	          #AES mit 256 Bit im Galois Counter Mode
Die Wahl einer höheren keysize hat bei AES einen starken Einfluss auf die Performance bei schwacher Hardware, wenn keine Hardware-Unterstützung gegeben ist.

2.Wahl für Plattformen die keinen Galois Counter Mode unterstützen!

Code: Alles auswählen

cipher AES-256-CBC	          #AES mit 256 Bit im Cipher Block Chaining Mode


bis OpenVPN v2.3.x (veraltet):
Die Wahl der richtigen Blockchiffren für die Datenpakete muss einige Faktoren berücksichtigen:
Sicherheit, Geschwindigkeit, Systembelastung, ...
Die aktuelle ciper-suite in OpenVPN sieht folgendermaßen aus.

Code: Alles auswählen

DES-CFB 64 bit default key (fixed) (TLS client/server mode)
DES-CBC 64 bit default key (fixed)
IDEA-CBC 128 bit default key (fixed)
IDEA-CFB 128 bit default key (fixed) (TLS client/server mode)
RC2-CBC 128 bit default key (variable)
RC2-CFB 128 bit default key (variable) (TLS client/server mode)
RC2-OFB 128 bit default key (variable) (TLS client/server mode)
DES-EDE-CBC 128 bit default key (fixed)
DES-EDE3-CBC 192 bit default key (fixed)
DES-OFB 64 bit default key (fixed) (TLS client/server mode)
IDEA-OFB 128 bit default key (fixed) (TLS client/server mode)
DES-EDE-CFB 128 bit default key (fixed) (TLS client/server mode)
DES-EDE3-CFB 192 bit default key (fixed) (TLS client/server mode)
DES-EDE-OFB 128 bit default key (fixed) (TLS client/server mode)
DES-EDE3-OFB 192 bit default key (fixed) (TLS client/server mode)
DESX-CBC 192 bit default key (fixed)
BF-CBC 128 bit default key (variable)   Standartmethode in OpenVPN
BF-CFB 128 bit default key (variable) (TLS client/server mode)
BF-OFB 128 bit default key (variable) (TLS client/server mode)
RC2-40-CBC 40 bit default key (variable)
CAST5-CBC 128 bit default key (variable)
CAST5-CFB 128 bit default key (variable) (TLS client/server mode)
CAST5-OFB 128 bit default key (variable) (TLS client/server mode)
RC2-64-CBC 64 bit default key (variable)
AES-128-CBC 128 bit default key (fixed)
AES-128-OFB 128 bit default key (fixed) (TLS client/server mode)
AES-128-CFB 128 bit default key (fixed) (TLS client/server mode)
AES-192-CBC 192 bit default key (fixed)
AES-192-OFB 192 bit default key (fixed) (TLS client/server mode)
AES-192-CFB 192 bit default key (fixed) (TLS client/server mode)
AES-256-CBC 256 bit default key (fixed)
AES-256-OFB 256 bit default key (fixed) (TLS client/server mode)
AES-256-CFB 256 bit default key (fixed) (TLS client/server mode)
AES-128-CFB1 128 bit default key (fixed) (TLS client/server mode)
AES-192-CFB1 192 bit default key (fixed) (TLS client/server mode)
AES-256-CFB1 256 bit default key (fixed) (TLS client/server mode)
AES-128-CFB8 128 bit default key (fixed) (TLS client/server mode)
AES-192-CFB8 192 bit default key (fixed) (TLS client/server mode)
AES-256-CFB8 256 bit default key (fixed) (TLS client/server mode)
DES-CFB1 64 bit default key (fixed) (TLS client/server mode)
DES-CFB8 64 bit default key (fixed) (TLS client/server mode)
DES-EDE3-CFB1 192 bit default key (fixed) (TLS client/server mode)
DES-EDE3-CFB8 192 bit default key (fixed) (TLS client/server mode)
CAMELLIA-128-CBC 128 bit default key (fixed)
CAMELLIA-192-CBC 192 bit default key (fixed)
CAMELLIA-256-CBC 256 bit default key (fixed)
CAMELLIA-128-CFB 128 bit default key (fixed) (TLS client/server mode)
CAMELLIA-192-CFB 192 bit default key (fixed) (TLS client/server mode)
CAMELLIA-256-CFB 256 bit default key (fixed) (TLS client/server mode)
CAMELLIA-128-CFB1 128 bit default key (fixed) (TLS client/server mode)
CAMELLIA-192-CFB1 192 bit default key (fixed) (TLS client/server mode)
CAMELLIA-256-CFB1 256 bit default key (fixed) (TLS client/server mode)
CAMELLIA-128-CFB8 128 bit default key (fixed) (TLS client/server mode)
CAMELLIA-192-CFB8 192 bit default key (fixed) (TLS client/server mode)
CAMELLIA-256-CFB8 256 bit default key (fixed) (TLS client/server mode)
CAMELLIA-128-OFB 128 bit default key (fixed) (TLS client/server mode)
CAMELLIA-192-OFB 192 bit default key (fixed) (TLS client/server mode)
CAMELLIA-256-OFB 256 bit default key (fixed) (TLS client/server mode)
SEED-CBC 128 bit default key (fixed)
SEED-OFB 128 bit default key (fixed) (TLS client/server mode)
SEED-CFB 128 bit default key (fixed) (TLS client/server mode)
Grundsätzlich lassen sich die Chiffren in fixe und variable unterteilen. Die Angabe "(variable)" zeigt die Chiffren mit der Möglichkeit die Bitgröße zu ändern. Bei "(fixed)" ist das nicht möglich
Die meines Erachtens wichtigsten Chiffren sind hier Blowfish und AES. AES ist die Abkürzung für Advanced Encryption Standard und beinhaltet den Rijndael-Algorithmus. Dieser setzte sich auf Grund seiner Schnelligkeit und nicht aufgrund seiner Sicherheit durch. Die wirklich hoch-sicheren Algorithmen beim AES-Finale waren Twofish, Serpent und MARS. Wobei Twofish der Nachfolger von dem in OpenVPN verwendeten Blowfish ist und im N2N-VPN zu Einsatz kommt.
CBC,OFB, CFB, ... stellen die verschiedenen Betriebsarten der Algorithmen dar. Mit ihnen werden die Datenpakete verknüpft, nachdem diese vom Algorithmus verschlüsselt wurden.


Beispiele für sichere Blockchiffren:
1.Wahl für Geschwindigkeit bei Hardware-unterstützung. Sicherheitslevel ist zum aktuellen Zeitpunkt hoch genug.

Code: Alles auswählen

cipher AES-256-CBC	          #AES mit 256 Bit im Cipher Block Chaining Mode
Die Wahl einer höheren keysize hat bei AES einen starken Einfluss auf die Performance, wenn keine Hardware-Unterstützung gegeben ist.


1.Wahl für gute bis extreme Sicherheit. Schneller als AES, wenn keine Hardwareunterstützung!

Code: Alles auswählen

cipher BF-CBC                  #OpenVPN-Standartverschluesselung Blowfish bei 128 Bit
keysize 256                    #max 448 bits bei Blowfish moeglich - in 64 Bit Schritten anpassen
Die Wahl einer höheren keysize hat bei BF nur geringe Auswirkungen auf die Performance.
[/b]

Netzwerkmanagement auf Wakusi
!! KEIN SUPPORT PER PN !!
Wenn es dringend ist, nach dem Admin fragen auf dem:
Teamspeakserver: wakusi.de

Benutzeravatar
cerepro
Globaler Moderator
Globaler Moderator
Beiträge: 248
Registriert: Mittwoch 8. April 2009, 23:18
Kontaktdaten:

Zusätzliche Sicherheit durch HMAC

Beitrag von cerepro »


Zusätzliche Sicherheit durch HMAC (Hash Message Authentication Code) Authentifizierung zum Schutz gegen DOS(Denial of Service)-Attacken und Verschlüsselung des TLS-Kontroll-Kanals:
Die Syntax ab OpenVPN v2.4.x lautet:

Code: Alles auswählen

tls-crypt Datei
Beispiel für Server-Config:

Code: Alles auswählen

tls-crypt ta_tutorial.key
Beispiel für Clients-Config:

Code: Alles auswählen

tls-crypt ta_tutorial.key
Der Schlüssel kann folgendermaßen erstellt werden:

Code: Alles auswählen

openvpn --genkey --secret ta_tutorial.key
alternativ in Windows unter:
Start->Programme->OpenVPN->Utilyties->Generate a static OpenVPN key (Wegen Schreibrechten als Administrator ausführen!)


bis OpenVPN v2.3.x (veraltet), nur Authentifizierung aber keine Verschlüsselung:
Die alte Syntax lautet:

Code: Alles auswählen

tls-auth Datei [Richtung]
Beispiel für Server-Config:

Code: Alles auswählen

tls-auth ta_tutorial.key 0
Beispiel für Clients-Config:

Code: Alles auswählen

tls-auth ta_tutorial.key 1
[/b]

Netzwerkmanagement auf Wakusi
!! KEIN SUPPORT PER PN !!
Wenn es dringend ist, nach dem Admin fragen auf dem:
Teamspeakserver: wakusi.de

Benutzeravatar
cerepro
Globaler Moderator
Globaler Moderator
Beiträge: 248
Registriert: Mittwoch 8. April 2009, 23:18
Kontaktdaten:

Schutz des TLS-Kontroll-Kanals

Beitrag von cerepro »


Zusätzlicher Schutz des TLS-Kontroll-Kanals durch "replay-persist"

Zur weiteren Erhöhung der Sicherheit, vor allem bei Verbindungen mit wechselnder IP und regelmäßigen Reconnects, kann "replay-persist" verwendet werden. "replay-persist" funktioniert nur in Verbindung mit "tls-auth" oder "tls-crypt"! Hierbei wird eine Datei erstellt die die letzten Datenpakete mit Zeitstempel und Sequenznummer enthält. Dadurch werden Datenpakete abgelehnt, die schon bei der letzten Session übertragen wurden -> Replay-Atacke.

Die Syntax lautet:

Code: Alles auswählen

replay-persist Dateiname
Beispiel für Server- und Client-Config:

Code: Alles auswählen

replay-persist replay_persist
[/b]

Netzwerkmanagement auf Wakusi
!! KEIN SUPPORT PER PN !!
Wenn es dringend ist, nach dem Admin fragen auf dem:
Teamspeakserver: wakusi.de

Gesperrt