705. DNS 스푸핑 / DNS Cache Poisoning 매칭 기만 및 방어 기법 (DNSSEC)
핵심 인사이트: 사용자가 브라우저에
naver.com을 쳤다. 내 컴퓨터는 "네이버 IP가 뭐야?"라고 DNS 서버에 묻는다. 이때 해커가 DNS 서버보다 0.1초 더 빨리 "네이버 IP는 66.66.66.66(해커가 만든 가짜 피싱 사이트)이야!"라고 대답해 버린다. 컴퓨터는 먼저 온 대답을 찰떡같이 믿고 사용자를 가짜 사이트로 납치해버린다. 현대 인터넷의 신뢰를 박살 내는 극강의 낚시 기술, DNS 스푸핑이다.
Ⅰ. DNS 스푸핑의 원리와 취약점 🌟
- 개념: 희생자가 정상적인 웹사이트 도메인 이름(
www.bank.com)을 요청할 때, 해커가 중간에서 조작된(위조된) 가짜 IP 주소를 응답으로 보내어, 희생자를 해커가 만들어놓은 가짜 피싱 사이트로 유도하는 해킹 기법입니다. - 구조적 취약점: DNS 통신은 엄청나게 빨라야 하므로 무겁게 검증하는 TCP 대신 가볍고 빠른 UDP 53번 포트를 씁니다. UDP는 상대방이 진짜인지 인증하는 과정이 1도 없어서, 질문(Query)을 던진 뒤 "누구든 가장 먼저 도착한 응답 패킷"을 무조건 정답으로 맹신해버리는 치명적인 바보 같은 성질을 가집니다.
Ⅱ. 2가지 공격 시나리오
1. 일반적인 DNS 스푸핑 (로컬망 낚시)
- 희생자가 은행 사이트의 IP를 묻는 쿼리를 쏩니다.
- 이 쿼리는 정상적인 DNS 서버로 날아가지만, 같은 사무실 안에서 도청(스니핑)하고 있던 해커가 이 질문을 엿듣습니다.
- 해커는 진짜 DNS 서버가 대답을 주기 전에, 0.1초라도 빨리 희생자에게 "은행 IP는 내 컴퓨터 IP야!"라고 가짜 응답을 날립니다.
- 희생자 컴퓨터는 가짜 IP를 진짜로 믿고 접속하여 비밀번호를 갖다 바칩니다. 뒤늦게 진짜 DNS 서버의 응답이 도착하지만 폰은 이를 쓰레기로 간주하고 버려버립니다.
2. DNS Cache Poisoning (캐시 포이즈닝 / 독극물 주입) 🌟
더 스케일이 크고 악랄한 공격입니다. 개인 한 명을 속이는 게 아니라, 통신사(KT, SKT)의 거대한 로컬 DNS 서버 자체를 오염시켜 버립니다.
- 해커가 KT의 DNS 서버에게
bank.com의 주소를 묻습니다. KT 서버는 답을 찾으러 상위 서버로 질문을 던집니다. - 이때 해커가 상위 서버인 척 위장하여 KT 서버에 엄청난 양의 가짜 응답 패킷(해커 IP)을 마구 쏟아붓습니다.
- 이 중 하나가 KT 서버에 먹혀들어 가면, KT 서버의 메모리(Cache) 장부에는
bank.com = 해커 IP라고 기록(Poisoning, 독극물 오염)되어 버립니다. - 이제 KT 인터넷을 쓰는 수십만 명의 시민들이 은행에 접속하려 할 때마다, 오염된 KT DNS 서버가 일제히 가짜 해커 IP를 뿌려대어 수십만 명을 피싱 사이트로 납치해 버립니다.
Ⅲ. 해커의 꼼수와 포트 번호 난수화 방어
KT 서버가 해커의 가짜 응답을 쉽게 믿는 이유는, 과거 DNS 쿼리가 출발할 때 쓰는 출발지 포트 번호가 예측 가능했기 때문입니다.
- 대응책 (Port Randomization): 방어하기 위해 DNS 쿼리가 출발할 때 질문 번호(Transaction ID)뿐만 아니라, 출발지 포트 번호까지 수만 개의 난수(Random)로 복잡하게 비틀어버립니다. 해커가 가짜 응답을 끼워 넣으려면 이 포트 번호와 쿼리 번호 두 개를 정확히 1초 안에 0.001% 확률로 찍어서 맞춰야 하므로 공격이 기하급수적으로 어려워집니다.
Ⅳ. 궁극의 방어 기술: DNSSEC (DNS Security Extensions) 🌟
- 난수화 방어조차 운이 나쁘면 뚫리기 때문에, 아예 근본적인 해결책이 등장했습니다.
- DNSSEC: DNS 응답 패킷에 도메인 관리자의 **비대칭키 기반 전자 서명(Digital Signature)**을 쾅쾅 찍어서 보내는 국제 표준 방어 기술입니다.
- 브라우저가 은행 IP를 받을 때, "이 답변이 진짜 KT 서버에서 서명한 게 맞는지, 중간에 해커가 위조하지 않았는지(무결성과 출처 인증)" 서명값을 수학적으로 검증합니다. 해커는 KT의 개인키를 모르므로 가짜 서명을 만들 수 없어 DNS 스푸핑 공격이 100% 원천 차단됩니다.
📢 섹션 요약 비유: DNS 스푸핑은 전화번호부 안내원 사칭입니다. 내가 114에 전화해서 "은행 번호 좀 알려주세요"라고 물어보는 순간, 내 전화를 엿듣고 있던 보이스피싱범이 114보다 먼저 내 폰으로 문자메시지를 보내 "은행 번호는 010-xxxx-xxxx입니다"라고 뻥을 치는 것입니다. 이걸 근본적으로 막으려면 114 안내원에게 "당신이 준 답변 끄트머리에 경찰청의 절대 위조 불가능한 관인(DNSSEC 전자서명)을 찍어서 보내달라"고 요구해야 합니다.