์๊ฐ

Cisco, BlueCoat, FireEye์ ๊ฐ์ ์ ๋ช
์ ์กฐ์
์ฒด์ ์ต์ ๊ธฐ์
์ฝํ
์ธ ํํฐ๋ง ์์คํ
์ ๊ตญ๊ฐ ์ฐจ์์์ ํ๋ฐํ ๋์
๋๊ณ ์๋ ๋์ฑ ๊ฐ๋ ฅํ DPI ์์คํ
๊ณผ ๋ง์ ๊ณตํต์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ ์์คํ
์ ํต์ฌ ๊ธฐ๋ฅ์ ์ธํฐ๋ท ํธ๋ํฝ์ ์ก์์ ์ ์ฐจ๋จํ๊ณ , ๋ธ๋๋ฆฌ์คํธ/ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐ๋ท ์ฐ๊ฒฐ์ ์ฐจ๋จํ๋ ๊ฒ์
๋๋ค. ๋ ์์คํ
๋ชจ๋ ์๋ ์๋ฆฌ๊ฐ ์ ์ฌํ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ฐํํ๋ ๋ฐฉ๋ฒ ๋ํ ๋ง์ ๊ณตํต์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
DPI์ ๊ธฐ์ ์์คํ ์ ๋ชจ๋ ํจ๊ณผ์ ์ผ๋ก ์ฐํํ ์ ์๋ ๊ธฐ์ ์ค ํ๋๋ ๋๋ฉ์ธ ํ๋ก ํ (domain fronting) ๊ธฐ์ ์ ๋๋ค. ์ด ๊ธฐ์ ์ ํต์ฌ์ ํํ์ด ์ข์ ๋ค๋ฅธ ๊ณต๊ฐ ๋๋ฉ์ธ ๋ค์ ์จ์ด ์ฐจ๋จ๋ ๋ฆฌ์์ค๋ก ์ ๊ทผํ๋ ๊ฒ์ ๋๋ค. ์ด ๋๋ฉ์ธ์ ์ด๋ค ์์คํ ์์๋ ์ฐจ๋จ๋์ง ์์ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด google.com๊ณผ ๊ฐ์ ๋๋ฉ์ธ์ด ์์ต๋๋ค.
์ด ๊ธฐ์ ์ ๋ํ ๊ธฐ์ฌ๋ ์ด๋ฏธ ๊ฝค ๋ง์ด ์์ฑ๋์๊ณ , ๋ง์ ์ฌ๋ก๊ฐ ์ ์๋์์ต๋๋ค. ํ์ง๋ง ์ต๊ทผ ์ฃผ๋ชฉ๋ฐ๊ณ ๋
ผ์๋๋ DNS-over-HTTPS ๋ฐ ์ํธํ๋ SNI ๊ธฐ์ ๊ณผ ์๋ก์ด ๋ฒ์ ์ TLS 1.3 ํ๋กํ ์ฝ์ ํตํด ๋๋ฉ์ธ ํ๋ก ํ
์ ๋ ๋ค๋ฅธ ๋ฒ์ ์ ๊ณ ๋ คํ ์ ์๊ฒ ๋์์ต๋๋ค.
๊ธฐ์ ์ดํด
๋จผ์ , ๋ชจ๋๊ฐ ๋๊ฐ ๋๊ตฌ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ ์ด ๋ชจ๋ ๊ฒ์ด ํ์ํ์ง ์ดํดํ ์ ์๋๋ก ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค. ์์ eSNI ๋ฉ์ปค๋์ฆ์ ๋ํด ์ธ๊ธํ๋๋ฐ, ์ด ๋ฉ์ปค๋์ฆ์ ์๋ ๋ฐฉ์์ ๋์ค์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. eSNI(์ํธํ๋ ์๋ฒ ์ด๋ฆ ํ์) ๋ฉ์ปค๋์ฆ์ SNI์ ๋ณด์ ๋ฒ์ ์ผ๋ก, TLS 1.3 ํ๋กํ ์ฝ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ํต์ฌ์ ์์ฒญ์ด ์ ์ก๋๋ ๋๋ฉ์ธ ์ ๋ณด๋ฅผ ์ํธํํ๋ ๊ฒ์ ๋๋ค.
์ด์ eSNI ๋ฉ์ปค๋์ฆ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ต์ DPI ์๋ฃจ์ (์: ์ ๋ช ํ ํ ๋ ํธ ์ถ์ ํ๋ก๊ทธ๋จ์ธ rutracker.nl)์ ์ํด ์ฐจ๋จ๋ ์ธํฐ๋ท ๋ฆฌ์์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํ ๋ ํธ ์ถ์ ํ๋ก๊ทธ๋จ ์น์ฌ์ดํธ์ ์ ์ํ๋ ค๊ณ ํ๋ฉด ํด๋น ๋ฆฌ์์ค๊ฐ ์ฐจ๋จ๋์๋ค๋ ํ์ค ์ ๊ณต์ ์ฒด์ ์คํ ์ด ํ์๋ฉ๋๋ค.

