{"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\/hr\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","title":{"rendered":"Domen-fronting na temelju TLS 1.3. Dio 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Uvod<\/h3>\n<p>\nU prvom dijelu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/475372\/\">\u010dlanaka<\/a><\/noindex> dali smo kratak pregled mehanizma encrypted SNI (eSNI). Poka\u017eemo kako se na temelju njega mo\u017ee izbjegavati otkrivanje modernim DPI sustavima (na primjer, Beelineovog DPI-a i zabranjenog RKN rutrekera), kao i istra\u017eili novu varijantu domen-fronitnga na temelju ovog mehanizma.<\/p>\n<p>U drugom dijelu \u010dlanka pre\u0107i \u0107emo na prakti\u010dne stvari koje \u0107e biti korisne RedTeam stru\u010dnjacima u njihovom te\u0161kom radu. Na\u0161a svrha u kona\u010dnici nije pristup blokiranim resursima (za takve trivijalne stvari imamo na\u0161u dobru staru VPN uslugu). Na sre\u0107u, postoji mnogo VPN provajdera, kako se ka\u017ee, za svaki ukus, boju i prora\u010dun.<\/p>\n<p>Poku\u0161at \u0107emo primijeniti mehanizam domen-fronitnga na moderne alate RedTeam-a, kao \u0161to su Cobalt Strike, Empire itd., i pru\u017eiti im dodatne mogu\u0107nosti mimikriranja i izbjegavanja modernih sustava filtriranja sadr\u017eaja.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPro\u0161li put smo implementirali mehanizam eSNI u OpenSSL biblioteku i uspje\u0161no ga koristili u svima poznatom alatu curl. No, samo s curlom, kako se ka\u017ee, ne mo\u017ee se dugo pre\u017eivjeti. Naravno, \u017eelimo ostvariti ne\u0161to sli\u010dno na visokim programskim jezicima. Na\u017ealost, brzi pregled interneta nas razo\u010darava jer je podr\u0161ka za mehanizam eSNI potpuno implementirana samo u GOLANG-u. Tako da, na\u0161 izbor nije prevelik: ili pi\u0161emo na \u010distom C-u ili C++-u koriste\u0107i propatched OpenSSL biblioteku, ili koristimo zasebni CloudFlare GOLANG fork i poku\u0161avamo portirati na\u0161 alat tamo. U na\u010delu, postoji jo\u0161 jedna opcija, klasi\u010dnija, ali istovremeno i mukotrpnija - implementirati podr\u0161ku za eSNI u Pythonu. Uostalom, Python tako\u0111er koristi OpenSSL za rad s https. No tu opciju \u0107emo ostaviti za nekog drugog, a sami \u0107emo biti zadovoljni implementacijom na GOLANG-u, pogotovo jer na\u0161 omiljeni Cobalt Strike odli\u010dno sura\u0111uje s vanjskim komunikacijskim kanalima (External C2 channel) \u2013 o tome \u0107emo govoriti na kraju \u010dlanka.<\/p>\n<h3>Poku\u0161ajte ja\u010de...<\/h3>\n<p>\nJedan od alata implementiranih na GOLANG-u - na\u0161e rje\u0161enje za pivotiranje unutar mre\u017ee - tunel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">rsockstun<\/a><\/noindex>, koja se, usput budi re\u010deno, trenutno detektira alatima kompanija Microsoft i Symantec kao vrlo zlonamjerni softver usmjeren na naru\u0161avanje globalne stabilnosti\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/13d2635b92051416b2f33415783a2837.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBilo bi sjajno iskoristiti prethodni razvoj i u ovom slu\u010daju. Me\u0111utim, tu se javlja mali problem. Naime, rsockstun prvotno podrazumijeva kori\u0161tenje sinkronog SSL kanala za komunikaciju sa serverom. To zna\u010di da se veza uspostavlja samo jednom i postoji tijekom cijelog vremena rada tunelera. Kao \u0161to znate, HTTPS protokol nije ba\u0161 namijenjen takvom na\u010dinu rada \u2013 on radi u re\u017eimu zahtjev-odgovor, gdje svaki novi HTTP zahtjev postoji u okviru nove TCP veze.<\/p>\n<p>Glavni nedostatak takve sheme je u tome \u0161to server ne mo\u017ee poslati podatke klijentu dok klijent ne po\u0161alje novi HTTP zahtjev. No, sre\u0107om, postoje razli\u010dita rje\u0161enja za ovaj problem \u2013 streaming podataka putem HTTP protokola (na kraju krajeva, uspijevamo gledati omiljene serije i slu\u0161ati muziku s portala koji rade na HTTPS-u, a prijenos videa i zvuka nije ni\u0161ta drugo nego streaming podataka). Jedna od tehnologija za emulaciju rada punopravne TCP veze preko HTTP protokola je tehnologija web soketa (WebSockets), \u010dija je osnovna ideja organizacija punopravne mre\u017ene veze izme\u0111u klijenta i web servera.<\/p>\n<p>Na\u0161u sre\u0107u (ura!!!), ova tehnologija je uklju\u010dena po defaultu u sve planove CloudFlare i savr\u0161eno radi u kombinaciji s eSNI. Upravo tu \u0107emo je iskoristiti da nau\u010dimo na\u0161 tuneler kako da koristi domen-fronting i sakrije se od modernih DPI. <\/p>\n<h3>Malo o WebSockets<\/h3>\n<p>\nPrije svega, ukratko i jednostavnim rije\u010dima objasnit \u0107emo web sokete, kako bi svi imali predstavu o tome s \u010dime \u0107emo raditi. <\/p>\n<p>Tehnologija web soketa omogu\u0107ava privremeno prebacivanje s HTTP veze na standardni streaming podataka putem mre\u017enog soketa, ne prekidaju\u0107i pri tome uspostavljenu TCP vezu. Kada klijent \u017eeli prebaciti na web soket, u svom HTTP zahtjevu postavlja nekoliko HTTP zaglavlja. Dva obavezna zaglavlja su <i><b>Connection: Upgrade<\/b><\/i> i <i><b>Upgrade: websocket<\/b><\/i>. Tako\u0111er mo\u017ee obavezno navesti verziju WebSocket protokola (<i><b>Sec-Websockset-Version: 13<\/b><\/i>) i ne\u0161to poput base64 identifikatora web-soketa (<i><b>Sec-WebSocket-Key: DAGDJSiREI3+KjDfwxm1FA==<\/b><\/i>). Poslu\u017eitelj odgovara s http-kodom 101 Switching Protocols i tako\u0111er postavlja zaglavlja <i><b>Connection, Upgrade<\/b><\/i> i <i><b>Sec-WebSocket-Accept<\/b><\/i>. Proces prebacivanja jasno je prikazan na slici ispod:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/1ee9af28074e5e190daea9b4b4a4a524.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNakon toga, uspostava WebSocket veze mo\u017ee se smatrati zavr\u0161enom. Sve podatke, kako od klijenta tako i od poslu\u017eitelja, sada \u0107e pratiti ne http, nego WebSocket zaglavlja (po\u010dinju s bajtom 0x82). Sada poslu\u017eitelju nije potrebno \u010dekati zahtjev od klijenta da bi poslao podatke, jer tcp-veza se ne prekida.<\/p>\n<p>U Go-u za rad s web-soketima dostupne su nekoliko biblioteka. Najpopularnije su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gorilla\/websocket\">Gorilla WebSocket<\/a><\/noindex> i standardna <noindex><a rel=\"nofollow\" href=\"https:\/\/godoc.org\/golang.org\/x\/net\/websocket\">WebSocket<\/a><\/noindex>. Iskoristit \u0107emo posljednju, jer je jednostavnija, manja i radi, kako ka\u017eu, malo br\u017ee.<\/p>\n<p>U klijentskom kodu rsockstun trebamo zamijeniti pozive net.dial ili tls.dial s odgovaraju\u0107im pozivima WebSocket:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/e7ffc8aadeed32b8c456ef03cff4cdf8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/035b3190717482f6aaac22b06cd25bc9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u017delimo u\u010diniti klijentski dio na\u0161eg tunelera univerzalnim i sposobnim raditi kako preko direktne ssl-veze, tako i preko WebSocket protokola. U tu svrhu stvorit \u0107emo posebnu funkciju <i><b>func connectForWsSocks(address string, proxy string) error {\u2026}<\/b><\/i> po analogiji s <i><b>connectForSocks()<\/b><\/i> i koristit \u0107emo je za rad s web-soketima u slu\u010daju da adresa poslu\u017eitelja, navedena prilikom pokretanja klijenta, po\u010dinje s ws: ili wss: (u slu\u010daju Secure WebSocket-a).<\/p>\n<p>Za poslu\u017eiteljsku stranu tunelera tako\u0111er \u0107emo napraviti posebnu funkciju za rad s web-soketima. U njoj \u0107e se stvarati instanca klase http i postavljati \u0107e se handler za http-vezu (funkcija wsHandler): <\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/ad904b629aa40bf45d42c095d4285658.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA svu logiku obrade veze (autorizaicija klijenta imenom i lozinkom, uspostavljanje i zavr\u0161etak yamux sesije) smjestit \u0107emo u handler za WebSocket vezu:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/a624dca4819cee4b9d46f1325aafc544.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKompajliramo projekt, pokre\u0107emo poslu\u017eiteljsku stranu:<\/p>\n<pre><code class=\"go\">.\\\/rsockstun \u2013listen ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nA zatim klijentsku stranu:<\/p>\n<pre><code class=\"go\">.\\\/rsockstun -connect ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nI provjeravamo rad na lokalnom ra\u010dunalu:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/34bb12087eb7dd72cf1f35d7addf2c72.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/83fc82e962961ba8491164d26f27be95.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Prelazimo na domen-frotning<\/h3>\n<p>\n\u010cini se da smo shvatili web-sokete. Sada prije\u0111imo na eSNI i domen-frotning. Kao \u0161to je ranije spomenuto, za rad s DoH i eSNI potrebno je uzeti posebnu granu Go-a od tvrtke <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cloudflare\/tls-tris\">CloudFlare<\/a><\/noindex>. Potrebna nam je grana s podr\u0161kom za eSNI (pwu\/esni).<\/p>\n<p>Kloniramo je lokalno ili preuzimamo i raspakiravamo odgovaraju\u0107i zip:<\/p>\n<pre><code class=\"plaintext\">git clone -b pwu\/esni https:\/\/github.com\/cloudflare\/tls-tris.git<\/code><\/pre>\n<p>\nZatim trebamo kopirati katalog GOROOT, zamijeniti odgovaraju\u0107e datoteke iz klonirane grane i postaviti ga kao glavni. Kako bismo olak\u0161ali \u017eivot programerima, de\u010dki iz CloudFlarea pripremili su poseban skript \u2013 _dev\/go.sh. Jednostavno ga pokrenite. Skript zajedno s makefileom sve \u0107e obaviti sam. Za zanimaciju \u2014 mo\u017eete zaviriti unutra makefilea za detalje.<\/p>\n<p>Nakon \u0161to skript zavr\u0161i, prilikom kompajliranja projekta, trebamo navesti lokalni katalog, pripremljen skriptom, kao GOROOT. U na\u0161em slu\u010daju to izgleda ovako:<\/p>\n<pre><code class=\"plaintext\">GOROOT=\"\/opt\/tls-tris\/_dev\/GOROOT\/linux_amd64\" go build \u2026.<\/code><\/pre>\n<p>\nNadalje, trebamo implementirati funkcionalnost zahtjeva i parsiranja javnih eSNI klju\u010deva za potrebnu domenu u tunel. U na\u0161em slu\u010daju, to \u0107e biti javni eSNI klju\u010devi s front-end poslu\u017eitelja CloudFlarea. Za to \u0107emo stvoriti tri funkcije:<\/p>\n<pre><code class=\"plaintext\">func makeDoTQuery(dnsName string) ([]byte, error)\nfunc parseTXTResponse(buf []byte, wantName string) (string, error)\nfunc QueryESNIKeysForHost(hostname string) ([]byte, error)<\/code><\/pre>\n<p>\nNazivi funkcija, u na\u010delu, govore sami za sebe. Podaci \u0107emo uzeti iz datoteke esni_query.go, koja je dio tls-tris. Prva funkcija stvara mre\u017eni paket s upitom na DNS poslu\u017eitelj CloudFlarea, koriste\u0107i DoH protokol (DNS-over-HTTPS), druga \u2013 parsira rezultate upita i dobiva vrijednosti javnih klju\u010deva domene, a tre\u0107a je kontejner za prve dvije.<\/p>\n<p>Nadalje, dodajemo u na\u0161u, ponovno stvorenu, funkciju za povezivanje web-socketa <i><b>connectForWsSocks<\/b><\/i> funkcionalnost zahtjeva eSNI klju\u010deva za domenu. Tamo gdje funkcionira poslu\u017eiteljski dio, postavljamo TLS parametre i odre\u0111ujemo ime la\u017ene 'domene pokri\u0107a':<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/63abc51177058223e0f0941a78d182fa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nValja napomenuti da je prvotno, grana tls-tris nije predvi\u0111ena za primjenu domenskog frontinga. Stoga, nije obra\u0107eno pa\u017enja na la\u017eno ime poslu\u017eitelja (u okviru client-hello paketa prenosi se prazno polje serverName). Da bismo to ispravili, morat \u0107emo dodati odgovaraju\u0107e polje FakeServerName u strukturu TlsConfig. Standardno polje ServerName u strukturi ne mo\u017eemo koristiti, jer ga koriste unutarnji mehanizmi tls i ako se razlikuje od izvorne, tls handshake zavr\u0161it \u0107e gre\u0161kom. Opis strukture TlsConfig nalazi se u datoteci <b>tls\/common.go<\/b> \u2013 to \u0107emo morati ispraviti:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/04f35bb49a5f6a28625de28b23d686f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/0caf5cfccb2ffffeae703ecfe3eb6652.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOsim toga, morat \u0107emo unijeti promjene u datoteku <b>tls\/handshake_client.go<\/b>, kako bismo koristili na\u0161e polje FakeServerName pri formiranju TLS rukovanja:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/ac68f37f426603b2fcec467c6ee886ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je to! Mo\u017eete kompilirati projekt i provjeriti njegov rad. No prije pokretanja provjere, potrebno je postaviti CloudFlare ra\u010dun. Pa, kako da ka\u017eem postaviti \u2013 samo kreirati ra\u010dun na CloudFlare i povezati svoju domenu s njim. Sve zna\u010dajke vezane za DoH, WebSocket i ESNI su po defaultu uklju\u010dene u CloudFlare. Nakon \u0161to se DNS zapisi a\u017euriraju \u2013 mo\u017eete provjeriti funkcionalnost domene izvr\u0161avanjem upita za eSNI klju\u010deve:<\/p>\n<pre><code class=\"plaintext\">dig +short txt _esni.df13tester.info <\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/09d07d1f49defc3551c3720d9b67569e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAko vidite ne\u0161to sli\u010dno za va\u0161u domenu \u2013 to zna\u010di da sve funkcionalno radi i mo\u017eete pre\u0107i na testiranje.<\/p>\n<p>Pokre\u0107emo Ubuntu VPS, na primjer, na DigitalOcean. P.S. U na\u0161em slu\u010daju, netom dodijeljena IP adresa VPS-a od strane davatelja nalazila se na crnoj listi RKN. Dakle, ne \u010dudite se ako vam se dogodi ne\u0161to sli\u010dno. Morali smo koristiti VPN kako bismo pristupili svom VPS-u.<\/p>\n<p>Kopiramo ve\u0107 kompilirani rsockstun na VPS (usput, jo\u0161 jedna prednost GoLang-a \u2013 mo\u017eete kompilirati projekt kod sebe i pokrenuti ga na bilo kojem Linuxu, zadr\u017eavaju\u0107i samo arhitekturu sustava) i pokre\u0107emo serverski dio:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/f86be92203d646832205fb611fe4d056.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA zatim klijentski dio:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/c8852d7431e8bba7eab1494989ceb46d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKao \u0161to vidimo, klijent se uspje\u0161no povezao sa serverom putem CloudFlare frontend servera koriste\u0107i web socket. Da bismo provjerili da tunel radi kao tunel, mo\u017eemo izvr\u0161iti curl upit preko lokalnog socks5, otvorenog na serveru:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/87b6f42676e5e895b7f7b03da16420bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSada \u0107emo pogledati \u0161to DPI vidi u komunikacijskom kanalu:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/d546b676904d5b8ded7e0891ff5a98e6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrvo tunel, koriste\u0107i DoH mehanizam obra\u0107a se DNS serveru Cloudflare za eSNI klju\u010deve za ciljani domen (paketi br. 1-19), a zatim se obra\u0107a frontend serveru i uspostavlja TLS vezu, prikrivaju\u0107i se tom domenom <noindex><a rel=\"nofollow\" href=\"http:\/\/www.google.com\">www.google.com<\/a><\/noindex> (to je zadana vrijednost kada se klijent pokrene bez postavljenog la\u017enog domena). Da biste odredili svoj la\u017eni domen potrebno je koristiti parametar -fronfDomain:<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/3f55e03eecd7436b1e9c2312d88b46af.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/da5e219fb5a097e6ad6d75844d7a5687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSada jo\u0161 jedan va\u017ean trenutak. Po defaultu, u postavkama ra\u010duna na CloudFlare postavljen je fleksibilni SSL. To zna\u010di da \u0107e https upiti klijenata prema CloudFlare frontend serverima biti preusmjereni u nekriptiranom (http) formatu na\u0161em serveru. Zato smo pokrenuli serverski dio tunelera u non-ssl re\u017eimu ( -listen ws:0.0.0.0), a ne ( -listen wss:0.0.0.0).<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/17f820b973f8a3f26f78a30c10bdb493.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa biste pre\u0161li u re\u017eim pune enkripcije potrebno je odabrati <b>Full<\/b>, ili <b>Full (strict)<\/b> u slu\u010daju da je na serveru prisutan va\u017ee\u0107i certifikat. Nakon prebacivanja na\u010dina rada, mo\u0107i \u0107emo primati veze od CloudFlare putem https protokola. Ne zaboravite generirati self-signed certifikat za serversku stranu tunelera.<\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/c9a05134c9ba01e6008b4432cf59c74e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZanesen \u010ditatelj \u0107e pitati: \u201eA \u0161to je s klijentom za Windows? Sigurno je da je osnovna primjena tunelera podizanje bek-konekcije s korporacijskim ra\u010dunalima i serverima, a tamo je obi\u010dno uvijek Windows. Kako mogu kompajlirati tuneler za Windows, a da jo\u0161 bude s odre\u0111enim TLS stakom?\u201c Sada \u0107emo predstaviti jo\u0161 jednu zna\u010dajku koja pokazuje koliko je Go zgodan. Kompajliramo za Windows iz Kalia, jednostavno dodaju\u0107i parametar 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>\nIli 32-bitna varijanta:<\/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>\nSve! I vi\u0161e nikakvih briga nije potrebno. To stvarno radi! <\/p>\n<p><img decoding=\"async\" alt=\"Domen-fronting na temelju TLS 1.3. Dio 2\" src=\"\/wp-content\/uploads\/2019\/11\/2c60d41c115b8df32a8b53b06a45e915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKompajlerske zastavice \u2013w i \u2013s su potrebne za uklanjanje suvi\u0161nog otpada iz izvr\u0161ne datoteke, \u010dine\u0107i je manjom za nekoliko megabajta. Dodatno je kasnije mogu\u0107e upakovati s UPX-om, kako bi se dodatno smanjila veli\u010dina.<\/p>\n<h3>Umjesto zaklju\u010dka<\/h3>\n<p>\nU \u010dlanku smo, koriste\u0107i primjer tunelera napisanog u Go, demonstrirali primjenu nove tehnologije domen-frontinga, realizirane na prili\u010dno zanimljivoj osobini protokola TLS 1.3. Sli\u010dnim putem se mo\u017ee prilagoditi postoje\u0107i alat napisan u Go za rad putem CloudFlare servera, na primjer <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ne0nd0g\/merlin\">Merlin<\/a><\/noindex> \u2014 poznati C2, ili natjerati CobaltStrike Beacon da koristi eSNI domen-fronting prilikom rada s Teamserverom putem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ryhanson\/ExternalC2\">Vanjski C2 kanal<\/a><\/noindex>, realiziranog u Go-u, ili pak u standardnom C++ s kori\u0161tenjem patchirane verzije OpenSSL-a, o kojoj smo govorili u prethodnom dijelu \u010dlanka. Ukratko, ma\u0161ti nema kraja.<\/p>\n<p>Primjer s tunelerom i CloudFlare predstavljen je u obliku koncepta, a za sada je te\u0161ko re\u0107i o daljnjim perspektivama takvog tipa domen-frontinga. Trenutno je podr\u0161ka za eSNI implementirana samo kod CloudFlare-a i, u teoriji, ni\u0161ta im ne mo\u017ee zabrani da isklju\u010de takvu vrstu frontinga i, na primjer, prekinu tls-veze u slu\u010daju neskladnosti izme\u0111u SNI i eSNI. U kona\u010dnici, budu\u0107nost \u0107e pokazati. No za sada perspektiva rada pod \u201epokri\u0107em kremlin.ru\u201c izgleda prili\u010dno primamljivo. Nije li tako?<\/p>\n<p>A\u017eurirani kod tunelera, kao i kompajlirani izvr\u0161ni exe-fajlovi su dostupni u posebnom ogranku projekta na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">github<\/a><\/noindex>. O svim mogu\u0107im problemima s tunelerom najbolje je pisati issue na stranici projekta na GitHubu.<br \/>\n<br \/>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Domen-fantomen temeljen na TLS 1.3. Deo 2 | ProHoster","description":"Uvod U prvom delu \u010dlanka dali smo kratak opis mehanizma encrypted SNI (eSNI).","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/53317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=53317"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/53317\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=53317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=53317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=53317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}