DPI-resistente Tunnel und VPNs

Wir leben in einer interessanten Zeit. Ich würde es sogar auf erstaunliche Weise sagen. Auf der einen Seite sehen wir einige Leute, die wirklich wissen wollen, was andere Leute miteinander reden, und ihnen wirklich sagen wollen, was gelesen werden kann und was nicht. Auf der anderen Seite Bürger, die ihre Rechte auf Geheimnisse persönlicher Korrespondenz und kostenloser Informationen geltend machen möchten und nicht möchten, dass die Fakten dieser Korrespondenz und der Empfang dieser Informationen gegen sie verwendet werden. Eine große Anzahl von Websites, Diensten und Unternehmen von Drittanbietern, die von „Teppichschlössern“ betroffen sind, leiden als Bonus.

Aber nein, in diesem Artikel geht es nicht um die Gesellschaft, sondern um Technologie.

Bild

Die technische Kompetenz der Menschen wächst dank allem, was geschieht, ebenfalls. Waren früher die Wörter „VPN“ und „Proxies“ nur IT-Spezialisten bekannt, kennen sie jetzt sogar Hausfrauen und verwenden darüber hinaus die Bedeutung dieser Wörter.

Im Allgemeinen sind die Nachrichten in letzter Zeit ziemlich unterhaltsam geworden. Beispielsweise ist die Bereitstellung von VPN-Diensten und dergleichen zum Verschlüsseln des Datenverkehrs und zum Umgehen von Sperren jetzt strafbar , und in China werden sie im Allgemeinen dafür inhaftiert . Und vor nicht allzu langer Zeit begann ILV , die Paketanalyse zu verwenden , um das MTProxy-Protokoll zu blockieren . Sie können sich auch auf die Erfahrungen der anderen Länder beziehen, die in solchen Angelegenheiten am erfolgreichsten sind: China, Iran, Kasachstan, Venezuela. In Venezuela beispielsweise blockieren sie direkt direkte Verbindungen nach Tor und verschleierten den Verkehr zu Brücken. Aufgrund all dessen können wir davon ausgehen, dass die Zukunft, die uns erwartet, auch sehr interessant ist, insbesondere wenn die "Verantwortlichen" immer wieder aufhören, dumme Fälschungen zu machen, und klüger und raffinierter handeln.

Zu Habré äußerten sich in den Kommentaren wiederholt Prognosen darüber, wie der Kampf mit Verschlüsselungstechnologien für normale Bürger fortgesetzt werden kann. Ich analysierte die geäußerten Gedanken und betrachtete Zeugnisse aus anderen Ländern. Ich versuchte vorzuschlagen, in welche Richtung sich die Maßnahmen zur Einschränkung der Kommunikation weiter bewegen könnten. DistortNeo und shifttstas haben einige weitere interessante Ideen eingebracht , und am Ende habe ich el777 versprochen , diesen Artikel hinzuzufügen.

Mit ACL-Filtern ist alles klar. Sie handeln jetzt und mit unterschiedlichem Erfolg sind sie erfolgreich und kämpfen nicht (obwohl es ziemlich pessimistische Prognosen gibt ). DPI ist interessanter.

Die Methoden zum "Bestimmen" des Verkehrstyps für DPI können in zwei Gruppen unterteilt werden:

  • Signaturanalyse. Zerlegen des Pakets "durch die Knochen", Vergleichen der Überschriften und der Struktur mit den Proben und somit Bestimmen seines Zwecks. So werden viele Tunnel erkannt, beispielsweise OpenVPN, L2TP / IPSec, SOCKS usw.
  • Eine vorläufige Analyse der Verkehrsaustauschmuster, beispielsweise das Verhältnis des eingehenden / ausgehenden Flusses, die Häufigkeit der Anforderung-Antwort und andere Kriterien, ermöglicht es uns, den „realen Verkehr“ eines Protokolls und den Tunnel, der sich nur als Protokoll tarnt, zu trennen.

Bild

