TLS 1.3 дээр суурилсан домэйн нүүр

Танилцуулга

TLS 1.3 дээр суурилсан домэйн нүүр
Cisco, BlueCoat, FireEye зэрэг алдартай үйлдвэрлэгчдийн орчин үеийн корпорацийн агуулгыг шүүх системүүд нь үндэсний хэмжээнд идэвхтэй хэрэгжиж байгаа илүү хүчирхэг хамтрагчид болох DPI системүүдтэй нэлээд төстэй юм. Хоёулангийн ажлын мөн чанар нь орж ирж буй болон гарч буй интернетийн траффикийг шалгаж, хар/цагаан жагсаалтад үндэслэн интернет холболтыг хориглох шийдвэр гаргах явдал юм. Тэд хоёулаа ижил төстэй зарчмууд дээр тулгуурладаг тул тэдгээрийг тойрч гарах аргууд нь нийтлэг зүйлтэй байх болно.

DPI болон корпорацийн системийг аль алиныг нь үр дүнтэй даван туулах боломжийг олгодог технологиудын нэг бол домэйныг хамгаалах технологи юм. Үүний мөн чанар нь бид хаагдсан нөөц рүү очиж, сайн нэр хүндтэй, олон нийтийн домэйны ард нуугдаж байгаа бөгөөд энэ нь google.com гэх мэт ямар ч системээр хаагдахгүй нь ойлгомжтой.

Энэ технологийн талаар нэлээд олон нийтлэл аль хэдийн бичигдсэн бөгөөд олон жишээг өгсөн. Гэсэн хэдий ч алдартай бөгөөд саяхан яригдсан DNS-over-HTTPS болон шифрлэгдсэн-SNI технологиуд, мөн TLS 1.3 протоколын шинэ хувилбар нь домэйн фронтын өөр хувилбарыг авч үзэх боломжтой болгож байна.

Технологийг ойлгох

Эхлээд хэн нь хэн бэ, яагаад энэ бүхэн хэрэгтэй байгаа талаар хүн бүр ойлголттой болохын тулд бага зэрэг үндсэн ойлголтуудыг тодорхойлъё. Бид eSNI механизмын талаар дурдсан бөгөөд түүний ажиллагааг цаашид авч үзэх болно. eSNI (шифрлэгдсэн серверийн нэрийн заалт) механизм нь SNI-ийн аюулгүй хувилбар бөгөөд зөвхөн TLS 1.3 протоколд ашиглах боломжтой. Гол санаа нь хүсэлтийг аль домэйн руу илгээсэн талаарх мэдээллийг шифрлэх явдал юм.

Одоо eSNI механизм практикт хэрхэн ажилладагийг харцгаая.

Орчин үеийн DPI шийдлээр хаагдсан интернетийн нөөц бидэнд байна гэж бодъё (жишээлбэл, алдартай torrent tracker rutracker.nl-ийг авъя). Бид торрент трекерийн вэб сайт руу нэвтрэхийг оролдох үед нөөцийг хаасан болохыг харуулсан үйлчилгээ үзүүлэгчийн стандарт бүдүүвчийг харж байна.

TLS 1.3 дээр суурилсан домэйн нүүр

RKN вэбсайт дээр энэ домэйн нь зогсолтын жагсаалтад орсон байна:

TLS 1.3 дээр суурилсан домэйн нүүр

Та whois асуувал домэйн нь Cloudflare үүлэн үйлчилгээ үзүүлэгчийн ард "нуугдсан" байгааг харж болно.

TLS 1.3 дээр суурилсан домэйн нүүр

