stunnel vpn traffic dan memastikan sepertinya traffic SSL pada port 443

13

Saya mencoba membuat lalu lintas keluar dan masuk saya tampak sedekat mungkin dengan lalu lintas SSL. Apakah ada cara untuk DPI traffic saya sendiri untuk memastikan sepertinya traffic SSL dan bukan traffic OpenVPN? Dan berdasarkan pengaturan konfigurasi saya, apakah semua lalu lintas menggunakan port 443 yang merupakan port SSL?

Konfigurasi saya adalah sebagai berikut:

STUNNEL di laptop:

[openvpn]
# Set sTunnel to be in client mode (defaults to server)
client = yes  
# Port to locally connect to
accept = 127.0.0.1:1194  
# Remote server for sTunnel to connect to
connect = REMOTE_SERVER_IP:443

KONFIG OPENVPN PADA laptop:

client
dev tun
proto tcp
remote 127.0.0.1 1194
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun

CONFIG STUNNEL PADA SERVER:

sslVersion = all
options = NO_SSLv2
;chroot = /var/lib/stunnel4/
; PID is created inside the chroot jail
pid = /stunnel4.pid
; Debugging stuff (may useful for troubleshooting)
 debug = 7
 output = /var/log/stunnel4/stunnel4.log
setuid = root
setgid = root
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
compression = zlib
[openvpn]
accept = REMOTE_SERVER_IP:443
connect = REMOTE_SERVER_IP:11440
cert=/etc/stunnel/server.pem
key=/etc/stunnel/server.key

KONFIG OPENVPN di server:

local REMOTE_SERVER_IP
port 11440
proto tcp
Jason
sumber
Mencoba mempelajari aspek-aspek baru dengan VPN dan memahami protokol jaringan bersama dengan analisis, dll ...
Jason
2
Anda dapat menjawab pertanyaan ke-2 dengan wireshark berjalan di laptop Anda dan mungkin belajar lebih banyak di jalan
Alec Istomin
Bukan berarti Anda harus menonaktifkan kompresi TLS (karena CRIME) dan membatasi jumlah protokol dan cryptosuites TLS yang tersedia untuk menghindari serangan sederhana pada terowongan TLS Anda ( sisi server dan sisi klien) jika Anda benar-benar ingin menggunakan ini di dunia nyata dunia.
ysdx
Anda dapat menggunakan port lain untuk SSL / TLS. saya bahkan melakukannya melalui SCTP dan IPv6.
Skaperen

Jawaban:

22

OpenVPN melalui TLS

VPN Anda menggunakan TCP sebagai protokol transport. Instans stunnel digunakan untuk merangkum konten aliran TCP dalam TLS / TCP. Anda mendapatkan tumpukan protokol ini:

