Network Security

스니핑 : promiscuous,tcpdump,fragrouter,dsniff과 대응책

부산대보금자리 2021. 8. 9. 13:46

스니핑이라는 것을 이미 알고 게시물을 클릭했을 것이므로 자세한 설명은 생략한다. 

최근에는 회사 내에서도 커뮤니케이션을 목적으로 여러 가지 형태의 메신저를 사용한다고 한다. 스니핑 문제로 메신저에서 통신 내용을 암호화하는 경우도 많지만, 그렇지 않은 경우도 여전히 많다. 메신저를 사용하여 대화 상대방에게 신용카드 번호나 패스워드를 알려주는 것은 바람직하지 않으며, 암호화되지 않은 메신저를 사용하는 경우에는 더욱 위험한 일이다. 

 

1. 프러미스큐어스 모드

스니핑을 하려면 랜 카드를 스니핑이 가능한 모드로 변경해야 한다. 이를 프러미스큐어스(=promiscuous) 모드라고 하는데, 이를 정확히 이해하려면 먼저 랜 카드의 정상적인 동작을 이해해야 한다. 모든 패킷은 2 계층 정보인 MAC 주소와 3 계층 정보인 IP주소를 가지고 있다. 패킷이 네트워크에 돌아다닐 때, 각 PC는 패킷에 기록된 MAC 주소와 IP주소를 보고 자신에게 제대로 전달된 것인지 여부를 안다. 정상적인 경우라면 자신의 네트워크 카드로 흘러 들어온 패킷에 기록된 MAC 주소와 IP주소가 PC의 것과 일치하면 패킷을 분석하여 운영체제에 해당 패킷을 넘겨주고, 다르면 버린다. 하지만 스니퍼는 자신과 다른 MAC 주소와 IP주소를 가진 패킷이라고 해서 버리지 않는다. 이처럼 MAC 주소와 IP주소에 관계없이 모든 패킷을 스니퍼에 넘겨주는 것을 프러미스 큐 어스 모드라고 한다. 

 

리눅스나 유닉스 등의 운영체제에서는 랜 카드에 대한 모드 설정이 가능하지만 윈도우에서는 똑같은 랜 카드를 사용해도 프러미스 큐 어스 모드라는 것이 존재하지 않는다. 따라서 윈도에서는 스니핑을 위한 드라이버를 따로 설치해야 한다. 

스니핑을 하려면 좋은 랜 카드가 필요하다. 스니핑은 수동적인 공격이므로, 패킷을 하나라도 놓치면 전체 그림이 그려지지 않는 경우가 있을 수 있다. 랜 카드를 고르다 보면 만 원도 하지 않는 저가의 것도 많다. 

 

- 가격에 따른 랜 카드의 차이점

1. MAC주소 값의 고유성

저가 랜 카드는 고유해야 할 mac주소 값이 고유하지 않은 경우가 있다. 

ex> 어느 날부터 일정 시간 동안 일정 구역의 랜이 마비되었다. 관리자는 모든 컴퓨터를 체크했고 원인은 바로 사장실의 싸구려 랜 카드 때문이었다. 사장이 외국 출장길에 무척 저렴한 랜 카드를 사 와 관리자 모르게 바꿨는데, 그 랜 카드와 MAC 주소 값이 같은 네트워크 장비가 기존 랜에 있었던 것이다. MAC 주소는 회사마다 고유한 값을 가지며, 출시 제품마다 모델에 따른 고유한 값을 가진다. 그런데 저가 제품을 만드는 회사가 가끔 이를 무시하거나 할당받지 않고 임의의 주소 값을 주는 경우가 있다. 

 

2. 버퍼 차이

보통 랜 카드 사양에는 버퍼가 기록되어 있지 않다. 그러나 랜 카드에는 버퍼가 있어서 자신에게 온 전기적 신호를 저장한다. 버퍼가 있어야 하는 이유는 컴퓨터의 처리 속도가 아무리 빨라도 UTP 케이블을 따라 전해오는 전기적 신호보다 빠를 수 없기 때문이다. 이런 순간적인 신호를 저장하기 위해 만들어진 임시 저장 공간이 바로 버퍼이다. 버퍼가 가득 차면 네트워크 카드에 전해지는 모든 전기적 신호는 버려진다. 

 

