31. Ethernet 프레임과 MAC 주소 · ARP 동작 원리

changseop lee·7일 전

📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 31편
이전 글: 30. UDP Datagram · 다음 글: 32. ARP Request와 Reply
참고(리눅스 시스템 기초): ss와 ip 명령어 — ip neigh 명령어 자체의 옵션은 이 글에서 다룹니다.

1. 왜 알아야 하는가

1편에서 "MAC 주소는 구간마다 바뀌고, IP 주소는 목적지까지 유지된다"고 정리했습니다.
그렇다면 컴퓨터는 목적지 IP만 알고 있을 때 다음 구간의 MAC 주소를 어떻게 알아낼까요? 그 답이 ARP입니다.

보안관제에서 L2(데이터링크 계층)가 중요한 이유는 다음과 같습니다.

  • ARP에는 인증 기능이 없습니다. 같은 네트워크 안의 누구든 "내가 게이트웨이다"라고 거짓 응답을 보낼 수 있습니다. (ARP Spoofing → 중간자 공격)
  • L2 공격은 방화벽 로그에 거의 남지 않습니다. 방화벽은 주로 L3~L4를 보기 때문입니다.
  • 내부 호스트가 감염되었을 때 "같은 네트워크에서 누가 누구에게 말을 걸었는가"를 확인하는 출발점이 L2 증거(ARP 테이블, 스위치 MAC 테이블)입니다.

2. 핵심 개념

2-1. Ethernet II 프레임 구조

| Dst MAC | Src MAC | EtherType | Payload (46~1500 byte) | FCS |
|  6 byte |  6 byte |   2 byte  |  IP 패킷, ARP 메시지 등 | 4 byte |
|<------- Ethernet 헤더 14 byte ------->|
필드의미분석 포인트
Dst MAC이 구간에서 프레임을 받을 장비ff:ff:ff:ff:ff:ff면 브로드캐스트(같은 네트워크 전체)
Src MAC이 구간에서 프레임을 보낸 장비내부 호스트를 식별하는 L2 단서
EtherTypePayload에 무엇이 들어 있는지0x0800 IPv4 · 0x0806 ARP · 0x86DD IPv6 · 0x8100 VLAN 태그
FCS오류 검출용 값보통 NIC가 처리하므로 캡처 결과에는 대부분 보이지 않음

프리앰블(Preamble)과 SFD도 NIC 하드웨어가 처리하므로 Wireshark에서는 보이지 않습니다.

2-2. MAC 주소 읽는 법

00:0c:29 : aa:bb:cc
└ OUI ┘   └ 장비 고유 번호 ┘
(제조사 식별, 24bit)
구분판별 방법관제에서의 의미
OUI(앞 3바이트)제조사 식별. Wireshark가 VMware_aa:bb:cc처럼 자동 표시서버실에 없어야 할 제조사 장비가 보이면 확인 대상
브로드캐스트ff:ff:ff:ff:ff:ffARP 요청, DHCP Discover 등
멀티캐스트첫 바이트의 최하위 비트가 1 (예: 01:00:5e:…)정상 서비스 광고 트래픽이 많음
로컬 관리 주소첫 바이트의 두 번째 비트가 1 (예: x2, x6, xA, xE로 시작)스마트폰의 MAC 랜덤화, 가상화, 또는 MAC 변조 가능성

MAC 주소는 소프트웨어로 쉽게 바꿀 수 있습니다. MAC만으로 장비를 확정하면 안 되고, IP 할당 기록(DHCP 로그)이나 스위치 포트 정보와 함께 봐야 합니다.

2-3. ARP (Address Resolution Protocol)

IP 주소 → MAC 주소를 알아내는 프로토콜입니다. 같은 네트워크(브로드캐스트 도메인) 안에서만 동작합니다.

메시지Opcode전송 방식내용
ARP Request1브로드캐스트"192.168.10.1 가진 사람? 192.168.10.20에게 알려줘"
ARP Reply2유니캐스트"192.168.10.1은 00:50:56:dd:ee:ff야"
Gratuitous ARP1 또는 2브로드캐스트요청하지 않았는데 자기 IP↔MAC을 알림 (보낸 IP = 찾는 IP)

3. 동작 원리

3-1. 외부 서버로 나갈 때 ARP는 누구를 찾는가

