- 인터넷 이용을 위해선 해당 사이트의 IP 주소를 알아야 하며, 이 주소는 한 눈에 들어오지 않는 숫자로 구성되어 있다.

- 따라서 이를 쉽게 기억하기 위한 이름 체계를 만들었고(FQDN), 사용자들이 사용하는 FQDN을 실제 인터넷에서 필요한 IP 주소로 변환하는 서비스가 필요하며, 이를 DNS(Domain Name Service)라고 한다.

 

DNS

:: 웹(web) 상에서 호스트 컴퓨터가 도메인 이름을 IP주소로 변환하기 위해 DNS 서버에게 질의 응답을 하는 서비스

 

DNS Spoofing

:: DNS 트래픽을 공격자가 가로채고, 위조된 IP 주소로 응답하여 호스트 컴퓨터가 위조된 IP 주소로 접근하게끔 하는 공격

:: DNS 캐시 목록에 위조된 레코드 정보를 추가시켜 Client가 URL을 입력하면 위조된 웹 서버로 접속을 유도하여 정보를 탈취하거나 DNS 서버를 공격한다.

:: DNS 서버 자체를 공격하여 DNS 캐시 목록을 오염시킬 수 있지만, DNS 응답을 가로채기 하여 Client가 위조된 DNS 정보를 이용하도록 만든다. 

:: 공격자는 암호화되지 않은 통신 간의 데이터를 임의로 조작하고 조작된 결과를 전달할 수 있다.

 

:: ARP Spoofing 공격이 선행되어야 한다.

--> 공격자는 게이트웨이와 Client의 MAC 주소를 공격자의 MAC 주소로 속인후, Client의 웹 서버 접속을 기다린다.

더보기

ARP Spoofing

 

:: 로컬 네트워크 (LAN)에서 사용하는 ARP 프로토콜의 허점을 이용하여 자신의 MAC(Media Access Control)주소를 다른 컴퓨터의 MAC인 것처럼 속이는 공격

:: ARP Cache 정보를 임의로 바꾼다고 하여 "ARP Cache Poisoning 공격"이라고도 불린다.

:: 단순히 패킷을 가로채어 훔쳐보는(Sniffing) 수준이 아니라, 가로챈 패킷을 변조한 후 전송하는 공격에도 사용되고 있다.

 

 

- Client가 URL을 이용하여 웹 서버에 접속할 때 자신의 DNS 캐시 목록에서 IP 주소를 찾지 못하면 UDP 프로토콜을 이용하여 로컬 DNS 서버에 웹 서버의 IP 주소를 요청한다.

 

- 이때 DNS 서버보다 가까이 있는 공격자는 DNS 응답 메시지를 먼저 보낼 수 있다.

따라서 Client는 먼저 수신된 위조된 DNS 응답 메시지를 신뢰하여 파밍사이트에 접속하게 되며, 공격자는 아이디와 패스워드와 같은 개인 정보를 중간에서 탈취한다.

 

더보기

UDP(User Datagram Protocol)

:: 전송 계층에서 사용하는 프로토콜로, 연결 설정과 해제 과정이 없는 비연결형 프로토콜

:: 오류 처리 및 패킷 순서 재조합과 같은 제어 기능이 없다

:: 단순히 데이터를 전송하고 수신한다.

:: 데이터의 신뢰성 검증이 필요없고, 데이터의 안전성 보다는 빠른 데이터 처리 및 빠른 전송이 요구되는 곳에 쓰인다.

 

UDP 소켓 통신

:: 서버와 클라이언트의 구분이 명확하지 않다.

(한 쪽이 sendto() 함수 호출로 데이터를 송신할 때 bind()로 특정 포트를 지정하지 않아도 데이터를 수신하는 시스템에서는 recvfrom() 함수의 인자를 통해 보낸 쪽의 IP와 포트 번호 확인이 가능한다.)

:: UDP는 송신자가 일방적으로 데이터를 전달하는 통신 프로토콜로, DNS 요청 과정에서 UDP 포트 53번을 사용한다.

 

DNS Spoofing


<첫 번째 실습>

※ 실습 환경 : 5.10.0-kali3-amd64, Windows 7 

첫 번째 실습

 

1. Target PC에게 ARP Spoofing을 수행한다.

 

-   arpspoof -i[사용할 인터페이스] -t [target이 될 대상의 IP주소] [속일 IP주소]

