보안

네트워크 보안: 스니핑(Sniffing)

hjjummy 2025. 4. 21. 20:16

1.  스니핑(Sniffing)이란?

  • 스니핑(sniffing): sniff는 '코를 킁킁거리다'라는 의미
  • 수동적(Passive) 공격: 트래픽을 가만히 보기만 해도 정보 획득 가능
  • 예: 전화선이나 UTP 케이블에 탭핑(tapping)하여 전기신호 분석

핵심: 보내는 쪽은 아무것도 모른 채 정보가 새나감


2.  스니핑이 가능하려면? – 네트워크 구조의 OSI 계층과 패킷 전달 과정 이

패킷은 OSI 계층을 따라 전송된다.

 

2계층 (데이터링크) 프레임 전달 MAC 주소
3계층 (네트워크) IP 패킷 전송 (데이터그램)  IP 주소
4계층 (전송) TCP/UDP 전송 (세그먼트) 포트 번호

패킷 전달 조건

  • 목적지 IP가 본인의 주소일 경우만 수신
  • 아니면 폐기하거나 라우팅 테이블을 따라 다음 네트워크로 전달

일반적으로 네트워크 카드는 목적지가 본인 MAC이 아니면 패킷을 버리게 되어 스니핑이 불가능하다.
그런데 이 필터링을 해제하는 것이 바로 다음 단계이다.


3. 스니핑의 원리

일반적으로 네트워크 카드는 목적지가 본인 MAC/IP가 아니면 패킷을 버리게 되어 스니핑이 불가능하다.

그런데 이 필터링을 해제하는 것이 바로 다음 단계이다.

프러미스큐어스(Promiscuous) 모드: 스니핑의 필수 조건

NIC(Network Interface Card)가 모든 네트워크 트래픽을 받아들이도록 설정하는 것

→ 기본적으로 NIC는 목적지 MAC 주소가 자신일 때만 수신하지만, 이 모드에서는 모든 패킷이 애플리케이션에 전달됨

  • NIC가 모든 트래픽을 수신하도록 설정
  • 필터링 없이 모든 프레임을 사용자에게 전달

 

랜카드 설정 명령어

$ ifconfig           # 인터페이스 상태 확인
$ ifconfig [ifname] promisc   # Promiscuous 모드 설정

4. 스니핑 실습도구

도구 ①: TCPDump

특징

  • 리눅스 기본 스니핑 도구
  • 관리자 느낌이 강
  • 법적 증거로도 사용 가능

▶ 실행 예시

$ sudo tcpdump -i eth0 -xX host 192.168.4.128

 

옵션 설명
-i [ifname] 감시할 인터페이스
-xX 16진수 + ASCII 함께 출력
host 특정 IP와의 트래픽만 캡처

실습 환경에서는 공격자가 tcpdump를 실행 중이고, 피해자는 Telnet 서버(192.168.4.128)에 접속 중이다.

-> Telnet은 ID/PW를 암호화 없이 평문 전송하기 때문에, 도청 시 모든 정보가 드러난다.


5. 스니핑 실습 예제: Telnet 도청

실습 시나리오

공격자 192.168.4.129 tcpdump 실행
피해자 192.168.4.128 Telnet 서버
브릿지 192.168.4.2 가상 연결
  • Telnet ID: test
  • Telnet PW: testpw1234
  • 입력된 문자 한 글자씩 전송됨
  • 서버가 입력된 문자를 echo 반사함

🔓 Telnet, FTP 등은 평문 전송이므로 쉽게 탈취 가능


6.  스니핑 보조 도구

(1) Fragrouter

  • 세션 중간 가로채기 후, 받은 패킷을 정상 목적지로 전달(relay)
  • 패킷 릴레이 도구
  • Fragrouter 대체 명령 (리눅스 기본 기능) : sudo sysctl net.ipv4.ip_forward=1
 

(2) DSniff

  • FTP, Telnet, HTTP 등 다양한 프로토콜의 ID/PW를 자동 추출  도구
  • Telnet, FTP, POP3, IMAP, HTTP 등 다양한 프로토콜 지원
  • 해커 대응 도구로도 사용됨

사용 예

  • dsniff 실행 후 FTP/Telnet 접속 시 ID/PW 감지
  • Telnet은 입력한 명령어까지 노출됨

7.  Scapy로 스니핑

Scapy는 Python 기반의 네트워크 패킷 생성/분석 도구다.
패킷을 수집하고, 구조를 분석하고, 스니핑에 응용할 수 있다.

패킷 수집 예제

 
from scapy.all import *

pkts = sniff(iface="eno1", count=2)
hexdump(pkts[0])
ls(pkts[0])

 

traceroute 예제

from scapy.all import *

ip = IP(dst="inclab.sungshin.ac.kr")
icmp = ICMP()

for ttl in range(1, 5):
    ip.ttl = ttl
    resp = sr1(ip/icmp, timeout=2, verbose=0)
    print(resp.src if resp else "***", f"hops = {ttl}")

8. 스위치 환경의 스니핑 제한과 우회

스위치 동작 각 장비의 MAC 주소 기억 → 해당 포트로만 전달
결과 스니핑 불가 (기본 상태에서는 다른 호스트 패킷 볼 수 없음)

→ 스위칭 네트워크에서는 패킷이 대상 포트에만 전달되기 때문에 스니핑이 원천적으로 차단된다.

하지만 다음과 같은 방법으로 우회가 가능하다.

 

우회방법: ARP 스푸핑, 스위치 재밍 


9.  ARP 스푸핑 및 리다이렉트

앞서 언급한 스니핑은 도청 기술이고, ARP 스푸핑은 도청을 가능하게 만드는 트래픽 유도 기술이다.
서로 다르지만 **실제 공격에서는 함께 사용되어 중간자 공격(MITM)**이 완성됨

 

🔸 ARP 스푸핑

    ARP는 ARP 메세지가 유효한지 확인할 수 있는 정보 X

  • 거짓된 ARP 메시지를 송신하여 피해자의 ARP 캐시를 오염시킴 =ARP 캐시 포이즈닝
  • “이 IP는 나야”라고 MAC 주소 속이기

🔸 ARP 리다이렉션 (2계층 공격)

  • ARP 스푸핑의 일종
  • 자신을 라우터라고 속여 피해자 패킷을 가로챔
  • 이후 relay를 통해 실제 라우터로 전송
$ sudo arpspoof -t 192.168.4.128 192.168.4.1
 

→ 받은 패킷은 fragrouter나 IP forwarding으로 다시 라우터로 전달

 

ARP 리다이렉션 실습 과정의 흐름

 

  • arpspoof로 클라이언트에게 "내가 라우터야"라고 속임
  • fragrouter 또는 ip_forward로 패킷을 실제 라우터로 전달
  • 세션이 끊어지지 않음 → MITM 성공
  • 스니핑 도구(tcpdump, dsniff)로 트래픽 감청 가능

 

10.  스위치 재밍(Switch Jamming)

스위치 MAC 테이블 과부하로 허브처럼 동작 유도

 

  • 스위치 내부는 MAC 주소 ↔ 포트 번호 매핑 테이블을 유지함
  • 이 테이블의 저장 용량이 유한
  • 수천 개의 가짜 MAC 주소를 브로드캐스트로 전송하면 → 테이블이 넘쳐서 기존의 올바른 MAC 정보가 삭제됨
  • 스위치가 동작 실패하여 모든 포트로 트래픽을 전달 → 스니핑이 가능해짐 (더미 허브처럼 됨)

 

🔥 일종의 MAC 테이블 버퍼 오버플로우 공격