Гэхдээ RKN-ийн "мэргэжилтнүүд" -ээс ялгаатай нь Beeline-ийн техникийн мэдлэгтэй ажилтнууд (эсвэл манай алдартай зохицуулагчийн гашуун туршлагаас суралцсан) сайтыг IP хаягаар хориглоогүй, харин домэйн нэрийг зогсоох жагсаалтад нэмсэн. Хэрэв та ижил IP хаягийн ард өөр ямар домэйнууд нуугдаж байгааг хараад, тэдгээрийн аль нэгэнд нь зочилж, хандалт хаагдсангүй гэдгийг харвал үүнийг хялбархан шалгаж болно.

TLS 1.3 дээр суурилсан домэйн нүүр

Энэ яаж болдог вэ? Бүх харилцаа холбоо https протоколоор явагддаг бөгөөд бид Beeline-аас https гэрчилгээг орлуулж байгааг хараахан анзаараагүй байгаа тул үйлчилгээ үзүүлэгчийн DPI нь миний хөтөч аль домэйн дээр байгааг хэрхэн мэдэх вэ? Тэр зөн билэгтэй юу эсвэл намайг дагаж байгаа юм уу?

Wireshark-ээр дамжуулан замын хөдөлгөөнийг хараад энэ асуултад хариулахыг хичээцгээе

TLS 1.3 дээр суурилсан домэйн нүүр

Дэлгэцийн зургаас харахад эхлээд хөтөч DNS-ээр дамжуулан серверийн IP хаягийг олж авдаг, дараа нь очих сервертэй стандарт TCP гар барих, дараа нь хөтөч сервертэй SSL холболт үүсгэхийг оролддог. Үүнийг хийхийн тулд SSL Client Hello багцыг илгээдэг бөгөөд энэ нь эх домэйны нэрийг тодорхой текстээр агуулдаг. Энэ талбар нь холболтыг зөв чиглүүлэхийн тулд cloudflare frontend серверт шаардлагатай. Эндээс DPI үйлчилгээ үзүүлэгч биднийг барьж, бидний холболтыг тасалдаг. Үүний зэрэгцээ бид үйлчилгээ үзүүлэгчээс ямар ч бүдүүлэг хүлээж авдаггүй бөгөөд сайт идэвхгүй болсон эсвэл зүгээр л ажиллахгүй байгаа мэт стандарт хөтөчийн алдааг харж байна.

TLS 1.3 дээр суурилсан домэйн нүүр

Зааварт бичсэнчлэн хөтөч дээрх eSNI механизмыг идэвхжүүлье Firefox :
Үүнийг хийхийн тулд бид Firefox тохиргооны хуудсыг нээнэ тухай: config Дараах тохиргоог идэвхжүүлнэ үү:

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

Үүний дараа бид cloudflare вэбсайт дээр тохиргоо зөв ажиллаж байгаа эсэхийг шалгах болно. холбоос Тэгээд торрент трекерээрээ дахин нэг мэх хийж үзэцгээе.

TLS 1.3 дээр суурилсан домэйн нүүр

Voila. Бидний дуртай трекер ямар ч VPN эсвэл прокси сервергүйгээр нээгдэв. Одоо юу болсныг харахын тулд Wireshark дахь замын хөдөлгөөний хогийн цэгийг харцгаая.

TLS 1.3 дээр суурилсан домэйн нүүр

Энэ удаад ssl client hello багц нь очих домайныг тодорхой агуулаагүй бөгөөд оронд нь багц дотор шинэ талбар гарч ирсэн - encrypted_server_name - энд rutracker.nl-ийн утга агуулагдаж байгаа бөгөөд зөвхөн cloudflare frontend сервер үүнийг тайлж чадна. талбар. Хэрэв тийм бол DPI үйлчилгээ үзүүлэгч гараа угааж, ийм хөдөлгөөнийг зөвшөөрөхөөс өөр аргагүй юм. Шифрлэлттэй өөр сонголт байхгүй.

Тиймээс бид хөтөч дээр технологи хэрхэн ажилладагийг харлаа. Одоо үүнийг илүү тодорхой, сонирхолтой зүйлд ашиглахыг хичээцгээе. Эхлээд бид ижил буржгар үсийг TLS 1.3-тай ажиллахын тулд eSNI-г ашиглахыг заах бөгөөд үүний зэрэгцээ eSNI-д суурилсан домэйн нүүр царай хэрхэн ажилладагийг харах болно.

