1579, 9/79 회원가입  로그인  
   loveaaav
   [펌]스니핑

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8026 [복사]


1. 스니핑(Sniffing)이란
스니핑(Sniffing)은 '코를 킁킁거리다'라는 의미이다. 도청(Eavesdropping)또한 스니핑의 한 종류이다. 우리가 공부할 내용은 유선 랜을 통한 스니핑 공격이다. Spoofing과 마찬가지로, 주로 내부 네트워크 에서 진행된다.


네트워크 통신을 할 때 네트워크 카드는 IP Address와 MAC Address를 가지고 자신에게 들어오는 패킷을 받을지, 받지 않을지 결정한다. 자신의 MAC Address, IP Address와 일치하지 않는 신호는 받지 않는다. 그러나 공격자는 네트워크상의 모든 패킷을 볼 수 있어야 한다. 따라서 필터링을 해제하게 되는데, 이를 Promicuous Mode라고 한다.

▲[그림 7-1] 정상적인 필터링

▲[그림 7-2] Promicuous Mode

공격자는 이런 Promicuous Mode로 설정된 Sniffer를 네트워크상에 설치하여 패킷을 훔쳐보거나, 공격을 수행한다.




    2. 스니핑(Sniffing) 기법
▶MAC Flooding 공격
스위치 재밍 또는 MACOF 공격이라고도 한다. 위조된 ARP 패킷을 지속적으로 보내, 스위치가 MAC 주소를 저장하는 table의 저장 용량을 초과하게 만들면 이 스위치는 더미 허브처럼 작동하게 된다.
※더미 허브는 연결된 네트워크상의 모든 호스트에게 패킷을 전송한다. Sniffer를 설치해 두었다면 주고받는 모든 패킷을 볼 수 있다. 단, 일부 스위치는 이러한 공격이 통하지 않게 설계되어 있다.

▶ARP Redirect 공격
공격자가 Gateway로 위장하여 네트워크 상에 변조된 정보를 Broadcast하면, Gateway로 가는 모든 패킷들은 공격자를 거치게 된다.


    
    3. BackTrack Ettercap을 이용한 SSH Sniffing
▶Ettercap의 기능
MITM(중간자 공격)을 위한 기능들을 사용할 수 있다. 주요 기능은 다음과 같다.
1) ARP Poisoning(ARP Spoofing), ICMP Redirection, DHCP Poisoning
2) SSH1, SSL 암호화 Sniffing
3) 연결된 세션에 Data, Character Injection
4) Packet Filtering 또는 Dropping
5) Password 수집
6) Sniffing 하는 동안 호스트간의 연결 해제

▶SSH의 암호화 방식과 공격 방법
SSH란 Telnet과 같은 원격 접속 프로토콜이다. 패킷이 암호화되어 전송되기 때문에 Telnet과 같은 비 암호화 프로그램보다 보안성이 뛰어나다. SSH 암호화에는 공개 키와 개인 키, 비밀 키가 사용된다.

    ▲[그림 7-3] SSH 프로토콜의 암호화 과정
이러한 암호화 과정을 진행할 때, 공격자가 ARP Spoofing 공격으로 패킷을 훔치게 된다.
Client에게는 공격자가 Server라고 알리고, Server에는 공격자가 Client라고 알린다. 공격을 당한 후 암호화 방식은 다음과 같이 변한다.


    ▲[그림 7-4] ARP Spoofing 공격 후 비밀키 획득

이렇게 얻은 비밀키로 주고받는 모든 패킷을 복호화 할 수 있다.

※이러한 ARP Spoofing을 통한 비밀키 획득은 SSH 1에서만 가능하다. SSH 프로토콜은 SSH1, SSH2 두 개의 버전이 존재하는데, SSH 1은 ARP Spoofing공격에 취약한 반면, SSH 2는 이러한 공격이 통하지 않는다. 하지만 아직 다수의 서버가 SSH 1을 사용하고, SSH1과 SSH2 를 함께 사용하는 경우 또한 많이 있다.


▶Ettercap를 이용한 SSH Sniffing 실습
BackTrack OS를 준비한다. BackTrack은 RedHat을 기반으로 해킹 툴들을 모아놓은 OS이며, 아래 링크에서 다운받을 수 있다. 현재 배포중인 버전은 BackTrack6(KALI Linux)이다. 다운로드 받아 Vmware에 설치하자.
BackTrack : http://www.backtrack-linux.org/downloads/

실습에 필요한 OS는 총 3개이다. 공격자의 BackTrack OS, Server역할을 할 CentOS, Client 역할을 할 Windows(현재 사용중인 OS)를 준비한다. CentOS의 IP Address와 Windows의 IP Address를 메모해 두자.
- CentOS IP Address(Server) : 192.168.0.12
- Windows IP Address(Client) : 192.168.0.3

