스니핑 (Sniffing)

2010. 10. 12. 10:03카테고리 없음


- 스니핑이란 단어의 사전적 의미는 '코를 킁킁거리다', '냄새를 맡다'등의 뜻이 있다.
- 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방의 패킷 교환을 엿듣는 것을 의미함
- 네트워크 트래픽을 도청(eavesdropping)하는 과정을 스니핑이라고 할수 있다.
- 이런 스니핑을 할 수 있도록 하는 도구를 스니퍼(Sniffer)라고 하며 스니퍼를 설치하는 과정은 전화기 도청 장치를 설치하는 과
  정에 비유될 수 있다.
- TCP/IP 프로토콜은 학술적인 용도로 인터넷이 시작되기 이전부터 설계된 프로토콜이기 때문에 보안은 크게 고려하지 않고 시
   작 되었다.
- 대표적으로 패킷에 대한 암호화, 인증 등을 고려하지 않았기 때문에 데이터 통신의 보안의 기본 요소중 기밀성, 무결성등을 보장
   할 수 없었다.
- 특히 스니핑은 보안의 기본 요소중 기밀성을 해치는 공격 방법이다.
- 이러한 스니핑 공격은 웹호스팅, 인터넷 데이터 센터(IDC) 등의 업체가 같은 네트워크를 공유하는 환경에서는 매우 위협적인 공
  격이 될수 있다.
- 하나의 시스템이 공격 당하게 되면 그 시스템을 이용하는 네트워크를 도청하게 되고, 다른 시스템의 ID/Password를 알아내게  
   된다.
- 비록 스위칭 환경의 네트워크를 구축하여 스니핑을 어렵게 할 수는 있지만 이를 우회할 수 있는 많은 공격방법이 존재하고 있다.



프러미스큐어스 모드(Promiscuous Mode)를 통한 스니핑

- 스니핑을 위해 랜카드의 모드를 변경하는 것으로서, 일단 프러미스큐어스 모드를 알기 위해 일반적으로 랜카드의 동작을
  알아야 한다.

* 일반적인 랜카드의 동작과정
1) 모든 패킷은 2계층 정보인 MAC 주소와 3계층 정보인 IP주소를 가지고 있다.
2) 패킷이 네트워크에 돌아다닐 때, 각 PC는 자신에게 제대로 전달된 것인지 여부를 패킷에 기록된 MAC주소, IP주소를 통해
    확인한다.
3) 정상적인 경우라면 자신의 네트워크 카드로 흘러 들어온 패킷이 PC의 IP주소와 MAC주소와 일치하면 패킷을 분석하여
    OS에 패킷을 전달한다.
4) 만약에 IP주소와 MAC주소가 일치하지 않는 경우에는 패킷을 폐기한다.

- 일반적인 랜카드의 동작과는 달리 프러미스큐어스 모드는 모든 패킷을 버리지 않는다.
- 스니핑에 있어서 버려지는 패킷까지도 모두 읽어야 하므로 이 모드는 스니퍼에 있어 매우 필요한 모드이다.
- 리눅스나 유닉스에서는 설정이 가능하나 윈도우에서는 설정이 불가능하며 사용하기 위해서 별도로 드라이버 설치가 필요하다.
- # ifconfig [장치] promisc

TCP DUMP

- TCP DUMP는 네트워크의 패킷을 출력해주는 프로그램이다.
- 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들을 출력해주는 프로그램이다.
- 주로 쓰임은 지정된 상대방 호스트로부터 들어오는 패킷을 체크하는데 있다.
- # tcpdump [option] [expression]    (# yum list tcpdump 로 설치)

* telnet 서버 설치
- # yum install telnet-server
- /etc/xinetd.d/telnet 파일에서 "disable = no"를 설정하여 telnet을 이용 가능하도록 하고
  "service xinetd start" 를 하여 서비스를 시작한다.


Fragrouter

- 스니핑 과정에 있어 받은 패킷을 릴레이 해주기 위한 툴이며, 보조 도구로서의 성격이 강하다.
- 스니핑을 하거나 세션을 가로채었을때 공격자에게 온 패킷을 정상적으로 전달해주려면 패킷 릴레이가 반드시 필요하다.
- 공격 대상의 세션이 끊어지면 계속 사용할 수 없게 되므로 공격자 역시 스니핑을 계속할수 없다.
- 따라서 fragrouter는 스니핑한 세션을 마치 정상적인 것처럼 돌려주기 위해 필요한 것이다.