-   arpspoof -t 192.168.100.142 192.168.100.2 명령어 통해 Arp Spoofing을 수행

 

  Client(192.168.100.142)가 Gateway(192.168.100.2)로 통신을 할 때 이 정보가 Gateway로 가지 않고 Attacker PC에게로 이동하게 된다. Client에게 게이트웨이의 MAC 주소를 공격자의 MAC주소라고 계속해서 응답을 보낸다.

 

-   Attacker PC에서 응답 처리를 해주기 위해서 fragrouter -B1 명령어를 이용해 Client가 정상적으로 통신이 되게 설정한다. (B1 옵션 : 송수신 데이터 변조없이 데이터 그대로를 포워딩 해줌)

 

arpspoof 만을 이용하는 경우에는 희생자가 보내는 데이터들이 공격자로 넘어는 오지만, 공격자가 희생자가 원하는 서비스를 제공하지는 않으므로 응답이 가질 않게 되어 희생자 측에서 이상함을 눈치챌 수 있다.

 

하지만, arpspoof와 함께 fragrouter의 B1 옵션을 이용하게 되면 희생자는 정상적으로 통신이 되면서 희생자의 모든 패킷이 공격자를 통해가게 된다.

 

 

2.  Attacker PC에서 WebServer(apache2)를 실행한다.

 

-   Target PC가 Web브라우저를 통해 접속할 경우 자신이 설정한 웹 페이지를 보여주기 위해서 자신이 임의로 만든 웹 서버를 실행한다.

 

 

3.  Target PC에서 잘 동작하는지 확인

-   Client PC에서 Attacker PC IP 주소를 입력한 후 Attacker PC의 웹 페이지가 잘 접속되는지 확인한다.

 

 

 

4. Attacker PC에서 hosts 파일을 생성한다.

-   Target PC에서 Attacker PC가 원하는 주소를 입력할 때 자신의 사이트를 띄우기 위해 hosts 파일을 작성한다.

 

-   Client가 www.naver.com으로 접속할 경우 192.168.100.137로 이동하게 설정한다.  

 

 

5. Attacker PC에서 DNS Spoofing을 수행한다.

-   dnsspoof 명령어를 사용하여 www.naver.com에 대한 DNS Query 패킷이 위조된 웹 서버인 192.168.100.137로 이름이 해석되도록 설정한다

-   dnsspoof - i [인터페이스] -f [DNS 조회할 파일] 명령어를 입력해 53번 포트를 리스닝 상태로 만든다.

 

 

 

6. Target PC에서 잘 동작하는지 확인한다.

-   DNS 조회를 하기 이전에 이전 DNS 조회 기록을 지우기 위해서 ipconfig /flushdns 명령어를 입력한다.

(이전 기록들이 남아있을 수 있으므로)

 

 

 

공격 실패 시

-  공격이 성공한다면, hosts 파일에 설정한 주소를 입력했을 시 해당 사이트로 이동해야 한다. 

하지만 글쓴이 같은 경우 몇 번을 시도해도 DNS Spoofing 공격을 실패했다.

 

 

공격 성공 시 나오는 페이지

- 공격 성공 시  Client는 www.naver.com을 입력했지만 사이트는 공격자가 임의로 작성한 페이지에 접속이 된다. 

 

- Attacker PC에서 확인하면 Target PC에서 DNS 요청을 하는 것을 알 수 있다.

 



<두 번째 실습>

※ 실습 환경 : 5.10.0-kali3-amd64, Windows 7 

 

두 번째 실습

※ 두 번째 실습에선 DNS Spoofing 공격 결과를 확인하기 위해 마지막에 ping 명령어를 사용할 것이다.

 

 

▷ 실습을 위한 웹 서버 환경 구축 (피싱 사이트를 직접 구축하여 접속시키게 할 것이므로)

 

<Apache와 Tomcat 연동>

- 정적인 HTML, image, CSS 파일의 처리는 아파치가, 동적인  DB연동 및 JSP 파일 처리는 톰캣에 넘겨 효율적으로 이용할 수 있기 때문이다

localhost 접속 시

- 아파치 정상 설치 확인

 

localhost:8080 접속 시 

- 톰캣 정상 설치 확인

 

/etc/apache2/sites-enabled/000-default.conf 파일 설정

