[카테고리:] 미분류

  • macOS에서 Wireshark

    SNI 확인(HTTP/2·HTTP/3/QUIC 포함)

    title: "macOS에서 Wireshark로 SNI 확인(HTTP/2·HTTP/3/QUIC 포함) 실습"
    slug: macos-wireshark-sni-howto
    series: "URL·TLS·SNI·필터링·DPI 실전 가이드"
    author: EX Corp. Tech Team
    summary: "맥에서 복호화 없이 TLS ClientHello의 SNI(호스트명)를 확인하는 법. TCP(TLS1.2/1.3)와 QUIC(HTTP/3) 모두 대비한 캡처, 필터, 징후 판독, CLI 자동화까지."
    tags: [Wireshark, tshark, TLS, SNI, QUIC, HTTP3, macOS, DPI]
    reading_time: "10분"
    cover_image_suggestion: "맥북 화면에 Wireshark 패킷과 SNI 필드가 강조된 스크린샷 스타일 일러스트"
    

    목표

    • 복호화 없이 TLS ClientHello → SNI(Server Name Indication) 를 확인한다.
    • HTTP/1.1·HTTP/2(TCP 443)HTTP/3/QUIC(UDP 443) 모두에서 재현한다.
    • 필터링/차단 징후(RST·타임아웃 등)를 관찰한다.

    0) 준비물

    • macOS 12 이상(Intel/Apple Silicon)
    • Wireshark (CLI는 tshark) brew install --cask wireshark # 설치 중 ChmodBPF 권한 부여 동의 설치 후 Wireshark → Help → About Wireshark → Capture Privileges 에서 BPF 권한 OK 확인.

    1) 브라우저/클라이언트 세팅(간편 재현용)

    • 간단 재현은 curl 권장 (HTTP 버전 강제 용이) curl --http1.1 -I https://example.com curl --http2 -I https://example.com
    • HTTP/3 트래픽 확인을 원하면 크롬/사파리 최신에서 사이트 접속(HTTP/3 지원 도메인 이용). 브라우저에서 QUIC를 끄고 TCP로만 보고 싶다면: 최신 버전에선 플래그가 없을 수 있으니 curl 위주로 테스트 후, 별도로 H3를 추가 관찰하세요.

    2) 캡처 시작

    1. Wireshark 실행 → Capture 인터페이스 선택
      • Wi-Fi: 보통 en0, 유선: enX
      • VPN 사용 중이면 터널 인터페이스 utunX 선택 필요
    2. Start 클릭으로 캡처 시작

    3) 디스플레이 필터 (복붙용)

    A) TCP 위 TLS(HTTPS/1.1·2)

    • ClientHello만 보기 tls.handshake.type == 1 && tcp.port == 443
    • SNI가 포함된 핸드셰이크만 tcp.port == 443 && tls.handshake.extensions_server_name

    B) QUIC(HTTP/3)

    • QUIC 초기 핸드셰이크에서 ClientHello 보기 udp.port == 443 && quic && tls.handshake.type == 1
    • QUIC에서 SNI가 보이는 경우만 quic && tls.handshake.extensions_server_name

    주의: Wireshark 버전에 따라 QUIC 디섹터 인식이 달라 최신 버전 권장. 필요 시 Decode As… → QUIC 지정.


    4) 패킷 안에서 SNI 찾기

    아무 ClientHello 패킷을 더블클릭 → Packet Details 창에서:

    Transport Layer Security
      TLSv1.3 Record Layer: Handshake Protocol: Client Hello
        Extension: server_name (SNI)
          Server Name: www.example.com   ← 여기!
    

    QUIC(HTTP/3)도 원리는 동일. 초기 QUIC 패킷에서 TLS ClientHello가 보이며 같은 위치에서 server_name을 확인.


    5) “차단/필터링이 동작하는지” 징후 보기

    • 정상: ClientHello → ServerHello → 핸드셰이크 완료 → 암호화된 애플리케이션 데이터
    • 차단 의심:
      • ClientHello 이후 ServerHello 미수신RST/FIN으로 즉시 종료
      • 일정 지연 뒤 타임아웃
      • (평문 HTTP일 경우에만 경고 리다이렉트가 보임. HTTPS는 보통 오류 페이지/연결 실패)

    6) CLI 자동화(tshark) 스니펫

    A) TCP 443에서 SNI 로그 뽑기

    tshark -i any -f "tcp port 443" -Y "tls.handshake.type == 1" \
      -T fields -e frame.time -e ip.src -e ip.dst -e tls.handshake.extensions_server_name \
      | tee sni_tcp.log
    

    B) QUIC(UDP 443)에서 SNI 로그 뽑기

    tshark -i any -f "udp port 443" -Y "quic && tls.handshake.type == 1" \
      -T fields -e frame.time -e ip.src -e ip.dst -e tls.handshake.extensions_server_name \
      | tee sni_quic.log
    

    C) CSV 저장(시간·출발지·목적지·SNI)

    tshark -i any -f "tcp port 443 or udp port 443" -Y "tls.handshake.extensions_server_name" \
      -T fields -E header=y -E separator=, \
      -e frame.time_epoch -e ip.src -e ip.dst -e tls.handshake.extensions_server_name \
      > sni.csv
    

    7) 빠른 교차 검증(오픈SSL)

    특정 IP로 붙되 SNI를 명시해 인증서 선택 변화를 확인:

    openssl s_client -connect 93.184.216.34:443 -servername example.com -tls1_3 </dev/null 2>/dev/null \
    | openssl x509 -noout -subject -issuer
    

    Wireshark 캡처에서도 해당 세션의 ClientHello에 Server Name: example.com 이 찍히는지 확인.


    8) 트러블슈팅 매트릭스

    증상가능한 원인해결 팁
    패킷이 안 잡힘인터페이스 오선택(BPF 권한 미적용)Wi-Fi면 en0, VPN이면 utunX. 설치 시 ChmodBPF 동의 재확인
    QUIC에서 SNI가 안 보임디섹터 버전/Decode As 미설정Wireshark 최신 사용, Decode As → QUIC, 필터 재적용
    SNI 필드 자체가 없음ECH(Encrypted ClientHello) 활성/커버명만 노출다른 도메인으로 비교, 브라우저 실험 기능 비활성, DNS/브라우저 조합 변경
    RST/타임아웃 반복중간 장비의 도메인 차단(SNI 기반)동일 도메인으로 TCP/H3 모두 테스트, 타 경로/망/단말 교차 실험
    HTTP/1.1만 잡힘브라우저가 H3/TCP 선택 달리함curl --http2/브라우저로 각각 실험, 사이트 H3 지원 여부 확인

    ECH 감지 팁: Wireshark 버전에 따라 encrypted_client_hello 확장이 표시되거나, 아예 SNI가 비어 있음으로 드러납니다.


    9) 현업 체크리스트

    • 캡처 인터페이스: 물리 NIC vs 터널(utunX) 구분
    • HTTP/2/3 혼재 대비: TCP와 UDP 443 동시 필터
    • SNI만 보고 정책 판단 시, ECH 적용 도메인 혼재 가능성 고려
    • SIEM 연동: SNI 로그는 민감할 수 있으니 수집·보존·마스킹 정책 명확화

    10) TL;DR

    • 맥에선 Wireshark만으로 SNI 확인 가능(복호화 불필요).
    • TCP(HTTPS/1.1·2)QUIC(HTTP/3) 모두 ClientHello에서 server_name 를 찾는다.
    • 차단 징후는 ClientHello 이후 ServerHello 부재+RST/타임아웃 패턴으로 판독.
    • ECH 활성 환경에서는 SNI가 보이지 않을 수 있으니 대조 실험으로 확정.