9 스푸핑
학습목표 내용 스푸핑 공격을 이해한다. ARP, IP, DNS 스푸핑 공격을 실행할 수 있다. 스푸핑 공격을 탐지할 수 있다. 스푸핑 공격에 대처하고 예방하는 방법을 알아본다. 내용 스푸핑 공격 ARP 스푸핑 IP 스푸핑 DNS 스푸핑
스푸핑 공격 스푸핑(spoofing)은‘속이다’는 의미 인터넷이나 로컬에서 존재하는 모든 연결에 스푸핑 가능 정보를 얻어내는 것 외에 시스템을 마비시킬 수도 있음
실습 9-1 시스템의 IP와 MAC 주소 수집하기 실습환경 브로드캐스트 ping 보내기 fping -a -g 192.168.0.1/24 MAC 주소 확인 arp -a • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 리눅스 페도라 12 • 필요 프로그램 : fping 실습환경 1 2
ARP 스푸핑 ARP(Address Resolution Protocol)와 RARP(Reverse ARP) ARP는 IP 주소 값으로MAC 주소 값을 알아내는 프로토콜 RARP는 MAC 주소값으로 IP 주소값을 알아내는 프로토콜 ARP 스푸핑은 2계층 MAC 주소를 공격자의 MAC 주소로 속이는 것 ARP 스푸핑 예제 ① 명호는 철수에게 영희(IP 주소 10.0.0.3)의MAC 주소가 명호 자신의 MAC 주소인CC라고 알린다. 마찬가지로 영희에게도 철수(IP 주소 10.0.0.2)의MAC 주소가 CC라고 알린다. ② 명호는 철수와 영희로부터 패킷을 받는다. ③ 명호는 각자에게 받은 패킷을 읽은 후에 철수가 영희에게 보내려던 패킷을 영희에게 보내주고, 영희가 철수에게 보내려던 패킷을 철수에게 정상적으로 보내준다.
ARP 스푸핑 ARP 스푸핑 공격 개념도
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 윈도우 XP • 필요 프로그램 : arpspoof, dnsspoof 실습환경
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 fake 설치와 사용법 확인 ➊ rpm -Uvh fake-1.1.2-1.i386.rpm ➋ send_arp 공격 전 시스템의 MAC 주소 테이블 확인 ➊ ping 192.168.0.100 ➋ arp -a 1 2 [그림 9-8] ARP 스푸핑 공격 전 서버의 MAC 주소 테이블 [그림 9-9] ARP 스푸핑 공격 전 공격자의 MAC 주소 테이블
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 패킷 릴레이와 TCP Dump 수행 ➊ ./fragrouter -B1 ➋ 창을 하나 더 열어 tcpdump -xvX host 192.168.0.100 send_arp 실행 ARP 스푸핑 공격 수행 send_arp 192.168.0.100 00:16:D3:CA:85:67 192.168.0.101 00:1E:68:ED:2A:39 3 4
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 공격 후 각 시스템의 MAC 주소 테이블 확인 arp -a 텔넷 연결 telnet 192.168.0.100 53 6
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 스니핑 : TCP Dump를 이용해 ARP 스푸핑 공격 시 캡처한 패킷 73
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 Wireshark를 이용해 캡처한 ARP 스푸핑 패킷 분석 83
실습 9-2 ARP 스푸핑을 이용해 스니핑하기 Wireshark를 이용해 캡처한 ARP 스푸핑 패킷 분석 83
ARP 스푸핑 보안 대책 MAC 테이블의 static 설정을 통해 막을 수 있음 ➊ arp -a 명령을 입력하고 [Enter] 키를 입력한다. 현재 MAC 주소 테이블을 볼 수 있다. ➋ static으로 설정하고자 하는 IP 주소와 MAC 주소를 확인한 뒤 arp -s <IP 주소> <MAC 주소> 형식으로 명령을 입력한다. ➌ 다시 arp -a 명령으로MAC 주소 테이블을 확인하면 뒷부분에 PERM(Permanent) 옵션 또는 static이 있다. 이렇게 설정된 IP 주소와MAC 주소 값은 ARP 스푸핑 공격이 들어 와도 값이 변하지 않는다. 모든 관리 시스템에 static 옵션을 지정할 수는 없음. 또한, 리부팅하면 static 옵션이 사라지므로 계속 사용하려면 배치 파일 형태로 만들어두고, 리부팅 시마다 자동으로 수행되도록 설정해야 함
IP 스푸핑 한 시스템이 여러 시스템에 로그인하고자 할 경우 각 시스템마다 계정과 패스워드가 필요. 각 시스템마다 계정과 패스워드를 설정해야 하는데, 시스템이 많으면 관리자가 모두 외우기 힘듦. 보안상 아주 취약하지만 아직도 흔히 쓰이는 텔넷은 로그인 시 계정과 패스워드를 암호화하지 않은 평문으로 네트워크로 흘려본내 스니핑 공격자에게 좋은 먹이가 됨 이에 대한 한 가지 대책이 트러스트. 시스템에 접속할 때 자신의 IP 주소로 인증을 하고 로그인 없이 접속이 가능하게 만든 것 하지만 트러스트 설정은 스니핑은 막았으나 IP 스푸핑에 치명적인 약점을 드러냄 IP 스푸핑은 시스템 간의 트러스트(trust) 관계 이용 트러스트 관계가 맺어진 서버와 클라이언트를 확인한 후 클라이언트에 DoS 공격하여 연결 끊음 그러고 나서 공격자가 클라이언트의 IP 주소를 확보하여 서버에 실제 클라이언트처럼 패스워드 없이 접근
IP 스푸핑 유닉스와 리눅스 시스템에서는 트러스트 관계를 형성하기 위해 주로 다음 파일 사용 ./etc/hosts.equiv .$HOME/.rhost
IP 스푸핑 IP 스푸핑 개념 예
IP 스푸핑 보안 대책 가장 좋은 대책은 트러스트를 사용하지 않는 것 부득이하게 트러스트를 사용할 경우에는 트러스트된 시스템의 MAC 주소를 static으로 지정 해커가 연결을 끊을 수는 있지만, 잘못된 IP 주소로 위장해 접근하더라도 MAC 주소까 지 같을 수는 없기 때문에 세션을 빼앗기지는 않음
DNS 스푸핑 DNS(Domain Name System) 스푸핑은 웹 스푸핑과 비슷한 의미로 이해되기도 함 단순히 DNS 서버를 공격하여 해당 사이트에 접근하지 못하게 만들면 DoS 공격이 되지 만 조금 응용하면 웹 스푸핑 정상적인 DNS 서비스 ➊ 클라이언트가 DNS 서버에 접속하고자 하는 IP 주소(www.wishfree.com 같은 도메인 이름)를 물어본다. 이때 보내는 패킷은 DNS Query다. ➋ DNS 서버가 해당 도메인 이름에 대한 IP 주소를 클라이언트에 보내준다. ➌ 클라이언트는 DNS 서버에서 받은 IP 주소를 바탕으로 웹 서버를 찾아간다.
DNS 스푸핑 DNS 스푸핑 공격 ➊ 클라이언트가 DNS 서버로 DNS Query 패킷을 보내는 것을 확인한다. 스위칭 환경일 경우에는 클라이언트가 DNS Query 패킷을 보내면 이를 받아야 하므로 ARP 스푸핑과 같은 선행 작업이 필요하다. 만약 허브를 쓰고 있다면 모든 패킷이 자신에게도 전달되 므로 자연스럽게 클라이언트가 DNS Query 패킷을 보낼 경우 이를 확인할 수 있다.
DNS 스푸핑 DNS 스푸핑 공격 ➋ ~ ➌ 공격자는 로컬에 존재하므로 DNS 서버보다 지리적으로 가깝다. 따라서 DNS 서버 가 올바른 DNS Response 패킷을 보내주기 전에 클라이언트에 위조된 DNS Response 패킷을 보낼 수 있다.
DNS 스푸핑 DNS 스푸핑 공격 ➍ 클라이언트는 공격자가 보낸 DNS Response 패킷을 올바른 패킷으로 인식하고 웹에 접속한다. 지리적으로 멀리 떨어진DNS 서버가 보낸 DNS Response 패킷은 버린다.
실습 9-3 DNS 스푸핑하기 실습환경 웹 서버 구축 service httpd start • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 윈도우 XP • 필요 프로그램 : arpspoof, dnsspoof 실습환경 1
실습 9-3 DNS 스푸핑하기 웹 사이트 정상 접속 확인 DNS 스푸핑 파일 설정 ➊ vi /etc/dsniff/dnsspoof.hosts ➋ 192.168.0.2 *.google.com 2 3
실습 9-3 DNS 스푸핑하기 ARP 스푸핑과 패킷 릴레이 ➊ arpspoof -t 192.168.0.101 192.168.0.1 ➋ ./fragrouter -B1 4
실습 9-3 DNS 스푸핑하기 DNS 스푸핑 공격 수행 5-1 DNS 스푸핑 툴 도움말 확인과 동작 수행 ➊ dnsspoof –help ➋ dnsspoof -i eth0 -f /etc/dsniff/dnsspoof.hosts 5-2 DNS 스푸핑 툴 도움말 확인과 동작 수행공격 후 www.google.com 사이트에 접속 5
실습 9-3 DNS 스푸핑하기 5-3 공격 실패 시 클라이언트의 DNS 정보 삭제 ipconfig /flushdns 5-4 공격 후 클라이언트에서 www.google.com에 ping 보내기 ping www.google.com
DNS 스푸핑 보안 대책 도메인 이름을 브라우저에 입력했을 때 무조건 DNS Query를 생성하는 것은 아님 사이트에 접속하면 MAC처럼 캐시에 도메인 이름에 대한 IP 주소가 저장되었다가 다시 접속했을 때 DNS Query를 보내지 않고 캐시에서 읽어 들임 그런 다음 hosts 파일을 통해 도메인 이름에 대한 IP 주소를 해석 hosts 파일에 중요 사이트의 IP 주소를 적어두면, 이 파일에 있는 사이트에 대해서는 DNS 스푸핑 공격을 당하지 않을 수 있음
DNS 스푸핑 보안 대책 DNS 서버에 대한 DNS 스푸핑 공격에 대한 보안 대책 BIND(Berkeley Internet Name Domain)를 최신 버전으로 바꿈 BIND 최신 버전은 PTR 레코드뿐만 아니라, PTR 레코드에 의한 A 레코드 정보까지 확 인한 후 네임 서버의 데이터베이스 파일 변조 여부까지 판단 PTR은 Reverse Zone(리버스 존)에서 가장 중요한 레코드로, IP 주소에 대한 도메인 이름 해석 A 레코드는 Forward Zone에서 도메인 이름에 대한 IP 주소 해석 if (gethostbyname(gethostbyaddr(getpeername())) != getpeername()) { /* DNS 스푸핑의 위험을 알리고 종료 */ } PTR 레코드뿐만 아니라 A 레코드까지 스푸핑한 경우 현재는 DNS 스푸핑을 막을 방법 이 없고 DNS에만 의존하는 서비스를 외부에 지원하지 않는 것이 최선의 방책