Domain fronting dumasar kana TLS 1.3

perkenalan

Domain fronting dumasar kana TLS 1.3
Sistem panyaring kontén perusahaan modéren ti produsén terkenal sapertos Cisco, BlueCoat, FireEye gaduh seueur anu sami sareng mitra anu langkung kuat - sistem DPI, anu aktip dilaksanakeun di tingkat nasional. Intina karya duanana nyaéta mariksa patalimarga Internét asup sareng kaluar sareng, dumasar kana daptar hideung / bodas, nyandak kaputusan pikeun ngalarang sambungan Internét. Sareng sabab duanana ngandelkeun prinsip-prinsip anu sami dina dasar-dasar padamelanna, metode pikeun ngagiling aranjeunna ogé bakal gaduh seueur anu umum.

Salah sahiji téknologi anu ngamungkinkeun anjeun sacara efektif ngaliwat DPI sareng sistem perusahaan nyaéta téknologi domain-fronting. Intina nyaéta yén urang angkat ka sumber anu diblokir, nyumput di tukangeun domain publik anu sanés sareng reputasi anu saé, anu écés moal diblokir ku sistem naon waé, contona google.com.

Cukup seueur tulisan anu parantos ditulis ngeunaan téknologi ieu sareng seueur conto anu parantos dipasihkeun. Nanging, téknologi DNS-over-HTTPS sareng énkripsi-SNI anu populér sareng nembe dibahas, kitu ogé versi anyar tina protokol TLS 1.3, ngamungkinkeun mertimbangkeun pilihan sanés pikeun muka domain.

Ngartos téknologi

Mimiti, hayu urang ngartikeun konsép dasar sakedik supados sadayana gaduh pamahaman saha saha sareng kunaon sadayana ieu diperyogikeun. Kami nyarios mékanisme eSNI, anu operasina bakal dibahas salajengna. Mékanisme eSNI (Énkripsi Ngaran Server Indikasi) nyaéta versi aman tina SNI, ngan sadia pikeun protokol TLS 1.3. Gagasan utama nyaéta énkripsi, antara séjén, inpormasi ngeunaan domain mana anu dikirimkeun pamundutana.

Ayeuna hayu urang tingali kumaha mékanisme eSNI dianggo dina prakna.

Anggap urang gaduh sumber Internét anu diblokir ku solusi DPI modéren (nyaéta, contona, torrent tracker anu kasohor rutracker.nl). Nalika urang nyobian ngaksés halaman wéb torrent tracker, urang ningali rintisan standar panyadia anu nunjukkeun yén sumberna diblokir:

Domain fronting dumasar kana TLS 1.3

Dina ramatloka RKN domain ieu sabenerna didaptarkeun dina daptar eureun:

Domain fronting dumasar kana TLS 1.3

Nalika anjeun naroskeun whois, anjeun tiasa ningali yén domain sorangan "disumputkeun" di tukangeun panyadia awan Cloudflare.

Domain fronting dumasar kana TLS 1.3

Tapi teu saperti "spesialis" ti RKN, karyawan leuwih teknis savvy ti Beeline (atawa diajarkeun ku pangalaman pait régulator kawentar kami) teu stupidly larangan situs ku alamat IP, tapi ditambahkeun ngaran domain ka daptar eureun. Anjeun tiasa sacara gampil pariksa ieu upami anjeun ningali naon domain anu disumputkeun di tukangeun alamat IP anu sami, kunjungan salah sahijina sareng tingali yén aksés henteu diblokir:

Domain fronting dumasar kana TLS 1.3

Kumaha ieu kajadian? Kumaha DPI panyadia terang mana domain browser kuring, sabab sadaya komunikasi lumangsung ngaliwatan protokol HTTPS, sareng kami henteu acan perhatikeun substitusi sertipikat https ti Beeline? Naha anjeunna clairvoyant atanapi kuring dituturkeun?

Hayu urang coba ngajawab patarosan ieu ku nempo lalulintas ngaliwatan wireshark

Domain fronting dumasar kana TLS 1.3