Sie können den Datenverkehr in mehrere Gruppen aufteilen und davon ausgehen, was diese mit jeder Gruppe tun.

  1. "Explizite" VPNs, Tunnel und Proxys (OpenVPN, L2TP / IPSec, SOCKS usw.) Gewöhnliche VPNs und Tunnel können durchaus automatisch blockiert werden, wie dies beispielsweise in China und Venezuela der Fall ist. Wenn einige Organisationen oder Unternehmen es für die Arbeit benötigen, lassen Sie sie sich registrieren und zertifizieren, wie das oben erwähnte russische Gesetz ganz konkret vorsieht. Mit einem Proxy ist es noch einfacher - dass HTTP, dass SOCKS Adressen und Inhalte im Klartext übertragen, was im Allgemeinen keine Probleme für das selektive „Schneiden“ von Anforderungen und das Abhören übertragener Informationen verursacht.
  2. Dual-Use-Technologien wie SSH . Kurz nachdem die Sitzung eingerichtet wurde, wird die Geschwindigkeit auf eine Schildkröte reduziert, sodass Sie immer noch zumindest irgendwie in der Konsole arbeiten können, aber nicht mehr surfen und herunterladen müssen. Die Tatsache, dass dies während der normalen Arbeit zu Problemen führt, stört niemanden (was uns ILV in letzter Zeit mehr als einmal gezeigt hat).
  3. Hochspezifische Protokolle wie Messenger, Spieleclients usw.
  4. Verbindungen, deren Typ nicht bestimmt werden kann .

Für die Punkte 3 und 4 sind durchaus "weiße Listen" möglich (in denen beispielsweise Subnetze von offiziellen Spielservern oder "korrekten" Messenger eingegeben werden und alles, was die Serverbesitzer deklarieren und nach Bedarf anordnen möchten, damit sie nicht berührt werden, analog dazu diejenigen, die ILV bereits für Domänen und IP-Adressen hat). Und diejenigen, die nicht in diesen Listen aufgeführt sind, werden das gleiche Schicksal wie Absatz 1 oder Absatz 2 haben, obwohl es durchaus möglich ist, die Geschwindigkeit nicht unverblümt zu blockieren oder zu verringern, sondern die zuvor erwähnten Austauschmuster zu analysieren, um festzustellen, ob der Verkehr „rein“ ist. "Oder" verdächtig ".

Das heißt, wenn Sie sich als spezielle Protokolle tarnen oder die Verbindungen verschleiern möchten, so dass es unmöglich ist, ihren Typ zu bestimmen, müssen Sie auch darauf achten, "Rauschen" zu erzeugen, das die Erkennung realer Austauschmuster verhindert. Bisher sind mir solche Entwicklungen nicht aufgefallen.

Sie können sich nicht einmal an verschiedene ICMP- und DNS-Tunnel erinnern - eine große Menge an Datenverkehr, der nicht benötigt wird, lässt automatisch auch Verdacht aufkommen.

5. TLS und SSL, HTTPS . Es ist unmöglich, sauber zu schneiden, da dies automatisch bedeutet, das gesamte Internet zu blockieren. Die Musteranalyse ist nicht sinnvoll, da das Surfen im Internet nur der Hauptzweck der Verwendung von HTTPS ist. Aus all diesen Gründen scheint SSL / TLS an Port 443 die „ahnungsloseste“ und zuverlässigste Option zu sein. Versuchen wir deshalb, uns als ihn zu verkleiden.

Bild

Verkleide uns


Zur Prüfung wurde entschieden, Streisand- und SoftEther-Lösungen zu wählen.

Streisand - eine ganze Reihe verschiedener Dienste: OpenConnect / AnyConnect, OpenVPN, Stunnel, Shadowsocks, WireGuard. All dies wird im automatischen oder halbautomatischen „schlüsselfertigen“ Modus eingestellt, und am Ausgang erhält der Benutzer einen konfigurierten Server sowie Dateien und detaillierte Dokumentationen zum Einrichten von Clients.

SoftEther ist ein VPN-Server, der L2TP / IPsec-, OpenVPN-, SSTP- und andere Protokolle aufheben kann und über ein eigenes SSL-VPN-Protokoll verfügt, das laut den Autoren nicht vom normalen HTTPS-Verkehr zu unterscheiden ist.

Also ...