3. 특정 연산을 위한 연산 장치 유무

마지막 차이점은 3D 그래픽 카드가 CPU의 연산 처리량을 덜어주는 것처럼 특정 연산을 위한 연산 장치가 랜 카드에 붙어 있다는 것이다. 이 경우, 당연히 패킷 처리 능력이 좋다.

 

나 같은 경우 예전 Asus노트북을 쓸때 랜 카드가 따로 내장되어 있지 않아서 실습을 하지 못했었는데 맥북으로 바꾼 다음에 terminal에서

이런 식으로 가능하다. 이 화면이 뜬 후에는 channel을 입력하여 airport eth0 sniff channel처럼 입력하면 스니핑이 시작되며

끝내면. cap파일로 저장된다.

이 파일은 wireshark로 열어서 확인할 수 있다.

 

2. TCP DUMP

TCP DUMP는 리눅스에서 가장 기본이 되는 스니핑 툴이다. 불법적인 해킹 느낌보다는 관리자 느낌이 강한 스니퍼다. 이는 처음부터 스니핑 툴이 아니라 네트워크 관리를 위해 개발되었기 때문이고 Snort의 기반이다. 

 

tcpdump는 리눅스에 거의 기본적으로 설치되어있는 걸로 보인다.

예시로 tcpdump -t eth0 -xX host 192.168.0.2와 같이 입력할 수 있는데 이는 eth0 인터페이스를 선택하고 

각 패킷의 값을 헥사코드와 아스키 형태로 출력하며 호스트 192.168.0.2와의 통신 패킷을 수집한다는 것이다. 

그냥 tcpdump라고 치면 사용 중인 인터페이스를 지나가는 패킷을 수집해서 볼 수 있다.

이처럼 연결을 시도하고 10.239.133.82에 telnet요청을 해보면 

이처럼 arp를 보내는 것을 수집할 수가 있다. 

telent과 ftp 같은 초기의 서비스들은 계정과 패스워드가 암호화되지 않은 평문으로 전달되므로 이러한 패킷을 수집하면 정보를 수집할 수도 있다.

 

3.Fragrouter

fragrouter는 직접 스니핑을 하기보다는 스니핑을 보조해주는 툴로, 받은 패킷을 전달하는 역할을 한다. 

스니핑을 하거나 세션을 가로챘을 때 공격자에게 온 패킷을 정상적으로 전달하려면 패킷 릴레이가 반드시 필요하다. 공격 대상의 세션이 끊어지면 계속 사용할 수 없어 공격자도 스니핑을 계속할 수 없다. 

칼리 리눅스에서 fragrouter를 입력하면 다음과 같은 옵션을 확인할 수 있다. 

 

4. Dsniff

스니핑을 위한 자동화 툴인 Sniff는 많이 알려진 툴이다. 

많은 이들이 SSL과 같은 암호화를 사용하는 통신이 안전하다고 생각하는데, dsniff는 암호화된 계정과 패스워드까지 읽어내는 능력이 있다.

Dsniff가 일어낼 수 있는 패킷은 다음과 같다.

ftp, telnet, http, pop, nntp, imap, snmp, ldap, rlogin, rip, ospf, pptp, ms-chap, nfs ~ 

Dsniff를 설치하면 다음과 같은 툴도 설치된다.

filesnarf, macof, mailsnarf, tcpkill, tcpnice, arpspoof, dnsspoof, urlsnarf... 

 

 기본적으로 

dsniff를 하면 해당 인터페이스를 통해 들어오고 나가는 패킷을 볼 수가 있다. 

 

5. 스위칭 환경에서의 스니핑 

