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

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 등과 같은 암호화 세션 사용
  • 승인된 사용자로 네트워크 제한이 가능하다면 스니핑 도구가 패킷을 감지하지 못하도록 브로드캐스트 기능 오프


'보안 & 보안' 카테고리의 다른 글

SSL Pinning  (0) 2018.12.18
TLS (Transport Layer Security)  (0) 2018.12.18
스니핑  (0) 2017.04.12
패스워드 크래킹  (0) 2017.03.28
알려진 평문 공격 (기지 평문 공격) - Known-plaintext attack  (0) 2017.03.27
무차별 대입 공격 (Brute Force Attack)  (0) 2017.03.27

+ Random Posts