CentOS를 실행해 'vi /etc/ssh/sshd_config" 명령어를 입력한다.
21~22행 쯤에 있는 Protocol 2를 Protocol 1,2로 수정해준다. SSH 1, SSH 2를 모두 사용할 수 있게 설정을 바꾸어주는 것이다.

    ▲[그림 7-5] /etc/ssh/sshd_config 파일에서 Protocol 설정
설정을 마쳤다면 service sshd restart 명령어를 사용해 demon을 restart 한다.
이제 BackTrack을 실행하자. 부팅하면 가장 위에 나타나는 BackTrack Text로 들어가서 startx를 입력해 주면 된다.

BackTrack의 터미널에서 다음 명령어를 입력하자.
cd /usr/local/share/ettercap/ ( 디렉터리 이동 )
etterfilter etter.filter.ssh -o etter.filter.ssh.co ( 컴파일 )
컴파일 한 필터는 SSH1, SSH2를 모두 사용하는 프로토콜일 경우 SSH1을 사용하라는 내용이다.
이제 터미널에 ettercap -G 명령어를 입력하면 Ettercap이 실행된다.
다음 순서대로 실행 해 보자(GUI Interface를 제공하므로, 별도의 자세한 설명은 생략한다).

Sniff - Unified sniffing - OK (기본 스니핑 모드 실행)
Hosts - Scan for Hosts ( Ethernet 내부의 모든 호스트 검색 )
Hosts - Hosts List ( 호스트 목록 보기 )
-Windows IP Address 선택 - Add to Target 1
-CentOS IP Address 선택 - Add to Target 2
Mitm - ARP Poisoning ( 중간자 공격 - ARP Spoofing 공격 실행 )
Filters - Load a Filter - etter.filter.ssh.co ( 컴파일 해 놓은 filter를 선택)
Start - Start sniffing ( Sniffing 시작 )

위 과정을 모두 마쳤으면 Windows로 돌아와 Putty를 이용해 CentOS로 접속해 보자. 똑똑한 Putty는 다음과 같이 서버의 호스트 키를 신뢰할 수 없다고 경고 창을 띄워준다. Yes를 선택하고 로그인을 진행 해 보자.

    ▲[그림 7-6] Putty 한글판에서의 보안 경고
정상적으로 로그인을 마쳤다면 BackTrack의 Ettercap 으로 돌아가 보자. 다음과 같이 입력한 ID와 Password가 보일 것이다.

    ▲[그림 7-7] ID와 Password 획득




    4. SSL Sniffing
HTTP는 패킷의 암호화 기능을 지원하지 않는다. 하지만 ID / Password, 개인정보 등 중요한 정보를 입력, 전송 할 때는 암호화를 할 필요성이 있다. 이러한 이유로 사용하는 것이 SSL(Secure Sockets Layer)라는 암호 규약이다. 기존의 HTTP에 암호화를 진행할 수 있는 SSL 프로토콜을 추가한 것이 HTTPS 이다. HTTPS 는 443번 포트를 사용하며, 전송 속도가 매우 느리다. 따라서 중요한 정보(개인정보, ID / Password 등)를 전송 할 때만 사용한다.
Google.com에 접속해 보면 주소 창에 다음과 같이 표시되는 것을 볼 수 있다.


    ▲[그림 7-8] SSH를 사용하는 웹 페이지의 주소 창
SSL 프로토콜을 사용하는 웹 페이지에서는 주소 창에 HTTPS 로 표시된다.
웹 서버와 클라이언트가 SSL 통신을 하기 위해 주고받는 패킷의 내용을 대략적으로 요약하면 다음과 같다.

    ▲[그림 7-9] SSL 통신 과정

1) 클라이언트가 80번 포트(HTTP)로 접속을 시도한다.
2) 서버는 클라이언트에게 447 포트(HTTPS)로 접속할 것을 요청한다.
3) 클라이언트가 443 포트(HTTPS)로 접속한다.
4) 서버가 인증서를 발급하면, 세션이 확립된다.

암호화 통신을 하게 되면, 패킷을 Sniffing 하더라도 내용을 볼 수 가 없다. 따라서 암호화를 하지 않는 HTTP를 사용하게 만들어야 한다. 일단 공격자가 ARP Spoofing 공격을 하여, 자신을 Gateway로 속인다. 그리고 다음과 같은 패킷 변조를 시작한다.


    ▲[그림 7-10] SSL Sniffing
공격자가 중간에서 서버의 HTTPS 접속 요청을 HTTP 요청으로 변조한다. 클라이언트가 암호화 되지 않은 패킷을 전송하면, 이를 암호화 해서 서버에 전달한다. 이제 클라이언트가 보내는 모든 패킷을 훔쳐 볼 수 있게 되었다.

▶SSL Strip과 ARP Spoof를 이용한 SSL Sniffing
이제 실제로 로그인 과정에서의 SSL 통신을 Sniffing하여, ID와 Password를 훔쳐 보자.
사용할 툴은 SSL Strip과 ARP Spoof이다. SSL Strip 툴은 BackTrack에서 제공하지 않으므로, 설치가 필요하다.
희생자가 될 호스트의 IP Address를 알아둔다. Windows OS를 사용하는 호스트가 희생자가 될 것이다.

