TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์†Œ๊ฐœ

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…
Cisco, BlueCoat, FireEye์™€ ๊ฐ™์€ ์œ ๋ช…ํ•œ ์ œ์กฐ์—…์ฒด์˜ ์ตœ์‹  ๊ธฐ์—… ์ฝ˜ํ…์ธ  ํ•„ํ„ฐ๋ง ์‹œ์Šคํ…œ์€ ๊ตญ๊ฐ€ ์ฐจ์›์—์„œ ์ ๊ทน์ ์œผ๋กœ ๊ตฌํ˜„๋˜๊ณ  ์žˆ๋Š” ๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ์ธ DPI ์‹œ์Šคํ…œ๊ณผ ๋งŽ์€ ๊ณตํ†ต์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์ž‘์—…์˜ ํ•ต์‹ฌ์€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ์ธํ„ฐ๋„ท ํŠธ๋ž˜ํ”ฝ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๋ธ”๋ž™/ํ™”์ดํŠธ ๋ชฉ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ๊ธˆ์ง€ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘˜ ๋‹ค ์ž‘์—…์˜ ๊ธฐ๋ณธ์—์„œ ์œ ์‚ฌํ•œ ์›์น™์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณตํ†ต์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

DPI์™€ ๊ธฐ์—… ์‹œ์Šคํ…œ์„ ๋ชจ๋‘ ํšจ๊ณผ์ ์œผ๋กœ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋Š” ๋„๋ฉ”์ธ ํ”„๋ก ํŒ… ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ณธ์งˆ์€ ์šฐ๋ฆฌ๊ฐ€ ์ฐจ๋‹จ๋œ ๋ฆฌ์†Œ์Šค๋กœ ์ด๋™ํ•˜์—ฌ ํ‰ํŒ์ด ์ข‹์€ ๋‹ค๋ฅธ ๊ณต๊ฐœ ๋„๋ฉ”์ธ ๋’ค์— ์ˆจ์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ถ„๋ช…ํžˆ google.com๊ณผ ๊ฐ™์€ ์–ด๋–ค ์‹œ์Šคํ…œ์—์„œ๋„ ์ฐจ๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์ˆ ์— ๊ด€ํ•ด ์ด๋ฏธ ๋งŽ์€ ๊ธฐ์‚ฌ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋งŽ์€ ์‚ฌ๋ก€๊ฐ€ ์ œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธ๊ธฐ ์žˆ๊ณ  ์ตœ๊ทผ ๋…ผ์˜๋œ DNS-over-HTTPS ๋ฐ ์•”ํ˜ธํ™”๋œ SNI ๊ธฐ์ˆ ๊ณผ TLS 1.3 ํ”„๋กœํ† ์ฝœ์˜ ์ƒˆ ๋ฒ„์ „์„ ํ†ตํ•ด ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์˜ ์ดํ•ด

๋จผ์ €, ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์ด๋ฉฐ ์™œ ์ด ๋ชจ๋“  ๊ฒƒ์ด ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ฝ๊ฐ„์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ •์˜ํ•ฉ์‹œ๋‹ค. ์šฐ๋ฆฌ๋Š” eSNI ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ์œผ๋ฉฐ ๊ทธ ์ž‘๋™์— ๋Œ€ํ•ด์„œ๋Š” ๋” ์ž์„ธํžˆ ๋…ผ์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. eSNI(์•”ํ˜ธํ™”๋œ ์„œ๋ฒ„ ์ด๋ฆ„ ํ‘œ์‹œ) ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ TLS 1.3 ํ”„๋กœํ† ์ฝœ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” SNI์˜ ๋ณด์•ˆ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ๋ฌด์—‡๋ณด๋‹ค๋„ ์š”์ฒญ์ด ์ „์†ก๋˜๋Š” ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ eSNI ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  DPI ์†”๋ฃจ์…˜์— ์˜ํ•ด ์ฐจ๋‹จ๋œ ์ธํ„ฐ๋„ท ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด ์œ ๋ช…ํ•œ ํ† ๋ ŒํŠธ ์ถ”์ ๊ธฐ rutracker.nl์„ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค). ํ† ๋ ŒํŠธ ์ถ”์ ๊ธฐ์˜ ์›น์‚ฌ์ดํŠธ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ฐจ๋‹จ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณต๊ธ‰์ž์˜ ํ‘œ์ค€ ์Šคํ…์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

RKN ์›น์‚ฌ์ดํŠธ์—์„œ ์ด ๋„๋ฉ”์ธ์€ ์‹ค์ œ๋กœ ์ค‘์ง€ ๋ชฉ๋ก์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

whois๋ฅผ ์ฟผ๋ฆฌํ•˜๋ฉด ๋„๋ฉ”์ธ ์ž์ฒด๊ฐ€ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด Cloudflare ๋’ค์— "์ˆจ๊ฒจ์ ธ" ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

๊ทธ๋Ÿฌ๋‚˜ RKN์˜ "์ „๋ฌธ๊ฐ€"์™€๋Š” ๋‹ฌ๋ฆฌ Beeline์˜ ๊ธฐ์ˆ ์ ์œผ๋กœ ๋” ๋Šฅ์ˆ™ํ•œ ์ง์›(๋˜๋Š” ์œ ๋ช…ํ•œ ๊ทœ์ œ ๊ธฐ๊ด€์˜ ์“ฐ๋ผ๋ฆฐ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๋ฐฐ์šด)์€ IP ์ฃผ์†Œ๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์–ด๋ฆฌ์„๊ฒŒ ๊ธˆ์ง€ํ•˜์ง€ ์•Š๊ณ  ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ค‘์ง€ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ IP ์ฃผ์†Œ ๋’ค์— ์ˆจ๊ฒจ์ง„ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์ด ๋ฌด์—‡์ธ์ง€ ์‚ดํŽด๋ณด๊ณ  ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์•ก์„ธ์Šค๊ฐ€ ์ฐจ๋‹จ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋‚˜์š”? ๋ชจ๋“  ํ†ต์‹ ์ด https ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ณ  ์•„์ง Beeline์˜ https ์ธ์ฆ์„œ ๋Œ€์ฒด๋ฅผ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ธ‰์ž์˜ DPI๋Š” ๋‚ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋Š ๋„๋ฉ”์ธ์— ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ ์‚ฌ๋žŒ์€ ํˆฌ์‹œ๋ ฅ์ด ์žˆ๋Š” ๊ฑธ๊นŒ, ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋ฏธํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ?

Wireshark๋ฅผ ํ†ตํ•œ ํŠธ๋ž˜ํ”ฝ์„ ์‚ดํŽด๋ด„์œผ๋กœ์จ ์ด ์งˆ๋ฌธ์— ๋‹ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์Šคํฌ๋ฆฐ์ƒท์€ ๋จผ์ € ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DNS๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์–ป์€ ๋‹ค์Œ ๋Œ€์ƒ ์„œ๋ฒ„์™€ ํ‘œ์ค€ TCP ํ•ธ๋“œ์…ฐ์ดํฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋‹ค์Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์™€ SSL ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์›๋ณธ ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ํฌํ•จ๋œ SSL ํด๋ผ์ด์–ธํŠธ Hello ํŒจํ‚ท์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ์—ฐ๊ฒฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ผ์šฐํŒ…ํ•˜๊ธฐ ์œ„ํ•ด cloudflare ํ”„๋ŸฐํŠธ์—”๋“œ ์„œ๋ฒ„์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ณต๊ธ‰์ž DPI๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ์žก์•„์„œ ์—ฐ๊ฒฐ์„ ๋Š์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๊ณต๊ธ‰์ž๋กœ๋ถ€ํ„ฐ ์Šคํ…์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉฐ ์‚ฌ์ดํŠธ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ‘œ์ค€ ๋ธŒ๋ผ์šฐ์ € ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์ด์ œ ์ง€์นจ์— ์ž‘์„ฑ๋œ ๋Œ€๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ eSNI ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์„ฑํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์–ด ํญ์Šค :
์ด๋ฅผ ์œ„ํ•ด Firefox ๊ตฌ์„ฑ ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ์ •๋ณด : ์„ค์ • ๋‹ค์Œ ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

network.trr.mode = 2;
network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled = true

๊ทธ๋Ÿฐ ๋‹ค์Œ cloudflare ์›น์‚ฌ์ดํŠธ์—์„œ ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งํฌ ํ† ๋ ŒํŠธ ์ถ”์ ๊ธฐ๋กœ ๋‹ค์‹œ ํŠธ๋ฆญ์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์งœ์ž”. ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ํŠธ๋ž˜์ปค๋Š” VPN์ด๋‚˜ โ€‹โ€‹ํ”„๋ก์‹œ ์„œ๋ฒ„ ์—†์ด ์—ด๋ ธ์Šต๋‹ˆ๋‹ค. ์ด์ œ Wireshark์˜ ํŠธ๋ž˜ํ”ฝ ๋คํ”„๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์ด๋ฒˆ์—๋Š” SSL ํด๋ผ์ด์–ธํŠธ hello ํŒจํ‚ค์ง€์— ๋Œ€์ƒ ๋„๋ฉ”์ธ์ด ๋ช…์‹œ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ ๋Œ€์‹  ํŒจํ‚ค์ง€์— ์ƒˆ ํ•„๋“œ(crypted_server_name)๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— rutracker.nl ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ cloudflare ํ”„๋ŸฐํŠธ์—”๋“œ ์„œ๋ฒ„๋งŒ ์ด๋ฅผ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต๊ธ‰์ž DPI๋Š” ์†์„ ์”ป๊ณ  ๊ทธ๋Ÿฌํ•œ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”์—๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ์ˆ ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ข€ ๋” ๊ตฌ์ฒด์ ์ด๊ณ  ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์— ์ ์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋™์ผํ•œ ์ปฌ์— eSNI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TLS 1.3๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜๊ณ  ๋™์‹œ์— eSNI ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ… ์ž์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

eSNI๋ฅผ ์‚ฌ์šฉํ•œ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

Curl์€ https ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ‘œ์ค€ openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋จผ์ € ๊ฑฐ๊ธฐ์—์„œ eSNI ์ง€์›์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. openssl ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—๋Š” ์•„์ง eSNI ์ง€์›์ด ์—†์œผ๋ฏ€๋กœ ํŠน์ˆ˜ openssl ๋ธŒ๋žœ์น˜๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜๊ณ  ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GitHub์—์„œ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ํ‰์†Œ๋Œ€๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

$ git clone https://github.com/sftcd/openssl
$ cd openssl
$ ./config

$ make
$ cd esnistuff
$ make

๋‹ค์Œ์œผ๋กœ, ์ปฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ์ปดํŒŒ์ผ๋œ openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

$ cd $HOME/code
$ git clone https://github.com/niallor/curl.git curl-esni
$ cd curl-esni

$ export LD_LIBRARY_PATH=/opt/openssl
$ ./buildconf
$ LDFLAGS="-L/opt/openssl" ./configure --with-ssl=/opt/openssl --enable-esni --enable-debug

์—ฌ๊ธฐ์„œ๋Š” openssl์ด ์žˆ๋Š” ๋ชจ๋“  ๋””๋ ‰ํ„ฐ๋ฆฌ(์ด ๊ฒฝ์šฐ /opt/openssl/)๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •ํ•˜๊ณ  ๊ตฌ์„ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ค๋ฅ˜ ์—†์ด ์ง„ํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋‹ค์Œ ์ค„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ : esni ESNI๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์ง€๋งŒ ์‹คํ—˜์ ์ด๋ผ๊ณ  ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์„ธ์š”!

$ make

ํŒจํ‚ค์ง€๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ•œ ํ›„ openssl์˜ ํŠน์ˆ˜ bash ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํŽธ์˜์ƒ ์ปฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

cp /opt/openssl/esnistuff/curl-esni 

Wireshark์— DNS ๋ฐ TLS ํŒจํ‚ท์„ ๋™์‹œ์— ๊ธฐ๋กํ•˜๋Š” ๋™์‹œ์— cloudflare ์„œ๋ฒ„์— ํ…Œ์ŠคํŠธ https ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

$ ESNI_COVER="www.hello-rkn.ru" ./curl-esni https://cloudflare.com/

์„œ๋ฒ„ ์‘๋‹ต์—์„œ๋Š” openssl ๋ฐ cur์˜ ๋งŽ์€ ๋””๋ฒ„๊น… ์ •๋ณด ์™ธ์—๋„ cloudflare๋กœ๋ถ€ํ„ฐ ์ฝ”๋“œ 301์ด ํฌํ•จ๋œ HTTP ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 13:12:55 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: max-age=3600
< Expires: Sun, 03 Nov 2019 14:12:55 GMT
< Location: https://www.cloudflare.com/

์ด๋Š” ์š”์ฒญ์ด ๋Œ€์ƒ ์„œ๋ฒ„์— ์„ฑ๊ณต์ ์œผ๋กœ ์ „๋‹ฌ๋˜์–ด ๋“ฃ๊ณ  ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ด์ œ Wireshark์˜ ํŠธ๋ž˜ํ”ฝ ๋คํ”„๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ณต๊ธ‰์ž DPI๊ฐ€ ํ™•์ธํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์ปฌ์€ ๋จผ์ € cloudflare ์„œ๋ฒ„์˜ ๊ณต๊ฐœ eSNI ํ‚ค(_esni.cloudflare.com(ํŒจํ‚ค์ง€ ๋ฒˆํ˜ธ 13)์— ๋Œ€ํ•œ TXT DNS ์š”์ฒญ)๋ฅผ ์œ„ํ•ด DNS ์„œ๋ฒ„๋กœ ์ „ํ™˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ์€ SNI ํ•„๋“œ๊ฐ€ ์ด์ „ ๋‹จ๊ณ„์—์„œ ์–ป์€ ๊ณต๊ฐœ ํ‚ค(ํŒจํ‚ท #1.3)๋กœ ์•”ํ˜ธํ™”๋œ cloudflare ์„œ๋ฒ„์— TLS 22 ์š”์ฒญ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ eSNI ํ•„๋“œ ์™ธ์—๋„ SSL-hello ํŒจํ‚ท์—๋Š” ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฐœ SNI๊ฐ€ ํฌํ•จ๋œ ํ•„๋“œ๋„ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ์—๋Š” - www.hello-rkn.ru).

์ด ๊ณต๊ฐœ SNI ํ•„๋“œ๋Š” cloudflare ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋„ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๊ณต๊ธ‰์ž DPI์˜ ๋งˆ์Šคํฌ๋กœ๋งŒ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. cloudflare ์„œ๋ฒ„๋Š” SSL-hello ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•˜๊ณ  eSNI๋ฅผ ํ•ด๋…ํ•œ ํ›„ ๊ฑฐ๊ธฐ์—์„œ ์›๋ž˜ SNI๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์•„๋ฌด ์ผ๋„ ์—†์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค(eSNI๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ณ„ํšํ•œ ๋Œ€๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค).

์ด ๊ฒฝ์šฐ DPI ๊ด€์ ์—์„œ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ _esni.cloudflare.com์— ๋Œ€ํ•œ ๊ธฐ๋ณธ DNS ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋‚ด๋ถ€์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋งŒ DNS ์š”์ฒญ์„ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์นจ๋‚ด DPI ์•„๋ž˜์—์„œ ๊น”๊ฐœ๋ฅผ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ DNS-over-HTTPS ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์„ค๋ช… - DOH๋Š” HTTPS๋ฅผ ํ†ตํ•ด DNS ์š”์ฒญ์„ ๋ณด๋‚ด ์ค‘๊ฐ„์ž ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

์š”์ฒญ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” DNS๊ฐ€ ์•„๋‹Œ https ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๊ณต๊ฐœ eSNI ํ‚ค๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ESNI_COVER="www.hello-rkn.ru" DOH_URL=https://mozilla.cloudflare-dns.com/dns-query ./curl-esni https://cloudflare.com/

์š”์ฒญ ํŠธ๋ž˜ํ”ฝ ๋คํ”„๋Š” ์•„๋ž˜ ์Šคํฌ๋ฆฐ์ƒท์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์ปฌ์€ ๋จผ์ € DoH ํ”„๋กœํ† ์ฝœ(์„œ๋ฒ„ 104.16.249.249์— ๋Œ€ํ•œ https ์—ฐ๊ฒฐ)์„ ํ†ตํ•ด mozilla.cloudflare-dns.com ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜์—ฌ SNI ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ๊ณต๊ฐœ ํ‚ค ๊ฐ’์„ ์–ป์€ ๋‹ค์Œ ๋Œ€์ƒ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„, ๋„๋ฉ”์ธ ๋’ค์— ์ˆจ์–ด www.hello-rkn.ru.

์œ„์˜ DoH ํ™•์ธ ํ”„๋กœ๊ทธ๋žจ mozilla.cloudflare-dns.com ์™ธ์—๋„ ์œ ๋ช…ํ•œ ์‚ฌ์•…ํ•œ ๊ธฐ์—…๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ธ๊ธฐ ์žˆ๋Š” DoH ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ESNI_COVER="www.kremlin.ru" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๋‹ต์„ ์–ป์Šต๋‹ˆ๋‹ค:

< HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 14:10:22 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=da0144d982437e77b0b37af7d00438b1a1572790222; expires=Mon, 02-Nov-20 14:10:22 GMT; path=/; domain=.rutracker.nl; HttpOnly; Secure
< Location: https://rutracker.nl/forum/index.php
< CF-Cache-Status: DYNAMIC
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 52feee696f42d891-CPH

TLS 1.3 ๊ธฐ๋ฐ˜ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ…

์ด ๊ฒฝ์šฐ DoH ํ™•์ธ์ž dns.google์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ๋‹จ๋œ rutracker.nl ์„œ๋ฒ„๋กœ ์ „ํ™˜ํ•˜๊ณ (์—ฌ๊ธฐ์—๋Š” ์˜คํƒ€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ œ ์œ ๋ช…ํ•œ ํšŒ์‚ฌ๋Š” ์ž์ฒด์ ์ธ XNUMX์ฐจ ๋„๋ฉ”์ธ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค) ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์œผ๋กœ ์šฐ๋ฆฌ ์ž์‹ ์„ ๋ฎ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  DPI๊ฐ€ ์ฃฝ์Œ์˜ ๊ณ ํ†ต ์†์—์„œ ์ฐจ๋‹จ๋˜๋Š” ๊ฒƒ์€ ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ›์€ ์‘๋‹ต์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ท€ํ•˜๋Š” ๋‹น์‚ฌ์˜ ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ธ‰์ž์˜ DPI๊ฐ€ ํ‘œ์ง€๋กœ ์ „์†กํ•˜๋Š” ๊ณต๊ฐœ SNI์— ์‘๋‹ตํ•˜๋Š”์ง€ ์ถ”๊ฐ€๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ธˆ์ง€๋œ ๋ฆฌ์†Œ์Šค(์˜ˆ: ๋˜ ๋‹ค๋ฅธ "์ข‹์€" ํ† ๋ ŒํŠธ ์ถ”์ ๊ธฐ)๋ฅผ ๊ฐ€์žฅํ•˜์—ฌ rutracker.nl์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ESNI_COVER="rutor.info" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ์šฐ๋ฆฌ์˜ ์š”์ฒญ์€ DPI ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์งง์€ ๊ฒฐ๋ก 

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” openssl๊ณผcurl์„ ์‚ฌ์šฉํ•˜์—ฌ eSNI์˜ ๊ธฐ๋Šฅ์„ ์‹œ์—ฐํ•˜๊ณ  eSNI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„๋ฉ”์ธ ํ”„๋ก ํŒ… ์ž‘๋™์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ, openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์„ "๊ฐ€์žฅ" ์ž‘๋™ํ•˜๋Š” ์ฆ๊ฒจ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€