Domain ngarep adhedhasar TLS 1.3

Pambuka

Domain ngarep adhedhasar TLS 1.3
Sistem nyaring konten perusahaan modern saka manufaktur terkenal kaya Cisco, BlueCoat, FireEye duwe akeh sing padha karo mitra sing luwih kuat - sistem DPI, sing aktif ditindakake ing tingkat nasional. Inti saka karya loro kasebut yaiku mriksa lalu lintas Internet sing mlebu lan metu lan, adhedhasar dhaptar ireng / putih, nggawe keputusan kanggo nglarang sambungan Internet. Lan amarga loro-lorone padha ngandelake prinsip sing padha ing dhasar karyane, cara kanggo ngubengi dheweke uga akeh sing padha.

Salah sawijining teknologi sing ngidini sampeyan ngliwati DPI lan sistem perusahaan kanthi efektif yaiku teknologi ngarep domain. Intine yaiku yen kita pindhah menyang sumber sing diblokir, ndhelikake domain umum liyane kanthi reputasi apik, sing jelas ora bakal diblokir dening sistem apa wae, contone google.com.

Cukup akeh artikel sing wis ditulis babagan teknologi iki lan akeh conto sing diwenehake. Nanging, teknologi DNS-over-HTTPS lan ndhelik-SNI sing populer lan bubar dibahas, uga versi anyar protokol TLS 1.3, ngidini sampeyan nimbang opsi liyane kanggo ngarep domain.

Ngerti teknologi

Kaping pisanan, ayo nemtokake konsep dhasar supaya saben wong ngerti sapa sapa lan kenapa kabeh iki dibutuhake. Kita nyebutake mekanisme eSNI, operasi sing bakal dibahas luwih lanjut. Mekanisme eSNI (Enkripsi Jeneng Server Indikasi) minangka versi SNI sing aman, mung kasedhiya kanggo protokol TLS 1.3. Ide utama yaiku kanggo ndhelik, antara liya, informasi babagan domain sing dijaluk dikirim.

Saiki ayo ndeleng kepiye mekanisme eSNI ing praktik.

Ayo kita duwe sumber Internet sing diblokir dening solusi DPI modern (ayo njupuk, contone, tracker torrent misuwur rutracker.nl). Nalika kita nyoba ngakses situs web tracker torrent, kita ndeleng rintisan standar panyedhiya sing nuduhake manawa sumber kasebut diblokir:

Domain ngarep adhedhasar TLS 1.3

Ing situs web RKN domain iki bener-bener kadhaptar ing dhaptar mandeg:

Domain ngarep adhedhasar TLS 1.3

Nalika sampeyan takon whois, sampeyan bisa ndeleng manawa domain kasebut "didhelikake" ing mburi panyedhiya awan Cloudflare.

Domain ngarep adhedhasar TLS 1.3

Nanging ora kaya "spesialis" saka RKN, karyawan sing luwih cerdas teknis saka Beeline (utawa diwulang kanthi pengalaman pahit saka regulator sing misuwur) ora bodho nglarang situs kasebut kanthi alamat IP, nanging nambahake jeneng domain menyang daftar mandeg. Sampeyan bisa verifikasi kanthi gampang yen sampeyan ndeleng apa domain liyane sing didhelikake ing alamat IP sing padha, bukak salah sawijining lan deleng manawa akses ora diblokir:

Domain ngarep adhedhasar TLS 1.3

Kepiye kedadeyan iki? Kepiye DPI panyedhiya ngerti domain endi browserku, amarga kabeh komunikasi dumadi liwat protokol https, lan kita durung ngerteni penggantian sertifikat https saka Beeline? Apa dheweke clairvoyant utawa aku dituruti?

Ayo nyoba mangsuli pitakon iki kanthi ndeleng lalu lintas liwat wireshark

Domain ngarep adhedhasar TLS 1.3

Gambar kasebut nuduhake yen browser pisanan entuk alamat IP server liwat DNS, banjur jabat tangan TCP standar kedadeyan karo server tujuan, banjur browser nyoba nggawe sambungan SSL karo server. Kanggo nindakake iki, ngirim paket Hello Klien SSL, sing ngemot jeneng domain sumber ing teks sing cetha. Lapangan iki dibutuhake dening server frontend cloudflare supaya bisa nuntun sambungan kanthi bener. Iki ngendi panyedhiya DPI nyekel kita, ngrusak sambungan kita. Ing wektu sing padha, kita ora nampa stub saka panyedhiya, lan kita ndeleng kesalahan browser standar kaya-kaya situs kasebut dipateni utawa mung ora bisa digunakake:

Domain ngarep adhedhasar TLS 1.3

Saiki ayo aktifake mekanisme eSNI ing browser, kaya sing ditulis ing pandhuan kanggo Firefox :
Kanggo nindakake iki, kita mbukak kaca konfigurasi Firefox babagan: config lan aktifake setelan ing ngisor iki:

network.trr.mode = 2;
network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled = true

Sawise iki, kita bakal mriksa manawa setelan kasebut bisa digunakake kanthi bener ing situs web cloudflare. link lan ayo nyoba trik kasebut nganggo tracker torrent maneh.

Domain ngarep adhedhasar TLS 1.3

Voila. Pelacak favorit dibukak tanpa VPN utawa server proxy. Saiki ayo deleng dump lalu lintas ing wireshark kanggo ndeleng apa sing kedadeyan.

Domain ngarep adhedhasar TLS 1.3

Wektu iki, paket hello klien ssl ora ngemot domain tujuan kanthi jelas, nanging lapangan anyar katon ing paket kasebut - encrypted_server_name - ing kene ana nilai rutracker.nl, lan mung server frontend cloudflare sing bisa dekripsi iki lapangan. Lan yen mangkono, DPI panyedhiya ora duwe pilihan kajaba wisuh tangan lan ngidini lalu lintas kasebut. Ora ana pilihan liyane karo enkripsi.

Dadi, kita ndeleng carane teknologi bisa digunakake ing browser. Saiki ayo kang nyoba kanggo aplikasi kanggo bab sing luwih spesifik lan menarik. Lan pisanan, kita bakal ngajari curl sing padha kanggo nggunakake eSNI kanggo nggarap TLS 1.3, lan ing wektu sing padha, kita bakal weruh carane ngarep domain basis eSNI bisa digunakake.

Domain ngarep karo eSNI

Amarga kasunyatan sing curl nggunakake perpustakaan openssl standar kanggo nyambung liwat protokol https, pisanan kabeh kita kudu nyedhiyani support eSNI ana. Ora ana dhukungan eSNI ing cabang master openssl, mula kita kudu ndownload cabang openssl khusus, ngumpulake lan nginstal.

Kita kloning repositori saka GitHub lan kompilasi kaya biasane:

$ git clone https://github.com/sftcd/openssl
$ cd openssl
$ ./config

$ make
$ cd esnistuff
$ make

Sabanjure, kita clone repositori karo curl lan ngatur kompilasi nggunakake perpustakaan openssl sing dikompilasi:

$ cd $HOME/code
$ git clone https://github.com/niallor/curl.git curl-esni
$ cd curl-esni

$ export LD_LIBRARY_PATH=/opt/openssl
$ ./buildconf
$ LDFLAGS="-L/opt/openssl" ./configure --with-ssl=/opt/openssl --enable-esni --enable-debug

Kene iku penting kanggo bener nemtokake kabeh direktori ngendi openssl dumunung (ing kasus kita, iki / opt / openssl /) lan priksa manawa proses konfigurasi dadi liwat tanpa kasalahan.

Yen konfigurasi sukses, kita bakal weruh baris:

PÈNGET: esni ESNI diaktifake nanging ditandhani EKSPERIMENTAL. Gunakake kanthi ati-ati!

$ make

Sawise kasil mbangun paket kasebut, kita bakal nggunakake file bash khusus saka openssl kanggo ngatur lan mbukak curl. Ayo nyalin menyang direktori nganggo curl supaya gampang:

cp /opt/openssl/esnistuff/curl-esni 

lan nggawe panjalukan https test menyang server cloudflare, nalika ngrekam paket DNS lan TLS ing Wireshark bebarengan.

$ ESNI_COVER="www.hello-rkn.ru" ./curl-esni https://cloudflare.com/

Ing respon server, saliyane akeh informasi debugging saka openssl lan curl, kita bakal nampa respon HTTP kanthi kode 301 saka cloudflare.

HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 13:12:55 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: max-age=3600
< Expires: Sun, 03 Nov 2019 14:12:55 GMT
< Location: https://www.cloudflare.com/

sing nuduhake yen panjaluk kita wis kasil dikirim menyang server tujuan, dirungokake lan diproses.

Saiki ayo deleng dump lalu lintas ing wireshark, yaiku. apa DPI panyedhiya weruh ing kasus iki.

Domain ngarep adhedhasar TLS 1.3