Potret layar nunjukkeun yén mimitina browser kéngingkeun alamat IP pangladén ngalangkungan DNS, teras sasalaman TCP standar lumangsung sareng pangladén tujuan, teras browser nyobian ngadamel sambungan SSL sareng server. Jang ngalampahkeun ieu, éta ngirimkeun pakét Hello Klién SSL, anu ngandung nami domain sumber dina téks anu jelas. Widang ieu diperyogikeun ku pangladén frontend cloudflare supados leres ngajalin sambungan. Ieu tempat panyadia DPI nyekel kami, megatkeun sambungan kami. Dina waktos anu sami, kami henteu nampi rintisan ti panyadia, sareng kami ningali kasalahan browser standar saolah-olah situsna ditumpurkeun atanapi ngan saukur henteu jalan:

Domain fronting dumasar kana TLS 1.3

Ayeuna hayu urang ngaktipkeun mékanisme eSNI dina browser, sakumaha ditulis dina parentah pikeun Firefox :
Jang ngalampahkeun ieu kami muka halaman konfigurasi Firefox ngeunaan: config sareng aktipkeun setélan ieu:

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

Saatos ieu, kami bakal pariksa yén setélanna jalan leres dina situs wéb cloudflare. link sareng hayu urang cobian deui trik sareng torrent tracker urang.

Domain fronting dumasar kana TLS 1.3

Voila. Tracker karesep kami dibuka tanpa VPN atanapi server proxy. Hayu urang ayeuna ningali tempat pembuangan lalu lintas di wireshark pikeun ningali naon anu kajantenan.

Domain fronting dumasar kana TLS 1.3

Waktos ieu, pakét halo ssl klien henteu sacara eksplisit ngandung domain tujuan, tapi gantina, sawah anyar muncul dina bungkusan - encrypted_server_name - ieu dimana nilai rutracker.nl dikandung, sareng ngan server frontend cloudflare tiasa ngadekrip ieu. sawah. Sareng upami kitu, maka panyadia DPI teu gaduh pilihan tapi ngumbah leungeunna sareng ngantepkeun lalu lintas sapertos kitu. Henteu aya pilihan sanés sareng énkripsi.

Janten, urang ningal kumaha téknologi dianggo dina browser. Ayeuna hayu urang coba nerapkeun eta pikeun hal nu leuwih husus jeung metot. Mimiti, urang bakal ngajarkeun curl anu sami pikeun ngagunakeun eSNI pikeun damel sareng TLS 1.3, sareng dina waktos anu sami urang bakal ningali kumaha payuneun domain basis eSNI sorangan jalanna.

Domain fronting kalawan eSNI

Kusabab kanyataan yén curl nganggo perpustakaan openssl standar pikeun nyambungkeun via protokol https, mimitina urang kedah nyayogikeun dukungan eSNI di dinya. Henteu aya dukungan eSNI dina cabang master openssl, janten urang kedah ngaunduh cabang openssl khusus, kompilasi sareng pasang.

Kami clone gudang ti GitHub sareng kompilasi sapertos biasa:

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

$ make
$ cd esnistuff
$ make

Salajengna, urang clone gudang kalayan curl tur ngonpigurasikeun kompilasi na ngagunakeun perpustakaan openssl kami disusun:

$ 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

Di dieu hal anu penting pikeun neuleu nangtukeun sagala directories dimana openssl lokasina (bisi kami, ieu / opt / openssl /) jeung pastikeun yén prosés konfigurasi mana ngaliwatan tanpa kasalahan.

Upami konfigurasina suksés, urang bakal ningali garis:

PERHATOSAN: esni ESNI diaktipkeun tapi ditandaan EXPERIMENTAL. Paké kalawan caution!

$ make

Saatos hasil ngawangun pakét, urang bakal ngagunakeun file bash khusus ti openssl pikeun ngonpigurasikeun sareng ngajalankeun curl. Hayu urang salin kana diréktori nganggo curl pikeun genah:

cp /opt/openssl/esnistuff/curl-esni 

sareng ngadamel uji coba HTTPS ka server cloudflare, bari ngarékam pakét DNS sareng TLS dina Wireshark.

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

Dina réspon server, salian seueur inpormasi debugging tina openssl sareng curl, kami bakal nampi réspon HTTP kalayan kode 301 ti 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/

nu nunjukkeun yén pamundut urang ieu hasil dikirimkeun ka server tujuan, uninga tur diolah.

Ayeuna hayu urang tingali dump lalu lintas di wireshark, i.e. naon anu ditingali ku panyadia DPI dina hal ieu.

