안녕 후붕이들. 점심 맛있게 먹었어?
요즘 간간이 사이트 검열 이야기가 들리길래 후붕이들도 지금 상황이 어떻게 돌아가는지 이해하기 쉽도록 핫후챈에 비유해서 설명을 해주려고 해.
1. 인터넷 통신과 HTTP/S
인터넷 통신은 후붕이들이 컴퓨터로 요청을 보내면 ISP(Internet Service Provider, 통신사들)가 요청을 목적지로 전달해줘. 예를 들어 후붕이가 도로롱 피규어를 사는 요청을 보내면 ISP는 우체국처럼 해당 요청을 확인하고 그 요청을 알리 피규어 판매자에게 전달하는 식이야.
HTTP는 HyperText Transfer Protocol의 약자로 클라이언트(브라우저)와 서버 간의 통신 규약이야. 후붕이가 판매자한테 구매 요청을 보내는데 '도로롱 피규어 주세요'라고만 보내면 판매자 입장에서는 무슨 의미인지 모를거 아니야? 그래서 판매자가 이해할 수 있게 '저는 핫후챈에 서식하는 후붕이입니다. 핫후챈 게시판으로 도로롱 피규어 1개 보내주세요'과 같이 일종에 요청 서식이야.
근데 HTTP의 단점은 요청 자체가 평문이라 누가 그 요청을 볼 수 있는게 문제였어. 그래서 해커가 후붕이의 요청을 임의로 조작해서 도로롱을 덴덴이로 바꿔버리거나 정보를 저장했다가 '저 후붕인데 이사를 해서 주소(IP)가 바뀌었어요. 지금 이 주소로 도로롱 피규어 999개 보내주세요.' 할 수 있었지.
그래서 이러한 사태를 막기 위해 업그레이드 된 통신 규약이 HTTPS야. HTTPS는 요청 메시지를 암호화해서 보내기 때문에 중간에 해커가 요청을 가로채도 서버에 있는 비밀키가 없으면 요청 메시지를 확인할 수 없어.
2. DNS
DNS(Domain Name Server)는 주소록이야. 우리가 흔히 말하는 IP 주소는 대개 IPv4라 해서 0~255 값이 4개가 조합된 형태(0.0.0.0)로 구성되는데, 우리는 숫자보다 문자가 익숙하잖아? 그래서 브라우저는 도메인(google.com, naver.com)을 받고 이 도메인에 해당하는 IP 주소를 찾아야 하는데 그 때 쓰는 주소록이 DNS야. 아마 따로 설정하지 않은 후붕이들은 통신사 DNS를 대개 쓸거고, 이쪽에 관심이 있는 후붕이라면 구글 DNS(8.8.8.8)이나 클라우드 플레어 DNS(1.1.1.1)을 쓰고 있을거라고 생각해.
3. 3-Hand Shake와 SNI
앞에서 HTTPS를 쓰는 이유가 요청 메시지 암호화를 위해서라고 했지? 근데 HTTPS는 통신 규약이기 때문에 클라이언트, 서버 양측 모두가 동일한 서식으로 통신을 해야한단 말이지? 그래서 클라이언트가 서버에게 '나 HTTPS로 요청 메시지를 암호화하는 통신을 하고 싶어'라고 서버에 보내고 서버는 'Ok. 그럼 이제부터 우린 암호화된 메시지로 통신할거야'라고 확인하는 과정이 필요해. 그걸 3-Hand Shake라고 불러.
예를 들어 후붕이가 판매자한테 '저 도로롱 대신 덴덴이 피규어 1개 사고 싶은데 이거 몰래 사야해요. 그러니 비밀친구 하지 않을래요?'라고 보내면 판매자가 '네. 우리 비밀친구합시다. 암호로 대화해요.'라고 응답을 보내는거지. 이렇게 약속을 했기 때문에 후붕이는 다음과 같이 메시지를 보내.
'Rememeber, No Doro. Only DenDen 1'.
요청 메시지는 암호화 됐기 때문에 우체국(ISP)이나 해커는 요청 메시지를 봐도 무슨 의미인지 몰라. 해당 메시지가 판매자에게 도착한 뒤에 암호표를 대조해서 다음과 같이 해석하는거지.
'도로롱 말고 덴덴이 피규어 1개 보내주세요.'
근데 요청 메시지는 암호화해도 3-Hand Shake를 하기 위해 사전에 요청을 보내잖아? 그때 요청을 받는 서버의 도메인 정보가 들어가게 되는데 이걸 SNI(Server Name Indication)이라고 해. 이 때 보내지는 정보들은 평문으로 보내지는데 목적지에 도달하기 위해서는 우체국에서 목적지가 어디인줄 알아야하잖아? 여기서 우리가 옛날부터 자주 보던 warning 사이트로 보내는 기준이 바로 SNI야.
ISP에서 웹 사이트 블랙리스트를 DNS에 저장했다가 이 SNI를 보고 '어? 얘네는 블랙리스트인데? 이 요청은 warning 사이트로 가도록 바꿔버려'가 되는거지.
4. ESNI와 클라우드 플레어
그럼 똑똑한 후붕이는 벌써 눈치 챘을거야. '그럼 SNI를 숨기는 방법을 쓰면 되지 않을까?' 그래서 나온 기술이 ESNI야. ESNI는 SNI를 암호화해서 처리하는 기술인데, 아까 말했다시피 SNI를 암호화하면 목적지를 못찾으니까 암호화를 할 수 없다고 했잖아? 그래서 중간역을 두게 되는데 이 역할을 하는게 클라우드 플레어야. 요청을 목적지인 서버로 보내는게 아니고 클라우드 플레어를 한번 경유해서 보내는거지. 그럼 ISP가 보는 입장에서는 요청 자체는 클라우드 플레어에게 보낸걸로 보이거든.
예를 들어 나라에서 덴덴이 피규어를 금지했는데 후붕이가 덴덴이 피규어가 가지고 싶어. 만약에 직접 판매자에게 요청을 보냈다면 우체국에서 '뭘 사려는지는 모르겠는데 목적지가 알리 피규어 판매자네? 이거 수상해!'라고 판단할거야. 근데 배송대행지(클라우드 플레어)를 두면 얘기가 달라져.
먼저 후붕이가 배송대행지에게 '핫후챈 후붕이에게 덴덴이 피규어 1개 보내주세요'라고 요청을 보내. 그럼 우체국은 메시지는 볼 수 없고(HTTPS) 목적지도 배송대행지(클라우드 플레어)이기 떄문에 그냥 통과시켜줘. 그리고 요청 메시지가 배송대행지에서 판매자에게 가고 덴덴이 피규어를 보내는거지. 덴덴이 피규어 배송도 요청의 역과정으로 이루어지기 때문에 우체국에서는 확인할 방법이 없어.
5. 클라우드 플레어 검열
클라우드 플레어에서 기본적으로 엄청난 보안을 제공해주기 때문에 많은 서비스들이 클라우드 플레어를 이용하고 있는 추세야. 그럼 '클라우드 플레어 IP 주소를 막으면 해결되지 않을까?'라는 생각이 들 수 있을텐데, 앞에서 말했다시피 많은 서비스들이 클라우드 플레어를 이용하고 있어서 불법 사이트 외에도 많은 서비스들이 클라우드 플레어를 경유하기 때문에 벼룩 잡으려다가 초가 삼간 태우는 꼴이 되버리거든.
그래서 정부 입장에서 할 수 있는 최선의 선택지는 클라우드 플레어에게 직접 요청을 보내는거 뿐이었어. 그 요청이 올해 5월에 수락되서 클라우드 플레어를 경유하는 일부 사이트들에 대한 차단이 이루어진거야.
6. 최후의 보루. VPN
VPN은 많이 알려진 개념이니 추가적인 설명은 안할게. 클라우드 플레어도 기업이기 때문에 어디까지나 차단 요청에 대한 처리를 한국 IP에 한정했을거란 말이지. 그렇기 때문에 외국 IP를 경유하는 VPN에 대한 요청까진 막지는 않아. VPN 차단은 진짜 최후의 보루라서 정부에서도 쉽게 건드리진 않을거라고 생각해.

쓰다보니 내용이 좀 길어졌는데 후붕이들 이해하기 쉽게 최대한 풀어서 써봤어. 그럼 1시가 넘었으니 그럼 다시 일하러 갈게.
