📚 네트워크 · 패킷 분석 › 03. Wireshark 패킷 분석 — 136편
이전 글: 135. DNS Packet 분석 · 다음 글: 137. HTTP Packet 분석

1. 개념

DHCP의 DORA 절차와 임대 갱신은 48. DHCP DORA 과정 — IP를 받는 4단계, DHCP 관련 공격과 탐지 원리는 71. DHCP 위장·고갈 공격의 원리와 탐지에서 다뤘습니다. 이 글은 Wireshark에서 DHCP 패킷의 어느 필드에 무엇이 들어 있고, 그것으로 "누가 누구에게 어떤 주소를 줬는가"를 확인하는 방법만 다룹니다.

Wireshark 3.0부터 해석기 이름이 bootp에서 dhcp로 바뀌었습니다. 오래된 자료의 bootp.* 필터는 dhcp.*로 바꿔 씁니다.

영역Wireshark 필드읽는 내용
메시지 종류dhcp.option.dhcp1 Discover, 2 Offer, 3 Request, 4 Decline, 5 ACK, 6 NAK, 7 Release, 8 Inform
방향dhcp.type1 Boot Request(클라이언트), 2 Boot Reply(서버)
식별dhcp.idTransaction ID, 한 번의 교환을 묶음
클라이언트dhcp.hw.mac_addr, dhcp.ip.client클라이언트 MAC, 기존 IP(갱신 시)
할당 주소dhcp.ip.your서버가 주는 IP (yiaddr)
중계dhcp.ip.relayRelay Agent 주소 (giaddr)
서버dhcp.option.dhcp_server_id응답한 DHCP 서버 식별 IP
옵션dhcp.option.requested_ip_address, dhcp.option.hostname, dhcp.option.vendor_class_id요청 IP, 호스트 이름, 클라이언트 종류
네트워크 설정dhcp.option.router, dhcp.option.domain_name_server, dhcp.option.ip_address_lease_time게이트웨이, DNS, 임대 시간

2. 동작 원리

캡처에서 한 번의 할당 과정을 묶어 읽는 순서입니다.

UDP 68 → 67 (클라이언트 → 서버), 67 → 68 (서버 → 클라이언트)
   ↓
dhcp.id 가 같은 패킷끼리 묶기
   ↓
Discover(1) → Offer(2) → Request(3) → ACK(5)
   │                                  │
   │ Offer/ACK에서 확인                │
   ├─ dhcp.ip.your              : 줄 주소
   ├─ dhcp.option.dhcp_server_id : 준 서버
   └─ dhcp.option.router / domain_name_server : 넘겨준 게이트웨이·DNS
   ↓
결과: "MAC X 가 서버 S 로부터 IP Y 를 받음"
  • 최초 할당에서는 클라이언트가 아직 IP가 없어 0.0.0.0 → 255.255.255.255로 보냅니다. 따라서 IP 주소가 아니라 dhcp.hw.mac_addr로 클라이언트를 식별합니다.
  • 서버 응답의 목적지가 브로드캐스트인지 유니캐스트인지는 클라이언트의 Broadcast 플래그(dhcp.flags.bc)와 서버 구현에 따라 다릅니다.
  • 다른 서브넷의 서버를 쓰는 환경에서는 dhcp.ip.relay에 중계 장비 주소가 채워집니다.

3. 주요 특징

메시지 종류별 확인 포인트

메시지먼저 볼 필드판단
Discoverdhcp.hw.mac_addr, dhcp.option.hostname, dhcp.option.vendor_class_id어떤 장치가 새로 접속했는가
Offerdhcp.option.dhcp_server_id, dhcp.ip.your누가 응답했나, 서버가 둘 이상인가
Requestdhcp.option.requested_ip_address, dhcp.option.dhcp_server_id여러 Offer 중 어느 서버를 선택했나
ACKdhcp.ip.your, lease time, router, DNS최종 할당 값
NAK서버 ID요청 거부 (네트워크 이동 시 흔함)
Decline요청 IP받은 주소가 이미 사용 중 (IP 충돌)
Releasedhcp.ip.client주소 반납

자주 쓰는 Display Filter

필터용도
dhcp.option.dhcp == 2모든 Offer (응답 서버 확인)
dhcp.option.dhcp == 5 && dhcp.ip.your == 192.168.10.57특정 IP를 할당한 ACK
dhcp.hw.mac_addr == 00:0c:29:aa:bb:cc특정 장치의 전체 DHCP 이력
dhcp.option.dhcp == 2 && !(dhcp.option.dhcp_server_id == 192.168.10.1)지정 서버(예시 주소) 외의 Offer
dhcp.option.dhcp == 4 or dhcp.option.dhcp == 6Decline·NAK 확인

4. 예시

실습 예시 — 본인 소유 VM에서 DHCP 재요청을 유도한 캡처(유도 방법은 48. DHCP DORA 과정 — IP를 받는 4단계 4-3 참고)를 분석합니다. 명령과 출력은 예시(값은 환경마다 다름)입니다.

