본문 바로가기

Security/Network Hacking

No.2 Sniffing OR Spoofing

Sniffing과 Spoofing에 대해 알아 보겠습니다! 











 

Sniffing

즉, 스니핑 공격은 여러 가지 의미로 쓰이고 있습니다.

도청 , 전화선이나 UTP에 태핑을 해서 전기적 신호를 분석해 정보를 찾는등 여러 분야에 걸쳐 쓰이지만 저희가 주로 쓰는 곳은 유선 랜을 통한 Sniffing 공격입니다.

 

기본적으로 네트워크에 있는 모든 system은 설정된 IP주소와 MAC값을 가지고 있습니다.

통신할때 네트워크에서는 이 두가지 값을 가지고 자신의 버퍼에 저장을 할지 안할지 결정 합니다.

다시말해서 저 IP(3계층) , MAC(2계층)의 값이 자신의 것과 일치 하지 않으면 무시한다는 것입니다.

 

다시 말해 , 어떤한 PC로 패킷이 전달될시

2계층과 3계층의 필터링을 거치게 되는데 물론, 스니핑을 하는 공격자 입장에서는 저런 필터링이 필요가 없죠 .

그래서 필터링을 해제하는 랜카드의 모드인 , 프러미큐어스(Promicuous) 모드가 필요합니다.

이 모드는 간단한 설정, 또는 스니핑을 위한 드라이버 설치를 위해 바꿀 수 있습니다.

이 프러미 큐어스 모드를 하는순간 패킷은 MAC과 IP의 필터링을 무시하고 무조건 상대방 PC에게 보내게 됩니다.

 

그럼 공격법을 알아봅시다

 

(1) ICMP 리다이렉트  

 ICMP 리다이렉트의 원래 목적은 네트워크 상의 라우터나 게이트웨이가 하나 일때 이를 감당 할수 없는 만큼의 패킷량이 나올 경우 라우터나 게이트웨이를 두개 이상 운영해 로드벨런싱을 해야 한다.

이때 사용 하는 방법이 ICMP 리다이렉트 이다.

동작을 살펴보면.

 

일단 HOST A와 라우터 A,B 그리고 HOST B가 있다고 가정 합시다

 

가. 호스트 A에 라우터 A가 기본 라우터로 설정되있고 호스트 A가 원격 호스트 B로 패킷을 보낼시 라우터 A로 보냅니다.

 

나. 라우터 A는 호스트 B로 보내는 패킷을 수신하고 Routing table을 검색하여 호스트 A에게 보단 호스트 B와 가까이 있는 라우터 B가 더 효율적이라 생각하고 해당 패킷을 라우터 B로 보냅니다.

 

다. 라우터 A는 호스트 B로 향하는 패킷을 호스트 A가 자신에게 다시 전달 하지 않도록, 호스트 A에게 ICMP 리다이렉트 패킷을 보내 다음부터 호스트 A가 호스트 B에게 보내는 패킷은 라우터 B로 보내도록 합니다.

 

라. 호스트 A는 Routing table에 호스트 B에 대한 값을 추가하고, 호스트 B로 보내는 패킷은 라우터 B로 전달한다.

 

이것이 ICMP 리다이렉트의 목적입니다.

 

그럼 이것을 이용한 공격방법은??

 

공격자가 바로 라우터 B가 되는것입니다.

ICMP 리다이렉트 패킷 또한 공격 대상에게 보낸 후 라우터 A에게 다시 릴레이 시켜주면 모든 패킷이 스니핑이 가능하게됩니다.

 

살펴보면

 

라우터 B가 된 공격자는 라우터 A에게 인제 자기 자신에게 모든 패킷을 보내라는 Reply메세지를 보내게 되고 이것을 받은 라우터 A는 B에게 호스트 A가 호스트B에게 보내는 모든 패킷을 보냅니다.

그렇게 되면 라우터 B가된 공격자는 모든 패킷을 스니핑 할수있게 되는 것입니다.

 

다시 보면 ICMP리다이렉트 공격은 2계층이 아니라, 3계층 공격이므로 일반 저희 인터넷 사용할때 에도 충분히 쓰이는 공격입니다.

 