DSniff

- 디스니프는 스니핑을 위한 자동화 툴이다. 이것은 단순한 스니핑 툴이 아니라 스니핑을 위한 다양한 툴이 패키지 처럼
  묶여져 있다.
- SSL(Secure Socket Layer)과 같은 암호화를 쓰는 통신이 안전하다고 생각하나, 디스니프는 이렇게 암호화된 계정과
  패스워드까지 읽어내는 능력을 하고 있다.

* 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를 알려준다.


스위칭 환경에서의 스니핑

- 과거 허브를 사용하던 시기에는 브로드캐스트 도메인의 특성으로서 랜에서 오는 모든 신호를 복사해서 모든 포트에 뿌려주므로
   보안상 치명적이였다.
- 허브를 개선한 스위치는 무조건 패킷을 보내 네트워크의 대역폭 낭비를 막기위해 개발되었다.
- 허브와는 달리 MAC주소 테이블이 존재하여 포트별로 MAC주소 값이 할당되므로 그곳에만 전파를 한다.
- 따라서 허브와는 달리 보안상 아주 좋은 장비라고 볼수 있으나 역시 스위치 환경에서 스니핑하는 방법은 존재한다.

ARP 리다이렉트

- 2계층 공격으로서, 위조된 ARP Reply를 보내어 공격자가 MAC 주소를 변조시켜 자신이 라우터라고 브로드캐스트를 주기적
  으로 하는 것이다.
- 공격을 당하는 쪽에서는 공격자가 라우터인줄 알고 그 방향으로 패킷을 전송한다.
- 공격자는 마치 아무일도 없는 것처럼 위장하기 위해 받은 패킷을 앞서 배운 fragrouter를 통해 다시 릴레이 해줘야 한다.



ICMP 리다이렉트

- 호스트가 특정한 목적지로 가는데 없어지거나 최단거리가 아닌 경로를 사용할때는 ICMP 리다이렉트 패킷은 라우터를 통해서
  호스트에게 최선의 경로를 알려주는데 사용된다.
- 만약 공격자가 ICMP 리다이렉트 패킷을 위조할 수 있다면 호스트의 라우팅 테이블을 변경하여 특정한 트래픽이 의도하지 않은
  경로를 경유하도록 만드는 방식으로 보안 문제를 야기할 수 있다. 따라서 이런 문제를 예방하기 위해 서버의 모든 인터페이스에
  서 ICMP 리다이렉트 허용 기능을 차단한다.




스니핑 공격의 대응책

- 스니핑을 하기 위한 최소 조건으로 랜의 설정을 프러미스큐어스 모드를 하는것이다.
- 공격자는 프러미스큐어스 모드를 함으로써 자신에게 필요한 모든 패킷을 얻을 수 있는것이다.
- 따라서 스니핑 공격의 대응으로는 프러미스큐어스 모드를 찾는 것이 가장 기본이라 할수 있다.

1. ping을 이용하는 방법
- 의심이 드는 네트워크에 네트워크에 존재하지 않는 MAC 주소로 보낸다.
- 프러미스큐어스 모드로 변경되어 있다면 ICMP Echo Reply를 보낼 것이다. 그렇다면 스니핑일 가능성이 매우 높다.

2. ARP를 이용하는 방법
- ping과 유사한 방법으로 위조된 ARP Request에 따른 Reply가 오면 프러미스큐어스 모드인것으로 스니핑일 가능성이 높다.

3. DNS를 이용하는 방법
- 스니핑 프로그램은 사용자의 편의를 위해 스니핑한 시스템의 IP 주소에 대해 Inverse-DNS lookup을 수행한다.
- 원격과 로컬에서 모두 사용할 수 있는 방법으로, 테스트 대상 네트워크로 ping sweep을 보내고 들어오는 
   Inverse-DNS lookup을 파악한다.

4. 유인(Decoy)방법
- 스니핑하는 공격자에게 미끼를 주어 그것을 가로채도록 하는것이다. 물론 그 계정과 패스워드는 가짜이다.
- 그 가짜 계정과 패스워드로 접속하는 자를 탐지해 찾아낸다.

5. ARP Watch
- 대부분의 스니핑 공격이 위조된 ARP를 사용하기 때문에 이를 쉽게 탐지 할수 있다. 
- hunt 명령어로 스니핑을 탐지 할수 있다.