# 교환별 요약: 메시지 종류, 클라이언트 MAC, 할당 IP, 서버, 호스트 이름
tshark -r /tmp/dhcp.pcapng -Y dhcp -T fields -E header=y \
  -e frame.number -e dhcp.id -e dhcp.option.dhcp -e dhcp.hw.mac_addr \
  -e dhcp.ip.your -e dhcp.option.dhcp_server_id -e dhcp.option.hostname

# Offer를 보낸 서버 목록 (둘 이상이면 확인 필요)
tshark -r /tmp/dhcp.pcapng -Y 'dhcp.option.dhcp == 2' -T fields \
  -e dhcp.option.dhcp_server_id -e eth.src | sort | uniq -c

# ACK로 넘겨준 게이트웨이·DNS
tshark -r /tmp/dhcp.pcapng -Y 'dhcp.option.dhcp == 5' -T fields \
  -e dhcp.ip.your -e dhcp.option.router -e dhcp.option.domain_name_server -e dhcp.option.ip_address_lease_time

첫 번째 명령의 형식 예시입니다.

frame.number dhcp.id    dhcp.option.dhcp dhcp.hw.mac_addr   dhcp.ip.your   server_id     hostname
1            0x5d3a91c2 1                00:0c:29:aa:bb:cc  0.0.0.0                      lab-rocky
2            0x5d3a91c2 2                00:0c:29:aa:bb:cc  192.168.10.57  192.168.10.1
3            0x5d3a91c2 3                00:0c:29:aa:bb:cc  0.0.0.0        192.168.10.1  lab-rocky
4            0x5d3a91c2 5                00:0c:29:aa:bb:cc  192.168.10.57  192.168.10.1
확인 포인트읽는 법
같은 dhcp.id네 패킷이 한 번의 할당 과정
Request의 server_id클라이언트가 192.168.10.1의 Offer를 선택
ACK의 dhcp.ip.your최종 할당 IP 192.168.10.57

📷 [실습 화면 삽입 위치] DHCP ACK 패킷 Details에서 Your (client) IP address와 Option(53) Message Type, Option(54) Server Identifier, Option(3) Router, Option(6) DNS를 펼친 화면


5. 보안 관점

관찰가능한 해석확인할 것
Offer의 서버 ID·출발지 MAC이 둘 이상비인가 DHCP 서버 (오설정 장비 또는 공격)두 번째 서버의 MAC 제조사, 연결 스위치 포트
ACK가 넘겨준 router·DNS가 표준 값과 다름트래픽 우회 목적의 설정 배포 가능성해당 ACK를 보낸 서버
짧은 시간 서로 다른 MAC의 Discover 폭증주소 풀 고갈 시도 (71. DHCP 위장·고갈 공격의 원리와 탐지)MAC 패턴, 유입 포트
알 수 없는 hostname·vendor class미등록 장치 접속자산 목록 대조
Decline 반복IP 충돌, 정적 IP 무단 사용해당 IP의 ARP 응답 MAC (114. ARP 패킷 필드 분석 — opcode와 Sender·Target 필드로 IP-MAC 매핑 검증하기)

6. SOC 관점

흔적 위치확인할 수 있는 것
패킷 캡처메시지 전체, 모든 서버의 Offer
DHCP 서버 로그·임대 DB특정 시각에 IP를 받은 MAC·호스트 이름
스위치DHCP Snooping 위반 로그(설정 시), 포트별 MAC

관제자가 확인할 질문

  • Alert 시각에 이 내부 IP를 사용한 장치(MAC·호스트 이름)는 무엇이었는가?
  • 네트워크에 응답하는 DHCP 서버는 지정된 서버 하나뿐인가?
  • 넘겨준 게이트웨이·DNS 값이 표준 설정과 같은가?

오탐 주의: 가정용 공유기·테스트 장비가 연결되어 의도치 않게 DHCP 서버로 동작하는 경우가 흔합니다. 또 IP는 임대 만료 후 다른 장치에 재할당되므로, IP만으로 장치를 특정하지 말고 반드시 시각 기준으로 임대 기록을 조회합니다.


7. 핵심 정리

  • Wireshark 3.0부터 필터는 dhcp.*이며, 메시지 종류는 dhcp.option.dhcp(1~8)로 구분합니다.
  • 최초 할당은 출발지가 0.0.0.0이므로 클라이언트는 dhcp.hw.mac_addr로 식별합니다.
  • dhcp.id로 한 번의 교환을 묶고, ACK의 dhcp.ip.your와 dhcp.option.dhcp_server_id로 "누가 무엇을 줬는가"를 확인합니다.
  • Offer 서버가 둘 이상이거나 router·DNS 값이 다르면 비인가 DHCP 서버를 의심합니다.
  • IP와 장치의 연결은 시각에 따라 바뀌므로 임대 기록과 함께 판단합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글