일단 BackTrack을 실행해 IP Forwarding 설정을 해 주어야 한다. Forwarding 설정을 해 주면 희생자가 공격자의 호스트를 거쳐서 인터넷에 접속하게 하게 된다. echo 1 > /proc/sys/net/ipv4/ip_forward 명령어를 사용한다.

IP tables 정책을 추가하여, 희생자가 80번 포트로 공격자에게 접속하면 10000번 포트를 사용해 웹 페이지로 접근하도록 설정한다. 명령어는 다음과 같다.
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 10000

    ▲[그림 7-11] Forwarding 설정과 IP tables 정책 추가
이제 BackTrack 설정이 완료되었다. ARP Spoof 툴을 실행시켜 ARP Spoofing공격을 해 보자.
명령어는 arpspoof -i [Interface] -t [희생자 IP] [Gateway] 형태로 사용한다.

    ▲[그림 7-12] ARP Spoof 툴을 이용한 ARP Spoofing
정상적으로 실행되었다면 계속해서 패킷을 보내는 메세지가 출력 될 것이다.

새로운 터미널을 열고, sslstrip.py을 컴파일 한다. 파이썬을 사용해 제작한 툴이므로,
python sslstrip.py -w [새 txt 파일] -l [포트] 명령어를 사용한다.

    ▲[그림 7-13] SSL Strip 컴파일

공격이 완료되었다. 희생자의 Windows 호스트로 돌아가 www.google.com으로 접속해 보자.

    ▲[그림 7-14] 공격 성공 확인
이전과 다르게 주소 창에 HTTPS 가 아닌 HTTP가 표시된다. ID와 Password를 입력해 로그인을 한 후, BackTrack으로 돌아가 컴파일 할 때 입력한 txt파일을 열어 보면 다음과 같이 ID와 Password가 저장되어 있는 것을 볼 수 있다.

    ▲[그림 7-15] Luuzun@naver.com의 로그인 기록




     5. 보안 방안
▶SSH Sniffing
1) 아직 공격 기법이 알려지지 않은 SSH 2 버전을 사용한다.
2) SSH 연결에 사용하는 포트를 다른 포트로 변경한다. (/etc/ssh/sshd_config 의 Port 22를 다른 포트로 변경)

    ▲[그림 7-16] 포트번호 변경 및 SSH 2 사용

▶SSL Sniffing
1) Gateway의 MAC 주소를 고정시켜 ARP Spoofing 공격을 차단한다.
2) SSL을 한번 더 암호화 시켜, Password를 Sniffing 당하더라도 내용을 알아볼 수 없게 한다.
출처 http://luuzun.blog.me/50189877218

  Hit : 10560     Date : 2014/03/24 02:18
[불법/스팸글로 신고하기]



    
jeongseok0 감사합니다 2014/04/15  
1419   원재아빠님의 gcc 2.96에서의 버퍼 구조 강좌.[9]     ttongfly
09/19 10717
1418   해킹기법? (기발하다고 해야하나,웃기다고 해야하나)[35]     whqkdnf000
07/31 10689
1417   [Reverse Engineering] 리버싱의 기초 - 범용 레지스터와 Assembly(Pop,Mov)     zen0c1de
07/18 10630
  [펌]스니핑[1]     loveaaav
03/24 10559
1415   c언어 for문      hacs98
06/15 10526
1414   I. 리눅스 구조 및 일반 명령어.     괴도js
07/04 10494
1413   왠만한사람들은다알지도모르겠지만[6]     백룡출해
03/17 10418
1412   C언어(진법)[9]     whqkdnf000
02/25 10415
1411   [C기초] 11 - 함수 매개변수로 배열을 넘기려면?      sihun1113
05/01 10394
1410   메모리 덤프(블루 스크린=STOP 스크린) 코드 및 해결[1]     ROK.AF
02/09 10353
1409   네트워크 개념 휘어잡기 7[8]     소유
09/16 10335
1408   리눅스 명령어 한꺼번에(소유님꺼)[11]     ssakura
07/07 10301
1407   [동강]백트랙을 이용한 재밌는 놀이들![4]     cdpython
09/29 10191
1406   알기 어렵게 설명한 Buffer Overflow[4]     blackcoder
02/17 10174
1405   네트워크 개념 휘어잡기 6[10]     소유
09/15 10148
1404   [자작]포렌식을위한NTFS구조[2]     havu
01/11 10143
1403   개발자가 알아야할 10가지 보안팁으로 코드를 보호하자.     푸른하늘
09/01 10142
1402   D.Dolphin님 질문내용] LAN과 WAN의 차이점과 VAN의 정의[5]     푸른하늘
09/11 10109
1401   원격종료....[39]     bsjzzz
01/02 10027
1400   2번째C강좌~![9]     괴도js
07/03 10022
[1][2][3][4][5][6][7][8] 9 [10]..[79]

Copyright 1999-2021 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com