Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΡ‹ Π΄Π°Π»ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° encrypted SNI (eSNI). Показали ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π° Π΅Π³ΠΎ основС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ»ΠΎΠ½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ дСтСктирования соврСмСнными DPI-систСмами (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ билайновского DPI ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ РКН Ρ€ΡƒΡ‚Ρ€Π΅ΠΊΠ΅Ρ€Π°), Π° Ρ‚Π°ΠΊΠΆΠ΅ исслСдовали Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Π° Π½Π° основС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π±ΠΎΠ»Π΅Π΅ практичСским Π²Π΅Ρ‰Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ RedTeam спСциалистам Π² ΠΈΡ… Π½Π΅Π»Π΅Π³ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² наша Ρ†Π΅Π»ΡŒ β€” Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСсурсам (для Ρ‚Π°ΠΊΠΈΡ… Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ Ρƒ нас Π΅ΡΡ‚ΡŒ старый Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ VPN). Π‘Π»Π°Π³ΠΎ Ρ‡Ρ‚ΠΎ VPN-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² сущСствуСт Π²Π΅Π»ΠΈΠΊΠΎΠ΅ мноТСство, ΠΊΠ°ΠΊ говорится, Π½Π° любой вкус, Ρ†Π²Π΅Ρ‚ ΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚.

ΠœΡ‹ постараСмся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Π° для соврСмСнных инструмСнтов RedTeam, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Cobalt Strike, Empire ΠΈ Ρ‚.Π΄., ΠΈ Π΄Π°Ρ‚ΡŒ ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠΎ ΠΌΠΈΠΌΠΈΠΊΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ ΡƒΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡŽ ΠΎΡ‚ соврСмСнных систСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.

Π’ ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π· ΠΌΡ‹ Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ eSNI Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ OpenSSL ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ использовали Π΅Π΅ Π² Π·Π½Π°ΠΊΠΎΠΌΠΎΠΉ всСм ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ curl. Но ΠΎΠ΄Π½ΠΈΠΌ ΠΊΡƒΡ€Π»ΠΎΠΌ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, сыт Π½Π΅ Π±ΡƒΠ΄Π΅ΡˆΡŒ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ хочСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π² языках высокого уровня. Но, ΠΊ соТалСнию, Π±Π΅Π³Π»Ρ‹ΠΉ поиск ΠΏΠΎ просторам сСти нас Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° eSNI ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² GOLANG. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π±ΠΎΡ€ Ρƒ нас Π½Π΅ особо ΠΈ большой: Π»ΠΈΠ±ΠΎ ΠΌΡ‹ пишСм Π½Π° чистом Π‘ ΠΈΠ»ΠΈ Π‘++ с использованиСм ΠΏΡ€ΠΎΠΏΠ°Ρ‚Ρ‡Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenSSL, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΊ GOLANG ΠΎΡ‚ CloudFlare ΠΈ пытаСмся ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш инструмСнтарий Ρ‚ΡƒΠ΄Π°. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π±ΠΎΠ»Π΅Π΅ классичСский, Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΉ – это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ eSNI для ΠΏΠΈΡ‚ΠΎΠ½Π°. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Python Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ OpenSSL для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с https. Но этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΡ‹ оставим Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅, Π° сами Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π° Π³ΠΎΠ»Π°Π½Π³Π΅, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ наш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ Cobalt Strike прСкрасно ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°Π½Π°Π»ΠΎΠΌ связи, построСнным сторонними срСдствами (External C2 channel) – ΠΎΠ± этом расскаТСм Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Try Harder…

Один ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Go инструмСнтов – наша Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° для ΠΏΠΈΠ²ΠΎΡ‚ΠΈΠ½Π³Π° Π²Π½ΡƒΡ‚Ρ€ΡŒ сСти – Ρ‚ΡƒΠ½Π΅Π»Π»Π΅Ρ€ rsockstun, которая, кстати говоря, Π½Ρ‹Π½Ρ‡Π΅ дСтСктируСтся срСдствами ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft ΠΈ Symantec, ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ врСдоносноС ПО, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π½Π° Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈβ€¦

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС. Но Ρ‚ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ rsockstun ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС синхронного SSL ΠΊΠ°Π½Π°Π»Π° связи с сСрвСром. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ соСдинСниС устанавливаСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ сущСствуСт Π½Π° протяТСнии всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π°. А, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» https Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ – ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос-ΠΎΡ‚Π²Π΅Ρ‚, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ http-запрос сущСствуСт Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π½ΠΎΠ²ΠΎΠ³ΠΎ tcp-соСдинСния.

