{"id":53317,"date":"2019-11-29T00:00:00","date_gmt":"2019-11-28T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/domen-fronting-na-baze-tls-1-3-chast-2"},"modified":"2020-02-18T14:01:12","modified_gmt":"2020-02-18T11:01:12","slug":"domen-fronting-na-baze-tls-1-3-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","title":{"rendered":"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Sissejuhatus<\/h3>\n<p>\nEsimese osa <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/475372\/\">artikleid<\/a><\/noindex> me andsime l\u00fchikese \u00fclevaate encrypted SNI (eSNI) mehhanismist. N\u00e4itasime, kuidas selle alusel saab k\u00f5rvale hiilida kaasaegsetest DPI-s\u00fcsteemidest (n\u00e4iteks Beeline'i DPI ja keelatud RKN ruTracker), samuti uurisime uut domeeni esitlemise varianti selle mehhanismi p\u00f5hjal.<\/p>\n<p>Teises artikli osas keskendume praktilisematele aspektidele, mis on kasulikud RedTeam spetsialistidele nende raskes t\u00f6\u00f6s. L\u00f5ppude l\u00f5puks on meie eesm\u00e4rk mitte juurdep\u00e4\u00e4s blokeeritud ressurssidele (selliste igap\u00e4evaste asjade jaoks on meil vana hea VPN). \u00d5nneks on VPN-teenuse pakkujaid palju, nagu \u00f6eldakse, igale maitsele, v\u00e4rvile ja eelarvele.<\/p>\n<p>P\u00fc\u00fcame rakendada domeeni esitlemise mehhanismi kaasaegsetes RedTeam t\u00f6\u00f6riistades, nagu Cobalt Strike, Empire jne, ja anda neile t\u00e4iendavaid v\u00f5imalusi peegeldumiseks ja kaasaegsetest sisu filtris\u00fcsteemidest k\u00f5rvale hiilimiseks.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEelmine kord integreerisime eSNI mehhanismi OpenSSL raamatukokku ja kasutasime seda tuntud utiliidis curl. Kuid \u00fche curl'iga, nagu \u00f6eldakse, n\u00e4lga ei j\u00e4\u00e4. Loomulikult soovime midagi sarnast teostada k\u00f5rgema taseme keeltes. Kahjuks aga ei paku kiire otsing internetis meid suurt rahuldust, kuna eSNI mehhanismi tugi on t\u00e4ielikult rakendatud ainult GOLANGis. Nii et valik on meil \u00fcsna piiratud: kas kirjutame puhtas C v\u00f5i C++ kasutades muudetud OpenSSL raamatukogu v\u00f5i kasutame CloudFlare'i eraldi GOLANGi haru ja proovime oma t\u00f6\u00f6riistu sinna portida. Siiski on veel \u00fcks variant, klassikalisem, kuid samas t\u00f6\u00f6mahukam \u2013 rakendada eSNI toetus Pythonis. L\u00f5ppude l\u00f5puks kasutab Python samuti OpenSSL-i HTTPS-iga t\u00f6\u00f6tamiseks. Kuid selle variandi j\u00e4tame kellegi teise arendamiseks, samas kui meie oleme rahul GOLANGis rakendusega, eriti kuna meie lemmik Cobalt Strike oskab suurep\u00e4raselt t\u00f6\u00f6tada v\u00e4liste \u00fchenduskanalitega (External C2 channel) \u2013 sellest r\u00e4\u00e4gime artikli l\u00f5pus.<\/p>\n<h3>Proovi rohkem\u2026<\/h3>\n<p>\n\u00dcks Go-s rakendatud t\u00f6\u00f6riistu \u2013 meie areng sisesesse v\u00f5rku p\u00f6\u00f6rdumiseks \u2013 tunnel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">rsockstun<\/a><\/noindex>, mis btw, tuvastatakse n\u00fc\u00fcd Microsofti ja Symanteci lahenduste poolt v\u00e4ga kahjulikuna tarkvarana, mis on suunatud globaalsete probleemide loomisele...<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/13d2635b92051416b2f33415783a2837.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOleks tore kasutada ka eelmist arendust. Kuid siin tekib v\u00e4ike probleem. Asi on selles, et rsockstun algselt eeldab serveriga s\u00fcnkroonse SSL-\u00fchenduse kasutamist. See t\u00e4hendab, et \u00fchendus luuakse \u00fche korra ja p\u00fcsib kogu tuunelija t\u00f6\u00f6aja. Ja nagu arusaadav, http protokoll ei ole just selliseks t\u00f6\u00f6re\u017eiimiks kohandatud \u2013 see t\u00f6\u00f6tab p\u00e4ring-vastus re\u017eiimis, kus iga uus http-p\u00e4ring toimub uue tcp-\u00fchenduse raames.<\/p>\n<p>Selle s\u00fcsteemi peamine puudus on see, et server ei saa andmeid kliendile edastada, kuni klient ei saadeta uut http-p\u00e4ringut. Kuid \u00f5nneks on olemas palju variante selle probleemi lahendamiseks \u2013 andmete voogedastamiseks http protokolli kaudu (kui nii v\u00f5ib \u00f6elda, et me suudame vaadata oma lemmikseriaale ja kuulata muusikat portaalides, mis t\u00f6\u00f6tavad https-il, ja video ning audio edastamine on mitte midagi muud kui andmete voogedastus). \u00dcks tehnoloogiatest, mis simuleerib t\u00e4isfunktsionaalset tcp-\u00fchendust http protokolli peal, on veebisoketitehnoloogia (WebSockets), mille peamine p\u00f5him\u00f5te on korraldada t\u00e4isfunktsionaalne v\u00f5rgu\u00fchendus kliendi ja veebiserveri vahel.<\/p>\n<p>Meie \u00f5nneks (hura-hura!!!) on see tehnoloogia vaikimisi sisse l\u00fclitatud k\u00f5igis CloudFlare\u2019i hinnaplaanides ja t\u00f6\u00f6tab suurep\u00e4raselt koos eSNI-iga. Just seda me kasutame, et \u00f5petada meie tuunelijat kasutama domeeni \u00fcmbersuunamist ja kaasaegsete DPI-de eest varjumist. <\/p>\n<h3>Veebisocketitest natuke<\/h3>\n<p>\nEsiteks r\u00e4\u00e4gime lihtsalt ja l\u00fchidalt veebisocketitest, et k\u00f5igil oleks aimu, millega me t\u00f6\u00f6tame. <\/p>\n<p>Veebisocketite tehnoloogia v\u00f5imaldab ajutiselt vahetada http-\u00fchenduse standardse andmevoo edastamise vastu v\u00f5rgusoketi kaudu, katkemata samal ajal olemasolevat tcp-\u00fchendust. Kui klient soovib vahetada veebisoketile, saadab ta oma http-p\u00e4ringus mitmeid http-pealkirju. Kaks kohustuslikku pealkirja on <i><b>Connection: Upgrade<\/b><\/i> ja <i><b>Upgrade: websocket<\/b><\/i>. Samuti v\u00f5ib ta sundida veebisocketi protokolli versiooni (<i><b>Sec-Websocket-Version: 13<\/b><\/i>) ja midagi sarnast base64 veebisoka ID-d (<i><b>Sec-WebSocket-Key: DAGDJSiREI3+KjDfwxm1FA==<\/b><\/i>). Server vastab sellele HTTP-koodiga 101 Switching Protocols ja seadistab ka pealkirjad <i><b>Connection, Upgrade<\/b><\/i> ja <i><b>Sec-WebSocket-Accept<\/b><\/i>. \u00dclemineku protsess on visuaalselt demonstreeritud alloleval ekraanipildil:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/1ee9af28074e5e190daea9b4b4a4a524.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e4rast seda v\u00f5ib WebSocketi \u00fchenduse loomist pidada l\u00f5petatuks. K\u00f5ik andmed, nii kliendilt kui serverilt, saadetakse n\u00fc\u00fcd mitte HTTP, vaid WebSocketi pealkirjadega (need algavad baitidega 0x82). N\u00fc\u00fcd ei pea server enam ootama kliendi p\u00e4ringut andmete edastamiseks, kuna TCP-\u00fchendus ei katkesta.<\/p>\n<p>Golangis on veebisoka t\u00f6\u00f6ks mitmeid raamatukogusid. Neist k\u00f5ige populaarsemad on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gorilla\/websocket\">Gorilla WebSocket<\/a><\/noindex> ja standardne <noindex><a rel=\"nofollow\" href=\"https:\/\/godoc.org\/golang.org\/x\/net\/websocket\">WebSocket<\/a><\/noindex>. Kasutame viimasest, kuna see on lihtsam, v\u00e4iksem ja nagu \u00f6eldakse, veidi kiirem.<\/p>\n<p>Kliendi rsockstuni koodis peame asendama net.dial v\u00f5i tls.dial kutsed vastavate WebSocketi kutsudega:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/e7ffc8aadeed32b8c456ef03cff4cdf8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/035b3190717482f6aaac22b06cd25bc9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSoovime, et meie tunneli kliendi osa oleks universaalne ja suudaks t\u00f6\u00f6tada nii otse SSL-\u00fchenduse kui ka WebSocketi protokolli kaudu. Selleks loome eraldi funktsiooni <i><b>func connectForWsSocks(address string, proxy string) error {\u2026}<\/b><\/i> analoogiliselt <i><b>connectForSocks()<\/b><\/i> ja kasutame seda veebisoketide t\u00f6\u00f6ks, juhul kui serveri aadress, mis on m\u00e4\u00e4ratud kliendi k\u00e4ivitamisel, algab ws: v\u00f5i wss: (Secure WebSocketi puhul).<\/p>\n<p>Tunneli serveripoolseks osaks loome samuti eraldi funktsiooni veebisoketide t\u00f6\u00f6ks. Seal luuakse HTTP klassi eksemplar ja m\u00e4\u00e4ratakse HTTP-\u00fchenduse t\u00f6\u00f6tleja (funktsioon wsHandler): <\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/ad904b629aa40bf45d42c095d4285658.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa terve \u00fchenduse k\u00e4sitlemise loogika (kliendi autoriseerimine parooli alusel, yamux sessiooni loomine ja l\u00f5petamine) paigutame WebSocketi \u00fchenduse t\u00f6\u00f6tlejasse:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/a624dca4819cee4b9d46f1325aafc544.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKompileerime projekti, k\u00e4ivitame serveripoolse osa:<\/p>\n<pre><code class=\"go\">.\\\/rsockstun \u2013listen ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nJa seej\u00e4rel kliendipoolse osa:<\/p>\n<pre><code class=\"go\">.\\\/rsockstun -connect ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nJa kontrollime t\u00f6\u00f6d kohalikus hostis:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/34bb12087eb7dd72cf1f35d7addf2c72.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/83fc82e962961ba8491164d26f27be95.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>J\u00e4tkame domeeni edastamisega<\/h3>\n<p>\nWebSocketidega leiame end olevat sisenenud. N\u00fc\u00fcd liikume otse eSNI ja domeeni edastamise juurde. Nagu juba eelnevalt mainitud, vajame DoH ja eSNI t\u00f6\u00f6tamiseks spetsiaalset golangi haru ettev\u00f5ttelt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cloudflare\/tls-tris\">CloudFlare<\/a><\/noindex>. Me vajame haru, kus on eSNI tugi (pwu\/esni).<\/p>\n<p>Kloonime selle endale kohalikult v\u00f5i laadime ja puhastame vastava zip-faili:<\/p>\n<pre><code class=\"plaintext\">git clone -b pwu\/esni https:\/\/github.com\/cloudflare\/tls-tris.git<\/code><\/pre>\n<p>\nSeej\u00e4rel peame kopeerima GOROOT katalooge, asendama vastavad failid kloonitud harust ja seadma selle peamiseks. Et arendajaid sellest peavalust vabastada, on CloudFlare'i tiim valmistanud ette spetsiaalse skripti \u2013 _dev\/go.sh. Lihtsalt k\u00e4ivitage see. Skript koos makefile'iga teevad k\u00f5ik ise. Huvi p\u00e4rast \u2013 v\u00f5ite sisse piiluda makefile'i, et n\u00e4ha detaile.<\/p>\n<p>P\u00e4rast skripti t\u00f6\u00f6tamist, projekti kompileerimise ajal, peame GOROOT-ina m\u00e4\u00e4rama kohaliku katalooge, mille skript ette valmistas. Meie puhul n\u00e4eb see v\u00e4lja nii:<\/p>\n<pre><code class=\"plaintext\">GOROOT=\"\/opt\/tls-tris\/_dev\/GOROOT\/linux_amd64\" go build \u2026.<\/code><\/pre>\n<p>\nEdasi peame rakendama tunneli funktsiooni, mis p\u00e4rib ja parsib avalikke eSNI v\u00f5tmeid soovitud domeeni jaoks. Meie puhul on need avalikud eSNI v\u00f5tmed CloudFlare'i esiosa serveritest. Selleks loome kolm funktsiooni:<\/p>\n<pre><code class=\"plaintext\">func makeDoTQuery(dnsName string) ([]byte, error) func parseTXTResponse(buf []byte, wantName string) (string, error) func QueryESNIKeysForHost(hostname string) ([]byte, error)<\/code><\/pre>\n<p>\nFunktsioonide nimed r\u00e4\u00e4givad enda eest. T\u00e4itmise v\u00f5tame failist esni_query.go, mis kuulub tls-tris'i koosseisu. Esimene funktsioon loob v\u00f5rgu paketi CloudFlare'i DNS-serverile p\u00e4ringu tegemiseks, kasutades DoH (DNS-over-HTTPS) protokolli, teine \u2013 parsib p\u00e4ringu tulemused ja saab domeeni avalikku v\u00f5tme v\u00e4\u00e4rtused, kolmas aga toimib konteinerina kahe esimese jaoks.<\/p>\n<p>Seej\u00e4rel lisame meie uude funktsiooni veebisoketi \u00fchenduse: <i><b>connectForWsSocks<\/b><\/i> eSNI v\u00f5tmete p\u00e4rimise funktsionaalsuse domeeni jaoks. Kohas, kus serveri osa t\u00f6\u00f6tab, seadistame TLS parameetrid ja m\u00e4\u00e4rame vale \"katte\" domeeni nime:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/63abc51177058223e0f0941a78d182fa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiinkohal tuleb m\u00e4rkida, et algselt ei olnud tls-tris haru m\u00f5eldud domeenifrondimise kasutamiseks. Seet\u00f5ttu ei ole seal t\u00e4helepanu p\u00f6\u00f6ratud vale serveri nimele (client-hello paketi koostises edastatakse t\u00fchi serverName v\u00e4li). Selle parandamiseks peame lisama TlsConfig struktuuri vastava vale serveri nime v\u00e4li. Stdnt samm ServerName struktuuri ei saa kasutada, kuna seda kasutavad tls-i sisemised mehhanismid ja kui see erineb algsest, l\u00f5ppeb tls-k\u00e4epigistus veaga. Struktuuri TlsConfig kirjeldus on failis <b>tls\/common.go<\/b> \u2013 seda peame me parandama:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/04f35bb49a5f6a28625de28b23d686f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/0caf5cfccb2ffffeae703ecfe3eb6652.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLisaks peame tegema muudatusi failis <b>tls\/handshake_client.go<\/b>, et kasutada meie v\u00e4lja FakeServerName TLS-k\u00e4eulatuse koostamiseks:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/ac68f37f426603b2fcec467c6ee886ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee on k\u00f5ik! Projekti saab kompileerida ja t\u00f6\u00f6 kontrollida. Kuid enne kontrollimist tuleb seadistada CloudFlare'i konto. Noh, kuidas \u00f6elda, seadistada - lihtsalt loo konto CloudFlare'is ja seo oma domeen sellega. K\u00f5ik DoH, WebSocket ja ESNI funktsioonid on automaatselt CloudFlare'is lubatud. P\u00e4rast DNS-i rekordite uuendamist saab domeeni toimimist kontrollida, saates eSNI v\u00f5tmete p\u00e4ringu:<\/p>\n<pre><code class=\"plaintext\">dig +short txt _esni.df13tester.info <\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/09d07d1f49defc3551c3720d9b67569e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui n\u00e4ete sarnast teavet oma domeeni puhul, siis t\u00e4hendab see, et k\u00f5ik t\u00f6\u00f6tab ja v\u00f5ib liikuda testimise juurde.<\/p>\n<p>K\u00e4ivitame Ubuntu VPS-i, n\u00e4iteks DigitalOceanil. P.S. Meie puhul osutus just antud teenusepakkuja IP-aadress VPS-i osas RKN-i mustadesse nimekirjadesse. Seega \u00e4rge imestage, kui teil juhtub midagi sarnast. pidime kasutama VPN-i, et p\u00e4\u00e4seda oma VPS-ile.<\/p>\n<p>Kopeerime VPS-ile juba kompileeritud rsockstun'i (kui veel \u00fcks golangi pluss \u2013 saate oma projektid kompileerida ja k\u00e4ivitada mis tahes Linuxis, j\u00e4rgides ainult s\u00fcsteemi arhitektuuri) ja k\u00e4ivitame serveri osa:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/f86be92203d646832205fb611fe4d056.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiis k\u00e4ivitame kliendi osa:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/c8852d7431e8bba7eab1494989ceb46d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNagu n\u00e4eme, \u00fchendas klient CloudFlare'i frontend-serveri kaudu serveriga veebisoketi kasutades edukalt. Tunneli t\u00f5hususe kontrollimiseks saab teha curl-p\u00e4ringu l\u00e4bi kohaliku socks5, mis on serveris avatud:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/87b6f42676e5e895b7f7b03da16420bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd vaatame, mida DPI kanalis n\u00e4eb:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/d546b676904d5b8ded7e0891ff5a98e6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsiteks p\u00f6\u00f6rdub tunneli loomise mehhanism DoH kaudu CloudFlare'i DNS-serveri poole sihtdomeeni eSNI v\u00f5tmete saamiseks (paketid nr 1-19), seej\u00e4rel p\u00f6\u00f6rdub frontend-serveri poole ja loob TLS-\u00fchenduse, peites end samas domeeni taha <noindex><a rel=\"nofollow\" href=\"http:\/\/www.google.com\">www.google.com<\/a><\/noindex> (see on vaikev\u00e4\u00e4rtus, kui kliendi k\u00e4ivitamisel ei ole m\u00e4\u00e4ratud vale domeeni). Oma vale domeeni m\u00e4\u00e4ramiseks peate kasutama parameetrit -fronfDomain:<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/3f55e03eecd7436b1e9c2312d88b46af.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/da5e219fb5a097e6ad6d75844d7a5687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd on veel \u00fcks punkt. Vaikev\u00e4\u00e4rtuste kohaselt on CloudFlare'i konto seadetes Flexibel SSL-re\u017eiim. See t\u00e4hendab, et https-p\u00e4ringud CloudFlare'i frontend-serveritele klientidelt suunatakse meie serverisse mittekr\u00fcpteeritud (http) kujul. Just selle p\u00e4rast k\u00e4ivitasime tunneliserveri mittesertifitseeritud re\u017eiimis (-listen ws:0.0.0.0), mitte (-listen wss:0.0.0.0).<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/17f820b973f8a3f26f78a30c10bdb493.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuna t\u00e4ish\u00e4\u00e4lestamise re\u017eiimi \u00fcleminekuks tuleb valida <b>T\u00e4ielik<\/b>, v\u00f5i <b>Full (strict)<\/b> kui serveril on olemas kehtiv sertifikaat. Re\u017eiimi muutmisel suudame vastu v\u00f5tta \u00fchenduseid CloudFlare'iga https protokolli kaudu. \u00c4rge unustage genereerida self-signed sertifikaati tunneli serveri osale.<\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/c9a05134c9ba01e6008b4432cf59c74e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00dcks peeneid lugejaid k\u00fcsib: \u201eAga kuidas on Windows klientidega? Kindlasti on peamine tunnelite kasutus tagakonnekti loomine ettev\u00f5tte arvutitega ja serveritega, kus on tavaliselt alati Windows. Kuidas ma pean tunneli kokkupanema Windowsi jaoks, veel spetsiifilise TLS-tekiga?\u201c N\u00fc\u00fcd kujutame ette veel \u00fchte funktsiooni, mis n\u00e4itab, kui mugav on Go. Kompileerige Windowsi jaoks otse Kali's, lisades lihtsalt parameetri GOOS=windows:<\/p>\n<pre><code class=\"plaintext\">GOARCH=amd64 GOROOT=\"\/opt\/tls-tris\/_dev\/GOROOT\/linux_amd64\" GOOS=windows  go build -ldflags=\"-s -w\"<\/code><\/pre>\n<p>\nV\u00f5i 32-bitine variant:<\/p>\n<pre><code class=\"plaintext\">GOARCH=386 GOROOT=\"\/opt\/tls-tris\/_dev\/GOROOT\/linux_amd64\" GOOS=windows  go build -ldflags=\"-s -w\"<\/code><\/pre>\n<p>\nSee ongi k\u00f5ik! Ja rohkem pole mingeid jamasid vaja. See t\u00f5esti t\u00f6\u00f6tab! <\/p>\n<p><img decoding=\"async\" alt=\"Domeenifrontimine TLS 1.3 p\u00f5hjal. Osa 2\" src=\"\/wp-content\/uploads\/2019\/11\/2c60d41c115b8df32a8b53b06a45e915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKompilaatori lipud \u2013w ja \u2013s on vajalikud, et eemaldada liigsed killud t\u00e4idesaatvast failist, v\u00e4hendades selle suurust paar megabaiti. Lisaks saab seda hiljem UPX abil pakendada, et veelgi suurust v\u00e4hendada.<\/p>\n<h3>L\u00f5petuseks<\/h3>\n<p>\nArtiklis n\u00e4itasime golangis kirjutatud tunneli n\u00e4itel uue domeeni fronting tehnoloogia rakendust, mis p\u00f5hineb \u00fcsna huvitaval TLS 1.3 protokolli omadusel. Sarnasel viisil saab olemasolevat golangis kirjutatud t\u00f6\u00f6riistakomplekti kohandada CloudFlare'i serverite kasutamiseks, n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ne0nd0g\/merlin\">Merlin<\/a><\/noindex> \u2014 tuntud C2 v\u00f5i sundida CobaltStrike Beaconit kasutama eSNI domeeni frontingut, t\u00f6\u00f6tades Teamserveriga kaudu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ryhanson\/ExternalC2\">External C2 Channel<\/a><\/noindex>, mis on rakendatud golangis, v\u00f5i standardses C++-s, kasutades pat\u0161itud versiooni OpenSSL-ist, millest r\u00e4\u00e4kisime artikli eelmine osa. \u00dches\u00f5naga, fantaasiale ei ole piire.<\/p>\n<p>Tunneli ja CloudFlare'i n\u00e4ide on esitatud kontseptsioonina ja hetkel on keeruline \u00f6elda, millised kaugemad perspektiivid sellisel domeeni frontingul on. Praegu on eSNI tugi rakendatud ainult CloudFlare'is ja teoreetiliselt ei takista miski neid seda frontingut v\u00e4lja l\u00fclitamast ja n\u00e4iteks katkestamast tls-\u00fchendusi, kui SNI ja eSNI ei kattu. \u00dches\u00f5naga, tulevik n\u00e4itab. Kuid praegu tundub perspektiiv t\u00f6\u00f6tada \"kremlin.ru varjus\" \u00fcsna ahvatlev. Kas pole?<\/p>\n<p>Uuendatud tunnelikoodi ja kompileeritud executables (exe-failid) on paigutatud projekti eraldi harusse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">github<\/a><\/noindex>. K\u00f5ik tunneliga seotud probleemid on parem v\u00e4lja tuua projekti GitHubi lehe issue'ides.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/477696\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0434\u0430\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 encrypted SNI (eSNI). \u041f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u043b\u043e\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 DPI-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0438\u043b\u0430\u0439\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e DPI \u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0420\u041a\u041d \u0440\u0443\u0442\u0440\u0435\u043a\u0435\u0440\u0430), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043e\u043c\u0435\u043d-\u0444\u0440\u043e\u043d\u0442\u0438\u043d\u0433\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u0435\u0449\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53317","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0434\u0430\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 encrypted SNI (eSNI).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u043e\u043c\u0435\u043d-\u0444\u0440\u043e\u043d\u0442\u0438\u043d\u0433 \u043d\u0430 \u0431\u0430\u0437\u0435 TLS 1.3. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0434\u0430\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 encrypted SNI (eSNI).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-11-28T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:12+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Domeenifrontimine TLS 1.3 alusel. Osa 2 | ProHoster","description":"Sissejuhatus Artikli esimeses osas andsime l\u00fchikese \u00fclevaate encrypted SNI (eSNI) mehhanismist.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u043e\u043c\u0435\u043d-\u0444\u0440\u043e\u043d\u0442\u0438\u043d\u0433 \u043d\u0430 \u0431\u0430\u0437\u0435 TLS 1.3. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0434\u0430\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 encrypted SNI (eSNI).","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-11-28T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53317","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 06:55:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:27:38","updated":"2026-01-24 06:55:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/53317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=53317"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/53317\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=53317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=53317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=53317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}