스위칭 환경에서는 기본적으로 스니핑이 어렵다. 스위치는 2 계층 장비이다. 2 계층에서는 원래 허브를 사용했다. 허브는 랜에서 들어오는 모든 신호를 복사해서 모든 포트에 뿌려주는 역할을 한다. 따라서 브로드캐스트 패킷인지 유니캐스트 패킷인지에 상관없이 모든 포트에 신호를 보내주므로 스니핑은 쉽게 할 수 있다. 

하지만 이러한 허브를 대체하는 스위치가 개발되었다. 스위치 안에는 포트에 대한 MAC주소 테이블이 존재한다. 

스위치가 처음 설치되면 각 장비의 MAC주소를 확인하여 포트에 할당한다. 포트별로 MAC 주소 값이 할당되면 브로드캐스트 패킷을 제외한 모든 패킷은 목적으로 하는 장비에만 보내진다. 따라서 스니핑을 하기 어려워진다. 그렇다면 스위치를 바보로 만드는 것에 무엇이 있나? 

바로 스푸핑이다. 이에 대한 내용을 다음 글에서 적어보겠다.

 

6. 대응책 

스니핑 공격에 대한 대응책은 크게 능동적인 것과 수동적인 것으로 나누어서 생각할 수 있다. 

능동적인 대응책에는 스니퍼가 네트워크에 존재하는지를 알아보는 방법, 즉 스니퍼 탐지이다. 

수동적인 대응책에는 스니핑을 수행하도록 해당 내용이 노출되지 않도록 통신 내용을 암호화 하는 방법이 있다.

일반적으로 스니퍼 탐지를 주기적으로 하기는 어려우므로 대부분 암호화 방법을 선호한다.

 

1) 능동적인 대응책 

스니퍼 탐지는 기본적으로 스니퍼가 프러미스큐어스 모드에서 작동한다는 데서 시작한다. 프러미스큐어스 모드는 유입 패킷에 대한 IP주소와 MAC 주소에 따른 필터링을 하지 않는데, 이것을 이용해 다음과 같은 스니퍼 탐지가 가능하다.

 

- ping을 이용한 탐지

대부분의 스니퍼는 일반 TCP/IP에서 동작하기 때문에 Request를 받으면 Response를 전달한다. 이를 이용한 방법은 의심이 가는 호스트에 ping을 보낼 때 네트워크에 존재하지 않는 MAC 주소를 위장해서 보낸다. 만약 ICMP Echo Reply를 받으면 해당 호스트가 스니핑을 하고 있는 것이다. 존재하지 않는 MAC 주소를 사용했으므로 스니핑을 하지 않는 호스트는 ping Request를 볼 수 없는 것이 정상이기 때문이다.

 

- ARP를 이용한 탐지 

ping과 유사한 방법으로, 위조된 ARP Request를 스니퍼임을 확인하고자 하는 시스템에 보내면 대상 시스템이 응답으로 ARP Response를 보내게 되고 이를 통해 프러미스큐어스 모드로 동작 중인 스니퍼임을 확인할 수 있다.

 

- DNS를 이용한 탐지

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

 

- 유인을 이용한 탐지

스니핑 공격을 하는 공격자의 주된 목적은 계정과 패스워드의 획득이다. 이점을 이용해 가짜 계정과 패스워드를 네트워크에 계속 뿌린다. 공격자가 이 가짜 게정과 패스워드를 이용해 접속을 시도하면, 접속을 시도하는 시스템을 탐지하여 스니퍼를 탐지할 수 있다.

 

- ARP Watch를 이용한 탐지 

초기의 MAC주소와 IP 주소의 매칭 값을 저장하고 ARP 트래픽을 모니터링하여 이를 변하게 하는 패킷이 탐지되면 관리자에게 메일로 알려주는 툴이다. 

 

2) 수동적인 대응책

- SSL

- PGP,PEM,S/MIME

- SSH

- VPN 

'Network Security' 카테고리의 다른 글

TLS보안 프로토콜 기술  (0) 2021.12.01
터널링과 VPN  (0) 2021.08.23
스푸핑 공격 대응책  (0) 2021.08.18
스캔 및 탐지  (0) 2021.08.08
IP주소 추적하기  (0) 2021.08.06