eSNI-ээр домэйн нүүрлэх

Curl нь https протоколоор холбогдохын тулд стандарт openssl номын санг ашигладаг тул юуны өмнө бид тэнд eSNI дэмжлэг үзүүлэх хэрэгтэй. Openssl мастер салбаруудад хараахан eSNI дэмжлэг байхгүй байгаа тул бид тусгай openssl салбарыг татаж аваад хөрвүүлж суулгах хэрэгтэй.

Бид GitHub-аас репозиторыг хувилж, ердийнхөөрөө эмхэтгэдэг:

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

$ make
$ cd esnistuff
$ make

Дараа нь бид репозиторыг curl ашиглан клончилж, хөрвүүлсэн openssl номын санг ашиглан эмхэтгэлээ тохируулна:

$ 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

Энд openssl байгаа бүх сангуудыг зөв зааж өгөх нь чухал (манай тохиолдолд энэ нь /opt/openssl/) бөгөөд тохиргооны процесс алдаагүй явж байгаа эсэхийг шалгаарай.

Хэрэв тохиргоо амжилттай бол бид дараах мөрийг харах болно.

АНХААРУУЛГА: esni ESNI идэвхжүүлсэн боловч ТУРШИЛТЫН гэж тэмдэглэсэн. Болгоомжтой хэрэглээрэй!

$ make

Багцыг амжилттай бүтээсний дараа бид curl-г тохируулах болон ажиллуулахын тулд openssl-ээс тусгай bash файлыг ашиглана. Тохиромжтой болгох үүднээс үүнийг curl бүхий лавлах руу хуулж авцгаая:

cp /opt/openssl/esnistuff/curl-esni 

Wireshark дээр DNS болон TLS пакетуудыг нэгэн зэрэг бүртгэхийн зэрэгцээ cloudflare серверт https хүсэлтийг туршиж үзээрэй.

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

Серверийн хариуд openssl болон curl-аас олон тооны дибаг хийх мэдээллээс гадна бид cloudflare-аас 301 код бүхий HTTP хариултыг хүлээн авах болно.

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/

Энэ нь бидний хүсэлтийг очих серверт амжилттай хүргэж, сонсож, боловсруулсныг харуулж байна.

Одоо Wireshark дахь замын хөдөлгөөний хогийн цэгийг харцгаая, i.e. Энэ тохиолдолд үйлчилгээ үзүүлэгч DPI юу харсан.

TLS 1.3 дээр суурилсан домэйн нүүр

_esni.cloudflare.com руу илгээсэн TXT DNS хүсэлт (багц №13) - Curl эхлээд cloudflare серверийн нийтийн eSNI түлхүүрийг DNS сервер рүү эргүүлсэн нь харагдаж байна. Дараа нь openssl номын санг ашиглан curl TLS 1.3 хүсэлтийг cloudflare сервер рүү илгээсэн бөгөөд SNI талбарыг өмнөх алхамд олж авсан нийтийн түлхүүрээр шифрлэсэн байна (пакет No22). Гэхдээ eSNI талбараас гадна SSL-Сайн уу пакет нь ердийн нээлттэй SNI бүхий талбарыг багтаасан бөгөөд үүнийг бид дурын дарааллаар зааж өгч болно (энэ тохиолдолд - www.hello-rkn.ru).

Энэхүү нээлттэй SNI талбарыг cloudflare серверүүд боловсруулахад ямар ч байдлаар тооцдоггүй бөгөөд зөвхөн DPI үйлчилгээ үзүүлэгчийн маск болж үйлчилдэг. Cloudflare сервер нь бидний ssl-hello багцыг хүлээн авч, eSNI-ийн шифрийг тайлж, тэндээс анхны SNI-г гаргаж аваад юу ч болоогүй юм шиг боловсруулсан (eSNI-г боловсруулахдаа бүх зүйлийг яг төлөвлөсний дагуу хийсэн).