- 아파치와 톰캣을 연동하기 위한 커넥터를 설치하는 과정이다. 

 해당 파일에 JKMount /* ajp13_worker 구문을 추가한다.(적용할 톰캣의 URL 설정)

 

/etc/tomcat8/server.xml 파일 설정

- <Connector> 태그가 있는 부분의 주석을 제거해준다.

 

apache2와 tomcat9 연동 성공

- 설정 후 Apache & Tomcat 데몬을 재시작한 후 정상적으로 둘이 연동되었는지 확인한다.

 

 

1. 피싱 웹 서버 구축

웹서버 접속(http://localhost) 테스트

- 웹 서버 구축을 위해 Apache 웹 경로에 있는 기존 index.html 파일을 삭제한 후 원하는 대로 수정한다.

index.html 파일의 경로는 다음과 같다. /var/lib/tomcat8/webapps/ROOT/index.html 

그 후 localhost에 접속하면 위 그림처럼 뜬다.

 

 

2. 공격자 IP 확인 후, DNS 스푸핑 파일 설정

vi dnsspoof.hosts 후 cat 명령어를 통해 확인

- 왼쪽에는 공격자 IP를, 오른쪽에는 공격하고자 하는 사이트를 임의의 hosts 파일에 등록한다.

 

3. ARP 스푸핑과 패킷 릴레이

ARP Spoofing

- arpspoof 툴로 스푸핑 공격을 실행한다.

fragrouter 명령어 실행

- - Attacker PC에서 응답 처리를 해주기 위해서 fragrouter -B1 명령어를 이용해 Client가 정상적으로 통신이 되게 설정한다. (B1 옵션 : 송수신 데이터 변조없이 데이터 그대로를 포워딩 해줌)

# arpspoof 만을 이용하는 경우에는 희생자가 보내는 데이터들이 공격자로 넘어는 오지만, 공격자가 희생자가 원하는 서비스를 제공하지는 않으므로 응답이 가질 않게 되어 희생자 측에서 이상함을 눈치챌 수 있다.
# 하지만, arpspoof와 함께 fragrouter의 B1 옵션을 이용하게 되면 희생자는 정상적으로 통신이 되면서 희생자의 모든 패킷이 공격자를 통해가게 된다.

 

 

4. DNS 스푸핑 공격 수행

dnsspoof 명령어 실행

- 앞서 만들었던 hosts 파일을 참조해 dnsspoof 공격을 시작한다.

 

 

5. 공격이 성공되었는지 클라이언트에서 확인

공격 실패 시

- 위 사진과 같이 공격이 실패했을 경우에 클라이언트가 구글의 올바른 IP주소를 확인한다.

dns 정보 삭제

- 클라이언트의 cmd 창을 관리자모드로 실행한 후, DNS 정보를 삭제한다

ipconfig /flushdns 명령어를 사용한다.

 

공격 성공 시

- dns 스푸핑 공격이 성공하면 www.google.com에 ping 요청을 보냈지만 위 그림과 같이 공격자의 IP주소를 확인하고 있는 것을 알 수 있다. 

 

 


<DNS Spoofing 공격 차단 방법>

- 브라우저에 접속할 도메인을 입력하면 반드시 DNS Query가 발생하지는 않는다. 

1) 우선 이전에 같은 사이트에 접속한 적이 있는지 확인하기 위해 캐시에 해당 도메인에 대한 IP주소가 존재하는지 읽어본다. 
2) 만일 캐시에 IP가 존재하지 않는다면 
3) hosts 파일에 적혀진 도메인 이름에 대한 IP주소를 해석한다. 
→ 그렇기 때문에 중요한 사이트의 IP주소를 hosts 파일에 미리 적어두게 되면
DNS Query 없이 바로 hosts 파일에 적혀진 IP 주소로 접속하므로 DNS spoofing 공격을 방어할 수 있다

 

 

hosts 파일 설정

- Window7 에서 hosts 파일의 경로는 다음과 같다. 

C:\Windows\System32\drivers\etc 

 

wireshark로 확인

- 파이어폭스를 통해 www.google.com에 접속한 후 와이어샤크로 패킷을 확인해보면, hosts 파일에 저장한 IP로 통신이 발생하고 있음을 확인할 수 있다.  

 

 

 

'Project > Network' 카테고리의 다른 글

Hancitor Analysis by Wireshark (4)  (0) 2021.08.19
Hancitor Analysis by Wireshark (3)  (0) 2021.08.19
Hancitor Analysis by Wireshark (2)  (0) 2021.08.19
Hancitor Analysis by Wireshark (1)  (0) 2021.08.19

+ Recent posts