RKN ์น์ฌ์ดํธ์์๋ ์ด ๋๋ฉ์ธ์ด ์ค์ ๋ก ์ค์ง ๋ชฉ๋ก์ ๋ฑ์ฌ๋์ด ์์ต๋๋ค.

whois๋ฅผ ์ฟผ๋ฆฌํ๋ฉด ๋๋ฉ์ธ ์์ฒด๊ฐ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด Cloudflare ๋ค์ "์จ๊ฒจ์ ธ" ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.

ํ์ง๋ง RKN์ "์ ๋ฌธ๊ฐ"๋ค๊ณผ๋ ๋ฌ๋ฆฌ, ๊ธฐ์ ์ ์ผ๋ก ๋ ๋ฅ์ํ Beeline์ ์ง์๋ค(ํน์ ์ ๋ช ํ ๊ท์ ๊ธฐ๊ด์ ์ฐ๋ผ๋ฆฐ ๊ฒฝํ์ ํตํด ๊ตํ์ ์ป์ ์ง์๋ค)์ ๋จ์ํ IP ์ฃผ์๋ก ์ฌ์ดํธ๋ฅผ ์ฐจ๋จํ๋ ๋ฐ ๊ทธ์น์ง ์๊ณ , ํด๋น ์ฌ์ดํธ๋ฅผ ์ฐจ๋จ ๋ชฉ๋ก์ ์ถ๊ฐํ์ต๋๋ค. ๋๋ฉ์ธ ์ด๋ฆ์ด ๋๋ฉ์ธ ๋ค์ ์จ๊ฒจ์ง ๋ค๋ฅธ ๋๋ฉ์ธ๋ค์ ์ดํด๋ณด๋ฉด ์ด๋ฅผ ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค. IP ์ฃผ์๊ทธ์ค ํ ๊ณณ์ ๋ฐฉ๋ฌธํ์ฌ ์ ์์ด ์ฐจ๋จ๋์ง ์์๋์ง ํ์ธํ์ญ์์ค.

์ด๋ป๊ฒ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๋ ๊ฑธ๊น์? ๋ชจ๋ ํต์ ์ด https ํ๋กํ ์ฝ์ ํตํด ์ด๋ฃจ์ด์ง๊ณ Beeline์ https ์ธ์ฆ์๊ฐ ์์ง ๋์ฒด๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋๋ฐ, ์ ๊ณต์ ์ฒด์ DPI๋ ์ด๋ป๊ฒ ๋ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ค ๋๋ฉ์ธ์ ์ ์ํ๋์ง ์ ์ ์์๊น์? ๊ทธ๋ ํฌ์๋ ฅ์ด ์๋ ๊ฑธ๊น์, ์๋๋ฉด ์ ๋ฅผ ๊ฐ์ํ๊ณ ์๋ ๊ฑธ๊น์?
Wireshark๋ฅผ ํตํด ํธ๋ํฝ์ ์ดํด๋ณด๋ฉด์ ์ด ์ง๋ฌธ์ ๋ตํด ๋ณด๊ฒ ์ต๋๋ค.