(2)SPAN 포트 태핑

SPAN(Switch Prot Analyzer)은 포트 미러링을 이용합니다.

일반적인 포트 미러링은 침입탐지 시스템이나 네트워크 모니터링 또는 로그 시스템을 설치할 때 많이 사용한다.

 

 

스니퍼의 탐지  

 

(1)Ping을 이용한 스니퍼 탐지 

 

대부분의 스니퍼는 일반 TCP/IP에서 동작하기 때문에 Request를 받으면 Response를 전달 합니다.

이를 이용 의심이 가는 호스트에 Ping을 보내는데 이때 네트워크에 존재하지 않는 MAC주소로 보냅니다.

만약 ICMP Echo reply를 받으면 해당 호스트가 스니핑을 하고 있는 것입니다.

이유는 스니핑을 하지 않는 이상 존재하지도 않는 MAC주소에 응답하지 않기 때문입니다.

 

(2)ARP를 이용한 스니퍼 탐지 

 







ping과 유사한 방식으로, 위조된 ARP Request를 보냈을 때 ARP Response가 오면 프러미스큐어스 모드로 설정 되이 있는 것으로 알수있습니다.

 

(3)DNS를 이요한 스니퍼 탐지 

일반적인 스니핑 프로그램인 스니핑한 시스템의 ip주소에 DNS에 대한 이름 해석과정 ( 일명 dns lookup)을 수행합니다. 

이 방법은 원격, 로컬 모두 사용가능 하며, 테스트 대상 네트워크 (공격의심) 에 Ping sweep을 보내고 들어오는 Inverse-DNS lookup을 감시하여 스니퍼를 탐지합니다. 

 

(4)유인(Decoy)를 이용한 스니퍼 탐지

스니핑 공격의 주된 목적은 ID와 PASSWORD획득 입니다.

이걸 아는 관리자는 조작된 ID와 PASSWORD를 지속적으로 네트워크에 뿌려서, 이 위조된 ID와 패스워드에 접속을 시도하는 시스템을 탐지해냅니다.

 

(5)ARP watch를 이용한 스니퍼 탐지

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

한마디로 툴을 이용한 탐지기법입니다.

 

 

이번에는 Spoofing 입니다!!

Spoofing이란?

스푸핑이란 네트워크에서 MAC주소, ip주소 , 포트 등을 정보를 얻어 시스템권한 획득, 암호화된 세션 복호화, 네트워크 트랙픽 흐름 바꾸기 등 여러곳에 쓰이는 공격 기법입니다.

 

(1)ARP Spoofing 

가장 대표적인 Spoofing 방법입니다. 

ARP스푸핑은 MAC주소를 속이는 것입니다. 

 

예를들어 ,

서버의 MAC 주소 : AA

공격자의 MAC 주소 : CC

클라이언트의 MAC 주소 : BB


이때 , 공격자가 서버의 클라이언트에게 가짜 MAC주소인 CC를, 클라이언트에게 가짜 MAC주소인 CC 를 주게됩니다.

그럼 공격자가 서버와 클라이언트 컴퓨터에게 서로 통신하는 상대방을 공격자가 자기 자신으로 알렸기 때문에 서버와 클라이언트가 공격자에게 패킷을 보내고

공격자는 각자에게 받은 패킷을 읽은후 서버가 클라이언트에게 보내고자 하던 패킷을 클라이언트에게 정상적으로 보내주고, 클라이언트가 서버에게 보내고자 하던 패킷을 서버에게 보내줍니다.


윈도우에서 arp -a 명령을 이용하면 현재 인지하고 있는 IP와 해당 IP를 가지고 있는 시스템의 MAC주소 목록을 확인할수있습니다 = > ARP 테이블이라 합니다.


스푸핑 공격을 이 명령어로 확인 할수있습니다.


예를들어, 스푸핑 공격을 당하기 전의

자기의 아이피 : 10.0.0.1

MAC주소 : AA 라고 하고


스푸핑을 당하게 되면

자기의 아이피 : 10.0.0.1

MAC주소 : CC가 되게 된다.


방어 : 맥주소를 고정 시키면 됩니다.

