{"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\/it\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","title":{"rendered":"Domain Fronting basato su TLS 1.3. Parte 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introduzione<\/h3>\n<p>\nNella prima parte <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/475372\/\">articolo<\/a><\/noindex> abbiamo fornito una breve descrizione del meccanismo encrypted SNI (eSNI). Abbiamo mostrato come, sulla base di questo, sia possibile eludere il rilevamento da parte dei moderni sistemi DPI (prendendo come esempio il DPI di Beeline e il tracker RKN bloccato), e abbiamo anche esaminato una nuova variante del domain fronting basata su questo meccanismo.<\/p>\n<p>Nella seconda parte dell'articolo ci concentreremo su aspetti pi\u00f9 pratici che saranno utili agli specialisti RedTeam nel loro lavoro impegnativo. In fin dei conti, il nostro obiettivo non \u00e8 semplicemente ottenere accesso a risorse bloccate (per tali semplici esigenze abbiamo il caro vecchio VPN). Fortunatamente, esistono moltissimi provider VPN, come si suole dire, per ogni gusto, colore e budget.<\/p>\n<p>Cercheremo di applicare il meccanismo del domain fronting agli strumenti moderni di RedTeam, come Cobalt Strike, Empire, ecc., e fornire loro ulteriori funzionalit\u00e0 per mimetizzarsi e eludere i moderni sistemi di filtraggio dei contenuti.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNella scorsa occasione, abbiamo implementato il meccanismo eSNI nella libreria OpenSSL e l'abbiamo utilizzato con successo nell'utility conosciuta da tutti, curl. Ma con solo curl, come si dice, non si mangia. Certo, vorremmo realizzare qualcosa di simile in linguaggi ad alto livello. Sfortunatamente, una rapida ricerca nel vasto universo della rete ci delude, poich\u00e9 il supporto del meccanismo eSNI \u00e8 pienamente implementato solo in GOLANG. Pertanto, le nostre opzioni non sono molte: o scriviamo in puro C o C++ utilizzando una libreria OpenSSL patchata, oppure utilizziamo un fork separato di GOLANG di CloudFlare e cerchiamo di portare i nostri strumenti l\u00ec. In teoria, c'\u00e8 anche un'altra opzione, pi\u00f9 classica ma anche laboriosa: implementare il supporto per eSNI in Python. Dopotutto, Python utilizza OpenSSL per lavorare con https. Ma lasceremo questa opzione a qualcun altro, mentre noi ci accontenteremo dell'implementazione in Golang, soprattutto perch\u00e9 il nostro amato Cobalt Strike sa gi\u00e0 lavorare con un canale di comunicazione costruito con mezzi esterni (External C2 channel) \u2013 di cui parleremo alla fine dell'articolo.<\/p>\n<h3>Try Harder\u2026<\/h3>\n<p>\nUno degli strumenti implementati in Go \u00e8 il nostro sviluppo per il pivoting all'interno della rete \u2013 il tunneler <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">rsockstun<\/a><\/noindex>, che, tra l'altro, attualmente viene rilevato dai sistemi di Microsoft e Symantec come un malware altamente dannoso, volto a compromettere la stabilit\u00e0 mondiale...<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/13d2635b92051416b2f33415783a2837.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSarebbe fantastico utilizzare il precedente sviluppo anche in questo caso. Ma qui sorge un piccolo problema. Infatti, inizialmente rsockstun prevede l'uso di un canale di comunicazione SSL sincrono con il server. Ci\u00f2 significa che la connessione viene stabilita una volta e rimane attiva per tutta la durata del lavoro del tunneler. Come si pu\u00f2 capire, il protocollo https \u00e8 un po' inadatto per questo tipo di funzionamento \u2013 opera in modalit\u00e0 richiesta-risposta, dove ogni nuova richiesta http esiste nell'ambito di una nuova connessione tcp.<\/p>\n<p>Il principale svantaggio di tale schema \u00e8 che il server non pu\u00f2 inviare dati al client finch\u00e9 il client non invia una nuova richiesta http. Ma, fortunatamente, esistono molte soluzioni per questo problema \u2013 per la trasmissione continua di dati attraverso il protocollo http (dopotutto, riusciamo in qualche modo a guardare le nostre serie preferite e a ascoltare musica da portali che operano su https, e la trasmissione di video e audio non \u00e8 altro che una trasmissione continua di dati). Una delle tecnologie per emulare un funzionamento completo della connessione tcp sopra il protocollo http \u00e8 la tecnologia WebSockets, il cui scopo principale \u00e8 organizzare una connessione di rete completa tra client e server web.<\/p>\n<p>Per nostra fortuna (evviva!!!), questa tecnologia \u00e8 attivata di default in tutti i piani tariffari di CloudFlare e funziona perfettamente insieme all'eSNI. E proprio questo utilizzeremo per insegnare al nostro tunneler ad applicare il domain fronting e a nascondersi dai moderni DPI. <\/p>\n<h3>Un po' sui WebSockets<\/h3>\n<p>\nPrima di tutto, faremo una breve spiegazione sui web socket, affinch\u00e9 tutti abbiano chiaro con cosa stiamo lavorando. <\/p>\n<p>La tecnologia dei web socket consente di passare temporaneamente da una connessione http a una normale trasmissione continua di dati attraverso un socket di rete, senza interrompere la connessione tcp stabilita. Quando il client desidera passare al web socket, inserisce nella sua richiesta http alcuni header http. Due header obbligatori sono <i><b>Connection: Upgrade<\/b><\/i> e <i><b>Upgrade: websocket<\/b><\/i>. Pu\u00f2 anche specificare forzatamente la versione del protocollo websocket (<i><b>Sec-Websockset-Version: 13<\/b><\/i>) e qualcosa come un identificatore base64 del web socket (<i><b>Sec-WebSocket-Key: DAGDJSiREI3+KjDfwxm1FA==<\/b><\/i>). Il server risponde con il codice http 101 Switching Protocols e stabilisce anche gli header <i><b>Connection, Upgrade<\/b><\/i> e <i><b>Sec-WebSocket-Accept<\/b><\/i>. Il processo di switch \u00e8 illustrato nello screenshot qui sotto:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/1ee9af28074e5e190daea9b4b4a4a524.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDopo ci\u00f2, si pu\u00f2 considerare completata l'installazione della connessione WebSocket. I dati da entrambi i lati, sia dal cliente che dal server, ora saranno forniti con intestazioni WebSocket (che iniziano con il byte 0x82). Ora il server non ha pi\u00f9 bisogno di attendere una richiesta dal cliente per trasmettere dati, poich\u00e9 la connessione TCP non si interrompe.<\/p>\n<p>In Go, ci sono diverse librerie per lavorare con i WebSocket. Le pi\u00f9 popolari sono <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gorilla\/websocket\">Gorilla WebSocket<\/a><\/noindex> e la libreria standard <noindex><a rel=\"nofollow\" href=\"https:\/\/godoc.org\/golang.org\/x\/net\/websocket\">WebSocket<\/a><\/noindex>. Utilizzeremo quest'ultima, poich\u00e9 \u00e8 pi\u00f9 semplice, pi\u00f9 leggera e, si dice, un po' pi\u00f9 veloce.<\/p>\n<p>Nel codice del client rsockstun, dobbiamo sostituire le chiamate net.dial o tls.dial con le corrispondenti chiamate WebSocket:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/e7ffc8aadeed32b8c456ef03cff4cdf8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/035b3190717482f6aaac22b06cd25bc9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVogliamo rendere la parte client del nostro tunneler universale e capace di funzionare sia tramite una connessione SSL diretta, sia tramite il protocollo WebSocket. Per questo, creeremo una funzione separata <i><b>func connectForWsSocks(address string, proxy string) error {\u2026}<\/b><\/i> per analogia con <i><b>connectForSocks()<\/b><\/i> e la utilizzeremo per lavorare con i WebSocket nel caso in cui l'indirizzo del server specificato all'avvio del client inizi con ws: o wss: (nel caso di Secure WebSocket).<\/p>\n<p>Per la parte server del tunneler, creeremo anche una funzione separata per lavorare con i WebSocket. In essa verr\u00e0 creato un'istanza della classe http e verr\u00e0 impostato un gestore per la connessione http (funzione wsHandler): <\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/ad904b629aa40bf45d42c095d4285658.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE tutta la logica per gestire la connessione (autenticazione del cliente tramite password, apertura e chiusura di una sessione yamux) sar\u00e0 inserita nel gestore della connessione WebSocket:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/a624dca4819cee4b9d46f1325aafc544.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCompiliamo il progetto, avviando la parte server:<\/p>\n<pre><code class=\"go\">.\/rsockstun \u2013listen ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nE poi avviamo la parte client:<\/p>\n<pre><code class=\"go\">.\/rsockstun -connect ws:127.0.0.1:8080 \u2013pass P@ssw0rd<\/code><\/pre>\n<p>\nE verifichiamo il funzionamento sulla macchina locale:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/34bb12087eb7dd72cf1f35d7addf2c72.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/83fc82e962961ba8491164d26f27be95.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Passiamo al domain fronting<\/h3>\n<p>\nSembra che abbiamo compreso i WebSocket. Ora passiamo direttamente all'eSNI e al domain fronting. Come gi\u00e0 menzionato, per lavorare con DoH e eSNI, dobbiamo prendere un ramo speciale di Go dalla societ\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cloudflare\/tls-tris\">CloudFlare<\/a><\/noindex>. Ci serve il ramo con supporto per eSNI (pwu\/esni).<\/p>\n<p>Cloniamo localmente oppure scarichiamo e decomprimiamo il relativo zip:<\/p>\n<pre><code class=\"plaintext\">git clone -b pwu\/esni https:\/\/github.com\/cloudflare\/tls-tris.git<\/code><\/pre>\n<p>\nPoi dobbiamo copiare la directory GOROOT, sostituire i file appropriati del ramo clonati e impostarlo come principale. Per evitare di causare mal di testa agli sviluppatori, i ragazzi di CloudFlare hanno preparato uno script speciale \u2013 _dev\/go.sh. Basta eseguirlo. Lo script insieme al makefile si occuper\u00e0 di tutto. Per curiosit\u00e0, potete dare un'occhiata dentro il makefile per maggiori dettagli.<\/p>\n<p>Dopo che lo script ha terminato, durante la compilazione del progetto, dovremo specificare come GOROOT la directory locale preparata dallo script. Nel nostro caso, appare cos\u00ec:<\/p>\n<pre><code class=\"plaintext\">GOROOT=\"\/opt\/tls-tris\/_dev\/GOROOT\/linux_amd64\" go build \u2026.<\/code><\/pre>\n<p>\nSuccessivamente, dobbiamo implementare nel tunneler la funzionalit\u00e0 di richiesta e parsing delle chiavi pubbliche eSNI per il dominio desiderato. In questo caso, saranno le chiavi pubbliche eSNI dai server frontend di CloudFlare. Per questo, creeremo tre funzioni:<\/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>\nI nomi delle funzioni parlano da soli. Il contenuto sar\u00e0 preso dal file esni_query.go, che fa parte di tls-tris. La prima funzione crea un pacchetto di rete con una richiesta al server DNS di CloudFlare, utilizzando il protocollo DoH (DNS-over-HTTPS), la seconda analizza i risultati della richiesta e ottiene i valori delle chiavi pubbliche del dominio, e la terza funge da contenitore per le prime due.<\/p>\n<p>Successivamente, aggiungiamo nella nostra, appena creata, funzione di connessione WebSocket <i><b>connectForWsSocks<\/b><\/i> la funzionalit\u00e0 per richiedere le chiavi eSNI per il dominio. Dove funziona la parte server, impostiamo i parametri TLS e definiamo il nome del \"dominio fittizio\":<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/63abc51177058223e0f0941a78d182fa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVale la pena notare che inizialmente, il ramo tls-tris non \u00e8 progettato per l'uso del domain fronting. Di conseguenza, non si \u00e8 prestata attenzione al nome fittizio del server (nella richiesta client-hello, il campo serverName viene passato vuoto). Per correggerlo, dobbiamo aggiungere alla struttura TlsConfig il campo corrispondente FakeServerName. Non possiamo utilizzare il campo standard ServerName della struttura, poich\u00e9 viene utilizzato dai meccanismi interni di tls e se fosse diverso dall\u2019originale, il handshake tls finirebbe con un errore. La descrizione della struttura TlsConfig \u00e8 contenuta nel file <b>tls\/common.go<\/b> \u2013 e questo \u00e8 il file che dobbiamo modificare:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/04f35bb49a5f6a28625de28b23d686f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/0caf5cfccb2ffffeae703ecfe3eb6652.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInoltre, dovremo apportare modifiche al file <b>tls\/handshake_client.go<\/b>, per utilizzare il nostro campo FakeServerName durante la creazione dell handshake TLS:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/ac68f37f426603b2fcec467c6ee886ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 tutto! Puoi compilare il progetto e verificarne il funzionamento. Ma prima di avviare il test, \u00e8 necessario configurare l'account CloudFlare. Bene, per essere chiari, \u00e8 sufficiente creare un account su CloudFlare e collegare il proprio dominio. Tutte le funzionalit\u00e0 relative a DoH, WebSocket e ESNI sono abilitate di default in CloudFlare. Dopo l'aggiornamento dei record DNS, puoi verificare il funzionamento del dominio eseguendo la richiesta delle chiavi eSNI:<\/p>\n<pre><code class=\"plaintext\">dig +short txt _esni.df13tester.info <\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/09d07d1f49defc3551c3720d9b67569e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe vedi qualcosa di simile per il tuo dominio, significa che tutto funziona e puoi procedere con il testing.<\/p>\n<p>Avviamo un Ubuntu VPS, ad esempio, su DigitalOcean. P.S. Nel nostro caso, l'indirizzo IP del VPS appena assegnato dal provider era presente nelle blacklist dell'RKN. Quindi non sorprendersi se ti capita qualcosa di simile. Ho dovuto utilizzare una VPN per accedere al mio VPS.<\/p>\n<p>Copiamo su VPS il rsockstun gi\u00e0 compilato (questo, tra l'altro, \u00e8 un altro vantaggio di Go: puoi compilare il progetto sul tuo sistema e avviarlo su qualsiasi Linux, rispettando solo l'architettura del sistema) e avviamo la parte server:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/f86be92203d646832205fb611fe4d056.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE poi la parte client:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/c8852d7431e8bba7eab1494989ceb46d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCome vediamo, il client si \u00e8 connesso con successo al server tramite il server frontend di CloudFlare utilizzando un websocket. Per verificare che il tunnel funzioni davvero come tale, puoi fare una richiesta curl attraverso il socks5 locale aperto sul server:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/87b6f42676e5e895b7f7b03da16420bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOra vediamo cosa vede il DPI nel canale di comunicazione:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/d546b676904d5b8ded7e0891ff5a98e6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInizialmente, il tunneler, utilizzando il meccanismo DoH, si rivolge al server DNS di Cloudflare per le chiavi eSNI per il dominio di destinazione (pacchetti n. 1-19), e poi si connette al server frontend stabilendo una connessione TLS, coprendosi con il dominio <noindex><a rel=\"nofollow\" href=\"http:\/\/www.google.com\">www.google.com<\/a><\/noindex> (questo \u00e8 il valore predefinito quando non \u00e8 stato specificato un dominio fasullo all'avvio del client). Per specificare il proprio dominio fasullo, \u00e8 necessario utilizzare il parametro -frontDomain:<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/3f55e03eecd7436b1e9c2312d88b46af.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/da5e219fb5a097e6ad6d75844d7a5687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOra un altro punto. Di default, nelle impostazioni dell'account di CloudFlare \u00e8 attivata la modalit\u00e0 Flexible SSL. Questo significa che le richieste https ai server frontend di CloudFlare dai client saranno reindirizzate in forma non criptata (http) al nostro server. \u00c8 per questo motivo che abbiamo avviato la parte server del tunneler in modalit\u00e0 non-ssl (-listen ws:0.0.0.0), invece di (-listen wss:0.0.0.0).<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/17f820b973f8a3f26f78a30c10bdb493.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer passare alla modalit\u00e0 di crittografia completa, \u00e8 necessario selezionare <b>Completo<\/b>, o <b>Full (strict)<\/b> nel caso in cui sia presente un vero certificato sul server. Dopo aver cambiato la modalit\u00e0, saremo in grado di accettare connessioni da CloudFlare tramite il protocollo https. Non dimenticare di generare un certificato self-signed per la parte server del tunneler.<\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/c9a05134c9ba01e6008b4432cf59c74e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUn lettore attento potrebbe chiedere: \u00abE per il client su Windows? Non \u00e8 vero che l'uso principale del tunneler \u00e8 quello di stabilire un back-connect da macchine e server aziendali, dove di solito si utilizza Windows? Come posso compilare il tunneler per Windows, con uno stack TLS specifico?\u00bb Ora presenteremo un'altra caratteristica che dimostra quanto sia conveniente Go. Compiliamo per Windows direttamente da Kali, semplicemente aggiungendo il parametro 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>\nOppure la variante a 32 bit:<\/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>\nTutto! E non ci sono ulteriori complicazioni. Funziona davvero! <\/p>\n<p><img decoding=\"async\" alt=\"Domain Fronting basato su TLS 1.3. Parte 2\" src=\"\/wp-content\/uploads\/2019\/11\/2c60d41c115b8df32a8b53b06a45e915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI flag del compilatore -w e -s servono per rimuovere il superfluo dall'eseguibile, riducendone le dimensioni di alcuni megabyte. Pu\u00f2 anche essere impacchettato successivamente con UPX, per ulteriormente diminuire la dimensione.<\/p>\n<h3>In conclusion<\/h3>\n<p>\nIn questo articolo, abbiamo mostrato con l'esempio del tunneler scritto in Go, l'applicazione della nuova tecnologia di domain fronting, realizzata su una caratteristica piuttosto interessante del protocollo TLS 1.3. Analogamente, \u00e8 possibile adattare gli strumenti esistenti scritti in Go per funzionare attraverso i server CloudFlare, per esempio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ne0nd0g\/merlin\">Merlin<\/a><\/noindex> \u2014 un noto C2, o costringere CobaltStrike Beacon a utilizzare il domain fronting eSNI quando lavora con il Teamserver attraverso <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ryhanson\/ExternalC2\">External C2 Channel<\/a><\/noindex>, implementato in Go, o in standard C++ utilizzando una versione patchata di OpenSSL, di cui abbiamo parlato nella parte precedente dell'articolo. In generale, le possibilit\u00e0 sono illimitate.<\/p>\n<p>L'esempio del tunneler e CloudFlare \u00e8 presentato come concetto e al momento \u00e8 difficile dire sulle prospettive a lungo termine di questa forma di domain fronting. Attualmente, il supporto per eSNI \u00e8 implementato solo da CloudFlare e, in teoria, nulla impedisce loro di disabilitare questo tipo di fronting e, ad esempio, interrompere le connessioni tls in caso di disallineamento tra SNI ed eSNI. In generale, il futuro lo dir\u00e0. Ma per ora, la prospettiva di lavorare sotto \"le sembianze di kremlin.ru\" sembra piuttosto allettante. Non \u00e8 vero?<\/p>\n<p>Il codice aggiornato del tunneler, cos\u00ec come gli eseguibili compilati exe, sono disponibili in un ramo separato del progetto su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mis-team\/rsockstun\">github<\/a><\/noindex>. Per eventuali problemi del tunneler, \u00e8 meglio scrivere un issue sulla pagina del progetto su GitHub.<br \/>\n<br \/>Fonte: <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.0.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\/it\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Domain fronting basato su TLS 1.3. Parte 2 | ProHoster","description":"Introduzione Nella prima parte dell'articolo abbiamo fornito una breve descrizione del meccanismo encrypted SNI (eSNI).","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/domen-fronting-na-baze-tls-1-3-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/53317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=53317"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/53317\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=53317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=53317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=53317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}