์คํฌ๋ฆฐ์ท์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋จผ์ DNS๋ฅผ ํตํด ์๋ฒ์ IP ์ฃผ์๋ฅผ ์ป์ ๋ค์, ๋์ ์๋ฒ์ ํ์ค TCP ํธ๋์ ฐ์ดํฌ๋ฅผ ์ํํ๊ณ , ๋ง์ง๋ง์ผ๋ก ์๋ฒ์์ SSL ์ฐ๊ฒฐ์ ์๋ํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค. ์ด ๊ณผ์ ์์ ๋ธ๋ผ์ฐ์ ๋ ํจํท์ ์ ์กํฉ๋๋ค. SSL ํด๋ผ์ด์ธํธ์ "Hello" ๋ฉ์์ง์๋ ์์ค ๋๋ฉ์ธ ์ด๋ฆ์ด ํ๋ฌธ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ์ด ํ๋๋ Cloudflare ํ๋ฐํธ์๋ ์๋ฒ์์ ์ฐ๊ฒฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ผ์ฐํ ํ๋ ๋ฐ ํ์ํฉ๋๋ค. ๋ฐ๋ก ์ด ๋ถ๋ถ์์ ISP์ DPI(์ฌํ ํจํท ๊ฒ์ฌ)๊ฐ ์ ํฌ ์ฐ๊ฒฐ์ ์ฐจ๋จํฉ๋๋ค. ํ์ง๋ง ์ ํฌ๋ ISP๋ก๋ถํฐ ์๋ฌด๋ฐ ์คํ ๋ฉ์์ง๋ ๋ฐ์ง ๋ชปํ๊ณ , ๋ง์น ์ฌ์ดํธ๊ฐ ๋ค์ด๋์๊ฑฐ๋ ์๋ํ์ง ์๋ ๊ฒ์ฒ๋ผ ์ผ๋ฐ์ ์ธ ๋ธ๋ผ์ฐ์ ์ค๋ฅ ๋ฉ์์ง๋ง ํ์๋ฉ๋๋ค.

์ด์ ๋ธ๋ผ์ฐ์ ์์ eSNI ๋ฉ์ปค๋์ฆ์ ํ์ฑํํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ด์ด ํญ์ค :
์ด๋ฅผ ์ํด Firefox ๊ตฌ์ฑ ํ์ด์ง๋ฅผ ์ฝ๋๋ค. ์ ๋ณด : ์ค์ ๋ค์ ์ค์ ์ ํ์ฑํํ์ธ์.
network.trr.mode = 2;
network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled = true
๊ทธ ํ, ํด๋ผ์ฐ๋ํ๋ ์ด ์น์ฌ์ดํธ์ ์ค์ ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ๋งํฌ ์ด์ ํ ๋ ํธ ์ถ์ ๊ธฐ๋ฅผ ์ด์ฉํด ๋ค์ ํ๋ฒ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.

์ง์! VPN์ด๋ โโํ๋ก์ ์๋ฒ ์์ด๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ถ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋์์ต๋๋ค. ์ด์ ์์ด์ด์คํฌ์์ ํธ๋ํฝ ๋คํ๋ฅผ ํ์ธํด ๋ณผ๊น์? ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง.