OpenConnect / AnyConnect. Open Source-Implementierung des Cisco AnyConnect SSL-Protokolls. Wenn eine Verbindung hergestellt wird, sind nicht nur TLS (TCP) -Pakete, sondern auch DTLS (UDP) -Pakete sichtbar. DTLS wird im Prinzip auch häufig verwendet, wenn "für friedliche Zwecke", aber dies ist überhaupt nicht wie "normales HTTPS". Wenn Sie jedoch den UDP-Verkehr in der Firewall reduzieren, wechselt AnyConnect sofort wieder zu TCP und sieht von außen wieder vollständig und vollständig wie normales TLS aus, und selbst die Authentifizierung innerhalb des verschlüsselten Tunnels ist fast wie bei HTTP.

Schattenstrümpfe . Verschlüsselter SOCKS-Proxy. Anscheinend kann es auf Wunsch erkannt werden , es gibt jedoch Plugins, die es als "reines HTTPS" tarnen . Es gibt auch ein Plugin zum Durcharbeiten von Websockets, aber dazu später mehr.

Wireguard Der Beschreibung nach zu urteilen, verfügt es über eine gut verdrillte Verschlüsselung und einen Sitzungsaufbau-Mechanismus, aber die gesamte Kommunikation erfolgt über UDP. Wireshark definiert die Art der Pakete als etwas völlig Unhörbares, und was eine Meinung darüber ist, was mit einem DPI eines Drittanbieters passiert, ist eine sehr, sehr große Frage. Update: Neuere Versionen definieren Wireguard eindeutig als Wireguard, sodass die Antwort auf die Frage offensichtlich ist.

obfs3, obfs4 . Pakete werden so verschleiert, dass sie von außen wie ein völlig zufälliger Satz von Werten aussehen. Das heißt, sie fallen unter Punkt 4 aus der obigen Liste.

SoftEther Es sieht aus wie HTTPS, aber mit einem Haken. Zusätzlich zu TLS direkt über TCP sendet es aktiv Pakete von UDP-Paketen. Wie in der Dokumentation festgestellt wurde, kann UDP verwendet werden, um die Datenübertragung zu beschleunigen, wenn sie nicht in der Firewall beendet wird. Diese Funktionalität ist in der Konfiguration deaktiviert, und nachdem sie deaktiviert wurde, wird alles so, wie es sollte.

SSTP . VPN-Prokotol von Microsoft. Wird von Windows nativ unterstützt und unterstützt Software unter GNU / Linux. Von außen sieht es aus wie HTTPS, und Wireshark bestätigt dies voll und ganz.

Aber das ist noch nicht alles


Angenommen, Sie haben einen VPN-Server oder das Ende eines Tunnels auf einem Host installiert und so konfiguriert, dass er Port 443 überwacht. Es scheint, dass alles in Ordnung ist, aber es gibt einen ABER: Wenn wir uns als HTTPS verkleiden, können Sie überprüfen, ob es tatsächlich an Port 443 hängt, indem Sie einfach versuchen, sich in diesem Port mit einem einfachen Browser oder CURL oder auf andere Weise zu begraben. In einigen Artikeln wird eine solche Methode als "Leitungsverbindung" bezeichnet und wird, wie erwähnt, in China bereits häufig verwendet.

Daher brauchen wir am 443. Port den gewöhnlichsten und anständigsten Webserver. Und hier entsteht ein interessantes Problem.

Keiner der oben genannten Dienste in der Hauptdokumentation fand eine Beschreibung des Arbeitsmechanismus der Portfreigabe. Die SSLH-Option ist nicht geeignet, schon allein deshalb, weil sslh den Datenverkehr zwischen HTTPS und den oben genannten Diensten nicht gemeinsam nutzen kann. Zumindest, weil DPI in der Lage sein wird, wenn die Art des Verkehrs ohne vollständige Entschlüsselung sslh unterscheiden könnte.

In den meisten Fällen wird die Verwendung von SNI (Server Name Indication) empfohlen - einer TLS-Erweiterung, mit der Sie einen Hostnamen angeben und anschließend HAProxy, Sniproxy und andere Tools verwenden können, um Verbindungen für Dienste zu verteilen. Das Problem ist, dass in modernen TLS-Implementierungen der bei der Verwendung von SNI angegebene Hostname im Klartext übertragen wird, dh in unverschlüsselter Form, und daher auch in Zukunft ausspioniert und verwendet werden kann.

Deshalb werden wir improvisieren, und dann kamen mir zwei Optionen in den Sinn.

Port klopfen


Bild

