layout: page title: Was ist AmneziaWG? permalink: /blog/amneziawg-de/ keywords: amneziawg,amnezia,wireguard,dpi description: Was ist AmneziaWG? Und was bedeuten die Paramater eigentlich? lang: de feed: true
AmneziaWG ist eine WireGuard Fork, welcher Anti-Erkennungs-Techniken gegen DPI-Systeme implementiert. Diese Anti-Erkennungs-Techniken werden als "Advanced Security" bezeichnet. AmneziaWG kann rückwärtskompatibel zu vanilla WireGuard eingestellt werden.
(aus https://github.com/amnezia-vpn/amnezia-client, GPL-3.0, ausgeschnitten von mir)
Es führt neun zusätzliche Paramater (Jc
, Jmin
, Jmax
, S1
, S2
, H1
, H2
, H3
, H4
) ein.
Das WireGuard-Protokoll besteht aus verschiedenen Nachrichten. Einige der wichtigsten Nachrichten sind die "Handshake Initation", die "Handshake Response" und die eigentliche Datenpakete. Diese WireGuard Nachrichten haben alle einen Header, in welchem ihr Type definiert wird. Dieser wird mithilfe einer ganzen Zahl angegeben. Um eine WireGuard-Verbindung aufzubauen, wird im Allgemeinen vom Peer, welcher die Verbindung aufbauen will, eine "Handshake Initation" gesendet. Der andere Peer antwortet dann mit einer "Handshake Response". Diese Pakete lassen sich mithilfe von DPI-Systemen erkennen und dann entsprechend blockieren. Dadurch wird der ganze WireGuard Tunnel verhindert und WireGuard ist dann blockiert.
AmneziaWG kann vor dem Handshake Junk Pakete senden. Dabei handelt es sich um Pakete, welche zufällige Daten beinhalten und keinen Inhalt vermitteln sollen. Um die Art der Junk-Pakete zu definieren, gibt es drei Parameter: Jc
, Jmin
und Jmax
.
Jc
legt die Anzahl der Junk-Pakete fest. Ein Jc
von drei bedeutet beispielsweise, dass vor dem Handshake drei Pakete mit Zufallsdaten gesendet werden sollen. Jc
darf maximal 128 (inklusive) groß sein.
Jmin
und Jmax
legen die Größe der Junk-Pakete in Bytes fest - genauer die Größe des UDP-Payloads (die Größe des UDP-Header und des IP-Headers zählen also bei der Größenangabe nicht). Jmin
legt dabei die minimale Größe des Payloads und Jmax
die maximale Größe des Payloads fest. Die Größe des eigentlichen Payloads wird dann zufällig so gewählt, dass sie zwischen Jmin
(inklusiv) und Jmax
(inklusiv) liegt. Jmin
muss kleiner oder gleich Jmax
sein. Beide Werte dürfen maximal 1280 (inklusiv) Byte groß sein.
Wenn Jmin
und Jmax
gleich groß sind, liegt die Größe des Payloads zufällig zwischen Jmin
und Jmax + 1
.
Je nach Region und Umständen können verschiedene Werte empfohlen werden. Im Allgemeinen sollte Jc
zwischen 3 (inklusive) und 10 (inklusive) sein. Es wird häufig 3 oder 4 verwendet.
Für Jmin
und Jmax
wird 50 und 1000 bzw. 10 und 50 empfohlen.
Zusätzlich zu den separaten Junk-Paketen werden auch Zufallsdaten vor den eigentlichen WireGuard Daten in der "Handshake Initation" und der "Handshake Response" hinzugefügt. Die Parameter S1
und S2
legen fest, wie viel Bytes an Junkdaten vor den eigentlichen WireGuard Daten platziert werden sollen. In der "Handshake Initation" werden S1
Bytes vor den eigentlichen Daten und in der "Handshake Response" S2
Bytes Zufallsdaten hinzugefügt. Diese Einstellung muss bei allen Peers gleich sein, damit jeder weiß, wo die eigentlichen sinnvollen Daten anfangen.
Für S1
und S2
wird ein zufälliger Wert zwischen 15 (inklusive) und 150 (inklusive) empfohlen. Dabei darf S1 + 56
nicht gleich S2
entsprechen.
Um zu identifizieren, um was für eine WireGuard Nachricht es sich handelt, wird im WireGuard Header ein Typ in Form einer ganzen Zahl angegeben. So hat die "Handshake Initation" den Typ 1 und die "Handshake Response" den Typ 2. Insgesamt gibt es (aktuell) vier festgelegte Typen. Da diese Typen fest definiert sind, eignen sie sich als Kriterium, um WireGuard Pakete zu erkennen. Daher ist es bei AmneziaWG möglich, die vordefinierten Typen zu überschreiben. Der Typ 1 wird zu H1
, der Typ 2 wird zu H2
, der Typ 3 wird zu H3
und der Typ 4 wird zu H4
. Die H
-Werte müssen sich voreinander unterscheiden.
Es wird ein zufälliger Wert zwischen 5 und 2^31-1=2147483647 bzw. 2^32-1=4294967295 (siehe Diskussion hier) empfohlen.
AmneziaWG kann rückwärtskompatibel zu Vanille WireGuard verwendet werden. Dabei wird lediglich das Feature von Junkpaketen vor dem Handshake aktiviert und Features wie Junkdaten im Handshake und benutzerdefinierte Typen deaktiviert.
Dafür können folgende Parameter verwendet werden: S1
von 0, S2
von 0, H1
von 1, H2
von 2, H3
von 3 und H4
von 4.
Die zusätzlichen Parameter können wie Adress- oder Schlüsselparameter in eine WireGuard Konfigurationsdatei geschrieben werden:
[Interface]
PrivateKey = uMnqnbbo+bbnnPVPjjyLqB72JHPvSOew/MqWxPz6PEg=
Address = 192.168.2.4/32
Jc = 3
Jmin = 50
Jmax = 1000
S1 = 20
S2 = 78
H1 = 39131278
H2 = 832138185
H3 = 1436957857
H4 = 1635877746
[Peer]
PublicKey = 8Yr++qyZzEL4zHS7CEgi+9zMm0d09qUA0xeqohNs8F8=
PresharedKey = fbDzRFA/PGH05Uwl9EFcI42F8KABRpSKoqS+Xv2qOl8=
Endpoint = 192.168.1.1:1234
AllowedIPs = fd00::/8
Unter Linux werden die awg-tools
sowie die Kernel oder die Go-Implementierung benötigt. Für Debian gibt es ein von den AmneziaWG-Entwicklern bereitgestelltes Repository für die Tools und die Kernel-Implementierung. Für Arch Linux sind die Tools und die Go-Implementierung in AUR paketiert.
Aktuell unterstützt in F-Droid nur WG Tunnel AmneziaWG.
Die AmneziaWG Entwickler stellen jedoch auch ein eigene VPN-App sowie einen AmneziaWG Client für Android bereit. Es wurde eine Anfrage an die AmneziaWG-Entwickler gestellt, den Client in F-Droid oder IzzyOnDroid aufzunehmen - aktuell ohne Rückmeldung von diesen. Des Weiteren scheint der AmneziaWG Client nicht von den Entwicklern, sondern Google signiert worden zu sein - falls bei Sicherheitsanwendung problematisch ist. Auch bei der Amnezia Client-App wurde eine Anfrage an die Entwickler sowie an F-Droid gesendet. Die Amnezia Client-App ist für IzzyOnDroid leider zu groß.
Eine genaue detaillierte offizielle Dokumentation wird es in vorhersehbarer Zukunft aus Sorge, dies würde Zensoren das Erkennen von AmenziaWG erleichtern vermutlich nicht geben.
Es gibt aktuell mehrere Anfragen, AmneziaWG in OpenWrt (Tools), MikroTik's RouterOS, GL.iNet's OpenWrt, DD-Wrt und andere Distributationen aufzunehmen.
Des Weiteren könnte geplant sein ein S3
bzw S4
für den WireGuard Anti-DoS-Mechanismus einzuführen.