Cyber Security Academy · 강의

DNS 스푸핑과 캐시 포이즈닝

DNS 응답 위조

레슨 2/413개 단계

DNS 스푸핑과 캐시 포이즈닝은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

DNS 응답 위조

DNS 스푸핑은 위조된 DNS 응답을 제공하여 피해자가 이름을 공격자가 제어하는 IP로 해석하게 만드는 행위입니다. 캐시 중독은 위조된 응답이 재귀 해석기에 의해 수락되고 저장되어 이를 사용하는 모든 클라이언트를 감염시키는 특수한 형태입니다.

일반적인 목적은 트래픽을 우회시키는 것입니다. 사용자를 피싱 페이지, 악성 코드 배포 사이트 또는 중간자 프록시로 보냅니다.

경쟁 상태

해석기가 질의를 보내면 공격자는 정상적인 권한 있는 서버가 응답하기 전에 위조된 응답을 주입하려고 합니다. 위조 응답이 먼저 도착하여 예상 필드와 일치하면 경쟁에서 이기고 캐시됩니다.

이 때문에 공격과 방어에서 지연 시간, 패킷 순서, 해석기의 외부 연결 포트가 매우 중요합니다.

공격자가 추측해야 하는 일치 필드

위조된 UDP 응답이 수락되려면 공격자는 다음 항목을 일치시켜야 합니다:

  • 출발지 IP(권한 있는 서버).
  • 대상 포트(해석기의 외부 연결 포트).
  • 질의 이름과 유형.
  • 16비트 트랜잭션 ID(TXID).

보호 기능이 없으면 실제 비밀은 TXID뿐이므로 패킷당 성공 확률은 대략 65,536분의 1입니다.

카민스키 공격

댄 카민스키가 2008년에 공개한 내용은 캐시 중독이 알려진 것보다 훨씬 쉽다는 사실을 보여 주었습니다. 레코드마다 한 번 경쟁하는 대신, 공격자는 여러 존재하지 않는 하위 도메인(aaa.bank.com, aab.bank.com...)을 질의하고 전체 도메인에 대한 악성 NS 또는 글루 레코드를 포함한 위조 응답을 대량으로 전송합니다.

각 시도는 새로운 경쟁이며 조회 실패에는 캐시 불이익이 없으므로, 공격자는 추측이 맞을 때까지 반복해 전체 영역을 중독시킬 수 있습니다.

for sub in $(seq 1 10000); do
  dig $sub.bank.com @victim-resolver &
done
# Attacker floods forged NS answers in parallel

출발지 포트 무작위화

카민스키 공격 이후의 주요 완화책은 출발지 포트 무작위화였습니다. 해석기는 고정된 외부 연결 포트를 사용하는 대신 각 질의에 대해 무작위 임시 포트를 선택합니다.

이제 공격자는 TXID(16비트)와 출발지 포트(약 16비트)를 모두 추측해야 하므로 검색 공간이 대략 2^32로 늘어납니다. 따라서 경로 외부에서 수행하는 맹목적 캐시 중독은 엔트로피 구현이 취약한 경우를 제외하면 현실적으로 불가능해집니다.

경로상 공격자와 경로 외부 공격자

경로 외부 공격자는 질의를 볼 수 없으므로 TXID와 포트를 맹목적으로 추측해야 합니다. 통신 경로상의 공격자(악성 Wi-Fi, 침해된 라우터, ISP)는 질의를 직접 읽고 쉽게 일치하는 응답을 만들 수 있습니다.

통신 경로상의 사칭은 포트 무작위화를 완전히 무력화하므로, 높은 수준의 보장을 위해서는 단순한 엔트로피만이 아니라 암호화된 전송과 DNSSEC 검증이 필요합니다.

악성 DHCP와 해석기 탈취

공격자가 항상 패킷을 위조하는 것은 아닙니다. 악성 DHCP 서버는 클라이언트에 악성 DNS 해석기 주소를 전달하여 모든 조회에 공격자가 응답하게 만들 수 있습니다. 악성 코드도 마찬가지로 /etc/resolv.conf 또는 라우터 설정을 다시 씁니다.