Bisa dideleng yen curl pisanan nguripake menyang server DNS kanggo kunci eSNI umum kanggo server cloudflare - request DNS TXT kanggo _esni.cloudflare.com (paket No. 13). Banjur, nggunakake perpustakaan openssl, curl ngirim panjalukan TLS 1.3 menyang server cloudflare ing ngendi lapangan SNI dienkripsi kanthi kunci umum sing dipikolehi ing langkah sadurunge (paket #22). Nanging, saliyane kanggo lapangan eSNI, paket SSL-hello uga kalebu lapangan kanthi SNI biasa - mbukak, sing bisa ditemtokake kanthi urutan apa wae (ing kasus iki - www.hello-rkn.ru).

Bidang SNI sing mbukak iki ora dianggep kanthi cara apa wae nalika diproses dening server cloudflare lan mung dadi topeng kanggo panyedhiya DPI. Server cloudflare nampa paket ssl-hello kita, dekripsi eSNI, ngekstrak SNI asli saka kono lan diproses kaya-kaya ora ana sing kedadeyan (iku nindakake kabeh persis kaya sing direncanakake nalika ngembangake eSNI).

Siji-sijine perkara sing bisa ditindakake ing kasus iki saka sudut pandang DPI yaiku panjaluk DNS utama kanggo _esni.cloudflare.com. Nanging kita nggawe panjalukan DNS mbukak mung kanggo nuduhake cara mekanisme iki bisa digunakake saka njero.

Kanggo pungkasane narik karpet metu saka ngisor DPI, kita nggunakake mekanisme DNS-over-HTTPS sing wis kasebut. Panjelasan sethithik - DOH minangka protokol sing ngidini sampeyan nglindhungi saka serangan man-in-the-middle kanthi ngirim panjalukan DNS liwat HTTPS.

Ayo tindakake panjalukan maneh, nanging wektu iki kita bakal nampa kunci eSNI umum liwat protokol https, dudu DNS:

ESNI_COVER="www.hello-rkn.ru" DOH_URL=https://mozilla.cloudflare-dns.com/dns-query ./curl-esni https://cloudflare.com/

Panjaluk lalu lintas mbucal ditampilake ing gambar ing ngisor iki:

Domain ngarep adhedhasar TLS 1.3

Bisa dideleng manawa curl pisanan ngakses server mozilla.cloudflare-dns.com liwat protokol DoH (sambungan https menyang server 104.16.249.249) kanggo entuk nilai kunci umum kanggo enkripsi SNI, banjur menyang tujuan. server, ndhelikake konco domain www.hello-rkn.ru.

Saliyane ing ndhuwur solver DoH mozilla.cloudflare-dns.com, kita bisa nggunakake layanan DoH populer liyane, contone, saka perusahaan ala misuwur.
Ayo mbukak pitakon ing ngisor iki:

ESNI_COVER="www.kremlin.ru" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/

Lan kita entuk jawaban:

< HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 14:10:22 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=da0144d982437e77b0b37af7d00438b1a1572790222; expires=Mon, 02-Nov-20 14:10:22 GMT; path=/; domain=.rutracker.nl; HttpOnly; Secure
< Location: https://rutracker.nl/forum/index.php
< CF-Cache-Status: DYNAMIC
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 52feee696f42d891-CPH

Domain ngarep adhedhasar TLS 1.3

Ing kasus iki, kita pindhah menyang server rutracker.nl sing diblokir, nggunakake dns.google solver DoH (ora ana kesalahan ketik ing kene, saiki perusahaan sing misuwur duwe domain tingkat pertama dhewe) lan nutupi awake dhewe karo domain liyane, sing ketat. dilarang kanggo kabeh DPI kanggo mblokir ing pain saka pati. Adhedhasar respon sing ditampa, sampeyan bisa ngerti manawa panjaluk kita wis sukses diproses.

Minangka mriksa tambahan sing DPI panyedhiya nanggapi SNI mbukak, kang kita ngirimaken minangka tutup, kita bisa njaluk panjalukan kanggo rutracker.nl ing guise saka sawetara sumber dilarang liyane, contone, liyane "apik" torrent tracker:

$ ESNI_COVER="rutor.info" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/

Kita ora bakal nampa respon saka server, amarga ... panyuwunan kita bakal diblokir dening sistem DPI.

Kesimpulan singkat kanggo bagean pisanan

Dadi, kita bisa nduduhake fungsi eSNI nggunakake openssl lan curl lan nyoba operasi fronting domain adhedhasar eSNI. Kanthi cara sing padha, kita bisa ngganti alat favorit sing nggunakake perpustakaan openssl kanggo nggarap "kanthi kedok" domain liyane. Rincian liyane babagan iki ing artikel sabanjure.

Source: www.habr.com

Add a comment