Domain fronting dumasar kana TLS 1.3

Ieu bisa ditempo yén curl mimitina tos ka server DNS pikeun konci eSNI publik pikeun server cloudflare - pamundut DNS TXT ka _esni.cloudflare.com (paket No. 13). Teras, nganggo perpustakaan openssl, curl ngirimkeun pamundut TLS 1.3 ka server cloudflare dimana médan SNI énkripsi sareng konci umum anu dicandak dina léngkah sateuacana (pakét #22). Tapi, sajaba widang eSNI, pakét SSL-halo ogé kaasup widang kalayan biasa - buka SNI, nu urang bisa nangtukeun dina urutan naon (dina hal ieu - www.hello-rkn.ru).

Widang SNI kabuka ieu henteu diperhatoskeun dina cara naon waé nalika diolah ku server cloudflare sareng ngan ukur janten masker pikeun panyadia DPI. Server cloudflare nampi pakét ssl-hello kami, ngadekrip eSNI, sasari SNI asli ti dinya sareng ngolah saolah-olah teu aya anu kajantenan (éta ngalakukeun sadayana persis sakumaha anu direncanakeun nalika ngembangkeun eSNI).

Hiji-hijina hal anu tiasa ditangkep dina hal ieu tina sudut pandang DPI nyaéta pamundut DNS primér ka _esni.cloudflare.com. Tapi kami ngadamel pamundut DNS ngan ukur pikeun nunjukkeun kumaha mékanisme ieu jalan ti jero.

Pikeun tungtungna narik karpét kaluar tina handapeun DPI, kami nganggo mékanisme DNS-over-HTTPS anu parantos disebatkeun. Katerangan sakedik - DOH mangrupikeun protokol anu ngamungkinkeun anjeun ngajagaan tina serangan man-in-the-middle ku ngirim pamundut DNS ngalangkungan HTTPS.

Hayu urang laksanakeun deui pamundut, tapi ayeuna urang bakal nampi konci eSNI umum via protokol https, sanés DNS:

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

Dump lalu lintas pamundut dipidangkeun dina screenshot di handap ieu:

Domain fronting dumasar kana TLS 1.3

Ieu bisa ditempo yén curl mimiti ngakses server mozilla.cloudflare-dns.com via protokol DoH (sambungan HTTPS ka server 104.16.249.249) pikeun ménta ti aranjeunna nilai konci umum pikeun enkripsi SNI, lajeng ka tujuan. server, nyumput tukangeun domain www.hello-rkn.ru.

Salian ti solver DoH di luhur mozilla.cloudflare-dns.com, urang tiasa nganggo jasa DoH populér sanésna, contona, ti perusahaan jahat anu kasohor.
Hayu urang ngajalankeun query di handap ieu:

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

Sareng urang nampi jawabanana:

< 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 fronting dumasar kana TLS 1.3

Dina hal ieu, urang tos ka server rutracker.nl anu diblokir, nganggo dns.google solver DoH (teu aya salah ketik di dieu, ayeuna perusahaan anu kasohor gaduh domain tingkat kahiji sorangan) sareng nutupan diri ku domain anu sanés, anu leres-leres dilarang pikeun sakabéh DPI pikeun meungpeuk handapeun nyeri maot. Dumasar kana réspon anu ditampi, anjeun tiasa ngartos yén pamundut kami suksés diolah.

Salaku cek tambahan yén DPI panyadia ngaréspon kana SNI kabuka, anu kami kirimkeun salaku panutup, urang tiasa ngadamel pamundut ka rutracker.nl dina kedok sababaraha sumber anu dilarang, contona, tracker torrent anu "alus":

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

Kami moal nampi réspon ti server, sabab ... pamundut urang bakal diblokir ku sistem DPI.

Kacindekan pondok pikeun bagian kahiji

Janten, urang tiasa nunjukkeun pungsionalitas eSNI nganggo openssl sareng curl sareng nguji operasi fronting domain dumasar kana eSNI. Dina cara nu sami, urang tiasa adaptasi parabot favorit urang nu ngagunakeun perpustakaan openssl pikeun digawé "dina kedok" tina domain séjén. Langkung rinci ngeunaan ieu dina tulisan kami salajengna.

sumber: www.habr.com

Tambahkeun komentar