[내 PC 192.168.10.20]  목적지: 8.8.8.8
   ↓ ① 라우팅 테이블 확인
   ↓    8.8.8.8은 내 네트워크(192.168.10.0/24)가 아님 → 게이트웨이 192.168.10.1로 보내야 함
   ↓ ② ARP 캐시 확인 : 192.168.10.1의 MAC이 있는가?
   ↓    없음 → ARP Request 브로드캐스트  "192.168.10.1 누구?"
   ↓ ③ 게이트웨이가 ARP Reply 유니캐스트  "00:50:56:dd:ee:ff"
   ↓ ④ ARP 캐시에 저장 (일정 시간 후 만료)
   ↓ ⑤ 프레임 전송
      [Dst MAC: 게이트웨이 | Src MAC: 내 PC | EtherType 0x0800 | IP: 192.168.10.20 → 8.8.8.8]

핵심: 외부로 나가는 통신에서 ARP로 찾는 대상은 목적지 서버가 아니라 게이트웨이입니다.
그래서 게이트웨이의 MAC 주소가 바뀌면, 내 PC의 외부 통신 전체가 다른 장비를 거치게 됩니다. 이것이 ARP Spoofing이 위험한 이유입니다.

3-2. ARP 캐시 상태 (Linux ip neigh)

상태의미
REACHABLE최근에 통신이 확인된 유효한 항목
STALE오래되어 재확인이 필요하지만 아직 사용 가능
DELAY / PROBE재확인 중
INCOMPLETE요청을 보냈지만 아직 응답이 없음
FAILED응답이 없어 실패 (해당 IP가 없거나 차단됨)
PERMANENT관리자가 고정한 정적 항목

3-3. ARP의 구조적 약점

  • 요청을 보내지 않았어도 들어온 ARP 응답을 받아들이는 구현이 많습니다.
  • 응답한 쪽이 진짜 그 IP의 주인인지 검증하지 않습니다.

→ 공격자가 "게이트웨이 IP = 공격자 MAC"이라는 응답을 계속 보내면, 피해자의 트래픽이 공격자를 거쳐 나갑니다.


4. 실제 명령어 / 실습

실습 환경: 본인 소유 Linux VM 1대 (Rocky Linux 또는 Ubuntu). ens33은 예시 인터페이스 이름입니다.

⚠️ -i any로 캡처하면 Ethernet 헤더 대신 Linux cooked 헤더가 보여 MAC 분석이 어렵습니다. 실제 인터페이스 이름을 지정하세요.

4-1. 현재 ARP 캐시와 게이트웨이 확인

# 게이트웨이 IP 확인
ip route show default

# ARP 캐시 (IP ↔ MAC ↔ 상태)
ip neigh show

📷 [실습 화면 삽입] ip route show default와 ip neigh show 결과 — 게이트웨이 IP와 MAC이 보이는 화면

4-2. ARP Request / Reply 캡처

# 터미널 1 : ARP만 캡처, -e로 MAC 주소 표시
sudo tcpdump -i ens33 -nn -e arp

# 터미널 2 : 캐시를 비우고 게이트웨이에 ping → ARP가 새로 발생
# (실습 VM에서만 실행하세요. 잠깐 통신이 끊길 수 있습니다.)
sudo ip neigh flush dev ens33
ping -c 1 <게이트웨이_IP>

4-3. Wireshark로 저장해서 필드 확인

sudo tcpdump -i ens33 -nn -w arp.pcap arp
# 다른 터미널에서 4-2의 flush + ping 실행 후 Ctrl+C

Wireshark에서 사용할 Display Filter:

필터용도
arpARP 패킷만 보기
arp.opcode == 1 / arp.opcode == 2요청 / 응답만 보기
eth.dst == ff:ff:ff:ff:ff:ff브로드캐스트 프레임만 보기
arp.duplicate-address-detectedWireshark가 같은 IP에 다른 MAC을 감지한 패킷

📷 [실습 화면 삽입] Wireshark에서 ARP Reply 선택 → Packet Details의 Ethernet II와 Address Resolution Protocol (reply) 필드를 펼친 화면


5. 결과 확인

tcpdump -e arp 출력은 대략 아래 형식입니다. (주소는 예시 값입니다.)

00:0c:29:aa:bb:cc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.10.1 tell 192.168.10.20, length 28
00:50:56:dd:ee:ff > 00:0c:29:aa:bb:cc, ethertype ARP (0x0806), length 60: Reply 192.168.10.1 is-at 00:50:56:dd:ee:ff, length 46
확인 항목RequestReply
Dst MACff:ff:ff:ff:ff:ff (브로드캐스트)요청한 PC의 MAC (유니캐스트)
EtherType0x0806 (ARP)0x0806 (ARP)
핵심 문장who-has <찾는 IP> tell <내 IP><IP> is-at <MAC>

