현재 https 사이트들에 대한 변조가 가능한 것은 https의 암호화가 무력화 된것이 아니라,
https 사이트에 접속하기 위해 도메인을 도메인 서버에 쿼리할 때, 예를 들어 clien.net에 접속할 때
도메인을 IP로 변환하기 위해 도메인 서버에 쿼리(도메인->ip)를 할 때 사용자가 입력한 도메인이 도메인 서버까지 평문으로 전송되기 때문입니다.
즉, https로 연결 될때 클라이언트-서버간 데이터는 암호화되어 들여다 볼 수 없지만, 해당 사이트의 도메인을
쿼리할 때는 암호화 되어 있지 않기 때문에 클라이언트가 무슨 도메인을 쿼리하는지 또는 쿼리를 가로채서 다른 도메인으로 변조를 할 수 있습니다. 따라서 특정 사이트에서 어떤 데이터가 오고가는지는 알 수 없지만 특정 사이트에 접속 여부는 쉽게 알 수 있죠.
사용자가 서버 주소 입력(clien.net)->통신사->DNS 서버 과정에 대한 암호화가 되어 있지 않습니다.
반대 과정 또한 DNS 서버->통신사(특정 쿼리에 대해 변조)->클라이언트(clien.net을 쿼리했지만 warning.or.kr 값을 돌려받음), 이런식으로 암호화 되어 있지 않으면 변조가 쉽습니다.
따라서 DNS(도메인 서버) 쿼리를 암호화 하지 않으면, 1.1.1.1 이나 8.8.8.8 같은 다른 DNS를 도메인 서버로 사용해도 SSL과 같은 암호화 통신을 하지 않으면 아무 소용이 없습니다.
현재 DNS 서버에 대한 암호화 규격에 대해 OS들이 지원을 하지 않기 때문에 DNS가 암호화를 지원하더라도 DNS 암호화를 하기 위해 다른 방법이 필요합니다.
그 중 하나의 방법이 cloudflare가 공개한 프로그램을 이용하는 방법입니다.
아래 주소에서 해당 OS에 맞는 파일을 다운로드 하세요.
https://developers.cloudflare.com/argo-tunnel/downloads/
윈도우를 기준으로 설명 드립니다.
다운로드 받은 파일을 압축풀고 cloudflared.exe를 적당한 폴더에 넣습니다.
시스템 서비스로 사용하기 위해 저는 c:\Windows\System32\ 에 복사했습니다.
그 다음 cloudflared 서비스에 대한 설정파일을 생성해 줍니다.
설정파일의 위치는 c:\Windows\System32\config\systemprofile\.cloudflared\ 이고
해당 위치에 config.yaml 파일을 넣어주면 됩니다.
일단 config.yaml 을 먼저 문서 폴더 같은 곳에 만들어 둡니다.
적당한 텍스트 에디터를 통해
proxy-dns: true
proxy-dns-upstream:
입력하고 저장할 때 파일이름을 config.yaml 으로 하세요.
(참고 https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy/ )
그 다음 관리자 명령프롬프트를 실행
cd c:\Windows\System32\config\systemprofile\
mkdir .cloudflared
(탐색기에선 점으로 시작하는 폴더가 생성이 안되기 때문)
하시고
탐색기로 c:\Windows\System32\config\systemprofile\.cloudflared\ 이동하여
아까 만들어둔 config.yaml을 복사 하세요.
최종적으로
cloudflared.exe는
c:\Windows\System32\cloudflared.exe 에 있고
이에 대한 설정파일 config.yaml은
c:\Windows\System32\config\systemprofile\.cloudflared\config.yaml 에 있게 됩니다.
이제 cloudflared.exe를 서비스로 등록합니다.
관리자 프롬프트를 실행해서
c:\Windows\System32\ 이동하여
cloudflared service install
을 해주면 윈도우 서비스에 Argo Tunnel agent 가 등록됩니다.
등록 직후 서비스가 시작되어 있지 않을 수 있습니다. 컴퓨터 관리에서 해당 서비스를 시작해주면 됩니다.
물론 재부팅 이후에는 알아서 해당 서비스가 매번 자동으로 시작됩니다.
이제 이 서비스 사용하기 위해 네트워크 어댑터의 설정에서 TCP/IP 4의
DNS 서버 주소를 127.0.0.1 로 변경합니다.
도메인 서버의 접속과 쿼리가 암호화 되는지 확인해보려면
http://en.conn.internet.nl/connection/ 에서 테스트 해보면 됩니다.
또한 프롬프트에서
nslookup clien.net 하면
127.0.0.1에 도메인 쿼리를 해서 ip를 알아내는 것을 볼 수 있습니다.
사용자 도메인 쿼리->127.0.0.1->암호화->통신사->도메인 서버(1.1.1.1)
도메인 서버(1.1.1.1)->암호화->통신사->사용자가 도메인에 대한 ip 주소 얻음
이전과 달리 도메인 쿼리를 암호화하기 때문에 중간에 경유하는 서버나 장비에서 사용자가 어떤 도메인에 대해 쿼리 했는지 접속하는지는 알 수 없고 변조할 수 없습니다.
따라서 https://clien.netCLIEN 에 대한 ip를 요청했는데 중간에 가로채서 warning.or.kr의 ip를 돌려주는 것은 불가능합니다.
끝.
삭제할 때는
Argo Tunnel agent 서비스를 중지시키고
프롬프트에서 다음 명령어 실행하고
cloudflared service uninstall
설정파일 폴더를 삭제하시면 깨끗이 지워집니다.
네트워크 설정의 DNS 설정도 자동이나 다른 서버로 지정해줘야 하고요.
dns를 통해 warning.or.kr로 리다이렉트 시키는 것은 굉장히 오래된 방법이고, 윈도우 기본 기능을 통한 dns 서버 교체만으로도 해결이 되는 것으로 기억합니다. (때문에 패킷 분석을 통한 차단으로 방식이 변화했죠) 요즘 https 서버가 많아지니 오래된 dns 리다이렉트 방식을 다시 꺼낸듯한데, 윈도우 기본 기능으로는 부족하여 저런 서드파티 프로그램이 필요한 것이 확실한가요?
https 사이트가 warning.or.kr로 리다이렉트 되는 샘플이 있어서 직접 확인할 수 있다면 좋을텐데요.
이번에 화제가 된 새 방식은 DNS와 통신하는 53포트를 통신사 레벨에서 패킷 감청해서 결과값을 왜곡되게 쏴주는겁니다.
해외 DNS로 설정해도 워닝이 뜨죠.
1. 공유기 설정은 필요없고, 인터넷을 쓰는 기기마다 개별적으로 적용해야 함.
2. 위의 DNS 암호화와 https 조합이면, 워닝 볼 일은 전혀 없다
가 맞는거죠?
1번은 이해했습니다 나의 ipt*** 공유기로는 힘들겠군요
2번은 앞으로 dns까지 막았을 때의 이야기였습니다
어제 Simple DNSCrypt 는 필요없어보여서 삭제했는데 갑자기 인터넷이 안들어가지더라구요
127.0.0.1로하면 안되고 자동으로 받으면 되는상황이었습니다 그래서 혹시나싶어서 강좌다시오니 이런댓글이있네요
댓글대로 다시 Simple DNSCrypt설치후 적용하니까 잘되네요 자동으로 아이피받아도 1.1.1.1로 연결하게합니다
Simple DNSCrypt이것이 매번실행해야하는줄알았는데 알고보니 서비스로 돌아가고있는거였더라구요
아무튼 이강좌대로만 하면 잘안되는것같습니다 ㅠ