Port Knocking dient nur dazu, "versteckte Dienste" auf dem Server zu aktivieren. In ähnlicher Weise wird beispielsweise der Port, an dem der SSH-Dämon hängt, häufig "geschlossen", um Brute Force und die Verwendung von 0-Tage-Sicherheitslücken zu vermeiden. In der klassischen Version (siehe z. B. die Implementierung des knockd-Daemons) wird unter Klopfen normalerweise der Versuch verstanden, eine Verbindung herzustellen oder Pakete an bestimmte Host-Ports in einer bestimmten Reihenfolge zu senden, wodurch der Daemon Sie als seinen eigenen "erkennt" und eine Firewall-Regel aktiviert, die den Zugriff auf einen bestimmten Port ermöglicht nur von Ihrer IP.

In unserem Fall ist diese Option nicht ganz akzeptabel. Erstens können die „nicht standardmäßigen“ Ports selbst irgendwo auf dem Weg blockiert sein, und zweitens kann das Verfahren selbst, wenn es von außen analysiert wird, verdächtig aussehen. Da wir uns als HTTPS tarnen, müssen wir auf HTTPS „klopfen“.

Überraschenderweise gab es keine HTTP / HTTPS-Klopfer mit der erforderlichen Funktionalität, und daher wurde ein Nocker mit dem romantischen Namen Labean geboren (Husaren, schweigen Sie!).

Gegeben: unser Server, auf dem Nginx auf Port 443 mit korrekt konfigurierten Zertifikaten ausgeführt wird und einige völlig harmlose Inhalte anzeigt, z. B. GIFs mit Katzen, ISO-Images von GNU / Linux-Distributionen oder ein Wikipedia-Spiegel und Moshkovs Bibliothek.

Gleichzeitig versteckten sich Zeilen des Formulars in der Nginx-Konfiguration

 location ~ ^/somesecret/(.*) {
    auth_basic      "Administrator Login";
    auth_basic_user_file  /var/www/.htpasswd;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_pass http://127.0.0.1:8080/$1;
  }

, CURL'
https://ourserver.org/somesecret/vpn/on
, , , IP-, -
iptables -t nat -A PREROUTING -p tcp -s {clientIP} --dport 443 -j REDIRECT --to-port 4443
.

N (, ) , , , IP .

, , URL , /off .

, IPv6 (v6- X-Real-IP ).

Go, , , . , nginx init- Gihub:
https://github.com/uprt/labean

Websockets


image

: HTTPS — . Web- TCP , Websocket (RFC 6455). HTTP-, , TCP-. , , HTTPS .

WS , - — , CDN, , Cloudflare . , : IP CDN/proxy CDN, VPN/proxy CDN, .

WS- ( Haskell), wstunnel, nodejs , .

. wss://-,

wstunnel -t 33 wss://server:443

, «» ws- «» . wstunnel, , URI - :

wstunnel -t 33 wss://ourserver.org:443/hiddenws/

:

, 443 Nginx c - .

proxy- Websockets-:

location /hiddenws {
    proxy_pass http://127.0.0.1:8081;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
  }

websockets-. SOCKS- (, Dante), OpenVPN, , , .

selinux
RHEL , SELinux, nginx
2018/07/05 13:28:03 [crit] 7724#0: *11 connect() to 127.0.0.1:8081 failed (13: Permission denied) while connecting to upstream, client: IP_ADDRES, server: _, request: «GET /hiddenws/?dst=localhost:22 HTTP/1.1», upstream: «127.0.0.1:8081/hiddenws/?dst=localhost:22»,

:

semanage port -a -t http_port_t -p tcp 22
semanage port -m -t http_port_t -p tcp 22
semanage port -a -t http_port_t -p tcp 8081


Renatk .


— SOCKS- VPN- wstunnel, «» .

, v2ray shadowcocks, websockets shadowsocks. : https://github.com/shadowsocks/v2ray-plugin


— VPN- - MTU, 1400;
— VPN- 2 IP-. VPN/, ;
— «» IP- , ICMP ping;
— - reverse DNS , -, , gateway-001.somehomeisp.net;
— VPN/ DNS- OpenNIC;
( ).


image

- , — . , , — , , . , HTTPS — , , - « »/ /etc., , « », .

, , , , — , , , .
.

Source: https://habr.com/ru/post/de415977/


All Articles