{"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\/sv\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","title":{"rendered":"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introduktion<\/h3>\n<p>\nI den f\u00f6rsta delen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/475372\/\">artiklar<\/a><\/noindex> gav vi en kort beskrivning av mekanismen encrypted SNI (eSNI). Vi visade hur den kan anv\u00e4ndas f\u00f6r att undvika uppt\u00e4ckter av moderna DPI-system (med exempel p\u00e5 Beeline DPI och den f\u00f6rbjudna RKN Tracker), samt att vi unders\u00f6kte en ny variant av dom\u00e4n-fronting baserad p\u00e5 denna mekanism.<\/p>\n<p>I den andra delen av artikeln g\u00e5r vi vidare till mer praktiska saker som kommer att vara till nytta f\u00f6r RedTeam-specialister i deras utmanande arbete. I slut\u00e4ndan \u00e4r v\u00e5rt m\u00e5l inte att f\u00e5 tillg\u00e5ng till blockerade resurser (f\u00f6r s\u00e5dana banala saker har vi den gamla goda VPN). Det finns gott om VPN-leverant\u00f6rer, som man s\u00e4ger, f\u00f6r varje smak, f\u00e4rg och budget.<\/p>\n<p>Vi kommer att f\u00f6rs\u00f6ka till\u00e4mpa mekanismen dom\u00e4n-fronting p\u00e5 moderna RedTeam-verktyg, som Cobalt Strike, Empire osv., och ge dem ytterligare m\u00f6jligheter till mimickring och undvikande av moderna inneh\u00e5llsfilter.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nF\u00f6rra g\u00e5ngen implementerade vi mekanismen eSNI i OpenSSL-biblioteket och anv\u00e4nde den framg\u00e5ngsrikt i det bekanta verktyget curl. Men bara med curl, som man s\u00e4ger, blir man inte m\u00e4tt. Naturligtvis vill vi implementera n\u00e5got liknande i h\u00f6gre niv\u00e5spr\u00e5k. Men tyv\u00e4rr, en snabb s\u00f6kning p\u00e5 n\u00e4tet g\u00f6r oss besvikna eftersom st\u00f6det f\u00f6r mekanismen eSNI \u00e4r fullt implementerat endast i GOLANG. D\u00e4rf\u00f6r har vi inte mycket att v\u00e4lja p\u00e5: antingen skriver vi i rent C eller C++ med hj\u00e4lp av det patchade OpenSSL-biblioteket, eller s\u00e5 anv\u00e4nder vi en separat fork av GOLANG fr\u00e5n CloudFlare och f\u00f6rs\u00f6ker portera v\u00e5rt verktyg dit. I princip finns det ett annat, mer klassiskt men samtidigt arbetskr\u00e4vande alternativ \u2013 att implementera st\u00f6d f\u00f6r eSNI f\u00f6r Python. I slut\u00e4ndan anv\u00e4nder Python ocks\u00e5 OpenSSL f\u00f6r att arbeta med https. Men detta alternativ l\u00e4mnar vi till n\u00e5gon annan att utveckla, medan vi n\u00f6jer oss med implementationen i golang, s\u00e4rskilt eftersom v\u00e5r \u00e4lskade Cobalt Strike \u00e4r bra p\u00e5 att anv\u00e4nda kommunikationskanaler som byggs med tredjepartsmaterial (External C2 channel) \u2013 detta kommer vi att ber\u00e4tta mer om i slutet av artikeln.<\/p>\n<h3>Try Harder\u2026<\/h3>\n<p>\nEtt av de Go-verktyg vi har implementerat \u2013 v\u00e5r utveckling f\u00f6r pivoting in i n\u00e4tverket \u2013 tunneln <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">rsockstun<\/a><\/noindex>, som f\u00f6r \u00f6vrigt numera identifieras av Microsofts och Symantecs verktyg som mycket skadlig programvara som syftar till att st\u00f6ra den globala stabiliteten\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/13d2635b92051416b2f33415783a2837.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet skulle vara bra att anv\u00e4nda den tidigare utvecklingen \u00e4ven i det h\u00e4r fallet. Men det finns ett litet problem. Det handlar om att rsockstun ursprungligen f\u00f6ruts\u00e4tter anv\u00e4ndning av en synkron SSL-koppling till servern. Detta inneb\u00e4r att anslutningen etableras en g\u00e5ng och finns kvar under hela tunneleens driftstid. Och som ni f\u00f6rst\u00e5r \u00e4r https-protokollet inte riktigt designat f\u00f6r ett s\u00e5dant arbetsl\u00e4ge \u2013 det fungerar i en beg\u00e4rs-svar-mod, d\u00e4r varje ny http-beg\u00e4ran existerar inom ramen f\u00f6r en ny tcp-anslutning.<\/p>\n<p>Den st\u00f6rsta nackdelen med detta system \u00e4r att servern inte kan skicka data till klienten innan klienten skickar en ny http-beg\u00e4ran. Men lyckligtvis finns det m\u00e5nga alternativ f\u00f6r att l\u00f6sa detta problem \u2013 str\u00f6mmande data via http-protokollet (i slut\u00e4ndan lyckas vi ju p\u00e5 n\u00e5got s\u00e4tt se v\u00e5ra favoritserier och lyssna p\u00e5 musik fr\u00e5n plattformar som k\u00f6r p\u00e5 https, och \u00f6verf\u00f6ring av video och ljud \u00e4r inget annat \u00e4n str\u00f6mmande data). En av teknologierna f\u00f6r att emulera ett fullst\u00e4ndigt tcp-anslutning ovanp\u00e5 http-protokollet \u00e4r WebSockets-teknologin, vars huvudsyfte \u00e4r att organisera en fullst\u00e4ndig n\u00e4tverksanslutning mellan klienten och webbservern.<\/p>\n<p>Till v\u00e5r lycka (hurra!!!), denna teknologi \u00e4r aktiverad som standard i alla CloudFlare-abonnemang och fungerar utm\u00e4rkt tillsammans med eSNI. Det \u00e4r just den vi kommer att anv\u00e4nda f\u00f6r att l\u00e4ra v\u00e5r tunnel att anv\u00e4nda dom\u00e4n-fram\u00e5tsikt och d\u00f6lja sig f\u00f6r moderna DPI. <\/p>\n<h3>Lite om WebSockets<\/h3>\n<p>\nF\u00f6rst och fr\u00e4mst kommer vi kortfattat och med enkla ord att f\u00f6rklara vad web sockets \u00e4r, s\u00e5 att alla har en uppfattning om vad vi kommer att arbeta med. <\/p>\n<p>WebSockets-teknologin m\u00f6jligg\u00f6r tillf\u00e4llig v\u00e4xling fr\u00e5n http-anslutning till standard str\u00f6mmande data via n\u00e4tverksocket, utan att bryta den etablerade tcp-anslutningen. N\u00e4r klienten vill v\u00e4xla till web socket, l\u00e4gger den till n\u00e5gra http-header i sin http-beg\u00e4ran. Tv\u00e5 obligatoriska huvuden \u00e4r <i><b>Connection: Upgrade<\/b><\/i> och <i><b>Upgrade: websocket<\/b><\/i>. Den kan ocks\u00e5 specificera versionen av websocket-protokollet tvingat (<i><b>Sec-Websockset-Version: 13<\/b><\/i>) och n\u00e5got som liknar base64-identifierare f\u00f6r webbsocketen (<i><b>Sec-WebSocket-Key: DAGDJSiREI3+KjDfwxm1FA==<\/b><\/i>). Servern svarar med http-kod 101 Switching Protocols och s\u00e4tter \u00e4ven headers <i><b>Connection, Upgrade<\/b><\/i> och <i><b>Sec-WebSocket-Accept<\/b><\/i>. Processen f\u00f6r omkoppling visas tydligt p\u00e5 sk\u00e4rmdumpen nedan:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/1ee9af28074e5e190daea9b4b4a4a524.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEfter detta kan WebSocket-anslutningen anses vara komplett. Alla data, b\u00e5de fr\u00e5n klienten och servern, kommer nu att levereras med WebSocket-headers (de b\u00f6rjar med byte 0x82). Nu beh\u00f6ver inte servern v\u00e4nta p\u00e5 en beg\u00e4ran fr\u00e5n klienten f\u00f6r att skicka data, eftersom tcp-anslutningen inte bryts.<\/p>\n<p>I Go finns det flera bibliotek f\u00f6r att arbeta med websockets. De mest popul\u00e4ra av dem \u00e4r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gorilla\/websocket\">Gorilla WebSocket<\/a><\/noindex> och standardbiblioteket <noindex><a rel=\"nofollow\" href=\"https:\/\/godoc.org\/golang.org\/x\/net\/websocket\">WebSocket<\/a><\/noindex>. Vi kommer att anv\u00e4nda det senare, eftersom det \u00e4r enklare, mindre och fungerar, som sagt, lite snabbare.<\/p>\n<p>I klientkoden f\u00f6r rsockstun m\u00e5ste vi byta ut anrop av net.dial eller tls.dial mot motsvarande WebSocket-anrop:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/e7ffc8aadeed32b8c456ef03cff4cdf8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/035b3190717482f6aaac22b06cd25bc9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi vill g\u00f6ra klientdelen av v\u00e5r tunnelerare universell och kunna arbeta b\u00e5de via en direkt ssl-anslutning och via WebSocket-protokollet. F\u00f6r detta kommer vi att skapa en separat funktion <i><b>func connectForWsSocks(address string, proxy string) error {\u2026}<\/b><\/i> i analogi med <i><b>connectForSocks()<\/b><\/i> och anv\u00e4nda den f\u00f6r att arbeta med websockets om serveradressen som angavs vid klientstarten b\u00f6rjar med ws: eller wss: (i fallet med Secure WebSocket).<\/p>\n<p>F\u00f6r serverdelen av tunneleraren kommer vi ocks\u00e5 att g\u00f6ra en separat funktion f\u00f6r att arbeta med websockets. D\u00e4r kommer en instans av http-klassen att skapas och http-anslutningens hanterare (funktionen wsHandler) st\u00e4llas in: <\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/ad904b629aa40bf45d42c095d4285658.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOch all logik f\u00f6r att hantera anslutningen (autorisering av klienten med l\u00f6senord, uppr\u00e4ttande och avslutande av yamux-sessionen) kommer att placeras i WebSocket-anslutningens hanterare:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/a624dca4819cee4b9d46f1325aafc544.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi kompilerar projektet och k\u00f6r serverdelen:<\/p>\n<pre><code class=\"go\">.\\\/rsockstun \u2013listen ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nOch sedan klientdelen:<\/p>\n<pre><code class=\"go\">.\\\/rsockstun -connect ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nOch vi kontrollerar funktionen p\u00e5 den lokala v\u00e4rden:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/34bb12087eb7dd72cf1f35d7addf2c72.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/83fc82e962961ba8491164d26f27be95.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>L\u00e5t oss g\u00e5 vidare till dom\u00e4n-fronting<\/h3>\n<p>\nMed websockets verkar vi ha f\u00f6rst\u00e5tt. Nu l\u00e5t oss g\u00e5 direkt till eSNI och dom\u00e4n-fronting. Som n\u00e4mnts tidigare, f\u00f6r att arbeta med DoH och eSNI beh\u00f6ver vi ta en speciell Go-gren fr\u00e5n f\u00f6retaget <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cloudflare\/tls-tris\">CloudFlare<\/a><\/noindex>. Vi beh\u00f6ver en gren med st\u00f6d f\u00f6r eSNI (pwu\/esni).<\/p>\n<p>Klona den lokalt eller ladda ner och packa upp motsvarande zip-fil:<\/p>\n<pre><code class=\"plaintext\">git clone -b pwu\/esni https:\/\/github.com\/cloudflare\/tls-tris.git<\/code><\/pre>\n<p>\nD\u00e4refter beh\u00f6ver vi kopiera katalogen GOROOT, byta ut motsvarande filer fr\u00e5n den klonade grenen och st\u00e4lla in den som huvud. F\u00f6r att avlasta utvecklaren har killarna p\u00e5 CloudFlare f\u00f6rberett ett speciellt skript \u2013 _dev\/go.sh. Vi k\u00f6r bara det. Skriptet tillsammans med makefile kommer att g\u00f6ra allt sj\u00e4lv. F\u00f6r intressets skull \u2013 ni kan titta inuti makefile f\u00f6r detaljer.<\/p>\n<p>Efter att skriptet har k\u00f6rts, n\u00e4r vi kompilerar projektet, m\u00e5ste vi ange den lokala katalogen som GOROOT, som f\u00f6rberetts av skriptet. I v\u00e5rt fall ser det ut s\u00e5 h\u00e4r:<\/p>\n<pre><code class=\"plaintext\">GOROOT=\"\/opt\/tls-tris\/_dev\/GOROOT\/linux_amd64\" go build \u2026.<\/code><\/pre>\n<p>\nVidare beh\u00f6ver vi implementera i tunneln funktionen f\u00f6r att beg\u00e4ra och parsa publika eSNI-nycklar f\u00f6r den aktuella dom\u00e4nen. I v\u00e5rt fall kommer detta att vara de publika eSNI-nycklarna fr\u00e5n CloudFlare:s frontendservrar. F\u00f6r detta kommer vi att skapa tre funktioner:<\/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>\nFunktionsnamnen s\u00e4ger i princip sig sj\u00e4lva. Fyllningen kommer vi att ta fr\u00e5n filen esni_query.go, som ing\u00e5r i tls-tris. Den f\u00f6rsta funktionen skapar ett n\u00e4tverkspaket med en beg\u00e4ran till CloudFlare:s DNS-server, som anv\u00e4nder protokollet DoH (DNS-over-HTTPS), den andra \u2013 parsar beg\u00e4rans resultat och f\u00e5r v\u00e4rdena av de publika nycklarna f\u00f6r dom\u00e4nen, den tredje fungerar som en beh\u00e5llare f\u00f6r de tv\u00e5 f\u00f6rsta.<\/p>\n<p>D\u00e4refter l\u00e4gger vi till i v\u00e5r ny skapade funktion f\u00f6r att ansluta till websockets <i><b>connectForWsSocks<\/b><\/i> funktionen f\u00f6r att beg\u00e4ra eSNI-nycklar f\u00f6r dom\u00e4nen. D\u00e4r serverdelen fungerar st\u00e4ller vi in TLS-parametrarna, samt anger namnet p\u00e5 det falska \"skyddsapplikationsdom\u00e4nen\":<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/63abc51177058223e0f0941a78d182fa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nH\u00e4r b\u00f6r vi notera att den ursprungliga gren av tls-tris inte \u00e4r avsedd f\u00f6r anv\u00e4ndning av dom\u00e4nfronting. F\u00f6ljaktligen till\u00e4gnas inte ett falskt servernamn (i klient-hello-paketet skickas ett tomt serverName-f\u00e4lt). F\u00f6r att \u00e5tg\u00e4rda detta m\u00e5ste vi l\u00e4gga till det motsvarande f\u00e4ltet FakeServerName i strukturen TlsConfig. Vi kan inte anv\u00e4nda det standardm\u00e4ssiga ServerName-f\u00e4ltet i strukturen, eftersom det anv\u00e4nds av interna TLS-mekanismer och om det skiljer sig fr\u00e5n det ursprungliga, kommer TLS-handshaken att avslutas med ett fel. Beskrivningen av strukturen TlsConfig finns i filen <b>tls\/common.go<\/b> \u2013 den m\u00e5ste vi justera:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/04f35bb49a5f6a28625de28b23d686f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/0caf5cfccb2ffffeae703ecfe3eb6652.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDessutom m\u00e5ste vi g\u00f6ra \u00e4ndringar i filen <b>tls\/handshake_client.go<\/b>, f\u00f6r att anv\u00e4nda v\u00e5rt f\u00e4lt FakeServerName vid bildandet av TLS-handskake:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/ac68f37f426603b2fcec467c6ee886ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet \u00e4r allt! Du kan kompilera projektet och kontrollera dess funktion. Men innan du k\u00f6r kontrollerna m\u00e5ste du konfigurera ditt CloudFlare-konto. Hur man s\u00e4ger, konfigurera \u2013 bara skapa ett konto p\u00e5 CloudFlare och koppla din dom\u00e4n till det. Alla funktioner relaterade till DoH, WebSocket och ESNI \u00e4r aktiverade i CloudFlare som standard. Efter att DNS-posterna har uppdaterats kan du kontrollera att din dom\u00e4n fungerar genom att g\u00f6ra en f\u00f6rfr\u00e5gan om eSNI-nycklar:<\/p>\n<pre><code class=\"plaintext\">dig +short txt _esni.df13tester.info <\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/09d07d1f49defc3551c3720d9b67569e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOm du ser n\u00e5got liknande f\u00f6r din dom\u00e4n \u2013 betyder det att allt fungerar och du kan g\u00e5 vidare till testningen.<\/p>\n<p>Starta Ubuntu VPS, till exempel p\u00e5 DigitalOcean. P.S. I v\u00e5rt fall visade sig den just tilldelade IP-adressen fr\u00e5n leverant\u00f6ren vara p\u00e5 RKN:s svartlista. S\u00e5 bli inte f\u00f6rv\u00e5nad om n\u00e5got liknande h\u00e4nder dig. Vi var tvungna att anv\u00e4nda VPN f\u00f6r att komma in p\u00e5 v\u00e5r VPS.<\/p>\n<p>Kopiera den redan kompilerade rsockstun till VPS (f\u00f6rresten, det \u00e4r \u00e4nnu en f\u00f6rdel med Go \u2013 du kan kompilera projekt p\u00e5 din egen maskin och k\u00f6ra det p\u00e5 vilken Linux som helst, s\u00e5 l\u00e4nge du f\u00f6ljer systemets arkitektur) och starta serverdelen:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/f86be92203d646832205fb611fe4d056.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOch sedan klientdelen:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/c8852d7431e8bba7eab1494989ceb46d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSom vi ser har klienten framg\u00e5ngsrikt anslutit till servern via CloudFlares frontend-server med hj\u00e4lp av WebSocket. F\u00f6r att kontrollera att tunneln verkligen fungerar som en tunnel kan du g\u00f6ra en curl-f\u00f6rfr\u00e5gan genom den lokala socks5 som \u00e4r \u00f6ppen p\u00e5 servern:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/87b6f42676e5e895b7f7b03da16420bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL\u00e5t oss nu se vad DPI ser i kommunikationskanalen:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/d546b676904d5b8ded7e0891ff5a98e6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6rst konsulterar tunneln, med hj\u00e4lp av DoH-mekanismen, CloudFlares DNS-server f\u00f6r eSNI-nycklar f\u00f6r destinationdom\u00e4nen (paket nr 1-19), och sedan kontaktar den frontend-servern och etablerar en TLS-anslutning, och d\u00f6ljer sig bakom dom\u00e4nen <noindex><a rel=\"nofollow\" href=\"http:\/\/www.google.com\">www.google.com<\/a><\/noindex> (detta \u00e4r standardv\u00e4rdet n\u00e4r ingen falsk dom\u00e4n anges vid klientens start). F\u00f6r att ange din egen falska dom\u00e4n m\u00e5ste du anv\u00e4nda parametern -fronfDomain:<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/3f55e03eecd7436b1e9c2312d88b46af.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/da5e219fb5a097e6ad6d75844d7a5687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu \u00e4r det en sak till. Som standard \u00e4r inst\u00e4llningen f\u00f6r kontot p\u00e5 CloudFlare i l\u00e4get Flexible SSL. Det betyder att https-f\u00f6rfr\u00e5gningar till CloudFlares frontend-servrar fr\u00e5n klienterna kommer att vidarebefordras i okrypterad (http) form till v\u00e5r server. D\u00e4rf\u00f6r k\u00f6rde vi serverdelen av tunneln i non-ssl-l\u00e4ge (-listen ws:0.0.0.0), snarare \u00e4n (-listen wss:0.0.0.0).<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/17f820b973f8a3f26f78a30c10bdb493.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6r att v\u00e4xla till l\u00e4get med full kryptering m\u00e5ste du v\u00e4lja <b>Full<\/b>, eller <b>Full (strict)<\/b> i fall med den aktuella certifikatet p\u00e5 servern. Efter att ha v\u00e4xlat l\u00e4ge kan vi ta emot anslutningar fr\u00e5n CloudFlare via https-protokollet. Gl\u00f6m inte att generera ett self-signed certifikat f\u00f6r serverdelen av tunneln.<\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/c9a05134c9ba01e6008b4432cf59c74e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen nyfikna l\u00e4saren kanske fr\u00e5gar: \"Vad s\u00e4gs om klienten f\u00f6r Windows? Det \u00e4r ju s\u00e4kert s\u00e5 att den huvudsakliga anv\u00e4ndningen av tunneln \u00e4r att etablera backconnect fr\u00e5n f\u00f6retagsdatorer och servrar, och d\u00e4r \u00e4r det som regel alltid Windows. Hur kan jag kompilera tunneln f\u00f6r Windows, och dessutom med en specifik TLS-stack?\" L\u00e5t oss nu presentera en annan funktion som visar hur praktisk Go \u00e4r. Vi kompilera f\u00f6r Windows direkt fr\u00e5n Kali, helt enkelt genom att l\u00e4gga till parametern 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>\nEller den 32-bitars varianten:<\/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>\nDet \u00e4r klart! Och inga fler komplicerade grejer beh\u00f6vs. Det fungerar verkligen! <\/p>\n<p><img decoding=\"async\" alt=\"Dom\u00e4nfronting baserat p\u00e5 TLS 1.3. Del 2\" src=\"\/wp-content\/uploads\/2019\/11\/2c60d41c115b8df32a8b53b06a45e915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKompilatorflaggorna -w och -s beh\u00f6vs f\u00f6r att ta bort on\u00f6digt skr\u00e4p fr\u00e5n den exekverbara filen, vilket g\u00f6r den mindre med ett par megabyte. Den kan dessutom packas med hj\u00e4lp av UPX f\u00f6r att ytterligare minska storleken.<\/p>\n<h3>Avslutande<\/h3>\n<p>\nI artikeln visade vi, med exemplet av en tunneler skriven i Go, tydligt till\u00e4mpningen av den nya teknologin dom\u00e4n-framtr\u00e4dande, som implementerades p\u00e5 en ganska intressant egenskap hos protokollet TLS 1.3. P\u00e5 samma s\u00e4tt kan man anpassa existerande verktyg skrivna i Go f\u00f6r att arbeta genom CloudFlare-servrar, till exempel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ne0nd0g\/merlin\">Merlin<\/a><\/noindex> \u2014 en k\u00e4nd C2, eller f\u00e5 CobaltStrike Beacon att anv\u00e4nda eSNI dom\u00e4n-framtr\u00e4dande n\u00e4r man arbetar med Teamserver via <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ryhanson\/ExternalC2\">External C2 Channel<\/a><\/noindex>, implementerad i Go, eller p\u00e5 standard C++ med en patchad version av OpenSSL, som vi ber\u00e4ttade om i den f\u00f6reg\u00e5ende delen av artikeln. S\u00e5, fantasin har inga gr\u00e4nser.<\/p>\n<p>Exemplet med tunneln och CloudFlare presenteras som ett koncept och det \u00e4r fortfarande sv\u00e5rt att s\u00e4ga n\u00e5got om de l\u00e5ngsiktiga perspektiven f\u00f6r denna typ av dom\u00e4n-framtr\u00e4dande. F\u00f6r n\u00e4rvarande \u00e4r st\u00f6d f\u00f6r eSNI endast implementerat av CloudFlare och, i teorin, hindrar inget dem fr\u00e5n att st\u00e4nga av denna typ av framtr\u00e4dande och till exempel bryta tls-anslutningar vid o\u00f6verensst\u00e4mmelse mellan SNI och eSNI. Framtiden f\u00e5r utvisa. Men f\u00f6r tillf\u00e4llet verkar utsikten att arbeta under \"skyddet av kremlin.ru\" ganska lockande. Visst?<\/p>\n<p>Den uppdaterade tunnelkoden samt de kompilerade exekverbara exe-filerna finns i en separat gren av projektet p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">github<\/a><\/noindex>. F\u00f6r alla potentiella problem med tunneln \u00e4r det b\u00e4ttre att skriva issue p\u00e5 projektets sida p\u00e5 GitHub.<br \/>\n<br \/>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Dom\u00e4n-frontering baserat p\u00e5 TLS 1.3. Del 2 | ProHoster","description":"Introduktion I den f\u00f6rsta delen av artikeln gav vi en kort beskrivning av mekanismen f\u00f6r encrypted SNI (eSNI).","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/53317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=53317"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/53317\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=53317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=53317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=53317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}