arp -s [MAC 주소]

하지만 시스템이 재부팅 될때 마다 수행 해주어야 한다. 


(2) IP 스푸핑


IP스푸핑은 ARP스푸핑과 달리 IP를 속이는 것입니다.

정확 하게 얘기하면 다른이가 쓰는 IP를 획득해 권한을 얻는 것입니다.

여기선 트러스트 라는 개념이 쓰이게 됩니다.


트러스트 : 서버에서는 클라이언트의 정보를 서버에 미리 기록해두고 그에 합당한 클라이언트가 접

근해 왔을 때 아이디와 패스워드 입력 없이 로그인을 허락해주는 인증법입니다.


윈도우 : 액티브 디렉토리(Active Directory)

유닉스 : /etc/host.equiv

파일에 설정을 해주면 됩니다.


이러한 설정에 문제점은 인증이 IP를 통해서만 일어난다는 것입니다.

고로 공격자가 클라이언트의 IP로 설정 후 공격대상에 접속해 Dos 공격을 수행할수 있습니다.


(3) DNS 스푸핑


DNS 스푸핑은 웹 스푸핑과 비슷한 개념이지만 도메인 주소를 이용 

원래 웹 서버가 쓰던 도메인 주소를 다른 곳으로 연결시켜 공격하는 기법입니다.


다른 방식으로는 , 일단 자신의 웹서버를 하나 만들고

공격 대상이 자주가는 사이트를 골라 Webzip이나 WebStripper와 같은 툴로

해당 사이트를 긁어 옵니다.

그 후 ID와 패스워드를 입력받아 사이트로 전달해주는 스크립트 파일을 프로그래밍 합니다.

이때 , 공격대상은 자기도 모르는 사이 원래 보던 사이트로 착각하고 ID와 패스워드를 입력

이 ID와 패스워드가 공격자의 웹 서버로 전송되는 것입니다.

그럼 DNS 스푸핑은 어떤 식으로 작동 되는지 봅시다.



1번 : DNS Query

2번 : DNS Reply

3번 : Web Login


클라이언트가 DNS 서버에게 접속하고자 하는 IP주소(www.abc.com와 같은 도메인이름)을 물어봅니다. 이때 보내는 패킷이 바로 1번 (DNS Query)입니다.

그럼 DNS 서버가 해당 도메인 이름에 대한 IP주소를 클라이언트에게 보내줍니다.

그걸 받은 클라이언트가 받은 IP 주소를 바탕으로 웹 서버를 찾아 갑니다.

DNS 패킷은 UDP이므로 세션이 존재하지 않아 먼저 도착한 패킷만 신뢰하며, 다음에 도착한 정보는 버립니다.



1번 : DNS Query

1. 클라이언트가 DNS 서버로 DNS Query 패킷을 보내는 것을 확인 합니다.

2. 공격자는 로컬에 존재하므로 DNS서버보다 지리적으로 가깝고, 

  이에 따라 DNS 서버가 올바른 DNS Response패킷을 보내주기 전 클라이언트에게 위조된 DNS Response 패킷을 보낼 수 있습니다.

3. 클라이언트는 공격자가 보낸 DNS Response 패킷을 올바른 패킷으로 인식합니다.

  그리고 나서 원래 DNS 서버에서 온 Response 패킷은 버립니다.


이렇게 되면 클라이언트는 공격자의 위조된 웹 서버로 접속되게 되고

위와 같은 스크립팅으로 인해 ID와 패스워드가 노출 됩니다.



방어 : DNS Query를 보내지 않으면 됩니다.

   일반적으로 윈도우와 유닉스 모두 URL에 대한 IP를 확인할 때 , 맨 먼저 시스템 메모리 정보를 확인합니다.

예를들어 리눅스의 경우 /etc/hosts 파일에 URL과 IP정보를 등록 할 경우

DNS서버에 질의 하지 않고 접속이 가능합니다.

허나 모든 사이트를 등록 해놓기란 불가능 하므로 DNS에 대한 모든 스푸핑을 막기는 힘듭니다.

[출처] No.2 Sniffing OR Spoofing|작성자 Securely