ABOUT ME

-

08-18 10:00
Today
-
Yesterday
-
Total
-
  • 스니핑
    보안 & 보안 2017. 4. 12. 16:24

    스니핑은 네트워크 패킷을 가로채서 분석하는 해킹기법입니다. 아래는 파이썬을 사용한 간단한 스니핑 프로그램 예제입니다.

    from socket import *
    import os
    
    def sniffing(host):
        # 아래 값들은 소켓을 생성할 때 프로토콜을 지정하는 세 번째 인자로 사용
        # 윈도우는 프로토콜에 관계없이 들어오는 모든 패킷을 가로채기 때문에 IP를 지정해도 무관하지만 유닉스나 리눅스는 ICMP를 가로채겠다는 것을 명시적으로 표시해야함
        if os.name == 'nt':
            socket_protocol = IPPROTO_IP
        else:
            socket_protocol = IPPROTO_ICMP
        # socket_protocol로 지정된 프로토콜을 이용하는 Raw 소켓을 만들고 호스트와 바인드
        sniffer = socket(AF_INET, SOCK_RAW, socket_protocol)
        sniffer.bind((host, 0))
        # 가로채는 패킷에 IP 헤더를 포함하라고 소켓의 옵션으로 지정
        sniffer.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
    
        # 윈도우인 경우 소켓을 promiscuous모드로 변경하여 호스트에 전달되는 모든 패킷을 수신.
        # 소켓이 promiscuous 모드가 아니면 코드가 구동되는 컴퓨터가 목적지가 아닌 패킷은 모두 버리게 됨
        # if os.name == 'nt':
        #     sniffer.ioctl(SIO_RCVALL, RCVALL_ON)
        # 소켓으로 패킷이 들어올 때까지 대기. 65565는 버퍼의 크기로 단위는 바이트
        packet = sniffer.recvfrom(65565)
        print(packet)
    
        # if os.name == 'nt':
        #     sniffer.ioctl(SIO_RCVALL, RCVALL_OFF)
    
    print(gethostname())
    host = gethostbyname(gethostname())
    print('start sniffing {0}'.format(host))
    sniffing('127.0.0.1') # 호스트 이름을 IPv4형식으로 변경한 ip를 했을 때 에러나서 임시 ip 지정
    
    # 스니핑된 패킷 결과
    # (b'E\x00$\x00\x1d\xc1\x00\x00@\x01\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\x03\x03\x07\xe2\x00\x00\x00\x00E\x00\xeb\x00)\xf2\x00\x00@\x11\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xc7\xd9~x\x00\xd7\x00\x00', ('127.0.0.1', 0))

    종류

    스니핑에는 여러가지 종류가 있습니다.

    • IP Header 스니퍼
    • ICMP 스니퍼
      • IP 네트워크에서 진단이나 제어 용도로 사용되며, 오류에 대한 응답으로 생성.
    • 호스트 스캐너
      • ICMP 스니핑을 사용하면 해당 호스트가 살아있는지 아닌지 확인할 수 있음. 호스트 스캐너는 컴퓨터에 연결된 서브네트워크의 모든 호스트로 특정 메시지가 포함된 IP 데이터그램을 전송하고 이에 대한 응답 내용을 분석하여 호스트가 동작 중인지 알아내는 프로그램. 
    • PING을 사용한 호스트 스캐너

    방어대책

    • 패킷 스니퍼가 설치될 수 없도록 네트워크 미디어에 대한 물리적 접근 제한
    • 중요 정보에 대해 암호화 사용
    • ARP 스푸핑 방지를 위해 정적 IP와 정적 ARP 테이블을 사용
    • ARP 캐시에 게이트웨이 영구 MAC 주소 설정
    • SSH나 SCP, SSL 등과 같은 암호화 세션 사용
    • 승인된 사용자로 네트워크 제한이 가능하다면 스니핑 도구가 패킷을 감지하지 못하도록 브로드캐스트 기능 오프


    댓글 0