Энэ тохиолдолд DPI-ийн үүднээс авч үзэх цорын ганц зүйл бол _esni.cloudflare.com руу илгээсэн үндсэн DNS хүсэлт юм. Гэхдээ бид DNS хүсэлтийг зөвхөн дотроос энэ механизм хэрхэн ажилладагийг харуулахын тулд нээлттэй болгосон.

Эцэст нь DPI-ийн доороос хивсийг гаргахын тулд бид аль хэдийн дурдсан DNS-over-HTTPS механизмыг ашигладаг. Бяцхан тайлбар - DOH нь HTTPS-ээр дамжуулан DNS хүсэлт илгээх замаар дундын хүний ​​халдлагаас хамгаалах боломжийг олгодог протокол юм.

Хүсэлтийг дахин биелүүлье, гэхдээ энэ удаад бид DNS биш https протоколоор нийтийн eSNI түлхүүрүүдийг хүлээн авах болно:

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

Хүсэлтийн замын хөдөлгөөний хаягдлыг доорх дэлгэцийн агшинд харуулав.

TLS 1.3 дээр суурилсан домэйн нүүр

Эндээс харахад curl эхлээд mozilla.cloudflare-dns.com сервер рүү DoH протоколоор (https сервертэй 104.16.249.249 холболт) нэвтэрч SNI шифрлэлтийн нийтийн түлхүүрүүдийн утгыг авч, дараа нь очих газар руугаа ханддаг болохыг харж болно. сервер, домэйны ард нуугдаж байна www.hello-rkn.ru.

Дээрх Mozilla.cloudflare-dns.com ЭМГ-ын шийдлээс гадна бид бусад алдартай ЭМГ-ын үйлчилгээг, жишээлбэл, алдартай муу корпорацийн үйлчилгээг ашиглаж болно.
Дараах асуулгыг ажиллуулъя:

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

Тэгээд бид хариултыг авна:

< 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

TLS 1.3 дээр суурилсан домэйн нүүр

Энэ тохиолдолд бид хаагдсан rutracker.nl сервер рүү хандаж, DoH шийдвэрлэх dns.google-г ашиглан (энд үсгийн алдаа байхгүй, одоо алдартай корпорац өөрийн гэсэн нэгдүгээр түвшний домэйнтэй болсон) өөр домэйнээр өөрсдийгөө хамгаалсан. бүх DPI-д үхлийн өвдөлтийн дор хаахыг хориглосон. Хүлээн авсан хариулт дээр үндэслэн та бидний хүсэлтийг амжилттай шийдвэрлэсэн гэж ойлгож болно.

Үйлчилгээ үзүүлэгчийн DPI нь бидний халхавч болгон дамжуулдаг нээлттэй SNI-д хариу үйлдэл үзүүлж байгаа эсэхийг шалгахын тулд бид өөр хориотой эх сурвалж, жишээлбэл, өөр "сайн" torrent tracker нэрийн дор rutracker.nl-д хүсэлт гаргаж болно.

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

Бид серверээс хариу авахгүй, учир нь... бидний хүсэлтийг DPI системээр хаах болно.

Эхний хэсгийн товч дүгнэлт

Тиймээс бид openssl болон curl ашиглан eSNI-ийн функцийг харуулж, eSNI дээр суурилсан домэйн фронтын ажиллагааг туршиж үзсэн. Үүнтэй адил бид openssl номын санг ашигладаг дуртай хэрэгслүүдээ бусад домэйнуудын "нөмөр дор" ажиллахад тохируулж болно. Энэ талаарх дэлгэрэнгүй мэдээллийг манай дараагийн нийтлэлүүдээс үзнэ үү.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх