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
Jawaban:
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:
Di antara instance stunnel Anda memiliki tumpukan protokol ini di kabel:
Saat TLS mengenkripsi muatannya, penyerang hanya dapat melihat:
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:
Yang terlihat seperti ini:
Lapisan TLS bawaan tidak merangkum paket (IP, Ethernet) tetapi hanya digunakan untuk menyiapkan sesi dan mengautentikasi:
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.
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:
Anda harus dapat menggabungkan ini dengan instance stunnel yang terhubung ke HTTPS PROXY jarak jauh:
Yang akan mengimplementasikan tumpukan protokol ini:
sumber
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.
sumber