์ด๋ฒ์๋ SSL ํด๋ผ์ด์ธํธ Hello ํจํท์ ๋์ ๋๋ฉ์ธ์ด ๋ช ์์ ์ผ๋ก ํฌํจ๋์ด ์์ง ์๊ณ , ๋์ ํจํท์ ์๋ก์ด ํ๋์ธ encrypted_server_name์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ํ๋์ rutracker.nl ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, Cloudflare ํ๋ฐํธ์๋ ์๋ฒ๋ง ์ด ํ๋๋ฅผ ๋ณตํธํํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๋ค๋ฉด, ์ ๊ณต์ ์ฒด DPI๋ ์ด๋ฌํ ํธ๋ํฝ์ ํ์ฉํ ์๋ฐ์ ์์ต๋๋ค. ์ํธํ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์์ ์ด ๊ธฐ์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด์์ต๋๋ค. ์ด์ ์ด ๊ธฐ์ ์ ๋ ๊ตฌ์ฒด์ ์ด๊ณ ํฅ๋ฏธ๋ก์ด ๋ถ์ผ์ ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ , ๋์ผํ curl์ ์ฌ์ฉํ์ฌ TLS 1.3์์ eSNI๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ณ , ๋์์ eSNI ๊ธฐ๋ฐ ๋๋ฉ์ธ ํ๋ก ํ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
eSNI๋ฅผ ์ฌ์ฉํ ๋๋ฉ์ธ ํ๋ฐํ
curl์ https๋ฅผ ํตํด ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์ค openssl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ๋จผ์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ eSNI ์ง์์ ์ ๊ณตํด์ผ ํฉ๋๋ค. openssl ๋ง์คํฐ ๋ธ๋์น์๋ ์์ง eSNI ์ง์์ด ์์ผ๋ฏ๋ก, ๋ณ๋์ openssl ๋ธ๋์น๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ปดํ์ผํ๊ณ ์ค์นํด์ผ ํฉ๋๋ค.
GitHub์์ ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ณ ํ์์ฒ๋ผ ์ปดํ์ผํฉ๋๋ค.
$ git clone https://github.com/sftcd/openssl
$ cd openssl
$ ./config
$ make
$ cd esnistuff
$ make
๋ค์์ผ๋ก, curl์ ์ฌ์ฉํ์ฌ ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ณ ๋ด์ฅ๋ 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 ํ์ผ์ ์ฌ์ฉํ์ฌ curl์ ์ค์ ํ๊ณ ์คํํฉ๋๋ค. ํธ์๋ฅผ ์ํด ์ด ํ์ผ์ curl ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํด ๋ณด๊ฒ ์ต๋๋ค.
cp /opt/openssl/esnistuff/curl-esni ๊ทธ๋ฆฌ๊ณ Cloudflare ์๋ฒ์ ๋ํ ํ ์คํธ https ์์ฒญ์ ์ํํ๊ณ Wireshark์์ DNS ๋ฐ TLS ํจํท์ ๋์์ ๊ธฐ๋กํฉ๋๋ค.
$ ESNI_COVER="www.hello-rkn.ru" ./curl-esni https://cloudflare.com/์๋ฒ ์๋ต์๋ openssl๊ณผ curl์์ ์จ ๋ง์ ๋๋ฒ๊น ์ ๋ณด์ ๋๋ถ์ด 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๊ฐ ํ์ธํ ๋ด์ฉ์ ๋๋ค.

curl์ด ๋จผ์ Cloudflare ์๋ฒ์ ๊ณต๊ฐ eSNI ํค๋ฅผ ์ป๊ธฐ ์ํด DNS ์๋ฒ์ ์ ์ํ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. _esni.cloudflare.com์ผ๋ก ์ ์ก๋ TXT DNS ์์ฒญ(ํจํท #13)์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ openssl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ SNI ํ๋๊ฐ ์ด์ ๋จ๊ณ์์ ์ป์ ๊ณต๊ฐ ํค(ํจํท #1.3)๋ก ์ํธํ๋ TLS 22 ์์ฒญ์ Cloudflare ์๋ฒ๋ก ์ ์กํ์ต๋๋ค. ๊ทธ๋ฌ๋ 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 ์์ฒญ์ ์ ์กํ์ฌ "์ค๊ฐ์ ๊ณต๊ฒฉ(man in the middle attack)"์ผ๋ก๋ถํฐ ์์ ์ ๋ณดํธํ ์ ์๋ ํ๋กํ ์ฝ์ ๋๋ค.
์์ฒญ์ ๋ค์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ด๋ฒ์๋ DNS๊ฐ ์๋ https ํ๋กํ ์ฝ์ ํตํด ๊ณต๊ฐ eSNI ํค๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
ESNI_COVER="www.hello-rkn.ru" DOH_URL=https://mozilla.cloudflare-dns.com/dns-query ./curl-esni https://cloudflare.com/์์ฒญ ํธ๋ํฝ ๋คํ๋ ์๋ ์คํฌ๋ฆฐ์ท์ ๋์ ์์ต๋๋ค.

curl์ด ๋จผ์ 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

์ด ๊ฒฝ์ฐ, DoH ๋ฆฌ์กธ๋ฒ์ธ dns.google(์คํ๊ฐ ์๋๋๋ค. ์ด ์ ๋ช ๊ธฐ์ ์ ์์ฒด ์ต์์ ๋๋ฉ์ธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค)์ ์ฌ์ฉํ์ฌ ์ฐจ๋จ๋ rutracker.nl ์๋ฒ์ ์ ์ํ๊ณ , ๋ชจ๋ 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