과거에는 DNSChanger 악성 코드와 같은 위협이 수년 동안 피해자의 DNS를 사기성 서버로 몰래 변경했습니다. 조직의 모든 장비가 실제로 어떤 해석기를 사용하는지 확인하십시오.

cat /etc/resolv.conf
# nameserver should match your trusted internal resolver

관할 범위 확인

해석기는 관할 범위 규칙을 적용합니다. 응답은 자신이 권한을 가진 영역 내 이름에 대한 레코드만 제공할 수 있습니다. bank.com에 대한 응답에 unrelated.com의 레코드를 몰래 끼워 넣을 수는 없습니다.

이렇게 하면 카민스키 방식의 주입을 질의한 도메인으로 제한하고, 하나의 중독된 응답이 관련 없는 영역을 오염시키는 것을 막을 수 있습니다. 해석기가 엄격한 관할 범위 필터링을 적용하는지 확인하십시오.

중독 탐지

진행 중이거나 성공한 중독의 징후입니다:

  • 무작위로 생성된 존재하지 않는 하위 도메인에 대한 질의가 급증합니다.
  • 동일한 TXID에 대해 중복되거나 순서가 뒤바뀐 DNS 응답이 나타납니다.
  • 조회된 IP가 갑자기 예상하지 못한 ASN이나 지역을 가리킵니다.
  • 해석기 응답과 신뢰할 수 있는 대역 외 조회 결과가 일치하지 않습니다.

다층 방어

어떤 단일 통제 수단으로도 충분하지 않습니다. 다음을 결합하십시오:

  • 출발지 포트와 TXID 무작위화로 경로 외부 공격의 비용을 높입니다.
  • DNSSEC 검증으로 위조된 응답이 서명 검사를 통과하지 못하게 합니다.
  • DoT/DoH로 통신 경로상의 공격자가 내용을 보거나 변조하지 못하게 합니다.
  • 추가 엔트로피를 제공하는 0x20 인코딩(질의 이름의 대소문자 무작위화)을 사용합니다.
  • NXDOMAIN 폭주와 응답 이상 징후를 모니터링합니다.

운영상의 현실

실제로 최신 패치가 적용된 해석기에서는 경로 외부에서 수행하는 맹목적 캐시 중독이 오늘날 드물지만, 부채널을 통해 다시 나타날 수 있습니다(예: UDP 단편화와 SAD DNS 같은 ICMP 기반 포트 추론 공격). 해석기에 최신 패치를 유지하고 검증 기능을 지원하는 암호화된 해석기를 우선 사용하십시오.

기억하십시오. 가장 큰 영향을 미치는 DNS 침해는 흔히 영리한 중독 경쟁이 아니라 탈취당한 등록기관 계정입니다. 양쪽 모두를 보호하십시오.

빠른 점검

카민스키 기법을 얼마나 잘 이해했는지 점검해 보십시오.

요약

DNS 스푸핑은 응답을 위조하고, 캐시 중독은 리졸버에 그 위조된 응답이 지속되게 합니다. 응답이 받아들여지려면 출발지 IP, 포트, 질의 이름, TXID가 일치해야 합니다. 출발지 포트 무작위화와 베일리윅 검사는 경로 외 공격자에 대한 방어 수준을 높였지만, 경로 내 공격자와 부채널은 여전히 위협이 됩니다.

심층 방어(엔트로피, DNSSEC 검증, 암호화된 전송, 모니터링)는 필수입니다. 다음으로 공격자가 DNS를 악용해 데이터를 이동시키는 방법인 터널링과 유출을 살펴보겠습니다.

무료로 시작

AI 튜터와 함께 Cyber Security Academy을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
76
레슨
303

자주 묻는 질문

“DNS 스푸핑과 캐시 포이즈닝” 강의는 무료인가요?

네 — “DNS 스푸핑과 캐시 포이즈닝” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“DNS 스푸핑과 캐시 포이즈닝”에서 뭘 배우나요?

DNS 응답 위조 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“DNS 스푸핑과 캐시 포이즈닝” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. DNS의 작동 원리와 위험
  2. DNS 스푸핑과 캐시 포이즈닝
  3. DNS 터널링과 정보 유출
  4. DNSSEC와 DNS 필터링
← Cyber Security Academy(으)로 돌아가기