확인 체크리스트

  • Request의 목적지 MAC이 브로드캐스트인가?
  • Reply의 is-at MAC이 ip neigh에 저장된 게이트웨이 MAC과 같은가?
  • Reply 이후 ip neigh에서 해당 항목이 REACHABLE로 바뀌었는가?
  • Wireshark에서 Sender/Target MAC·IP 4개 필드를 모두 확인했는가?

6. 패킷 / 로그 분석 — ARP 이상징후 판별

6-1. 정상 vs 의심 패턴

관찰 내용정상일 수 있는 경우의심해야 하는 경우
게이트웨이 MAC이 바뀜장비 교체, 이중화(VRRP 등) 전환바뀐 MAC이 일반 PC의 MAC과 같음
하나의 MAC이 여러 IP를 가짐라우터, 가상화 호스트일반 호스트 MAC이 게이트웨이 IP까지 가짐
Gratuitous ARP부팅, IP 변경, 이중화 전환 시 소수 발생짧은 간격으로 반복되는 응답
요청 없는 ARP Reply드물게 발생대량·주기적으로 발생
ARP Request 폭증신규 장비 연결한 호스트가 대역 전체 IP를 순서대로 질의 → 내부 호스트 탐색 가능성 (05. 스캔 시리즈에서 다룸)

6-2. 호스트에서 바로 확인하는 명령

# 같은 MAC이 여러 IP에 매핑되어 있는지 확인 (중복 MAC 출력)
ip neigh show | awk '/lladdr/ {print $5}' | sort | uniq -d

# 중복된 MAC이 있다면 어떤 IP들이 쓰고 있는지 확인
ip neigh show | grep '<중복된_MAC>'

결과가 비어 있으면 중복 없음입니다. 결과가 나오면 그 MAC이 게이트웨이 IP에도 매핑되어 있는지 먼저 확인하세요.

6-3. 분석 흐름

게이트웨이 MAC 기준값(Baseline) 기록
   ↓
현재 ip neigh / Wireshark에서 게이트웨이 MAC 비교
   ↓  다르다면
그 MAC을 가진 다른 IP가 있는가? (6-2 명령)
   ↓  있다면
해당 IP의 호스트 확인 + 스위치 포트 / DHCP 로그로 실제 장비 식별
   ↓
ARP Spoofing 의심 이벤트로 보고

7. 보안관제 관점

7-1. L2 증거는 어디에 남는가

증거위치한계
ARP 캐시각 호스트 (ip neigh, Windows arp -a)휘발성. 시간이 지나면 사라짐 → 빨리 수집
스위치 MAC 테이블스위치장비 접근 권한 필요
패킷 캡처미러링 포트, 호스트캡처 지점이 같은 L2 구간에 있어야 보임
DHCP 로그DHCP 서버어떤 MAC에 어떤 IP를 줬는지 → 장비 식별

7-2. 탐지·대응 수단

수단역할
스위치 DAI (Dynamic ARP Inspection) + DHCP SnoopingDHCP 할당 기록과 다른 ARP 응답을 차단
arpwatch 같은 전용 도구IP↔MAC 매핑 변경을 기록·알림
중요 서버의 정적 ARP 항목게이트웨이 MAC 변조 방지 (관리 부담 있음)
IDS대부분 L3 이상 분석이 중심이라 L2 공격 탐지는 제한적. L2는 스위치 기능과 전용 도구가 더 적합

7-3. 이 글의 위치

  • 이 글은 "ARP가 무엇이고 이상징후가 어떻게 보이는가"까지만 다룹니다.
  • ARP 패킷의 필드별 심화 분석은 03. Wireshark 패킷 분석에서,
  • 스위치 MAC 테이블과 VLAN 실습은 04. 네트워크 장비 실습에서 다룹니다.

8. 핵심 정리

  • Ethernet 헤더는 Dst MAC · Src MAC · EtherType 14바이트이고, EtherType으로 안에 든 프로토콜(IPv4 0x0800, ARP 0x0806)을 구분한다.
  • ARP는 IP → MAC을 찾으며, 요청은 브로드캐스트, 응답은 유니캐스트다.
  • 외부로 나가는 통신에서 ARP가 찾는 대상은 게이트웨이다.
  • ARP는 인증이 없어 게이트웨이 MAC을 속이는 ARP Spoofing이 가능하다.
  • 관제에서는 게이트웨이 MAC 기준값과 비교하고, 하나의 MAC이 여러 IP를 가지는지를 먼저 본다.
  • L2 증거는 휘발성이 크고 방화벽 로그에 잘 남지 않으므로 빠르게 수집해야 한다.

다음 글: 03. IPv4 주소와 서브넷(CIDR) — 같은 네트워크인지 판단하는 법

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글