Chapter 16. 스니핑 정일환, 곽병호
목차 1. 스니핑이란 2. 스니핑의 원리 3. 스니핑의 공격 도구 TCP Dump Fragruoter DSniff 4. 스위치 환경에서의 스니핑 ARP 스푸핑, ARP/ICMP 리다이렉트 스위치 재밍(MACOF) SPAN 포트 태핑(Tapping) 5. 스니퍼 공격의 대응책
1. Sniffing 스니핑(Sniffing)이란? 스니핑 : 네트워크 트래픽을 도청하는 과정 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻이 있다. 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것을 의미한다. 스니핑을 할 수 있도록 하는 도구를 스니퍼(Sniffer)라고 하며 스니퍼를 설치하는 과정은 전화기 도청 장치를 설치하는 과정에 비유될 수 있다. 스니핑 : 네트워크 트래픽을 도청하는 과정 스니퍼 : 스니핑을 할 수 있는 도구
▼ 이더넷(ethernet) 프레임의 포맷 2. 스니핑의 원리 LAN 상에서 개별 호스트를 구별하기 위한 방법으로 이더넷 인터페이스는 MAC(Media Access Control) 주소를 갖게 되며, 모든 이더넷 인터페이스의 MAC 주소는 서로 다른 값을 갖는다. 따라서 로컬 네트워크상에서 각 각의 호스트는 유일하게 구별될 수 있다. ▼ 이더넷(ethernet) 프레임의 포맷 Destination MAC Address 6Byte source type 2Byte data 46-1500Byte CRC 4Byte
2. 스니핑의 원리 이더넷 인터페이스에서 모든 트래픽을 볼 수 있도록 하는 기능을 설정할 수도 있는데 이를 "promiscuous mode"라 한다. 스니퍼는 이더넷 인터페이스를 이러한 "promiscuous mode"로 설정하여 로컬 네트워크를 지나는 모든 트래픽을 도청할 수 있게 된다.
랜 인터페이스를 프로미스큐어스 모드로 전환하기 랜 인터페이스를 프로미스큐어스 모드로 전환하기 먼저 ifconfig를 사용해 현재 네트워크 카드를 확인한다. ifconfig eth0 promise 명령으로 eth0 장치를 프러미스큐어스 모드로 바꾼다. 다시 ifconfig 명령으로 네트워크 카드의 상태를 확인하면 PROMISC라는 표시가 생겼음으로 확인할 수 있다
2. 스니핑 공격 도구 1) TCP Dump 가장 일반적으로 쓰이는 스니핑 도구 처음부터 스니핑을 위한 도구로 개발된 것이 아니라 네트워크 관리를 위해 개발된 툴이다. Snort라는 IDS의 기반 프로그램이기도 하다. TCP Dump는 법적 효력이 있다. 법적 효력을 발휘하려면 법원에서 인정하는 규약에 따라야 한다. 하지만 대부분의 컴퓨터로 취득한 자료는 재판 과정에서 직접적인 증거로 인정 받지 못한다는 사실을 알아둬야 한다. 그 이유는 위조나 변조는 매우 쉽고, 그 위조와 변조 여부를 알아내는 것이 너무 어렵기 때문이다.
먼저 TCP Dump 소스를 압축 풀고 ./configure를 입력한다. [실습 화면 1] TCP Dump configure
오브젝트 코드를 만들기 위해 make를 입력한다. TCP Dump를 이용해서 계정과 패스워드 스니핑하기 오브젝트 코드를 만들기 위해 make를 입력한다. [실습 화면 2] TCP Dump make
마지막으로, make install로 컴퓨터에 인스톨한다. [실습 화면 3] TCP Dump make install 이제 tcp dump가 설치되었다. 우선 telnet과 FTP 등 초기의 서비스들은 계정과 패스워드가 암호화되지 않는 평문으로 전달된다는 내용을 기억할 것이다. 그럼 스니핑 공격의 첫 번째로 텔넷 접속의 계정과 패스워드를 탐지해 보자
TCP Dump를 이용해서 계정과 패스워드 스니핑하기 텔넷 클라이언트에서 서버로 로그인한다. telnet 172. 16. 0. 3 [실습 화면 4] 원격지 텔넷 서버로 로그인
TCP Dump를 이용해서 계정과 패스워드 스니핑하기 [실행 화면 6]원격 텔넷 로그인 시 계정 dump ① 172.16.0.2의 32852포트에서 172.16.0.3의 23 번 포트로 P 플래그로 w 한 글자만이 전달되었다. ② 172.16.0.3의 23 포트에서 172.16.0.2의 32852번 포트로 역 P 플래그로 w 한글 자가 전달되었다. ③ 172.16.0.2의 32852 포트에서 172.16.0.3의 23번 포트로 .(ACK) 패킷을 보낸다.
TCP Dump를 이용해서 계정과 패스워드 스니핑하기 [그림 7]원격 텔넷 로그인 시 패스워드 Dump ④ 패스워드로 172.16.0.2의 32852 포트에서 172.16.0.3 23포트로 P 플래그가 q한글자만이 전달되었다. ⑤ 계정 입력 시에는 wishfree라는 글씨가 보이나. 계정을 입력할 때와는 달리 q에 대한 ACK 패킷을 서버가 클라이언트에게 보내고 있다. ⑥155:156(1)을 보면 시퀀스 넘버의 시작이 155이며 끝이 156, 그리고 크기가 1 바이트라는것을 알 수 있다. 따라서 q 한 글자만이 유효한 데이터라는 것을 알 수 있다. ⑦ ACK 156은 시퀀스 넘버가 156으로 끝나는 패킷의 ACK 패킷임을 나타낸다.
2. 스니핑 공격 도구 2) Fragroute Fragrouter는 받은 패킷을 릴레이해주기 위한 툴이다. 스니핑을 하거나 세션을 가로채었을때 공격자에게 온 패킷을 정상적으로 전달해주려면 패킷 릴레이가 반드시 필요하다. 공격대상의 세션이 끊어지면 계속 사용할 수 없게 되므로 공격자 역시 스니핑을 계속할 수 없다.
[실행 화면 1]Fragrouter configure
[실행 화면 2]Fragrouter make
2. 스니핑 공격 도구 3) Dsniff Dsniff는 스니핑을 위한 자동화 툴이다. 이것은 단순한 스니핑 툴이 아니라 스니핑을 위한 다양한 툴이 패키지처럼 묶어져 있다. SSL 과 같은 암호화를 쓰는 통신이 안전하다고 생각하나, Dsniff는 이렇게 암호화된 계정과 패스워드까지 읽어내는 능력을 하고 있다. Dsniff가 읽어낼 수 있는 패킷 : ftp, telnet, http, pop, nntp, imap, snmp, idap, rlogin, rip, ospf, pptp, ms-chap, nts, yp/nis+, socks , x11, cvs, IRC, ATM, ICQ, PostageSQL, M.S SQL등.
DSniff 설치 시 설치되는 툴 툴 기능 filesnarf NFS 트래픽에서 스니핑한 파일을 현재 디렉토리에 저장한다. macof 스위치 환경에서 스위치가 허브와 같이 작동하도록 위하여 임의의 MAC 주로소 스위치의 MAC 테이블을 오버플로우 시킨다. mailsnarf SNMP와 POP 트래픽을 스니핑하여 이메일을 볼 수 있게 해준다. 스니핑한 이메일은 mail 클라이언트에서 볼 수 있다. msgsnatf AOL 메신저, ICQ 2000, IRC, Yahoo 메신저 등의 채팅메시지를 선택해서 스니핑 한다. tcpkill 특정 인터페이스를 통해 탐지할 수 있는 TCP 세션을 모두 끊는다. tcpnice ICMP source quench 메시지를 보내 특정 TCP 연결을 느리게 만든다. 속도가 빠른 네트워크에서 스니핑 할 때 유용하다. arpspoof ARP 스푸핑 공격을 실행한다. dnsspoof DNS 스푸핑 공격 실행. urlsnarf CLF에서 HTTP 트래픽을 스니핑하여 선택된 URL을 알려준다.
[실행 화면 1]Dsniff configure
[실행 화면 3]Dsniff make install
Dsniff를 이용해서 여러 가지 공격하기 Dsniff를 실행한다. ① 172.16.0.2에서 172.16.0.3으로 텔넷을 통해 전달되는 모든 패킷이 보인다. ② 172.16.0.2에서 172.16.0.3으로 FTP연결을 시도하였으며, 계정과 패스워드가 명시 되 어서 출력된다.
Dsniff를 이용해서 여러 가지 공격하기 tcpkill을 실행한다. [실행 화면 5] tcpkill 실행 ① tcpkill을 실행하면 사용법이 나온다. 사용법의 expression 뒤에는 tcpdump에서 사용되었던 표현식이 그대로 쓰인다. ② 인터페이스 eth0에 R(eset) 패킷을 4개씩 보내어, tcp에 대하여 연결을 끊는다.
Dsniff를 이용해서 여러 가지 공격하기 [실행 화면] tcpnice 실행
Dsniff를 이용해서 여러 가지 공격하기 urlsnarf를 실행하면 인터넷 사용자가 접속한 서버와 시간 등의 정보를 볼 수 있다. [실행 화면 7]urlsnarf 실행
Dsniff를 이용해서 여러 가지 공격하기 arpspoof --help 실행 [실행 화면 8]arpspoof 실행 Dnsspoof - 호스트 파일에서 여러 사이트에 대한 스푸핑을 할 수 있다. [실행 화면 9]dnsspoof 실행
Dsniff를 이용해서 여러 가지 공격하기 ailsnarf는 sendmail 등으로 메일을 보내면 메일을 가로채서 내용을 읽을 수 있다. [실행화면 10]은 root@127.0.0.1에서 이메일 계정 wishfree@empal.com으로 ‘How are you!!'라는 본문으로 메일을 보낸 것을 가로챈 것이다. [실행화면 10]mailsnarf 실행
Dsniff를 이용해서 여러 가지 공격하기 msgsnarf는 MSN 메신저로 대화하는 내용을 가로채서 볼 수 있는 툴이다
3. 스위치 환경에서의 스니핑 스위칭 환경에서는 기본적으로 스니핑이 어렵다. 스위치는 2계층 장비다. 2계층 네트워크에서는 원래 허브가 쓰였다. 허브는 랜에서 들어오는 모든 신호를 복사해서 모든 포트에 다시 뿌려주는 역할을 한다. 따라서 브로드캐스트(Broadcast) 패킷인지 유니캐스트(Unicast) 패킷인지에 상관없이 모든 포트에 보내주므로 스니퍼에게 스니핑을 이용한 공격은 간단하다. 그러나, 스위치는 포트별로 MAC 주소 값이 기록하여 브로드캐스트 패킷을 제외한 모든 패킷은 그 패킷이 목적하는 장비에만 보낸다. 스위치는 스니핑을 막기 위해 만들어진 장비는 아니지만 결과적으로 스니퍼를 저지하는 치명적인 장비가 되었다.
1. ARP 스푸핑, ARP/ICMP 리다이렉트 ARP 리다이렉트 ARP 리다이렉트 공격은 기본적으로 2계층에서 실시된다. 공격은 위조된 ARP reply 패킷을 보내는 방법을 사용한다. 자신의 MAC 주소가 라우터라며 브로드캐스트를 주기적으로 하는 것이다. ARP 스푸핑는 호스트 대 호스트 공격이며, ARP 리다이렉트는 랜의 모든 호스트 대 라우터라는 것 말고는 큰 차이점이 없다. ARP 스푸핑에서와 마찬가지로 공격자 자신만은 원래 라우터의 MAC 주소를 알고 있어야 하며 받은 모든 패킷은 다시 라우터로 릴레이해 주어야만 한다.
1) ARP 스푸핑, ARP/ICMP 리다이렉트
1. ARP 스푸핑, ARP/ICMP 리다이렉트 ICMP 리다이렉트 보통의 네트워크는 라우터나 게이트웨이가 하나다. 하지만 하나의 라우터로 이를 감당할 수 없을 때는 어떻게 해야 할까 ? 라우터나 게이트웨이를 두 개 이상 운영해서 로드밸런싱(Load balancing)을 해야 할 것이다. 로드밸런싱을 하는 방법은 다양하다. 시스템의 라우팅 테이블에 라우팅 엔트리를 하나 더 넣어주는 방법도 있으나 ICMP 리다이렉트를 사용하기도 한다. ICMP 공격은 이러한 경우를 강제적으로 만들어주게 된다. 공격자가 네트워크에 존재하는 또다른 라우터임을 각 호스트에게 알리게 된다. ARP 스푸핑과 다른 점은 ARP 스푸핑은 모든 트래픽에 대한 리다이렉트를 가능하게 하지만, ICMP 리다이렉트는 특정한 목적지 주소를 가진 패킷만을 리다이렉트하게 된다.
ICMP 리다이렉트 동작 원리
ICMP 리다이렉트 동작 원리 1. 호스트 A가 원격의 호스트 B로 데이터를 보낼 때 라우터 A가 디폴트(Default) 라우터로 설정되어 있기 때문에 호스트 A는 원격으로 보내는 모든 패킷을 라우터 A로 보낸다. 2. 라우터 A는 호스트 B로 보내는 패킷을 수신하고 라우팅 테이블을 검색하여 라우터 B가 호스트 B에 도달하는데, 좀더 효율적으로 호스트 A가 보낸 패킷을 라우터 B로 보낸다. 3. 라우터 A는 다시 호스트 A가 호스트 B로 향하는 패킷을 자신에게 전달하지 않도록 호스트 A에게 ICMP 리다이렉트 패킷을 보내 호스트 A가 호스트 B로 보내는 패킷이 라우터 B로 바로 향하도록 한다. 4. 호스트 A는 라우팅 테이블에 호스트 B에 대한 값을 추가하고, 호스트 B로 보내는 패킷은 라우터 B로 전달한다.
[실행 화면 1] ICMP Redirect 툴의 컴파일과 실행 Root# gcc –o icmp_redir icmp_redir.c [실행 화면 1] ICMP Redirect 툴의 컴파일과 실행
ICMP 리다이렉트를 이용해서 스니핑 해보기 공격 대상에게서 패킷이 전달되어 오면 바로 세션이 끊기지 않게 패킷이 원래 목적지로 전달되어야 하므로, 릴레이 툴을 실행시켜 두고, 릴레이 툴로 Fragrouter를 실행 fragrouter -B1 [실행 화면 2]패킷 릴레이 툴 실행
ICMP 리다이렉트를 이용해서 스니핑 해보기 Root# ./icmp_redir 192.168.1.1 192.168.1.143 216.239.37.99 192.168.1.142 [실행 화면 3]ICMP Redirect 공격 gwhost : 원래의 게이트웨이이다. targ_host : 공격 대상 호스트의 IP주소다. dst_host : 공격 대상 호스트가 접속하고자 하는 원겨지 서버의 IP주소 dummy_host : 공격자의 IP 주소
ICMP 리다이렉트를 이용해서 스니핑 해보기 공격 대상에 대한 TCP Dump이다. Root# tcpdump -vvv host 192.168.1.143 [실행 화면 4] 공격 대상의 TCP Dump
ICMP 리다이렉트를 이용해서 스니핑 해보기 공격 후 공격 대상의 라우팅 테이블을 확인하였다. ICMP Redirect로 변환된 라우팅 테이블을 확인하려면 route 명령에 -C 옵션을 주면 된다. Root# route -C
2) 스위치 재밍 스위치 재밍(Switch Jamming)은 스위치를 직접 공격한다. 해킹 공격 중에 버퍼 오버플로우(Buffer Overflow) 공격이 있다. 버퍼 오버플로우 공격은 버퍼를 공격해서 시스템을 다운시키기거나 오작동을 유발하기도 하며, 루트(Root) 권한을 얻어내는 데 쓰이기도 한다. 스위치 역시 하나의 시스템으로 생각할 수 있다. CPU와 같은 연산자가 있으며 MAC 테이블을 저장하기 위한 저장 공간이 있다. 스위치 재밍은 MAC 테이블을 위한 캐시 공간에 버퍼 오버플로우 공격을 실시하는 것이라고 생각해도 무리가 없다. MAC 테이블이 저장 용량을 넘으면 스위치는 원래의 기능을 잃게 되어 더미 허브와 똑같이 작동한다.
macof로 스위치 재밍시키기 이 공격을 위해서는 Dsniff를 설치하고, macof를 실행 시켜보면 별다른 옵션이 필요 없음을 알수있다. Root# macof [실행 화면 1] macof의 사용
macof로 스위치 재밍시키기 공격 시 tcpdump 출발지의 Mac주소 도착지의 Mac주소 출발지의 IP 주소와 MAC주소,
5. 스니핑 공격의 대응책 1. 스니퍼 탐지 스니핑 공격은 스니퍼를 설치한 이후에는 매우 쉬우며 네트워크에 별다른 이상 현상을 만들지 않기 때문에 사용자가 이를 인지하는 것이 어렵다. 따라서 네트워크 관리자나 보안 관리자라면 주기적으로 네트워크에 스니퍼가 있는지 탐색해 봐야 한다. 스니퍼에 대한 탐색은 기본적으로 스니퍼가 프러미스큐어스 모드에서 작동한다는 것에서 시작한다.
5. 스니핑 공격의 대응책 ■ Ping을 이용한 방법 대부분의 스니퍼는 일반 TCP/IP에서 동작하기 때문에 request를 받으면 response를 전달한다. 이를 이용한 방법은 의심이 가는 호스트에 ping을 보내는데, 네트워크에 존재하지 않는 MAC 주소를 위장하여 보낸다. 만약 ICMP Echo reply를 받으면 해당 호스트가 스니핑을 하고 있는 것이다. 왜냐하면 존재하지 않는 MAC 주소를 사용했기 때문에 스니핑을 하지 않는 호스트는 누구도 ping request를 볼 수 없는 것이 정상이다. ■ ARP를 이용하는 방법 ping과 유사한 방법으로 위조된 ARP request를 보냈을 때 ARP response가 오면 프러미스큐어스 모드로 설정되어 있는 것이다.
5. 스니핑 공격의 대응책 ■ DNS 방법 일반적으로 스니핑 프로그램은 사용자의 편의를 위하여 스니핑한 시스템의 IP 주소를 Inverse-DNS lookup을 수행한다. 이 방법은 원격과 로컬에서 모두 사용할 수 있는 방법으로 테스트 대상 네트워크로 Ping Sweep을 보내고 들어오는 Inverse-DNS lookup을 감시하여 스니퍼를 탐지한다. ■ 유인(Decoy)방법 스니핑 공격을 하는 공격자의 주요 목적은 계정과 패스워드의 획득에 있다. 보안 관리자는 이점을 이용하여 계속적으로 가짜 계정과 패스워드를 네트워크에 뿌린다. 공격자는 이 계정과 패스워드를 이용하여 접속을 시도하고 이 접속을 시도하는 시스템을 탐지함으로써 스니퍼를 탐지할 수 있다. ■ ARP watch 초기에 MAC 주소와 IP 주소의 매칭 값을 저장하고 ARP 트래픽을 모니터링하여 이를 변하게 하는 패킷이 탐지되면 관리자에게 메일로 알려주는 도구다.
스니퍼를 찾아보기 sentinel을 실행하면 각 옵션에 대한 스니퍼를 탐지할 수 있다. ./sentinel -e -t 192.168.1.144 [실행 화면1] Ping을 이용한 스니퍼 탐지
스니퍼를 찾아보기 조작된 MAC 주로소 ICMP Echo Request를 보냈음에도 불고 하고 스니퍼를 설치해 둔 192.168.1.144 시스템은 ICMP Echo Reply를 보낸다. tcpdump host 192.168.1.144 스니퍼가 설치되어 있는 경우, tcpdump의 결과
스니퍼를 찾아보기 스니퍼가 설치되지 않는 정상적인 192.168.1.145 는 MAC 필터링을 하고 있으므로 자신에게 보내진 패킷이 아님을 확인하고 아무런 반응을 하지 않는다. tcpdump host 192.168.1.145 스니퍼가 설치되어 있지 않은 경우, tcpdump의 결과
5. 스니핑 공격의 대응책 2. 암호화 ■ SSL(Security Sockets Layer) 암호화된 웹 서핑을 가능하게 해준다. SSL은 많은 웹 서버 브라우저에 구현되어 있으며 전자상거래 사이트에 접속하여 물건을 구매할 때, 신용카드 정보 등을 보낼 때 사용한다. SSL은 40비트와 128비트 두 가지 암호화 키가 있으며 현재 대부분의 우리나라 금융거래 사이트는 40비트 암호화 방법을 쓰고 있다. ■ SSH(Secure Shell) SSH는 telnet과 같은 서비스의 암호화를 위해서 사용된다. 그러나, DSniff를 이용하여 공격하면 SSH를 이용한다고 할지라도 공격당할 수 있다.
■ VPN (Virtual Private Network) VPN은 원래 T1과 같은 사설 네트워크를 설치하는데, 고가의 비용이 들기 때문에 하나의 라인을 여러 회사가 공유하여 비용을 절감하고자 개발되었다. 그러나 전송되는 데이터들이 각 회사의 사내 정보이며 기밀성이 요구되어 VPN은 자연스레 암호화된 트래픽을 제공한다. ■ PGP ,S/MIME SMTP 상으로 보내지는 메일은 기본적으로 암호화 되지 않기 때문에 스니핑하여 그 내용을 쉽게 얻어낼 수 있다. PGP, S/MIME 등을 이용하여 메일에 대한 암호화 기능을 제공할 수 있다.