OpenVPN verwendet die OpenSSL Bibliothek für den Aufbau eines TLS-verschlüsselten Tunnels, durch den die Daten geschickt werden. Der TLS-Standard ist historisch gewachsen und enthält auch Ballast, der aktuelle Sicherheitsanforderungen nicht mehr erfüllt.
Mit folgenden Kommandos kann man schauen, welche Cipher OpenVPN unterstützt:
> openvpn --show-ciphersDie Listen zeigen, dass OpenVPN auch schwache Cipher unterstützt, deren Schwächen ein potenter Angreifer mit TLS-Downgrade Angriffen ausnutzen könnte.
Aktuelle Empfehlungen zur TLS-Verschlüsselung des BSI (TR-3116-4), der IETF (RFC 7525) oder der NSA (Suite-B) sind sich darüber einig, dass nur TLS v1.2 mit AES-GCM und AES-CBC für die symmetrische Verschlüsselung, SHA256 als Digest Algorithmus und elliptische Kurven mit mind. 256 Bit für den ECDHE Schlüsseltausch als sicher eingestuft werden. Ältere TLS-Versionen und schwächere Cipher sollte man nicht mehr verwenden.
Wenn man dem VPN-Provider nicht zutraut, seine Server sicher zu konfigurieren, könnte man man folgende Optionen der OpenVPN Konfigurationsdatei hinzufügen:
tls-version-min | 1.2 |
tls-cipher | TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 |
ncp-cipher | AES-128-GCM:AES-128-CBC |
auth | SHA256 |
dh | none |
ecdh-curve | secp256r1 |
tls-version-min | 1.2 |
tls-cipher | TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 |
ncp-cipher | AES-256-GCM:AES-256-CBC |
auth | SHA256 |
dh | none |
ecdh-curve | secp384r1 |
Compression and encryption is a tricky combination. If an attacker knows or is able to control (parts of) the plaintext of packets that contain secrets, the attacker might be able to extract the secret if compression is enabled. See e.g. the CRIME and BREACH attacks on TLS which also leverage compression to break encryption.