[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
            [TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
 Server setrum klien setrum

Di antara instance stunnel Anda memiliki tumpukan protokol ini di kabel:

[AKU P ]
[OpenVPN]
[TLS]
[TCP (443)]
[AKU P ]
[...]

Saat TLS mengenkripsi muatannya, penyerang hanya dapat melihat:

[??? ]
[TLS]
[TCP (443)]
[AKU P ]
[...]

Jadi ya, itu adalah lalu lintas TLS biasa (itu bisa HTTP / TLS, SMTP / TLS, POP / TLS atau apa pun untuk seseorang yang melihat lalu lintas tetapi terlihat sangat mirip HTTP / TLS ketika port TCP 443 digunakan). Anda dapat memeriksanya dengan menggunakan wireshark: merekam lalu lintas di antara instance stunnel. Di UI wireshark (tombol kanan pada paket stream), Anda dapat meminta wireshark untuk mengartikan lalu lintas sebagai TLS: ia akan mengenalinya sebagai lalu lintas TLS (Anda akan melihat pesan TLS yang berbeda tetapi bukan muatan sesi TLS) .

Anda mungkin ingin menggunakan SNI di klien agar terlihat seperti apa yang dilakukan peramban modern. Anda mungkin ingin menggunakan ALPN juga tetapi stunnel saat ini tidak mengatasinya.

OpenVPN dengan built-in TLS

Sebagai perbandingan, jika Anda menggunakan OpenVPN, Anda akan memiliki sesuatu seperti ini:

[AKU P ]
[OpenVPN]
[TCP]
[AKU P ]
[...]

Yang terlihat seperti ini:

[??? ]
[OpenVPN]
[TCP]
[AKU P ]
[...]

Lapisan TLS bawaan tidak merangkum paket (IP, Ethernet) tetapi hanya digunakan untuk menyiapkan sesi dan mengautentikasi:

[TLS]
[OpenVPN]
[TCP]
[AKU P ]
[...]

Dalam hal ini, lalu lintas Anda tidak terlihat seperti lalu lintas TLS biasa tetapi jelas merupakan OpenVPN. Jika Anda menginterpretasikan traffic ini sebagai OpenVPN di wireshark, Anda akan mengenali pesan OpenVPN dan di dalamnya pesan-pesan TLS (tetapi bukan payload).

Peringatan

Anda harus menyadari bahwa jika penyerang pasif tidak dapat memberi tahu bahwa server jarak jauh Anda sebenarnya adalah server OpenVPN, penyerang aktif akan dapat mengetahuinya: cukup dengan menghubungkan ke server Anda melalui TLS, ia akan dapat untuk mengonfirmasi bahwa itu bukan server HTTP / TLS. Dengan mencoba berbicara protokol OpenVPN, ia akan dapat mendeteksi bahwa server Anda adalah server OpenVPN / TLS.

OpenVPN melalui TLS dengan otentikasi klien

Jika Anda khawatir tentang hal ini, Anda dapat mengaktifkan otentikasi klien TLS: penyerang tidak akan dapat memulai sesi TLS yang berfungsi dan tidak akan dapat menebak muatan mana yang dienkapsulasi melalui TLS.

* Peringatan: ** Saya tidak berbicara tentang dukungan TLS bawaan di OpenVPN (lihat di atas untuk penjelasan mengapa itu tidak membantu Anda).

OpenVPN / TLS dan HTTP / TLS multipleks

Solusi lain adalah melayani HTTP dan OpenVPN selama sesi TLS. sslh dapat digunakan untuk secara otomatis mendeteksi payload protokol dan mengirim baik ke server HTTP / TCP biasa atau Anda OpenVPN / server TCP. Server akan terlihat seperti server HTTP / TLS standar tetapi seseorang yang mencoba berbicara OpenVPN / TLS dengan server ini akan dapat mendeteksi bahwa itu sebenarnya adalah server OpenVPN / TLS juga.

        baik OpenVPN / TCP
          atau HTTP / TCP       
[1] .---------. .------. HTTP / TCP .-------------.
-> | stunnel | ----> | sslh | -------> | Server HTTP |
   '---------' '------' | '-------------'
                           | .----------------.
                           '------> | Server OpenVPN |
                        OpenVPN / TCP '----------------'

[1] = Baik OpenVPN / TLS / TCP atau HTTP / TLS / TCP

OpenVPN melalui HTTP CONNECT melalui TLS

Solusi lain adalah dengan menggunakan server HTTP / TLS standar dan menggunakan HTTP CONNECT / TLS untuk terhubung ke server OpenVPN: itu akan terlihat seperti server HTTP standar. Anda bahkan dapat meminta otentikasi klien untuk mengesahkan permintaan HTTP CONNECT (squid harus dapat melakukan ini).

OpenVPN memiliki opsi untuk menggunakan HTTP Proxy:

http-proxy proxy.example.com

Anda harus dapat menggabungkan ini dengan instance stunnel yang terhubung ke HTTPS PROXY jarak jauh:

http-proxy 127.0.0.1 8443
remote vpn.example.com

Yang akan mengimplementasikan tumpukan protokol ini:

[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
            [HTTP] <-------------> [HTTP]
            [TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
 Server HTTPS PROXY stunnel Client
ysdx
sumber
Bisakah Anda menguraikan pendekatan HTTP CONNECT? Di mana saya dapat menemukan panduan untuk mengatur ini?
kontextify
kobtextify: menambahkan beberapa detail tentang kemungkinan implementasi OpenVPN / HTTP_CONNECT / TLS.
ysdx
Terima kasih! Bagaimana tampilan server web atau Squid?
kontextify
Saya kira sesuatu seperti «acl VPN_SERVER dstdomain vpn.example.com» «acl VPN_PORT ports 1194» «acl CONNECT methods CONNECT» «http_access izinkan VPN_PORT CONNECT VPN_PORT CONNECT» «http_access deny all».
ysdx
4

Jawaban ysdx sangat bagus, dan menjelaskan dengan sangat baik bagaimana lalu lintas akan terlihat di kawat.

Akan tetapi, yang tidak disebutkan adalah analisis lalu lintas dapat digunakan untuk mengidentifikasi aplikasi.

Mari kita asumsikan bahwa koneksi OpenVPN Anda terlihat seperti koneksi https pada kabel, sehingga penyerang tidak dapat membaca aliran byte dan tahu seperti apa koneksi itu.

Koneksi https yang khas tidak akan hidup terlalu lama. Mungkin browser Anda membuat koneksi terbuka ke server email Anda, saya tidak tahu. Secara umum, akan ada banyak koneksi yang relatif singkat ke banyak server jarak jauh yang beragam.

OTOH, koneksi OpenVPN mungkin hidup berjam-jam atau berhari-hari, dan akan mengirim banyak data bolak-balik ke server openvpn.

Anda dapat mengurangi koneksi yang berumur panjang dengan menjatuhkan dan memulai kembali koneksi secara berkala. Ini mungkin memiliki implikasi untuk lalu lintas aplikasi Anda, tetapi mungkin bisa diterapkan. Pola banyak dan banyak lalu lintas yang terjadi antara Anda dan server openvpn, akan jauh lebih sulit untuk kamuflase.

Dan Pritts
sumber
2
Iya. Terlebih lagi, saya kira mungkin untuk melihat bentuk lalu lintas (seperti "ledakannya") dan membandingkannya dengan HTTP / TLS standar, IMAP / TLS, POP / TLS, OpenVPN / TLS. Anda mungkin mencoba untuk mengklasifikasikan lalu lintas TLS yang diberikan dengan profil lalu lintas tersebut dan memiliki gagasan tentang jenis lalu lintas yang dienkapsulasi dalam koneksi TLS Anda.
ysdx