Основной нСдостаток Ρ‚Π°ΠΊΠΎΠΉ схСмы состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сСрвСр Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΏΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ http-запрос. Но, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ – ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· http ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» (Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² ΠΌΡ‹ ΠΆΠ΅ умудряСмся ΠΊΠ°ΠΊ Ρ‚ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ наши Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ сСриалы ΠΈ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ΠΌΡƒΠ·Ρ‹ΠΊΡƒ с ΠΏΠΎΡ€Ρ‚Π°Π»ΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° https, Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Π°ΡƒΠ΄ΠΈΠΎ β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ потоковая ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ…). Одной ΠΈΠ· Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для эмуляции Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ tcp-соСдинСния ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° http являСтся тСхнология Π²Π΅Π±-сокСтов (WebSockets), основная ΡΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ сСтСвого соСдинСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Π²Π΅Π±-сСрвСром.

На нашС Π²Π΅Π·Π΅Π½ΠΈΠ΅ (ΡƒΡ€Π°-ΡƒΡ€Π°!!!), эта тСхнология Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΎ всС Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹Π΅ ΠΏΠ»Π°Π½Ρ‹ CloudFlare ΠΈ прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² сочСтании с eSNI. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· Π΅Π΅ Ρ‚ΠΎ ΠΌΡ‹ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ наш Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ ΠΈ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ соврСмСнных DPI.

НСмного о WebSockets

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΌΡ‹ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ ΠΈ простыми словами расскаТСм ΠΎ Π²Π΅Π±-сокСтах, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΈΠΌΠ΅Π»ΠΈ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, с Ρ‡Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ВСхнология Π²Π΅Π±-сокСтов позволяСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ с http-соСдинСния Π½Π° ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· сСтСвой сокСт, Π½Π΅ разрывая ΠΏΡ€ΠΈ этом установлСнного tcp-соСдинСния. Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅Π±-сокСт, ΠΎΠ½ Π² своСм http-запросС выставляСт нСсколько http-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². Π”Π²Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° – Connection: Upgrade ΠΈ Upgrade: websocket. Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ websocket ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (Sec-Websockset-Version: 13) ΠΈ Π½Π΅Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ base64 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π²Π΅Π±-сокСта (Sec-WebSocket-Key: DAGDJSiREI3+KjDfwxm1FA==). Π‘Π΅Ρ€Π²Π΅Ρ€ Π΅ΠΌΡƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ http-ΠΊΠΎΠ΄ΠΎΠΌ 101 Switching Protocols ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ устанавливаСт Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Connection, Upgrade ΠΈ Sec-WebSocket-Accept. Наглядно процСсс ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ продСмонстрирован Π½Π° скринС Π½ΠΈΠΆΠ΅:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

ПослС этого установку WebSocket соСдинСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ. Π›ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ сСрвСра Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ½Π°Π±ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π΅ http, Π° WebSocket Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ (ΠΎΠ½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π±Π°ΠΉΡ‚Π° 0x82). Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСру Π½Π΅Ρ‚ нСобходимости ΠΆΠ΄Π°Ρ‚ΡŒ запроса ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚.ΠΊ. tcp-соСдинСниС Π½Π΅ разрываСтся.

Π’ Π³ΠΎΠ»Π°Π½Π³Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Π΅Π±-сокСтами Π΅ΡΡ‚ΡŒ нСсколько Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. НаиболСС популярныС ΠΈΠ· Π½ΠΈΡ… это Gorilla WebSocket ΠΈ стандартная WebSocket. ΠœΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ послСднСй, Ρ‚.ΠΊ. ΠΎΠ½Π° ΠΏΡ€ΠΎΡ‰Π΅, мСньшС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠ°ΠΊ говорят, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡˆΡƒΡΡ‚Ρ€Π΅Π΅.

Π’ ΠΊΠΎΠ΄Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° rsockstun Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ net.dial ΠΈΠ»ΠΈ tls.dial Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ WebSocket:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ нашСго Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈ способной Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π΅Π· прямоС ssl-соСдинСниС, Ρ‚Π°ΠΊ ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» WebSockset. Для этого ΠΌΡ‹ создадим ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ func connectForWsSocks(address string, proxy string) error {…} ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с connectForSocks() ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Π΅Π±-сокСтами Π² случаС, Ссли адрСс сСрвСра, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ запускС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с ws: ΠΈΠ»ΠΈ wss: (Π² случаС с Secure WebSocket).

Для сСрвСрной части Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π° ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ сдСлаСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Π΅Π±-сокСтами. Π’ Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ экзСмпляр класса http ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ http-соСдинСния (функция wsHandler):

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

А всю Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (авторизация ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ, установка ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ yamux-сСссии) ΠΌΡ‹ помСстим Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ WebSocket:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, запускаСм ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ:

./rsockstun –listen ws:127.0.0.1:8080 –pass P@ssw0rd

И Π·Π°Ρ‚Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ:

./rsockstun -connect ws:127.0.0.1:8080 –pass P@ssw0rd

И провСряСм Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° локальном хостС:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Ρƒ

Π‘ Π²Π΅Π±-сокСтами ΠΌΡ‹ Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ нСпосрСдствСнно ΠΊ eSNI ΠΈ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Ρƒ. Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с DoH ΠΈ eSNI Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π·ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π³ΠΎΠ»Π°Π½Π³Π° ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ CloudFlare. Нам Π½ΡƒΠΆΠ½Π° Π²Π΅Ρ‚ΠΊΠ° с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ eSNI (pwu/esni).

ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π΅ ΠΊ сСбС локально ΠΈΠ»ΠΈ ΠΊΠ°Ρ‡Π°Π΅ΠΌ ΠΈ Ρ€Π°Π·ΠΆΠΈΠΌΠ°Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ zip:

git clone -b pwu/esni https://github.com/cloudflare/tls-tris.git

Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ GOROOT, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· склонированной Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ основной. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ этой Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ рСбята ΠΈΠ· CloudFlare ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ скрипт – _dev/go.sh. ΠŸΡ€ΠΎΡΡ‚ΠΎ запускаСм Π΅Π³ΠΎ. Π‘ΠΊΡ€ΠΈΠΏΡ‚ вмСстС с makefile всС ΡΠ΄Π΅Π»Π°ΡŽΡ‚ сами. Для интСрСса β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ makefile Π·Π° подробностями.

ПослС ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ скрипта, ΠΏΡ€ΠΈ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² качСствС GOROOT Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ скриптом. Π’ нашСм случаС это выглядит Ρ‚Π°ΠΊ:

GOROOT="/opt/tls-tris/_dev/GOROOT/linux_amd64" go build ….

Π”Π°Π»Π΅Π΅, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» запроса ΠΈ парсинга ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… eSNI ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½Π°. Π’ нашСм случаС, это Π±ΡƒΠ΄ΡƒΡ‚ Π±ΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ eSNI ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΡ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-сСрвСров CloudFlare. Для этого ΠΌΡ‹ создадим Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

func makeDoTQuery(dnsName string) ([]byte, error)
func parseTXTResponse(buf []byte, wantName string) (string, error)
func QueryESNIKeysForHost(hostname string) ([]byte, error)

Названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, говорят сами Π·Π° сСбя. НаполнСниС ΠΆΠ΅ ΠΌΡ‹ возьмСм ΠΈΠ· Ρ„Π°ΠΉΠ»Π° esni_query.go, входящСго Π² состав tls-tris. ΠŸΠ΅Ρ€Π²Π°Ρ функция создаСт сСтСвой ΠΏΠ°ΠΊΠ΅Ρ‚ с запросом ΠΊ DNS сСрвСру CloudFlare, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» DoH (DNS-over-HTTPS), вторая – парсит Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ запроса ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ значСния ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π΄ΠΎΠΌΠ΅Π½Π°, Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ являСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ….

Π”Π°Π»Π΅Π΅, ΠΌΡ‹ вносим Π² Π½Π°ΡˆΡƒ, вновь ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π΅Π±-сокСта connectForWsSocks Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» запроса eSNI ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π΄ΠΎΠΌΠ΅Π½Π°. Π’Π°ΠΌ, Π³Π΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ сСрвСрная Ρ‡Π°ΡΡ‚ΡŒ, устанавливаСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ TLS, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π΅ΠΌ имя Ρ„Π΅ΠΉΠΊΠΎΠ²ΠΎΠ³ΠΎ Β«Π΄ΠΎΠΌΠ΅Π½Π° прикрытия»:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π’ΡƒΡ‚ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ, Π²Π΅Ρ‚ΠΊΠ° tls-tris Π½Π΅ рассчитана Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π½Π΅ΠΉ Π½Π΅ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ„Π΅ΠΉΠΊΠΎΠ²ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ сСрвСра (Π² составС client-hello ΠΏΠ°ΠΊΠ΅Ρ‚Π° пСрСдаСтся пустоС ΠΏΠΎΠ»Π΅ serverName). Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π°ΠΌ придСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² структуру TlsConfig ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ FakeServerName. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ServerName структуры ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Ρ‚.ΠΊ. Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ tls ΠΈ Ссли ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ исходного, Ρ‚ΠΎ tls-Ρ…Π΅Π½Π΄ΡˆΠ΅ΠΉΠΊ закончится с ошибкой. ОписаниС структуры TlsConfig содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ tls/common.go – Π΅Π³ΠΎ Π½Π°ΠΌ ΠΈ прСдстоит ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΌ придСтся внСсти измСнСния Π² Ρ„Π°ΠΉΠ» tls/handshake_client.go, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΠΎΠ»Π΅ FakeServerName ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ TLS Ρ…Π΅Π½Π΄ΡˆΠ΅ΠΉΠΊΠ°:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

На этом всё! МоТно ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ CloudFlare. Ну ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ – просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° ΠΊΠ»Π°ΡƒΠ΄Ρ„Π»Π°Ρ€Π΅ ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ свой Π΄ΠΎΠΌΠ΅Π½ ΠΊ Π½Π΅ΠΌΡƒ. ВсС Ρ„ΠΈΡˆΠΊΠΈ, связанныС с DoH, WebSocket ΠΈ ESNI, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² CloudFlare ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ DNS записи обновятся – ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄ΠΎΠΌΠ΅Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² запрос eSNI ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

dig +short txt _esni.df13tester.info 

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ для вашСго Π΄ΠΎΠΌΠ΅Π½Π° – Π·Π½Π°Ρ‡ΠΈΡ‚ всС Ρƒ вас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

ЗапускаСм Ubuntu VPS, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° DigitalOcean. P.S. Π’ нашСм случаС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ IP-адрСс VPS оказался Π² Π±Π»Π΅ΠΊ-листах РКН. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠ΄ΠΈΠ²Π»ΡΠΉΡ‚Π΅ΡΡŒ, Ссли с Π²Π°ΠΌΠΈ случится Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅. ΠŸΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ VPN Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° свою VPS.

ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° VPS ΡƒΠΆΠ΅ скомпилированный rsockstun (Π² этом, кстати, Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€Π΅Π»Π΅ΡΡ‚ΡŒ Π³ΠΎΠ»Π°Π½Π³Π° – ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρƒ сСбя ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° любом линуксС, соблюдая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ систСмы) ΠΈ запускаСм ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

А Π·Π°Ρ‚Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ ΠΊ сСрвСру Ρ‡Π΅Ρ€Π΅Π· Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-сСрвСр CloudFlare с использованиСм Π²Π΅Π±-сокСта. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΠ½Π½Π΅Π»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΡƒΠ½Π½Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ curl-запрос Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ socks5, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π½Π° сСрвСрС:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ DPI Π²ΠΈΠ΄ΠΈΡ‚ Π² ΠΊΠ°Π½Π°Π»Π΅ связи:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π‘Π½Π°Ρ‡Π°Π»Π° Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ DoH обращаСтся ΠΊ DNS сСрвСру Cloudflare Π·Π° eSNI ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ для Π΄ΠΎΠΌΠ΅Π½Π° назначСния (ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ β„–1-19), Π° Π·Π°Ρ‚Π΅ΠΌ обращаСтся ΠΊ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-сСрвСру ΠΈ устанавливаСт TLS-соСдинСниС, ΠΏΡ€ΠΈΠΊΡ€Ρ‹Π²Π°ΡΡΡŒ ΠΏΡ€ΠΈ этом Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ www.google.com (это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ запускС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅ Π·Π°Π΄Π°Π½ Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½). Для указания своСго Ρ„Π΅ΠΉΠΊΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -fronfDomain:

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² настройках Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π½Π° CloudFalre установлСн Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Flexible SSL. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ https-запросы ΠΊ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-сСрвСрам Cloudflare ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² Π½Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ (http) Π²ΠΈΠ΄Π΅ Π½Π°ΡˆΠ΅ΠΌΡƒ сСрвСру. ИмСнно поэтому ΠΌΡ‹ ΠΈ запускали ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π° Π² non-ssl Ρ€Π΅ΠΆΠΈΠΌΠ΅ ( -listen ws:0.0.0.0), Π° Π½Π΅ ( -listen wss:0.0.0.0).

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Full, ΠΈΠ»ΠΈ Full (strict) Π² случаС наличия настоящСго сСртификата Π½Π° сСрвСрС. ПослС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΡ‹ смоТСм ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ CloudFlare ΠΏΠΎ https ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ self-signed сСртификат для сСрвСрной части Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π°.

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π’ΡŠΠ΅Π΄Π»ΠΈΠ²Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ спросит: «А ΠΊΠ°ΠΊ Π½Π° счСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄ Windows? Π’Π΅Π΄ΡŒ навСрняка, основноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π° – ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π±Π΅ΠΊ-ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ с ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… машин ΠΈ сСрвСров, Π° Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, всСгда Π²ΠΈΠ½Π΄Π°. Как ΠΌΠ½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€ ΠΏΠΎΠ΄ Π²ΠΈΠ½Π΄Ρƒ, Π΄Π° Π΅Ρ‰Π΅ ΠΈ со спСцифичСским стСком TLS?Β» А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ прСдставим Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΠΈΡˆΠΊΡƒ, которая ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, насколько ΡƒΠ΄ΠΎΠ±Π΅Π½ Π³ΠΎΠ»Π°Π½Π³. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ windows прямо ΠΈΠ· Kali, просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ GOOS=windows:

GOARCH=amd64 GOROOT="/opt/tls-tris/_dev/GOROOT/linux_amd64" GOOS=windows  go build -ldflags="-s -w"

Или 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

GOARCH=386 GOROOT="/opt/tls-tris/_dev/GOROOT/linux_amd64" GOOS=windows  go build -ldflags="-s -w"

Всё! И большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π·Π°ΠΌΠΎΡ€ΠΎΡ‡Π΅ΠΊ Π½Π΅ Π½Π°Π΄ΠΎ. Π­Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

Π”ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ Π½Π° Π±Π°Π·Π΅ TLS 1.3. Π§Π°ΡΡ‚ΡŒ 2

Π€Π»Π°Π³ΠΈ компилятора –w ΠΈ –s Π½ΡƒΠΆΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ лишний мусор ΠΈΠ· исполняСмого Ρ„Π°ΠΉΠ»Π°, сдСлав Π΅Π³ΠΎ мСньшС Π½Π° ΠΏΠ°Ρ€Ρƒ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ UPX, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‰Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ написанного Π½Π° Π³ΠΎΠ»Π°Π½Π³Π΅ Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π°, наглядно ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½Π° довольно интСрСсной особСнности ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TLS 1.3. Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ инструмСнтарий написанный Π½Π° Π³ΠΎΠ»Π°Π½Π³Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· сСрвСра CloudFlare, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Merlin β€” извСстный C2, ΠΈΠ»ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ CobaltStrike Beacon ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eSNI Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Teamserver Ρ‡Π΅Ρ€Π΅Π· External C2 Channel, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π³ΠΎΠ»Π°Π½Π³Π΅, ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π° стандартном C++ с использованиСм ΠΏΡ€ΠΎΠΏΠ°Ρ‚Ρ‡Π΅Π½Π½ΠΎΠΉ вСрсии OpenSSL, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ рассказывали Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ Π½Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π΅Π»Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€ΠΎΠΌ ΠΈ CloudFlare прСдставлСн Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ слоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Π΄Π°Π»Π΅ΠΊΠΈΡ… пСрспСктивах ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π΄ΠΎΠΌΠ΅Π½-Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³Π°. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° eSNI Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ CloudFlare ΠΈ, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΈΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Ρ„Ρ€ΠΎΠ½Ρ‚ΠΈΠ½Π³ ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Ρ€Ρ‹Π²Π°Ρ‚ΡŒ tls-соСдинСния ΠΏΡ€ΠΈ нСсовпадСнии SNI ΠΈ eSNI. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚. Но ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ пСрспСктива Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ΄ Β«ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ kremlin.ruΒ» выглядит довольно Ρ‚Π°ΠΊΠΈ Π·Π°ΠΌΠ°Π½Ρ‡ΠΈΠ²ΠΎΠΉ. НС Ρ‚Π°ΠΊ Π»ΠΈ?

ΠžΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ скомпилированныС исполняСмыС exe-Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° github. Обо всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… Ρ‚ΡƒΠ½Π½Π΅Π»Π΅Ρ€Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ issue Π½Π° страницС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° GitHub.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com