Post

[🌐CN] Internet Protocol(1) - ARP

[🌐CN] Internet Protocol(1) - ARP

🌐 Internet Protocol 전곡 μˆ˜μ—… 정리

λ„€νŠΈμ›Œν¬ ν†΅μ‹ μ˜ 핡심! IP μ£Όμ†Œλ§ŒμœΌλ‘œλŠ” 데이터λ₯Ό 전솑할 수 μ—†λ‹€. μ‹€μ œ 물리적 λ„€νŠΈμ›Œν¬μ—μ„œ ν†΅μ‹ ν•˜λ €λ©΄ MAC μ£Όμ†Œκ°€ ν•„μš”ν•œλ°, λ°”λ‘œ 이 IP와 MAC μ£Όμ†Œ 사이λ₯Ό μ—°κ²°ν•΄μ£ΌλŠ” 것이 ARP ν”„λ‘œν† μ½œμ΄λ‹€.


ARP (Address Resolution Protocol)

πŸ“šARP (Address Resolution Protocol): IP μ£Όμ†Œλ₯Ό MAC μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜λŠ” ν”„λ‘œν† μ½œ

  • Link-layer ν”„λ‘œν† μ½œ (RFC 826)
  • IP connectivityλ₯Ό λΆ€νŠΈμŠ€νŠΈλž©ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ 
  • Internet은 IP μ£Όμ†Œ 기반, 데이터 링크 ν”„λ‘œν† μ½œ(Ethernet, FDDI, ATM)은 λ‹€λ₯Έ MAC μ£Όμ†Œ μ‚¬μš©
  • ARP와 RARP ν”„λ‘œν† μ½œμ΄ IP μ£Όμ†Œμ™€ MAC λ ˆμ΄μ–΄ μ£Όμ†Œ κ°„μ˜ λ³€ν™˜ μˆ˜ν–‰

Network Layerμ—μ„œμ˜ ARP μœ„μΉ˜


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Transport Layer           β”‚
β”‚   TCP          UDP          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Network Layer             β”‚
β”‚   IP    ICMP    IGMP        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Link Layer                β”‚
β”‚   ARP  Network Access  RARP β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           ↕
         Media

Why MAC address?

  • Ethernet, WiFiλŠ” κ³΅μœ ν˜• 데이터링크
    • μ—¬λŸ¬ 컴퓨터/ν˜ΈμŠ€νŠΈκ°€ ν•˜λ‚˜μ˜ λ„€νŠΈμ›Œν¬μ— 연결됨
    • κ³΅μœ ν˜• 맀체에 μ—°κ²°λœ μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€ 쀑 μ–΄λŠ 것이 frame을 μˆ˜μ‹ ν•΄μ•Ό ν•˜λ‚˜?
    • β†’ MAC address둜 ꡬ뢄!
  • IP의 ν•œκ³„
    • IPλŠ” λ‹€μŒ hop의 IPλ₯Ό μ•Œμ•„λ„ MAC μ£Όμ†ŒλŠ” λͺ¨λ¦„
    • 물리 κ³„μΈ΅μ—μ„œ μ‹€μ œ ν†΅μ‹ ν•˜λ €λ©΄ MAC μ£Όμ†Œ ν•„μš”
    • ARP ν”„λ‘œν† μ½œμ€ 곡유 λ§€μ²΄ν˜• 링크에 μ—°κ²°λœ λͺ¨λ“  컴퓨터(ν˜Ήμ€ μΈν„°νŽ˜μ΄μŠ€)에 κ΅¬ν˜„λ˜μ–΄ 있음

μ£Όμ†Œ λ³€ν™˜μ˜ λ°©ν–₯

  • IP address (32 bit) β†’ Ethernet MAC address (48 bit): ARP
  • Ethernet MAC address (48 bit) β†’ IP address (32 bit): RARP

ARP λ™μž‘ 원리

κΈ°λ³Έ λ™μž‘: Request & Reply

Step 1: ARP Request (Broadcast)

  • μ†‘μ‹ μžκ°€ λ„€νŠΈμ›Œν¬μ˜ λͺ¨λ“  μŠ€ν…Œμ΄μ…˜μ— ARP request λΈŒλ‘œλ“œμΊμŠ€νŠΈ
  • 질문: β€œWho has IP address X.X.X.X?”
  • μ˜ˆμ‹œ: β€œWhat is the MAC address of 128.143.137.1?”

Step 2: ARP Reply (Unicast)

  • ν•΄λ‹Ή IP μ£Όμ†Œλ₯Ό κ°€μ§„ 호슀트만 ARP Reply둜 응닡
  • μžμ‹ μ˜ ν•˜λ“œμ›¨μ–΄ μ£Όμ†Œ 포함
  • μ˜ˆμ‹œ: β€œThe MAC address of 128.143.137.1 is 00:e0:f9:23:a8:20”

ARP Request/Reply μ˜ˆμ‹œ

Alice의 ARP Request:

1
2
3
4
Source hardware address:  00:a0:24:71:e4:44
Source protocol address:  128.143.137.144
Target hardware address:  00:00:00:00:00:00  ← λͺ¨λ₯΄λ‹ˆκΉŒ 빈 κ°’!
Target protocol address:  128.143.137.1

Router137의 ARP Reply:

1
2
3
4
Source hardware address:  00:e0:f9:23:a8:20  ← λ‹΅λ³€!
Source protocol address:  128.143.137.1
Target hardware address:  00:a0:24:71:e4:44
Target protocol address:  128.143.137.144

ARP Cache

πŸ“šARP Cache: IP datagramλ§ˆλ‹€ ARP request/replyλ₯Ό λ³΄λ‚΄λŠ” 것은 λΉ„νš¨μœ¨μ ! ν˜ΈμŠ€νŠΈλŠ” ν•œ 번 ν•™μŠ΅ν•œ 정보λ₯Ό μΊμ‹œμ— μ €μž₯ν•˜μ—¬ μž¬μ‚¬μš©

νŠΉμ§•


  • ⏰ μΊμ‹œ 수λͺ…: μ—”νŠΈλ¦¬λŠ” 20λΆ„ (1200초) ν›„ 만료
  • μΊμ‹œ 쑰회 λͺ…λ Ή
    • Linux: arp λ˜λŠ” arp -a
    • Windows: arp -a

ARP Cache μ˜ˆμ‹œ


Linux μ‹œμŠ€ν…œ:

1
2
3
4
5
$ arp -a
(128.143.71.37) at 00:10:4B:C5:D1:15 [ether] on eth0
(128.143.71.36) at 00:B0:D0:E1:17:D5 [ether] on eth0
(128.143.71.35) at 00:B0:D0:DE:70:E6 [ether] on eth0
(128.143.136.90) at 00:05:3C:06:27:35 [ether] on eth1

Windows μ‹œμŠ€ν…œ:

1
2
3
4
5
c:\> arp -a
Interface: 10.0.0.56 --- 0x2
  Internet Address     Physical Address      Type
  10.0.0.1            00-0d-66-4f-60-00     dynamic
  10.0.0.4            00-0a-95-87-38-6a     dynamic

Address Resolution κ³Όμ •


  1. νŒ¨ν‚· 전솑 μ‹œ
    • ARP ν…Œμ΄λΈ” μ‘°νšŒν•˜μ—¬ λͺ©μ μ§€ IP β†’ λͺ©μ μ§€ MAC λ§€ν•‘
    • 데이터 νŒ¨ν‚· μΊ‘μŠν™” 및 전솑
  2. IP μ£Όμ†Œκ°€ ν…Œμ΄λΈ”μ— μ—†λŠ” 경우
    • μ†‘μ‹ μž λΈŒλ‘œλ“œμΊμŠ€νŠΈ: β€œWho has IP address 1.2.3.156?”
    • μˆ˜μ‹ μž 응닡: β€œMAC address 58-23-D7-FA-20-B0”
    • μ†‘μ‹ μžκ°€ κ²°κ³Όλ₯Ό ARP ν…Œμ΄λΈ”μ— μΊμ‹œ

νš¨μœ¨μ„±μ˜ λΉ„κ²°: ν•œ 번 ν•™μŠ΅ν•œ MAC μ£Όμ†ŒλŠ” 20λΆ„κ°„ μž¬μ‚¬μš©ν•˜λ―€λ‘œ, 맀번 λΈŒλ‘œλ“œμΊμŠ€νŠΈν•  ν•„μš”κ°€ μ—†λ‹€!


ARP Packet Format

Ethernet Frame ꡬ쑰


1
2
3
4
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚Destination β”‚  Source    β”‚ Type β”‚  ARP Request    β”‚ Padding β”‚ CRC β”‚
β”‚ address(6) β”‚ address(6) β”‚(0x80)β”‚  or Reply (28)  β”‚  (18)   β”‚ (4) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜

ARP Packet ν•„λ“œ 상세


ν•„λ“œν¬κΈ°μ„€λͺ…μ˜ˆμ‹œ κ°’
Hardware type2 bytesν•˜λ“œμ›¨μ–΄ νƒ€μž…Ethernet = 1
Protocol type2 bytesν”„λ‘œν† μ½œ νƒ€μž…IP = 0x0800
Hardware address length1 byteν•˜λ“œμ›¨μ–΄ μ£Όμ†Œ 길이6 (MAC)
Protocol address length1 byteν”„λ‘œν† μ½œ μ£Όμ†Œ 길이4 (IPv4)
Operation code2 bytesμš”μ²­(1) λ˜λŠ” 응닡(2)1 or 2
Source hardware addressVariableμ†‘μ‹ μž MAC μ£Όμ†Œ00:a0:24:71:e4:44
Source protocol addressVariableμ†‘μ‹ μž IP μ£Όμ†Œ128.143.137.144
Target hardware addressVariableλŒ€μƒ MAC μ£Όμ†Œ00:00:00:00:00:00
Target protocol addressVariableλŒ€μƒ IP μ£Όμ†Œ128.143.137.1

μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€: Host A β†’ Host B νŒ¨ν‚· 전솑

λ„€νŠΈμ›Œν¬ ꡬ성


1
2
3
4
5
6
7
8
9
10
11
LAN 1 (111.111.111.0/24)          LAN 2 (222.222.222.0/24)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Host A    β”‚                   β”‚   Host B    β”‚
β”‚111.111.111  β”‚                   β”‚222.222.222  β”‚
β”‚    .111     β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”       β”‚    .222     β”‚
β”‚74-29-9C-E8  │────│Router│───────│49-BD-D2-C7  β”‚
β”‚   -FF-55    β”‚    β”‚  R   β”‚       β”‚   -56-2A    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
              111.111.111.110  222.222.222.220
              E6-E9-00-17-BB  1A-23-F9-CD-06
                  -4B              -95

전솑 κ³Όμ • 4단계

Step 1: Host A의 κ²°μ •

  • B둜 보낼 IP νŒ¨ν‚· 생성
    • Source: 111.111.111.111
    • Destination: 222.222.222.222
  • Bκ°€ λ‹€λ₯Έ λ„€νŠΈμ›Œν¬(222.222.222.0/24)에 μžˆμœΌλ―€λ‘œ κ²Œμ΄νŠΈμ›¨μ΄ λΌμš°ν„° R μ‚¬μš©
  • R의 μ£Όμ†Œ(111.111.111.110)λŠ” DHCPλ₯Ό 톡해 ν•™μŠ΅

Step 2: Host Aκ°€ R의 MAC μ£Όμ†Œ ν•™μŠ΅

  • ARP request: "Who has 111.111.111.110?" (Broadcast)
  • ARP response: "00:e0:f9:23:a8:20μž…λ‹ˆλ‹€!" (Router R의 응닡)
  • Host Aκ°€ νŒ¨ν‚·μ„ Ethernet Frame에 μΊ‘μŠν™”ν•˜μ—¬ R둜 전솑

Step 3: Router R의 ν¬μ›Œλ”© κ²°μ •

  • R의 μ–΄λŒ‘ν„°κ°€ νŒ¨ν‚· μˆ˜μ‹ 
  • Ethernet ν”„λ ˆμž„μ—μ„œ IP νŒ¨ν‚· μΆ”μΆœ
  • λͺ©μ μ§€ 222.222.222.222 확인
  • ν¬μ›Œλ”© ν…Œμ΄λΈ” 쑰회: β€œ222.222.222.0/24λŠ” λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ‘œ!”

Step 4: Router R이 Bμ—κ²Œ 전솑

  • ARP request: "Who has 222.222.222.222?" (Broadcast)
  • ARP response: "49-BD-D2-C7-56-2Aμž…λ‹ˆλ‹€!" (Host B의 응닡)
  • R이 νŒ¨ν‚·μ„ μΊ‘μŠν™”ν•˜μ—¬ B둜 전솑 μ™„λ£Œ!

ARP의 특수 κΈ°λŠ₯λ“€

1. Gratuitous ARP (G-ARP)

πŸ“šGratuitous ARP: ν˜ΈμŠ€νŠΈκ°€ μžμ‹ μ˜ IP μ£Όμ†Œμ— λŒ€ν•œ ARP requestλ₯Ό 슀슀둜 λ°œμ†‘

  • νŠΉμ§•
    • λ™μΌν•œ IP μ£Όμ†Œλ‘œ ARP request λ°œμ†‘
    • 일반적으둜 본인 μ™Έμ—λŠ” 아무도 μ‘λ‹΅ν•˜μ§€ μ•ŠμŒ
  • μ£Όμš” λͺ©μ 

    λͺ©μ  1: ν•˜λ“œμ›¨μ–΄ μ£Όμ†Œ λ³€κ²½ μ•Œλ¦Ό

    • ν•˜λ“œμ›¨μ–΄ μ£Όμ†Œ λ³€κ²½ μ‹œ λ„€νŠΈμ›Œν¬μ˜ λ‹€λ₯Έ ν˜ΈμŠ€νŠΈλ“€μ—κ²Œ μ•Œλ¦Ό
    • λ‹€λ₯Έ ν˜ΈμŠ€νŠΈλ“€μ˜ μΊμ‹œ μ—”νŠΈλ¦¬ μžλ™ μ—…λ°μ΄νŠΈ
    • RFC에 λͺ…μ‹œλ˜μ–΄ μžˆμ§€λ§Œ, λͺ¨λ“  ARP μΊμ‹œ κ΅¬ν˜„μ΄ 이λ₯Ό λ”°λ₯΄μ§€λŠ” μ•ŠμŒ

    λͺ©μ  2: DAD (Duplicate Address Detection) - 쀑볡 μ£Όμ†Œ κ²€μΆœ

    • λ‹€λ₯Έ ν˜ΈμŠ€νŠΈκ°€ λ™μΌν•œ IP μ£Όμ†Œλ‘œ κ΅¬μ„±λ˜μ—ˆλŠ”μ§€ 확인
    • 응닡이 였면 β†’ IP 좩돌! (쀑볡 IP μ£Όμ†Œμ˜ MAC μ£Όμ†Œ 확인 κ°€λŠ₯)
    • IP 좩돌 감지 및 μ‚¬μš©μžμ—κ²Œ κ²½κ³ 

2. Address Conflict Detection (ACD)

πŸ“šACD: DADλ₯Ό μœ„ν•΄ κ°œμ„ λœ G-ARP 방식, λ³΄μ•ˆμ„ κ°•ν™”ν•˜κΈ° μœ„ν•΄ G-ARPλ₯Ό 2단계 ν”„λ‘œμ„ΈμŠ€λ‘œ 뢄리

기쑴 G-ARP의 문제점:

1
2
3
4
5
곡격자 Aκ°€ μ‹€μˆ˜(λ˜λŠ” μ˜λ„μ μœΌλ‘œ) G-ARP (IP_C, MAC_A) 전솑
     ↓
λ„€νŠΈμ›Œν¬μ˜ λͺ¨λ“  ν˜ΈμŠ€νŠΈλ“€μ΄ μΊμ‹œ μ—…λ°μ΄νŠΈ: "IP_CλŠ” MAC_Aλ‹€!"
     ↓
μ‹€μ œ C둜 κ°€λŠ” νŠΈλž˜ν”½μ΄ λͺ¨λ‘ A둜 hijacking! (ARP Poisoning)

βœ… ACD λ™μž‘ 방식:

Phase 1: ARP Probe 단계

1
2
3
4
5
ARP Probe Packet:
  Src_ip: 0.0.0.0           ← 핡심! μžμ‹ μ˜ IPκ°€ μ•„λ‹Œ 0.0.0.0
  Src_mac: [μžμ‹ μ˜ MAC]
  Target_ip: [할당받을 IP]
  Target_mac: 00:00:00:00:00:00
  • Cache에 λ§€μΉ­λ˜λŠ” entryκ°€ μ—†μœΌλ―€λ‘œ poisoning λ°œμƒν•˜μ§€ μ•ŠμŒ (harmless)
  • 응닡이 있으면 β†’ IP μ£Όμ†Œ 좩돌! (ACD κ²€μΆœ)
  • 응닡이 μ—†μœΌλ©΄ β†’ λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰ βœ…

Phase 2: ARP Announcement 단계

1
2
3
4
5
ARP Announcement Packet:
  Src_ip: [할당받은 IP]     ← 이제 정상적인 IP μ‚¬μš©
  Src_mac: [μžμ‹ μ˜ MAC]
  Target_ip: [할당받은 IP]
  Target_mac: 00:00:00:00:00:00
  • 할당받은 IP μ‚¬μš© κ°€λŠ₯!
  • λ„€νŠΈμ›Œν¬μ˜ λ‹€λ₯Έ ν˜ΈμŠ€νŠΈλ“€μ΄ μΊμ‹œ μ—…λ°μ΄νŠΈ

ACD의 핡심: Source IPλ₯Ό 0.0.0.0으둜 μ„€μ •ν•¨μœΌλ‘œμ¨, μΊμ‹œ μ˜€μ—Ό 없이 μ•ˆμ „ν•˜κ²Œ IP 쀑볡을 검사할 수 μžˆλ‹€!

3. Proxy ARP

πŸ“šProxy ARP: λΌμš°ν„°λ‚˜ ν˜ΈμŠ€νŠΈκ°€ λ‹€λ₯Έ λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ 호슀트λ₯Ό λŒ€μ‹ ν•΄μ„œ ARP 응닡

μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€ 1: μ„œλΈŒλ„· κ°„ 톡신

1
2
3
4
5
6
7
Alice (128.143.137.144/16)  β†’  Router137  β†’  Bob (128.143.71.21/24)

Alice: "Who has 128.143.71.21?"
         ↓
Router137: "λ‚˜(00:e0:f9:23:a8:20)ν•œν…Œ 보내!" (Proxy 응닡)
         ↓
Alice β†’ Router137 β†’ Bob (μ‹€μ œ 전달은 Routerκ°€ 쀑계)

μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€ 2: Mobile IP

1
2
3
4
5
6
7
8
Home Network                Foreign Network
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Home Agent  β”‚            β”‚ Mobile Node Aβ”‚
β”‚  (Proxy ARP) β”‚ ←─────────→│ (IP μœ μ§€)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      ↑
      β”‚ "A의 IP둜 온 νŒ¨ν‚·μ„
      β”‚  Foreign Network둜!"
  • Mobile node Aκ°€ IPλ₯Ό μœ μ§€ν•œ 채 λ‹€λ₯Έ network둜 이동
  • Home agentκ°€ node Aλ₯Ό λŒ€λ¦¬ν•˜λ©° relay
  • Foreign networkμ—μ„œλ„ 같은 IP둜 톡신 κ°€λŠ₯

4. Directed ARP

πŸ“šDirected ARP: ARP requestλ₯Ό unicast둜 μš”μ²­ν•˜μ—¬ νŠΉμ • 호슀트의 ARP μΊμ‹œ μ—”νŠΈλ¦¬λ₯Ό κ°±μ‹ 

  • λͺ©μ : 수λͺ…이 λ‹€ν•œ (1200초/20λΆ„) ARP cache entry μ—…λ°μ΄νŠΈ
  • 방식: Broadcast λŒ€μ‹  νŠΉμ • MAC μ£Όμ†Œλ‘œ 직접 ARP request 전솑
  • μž₯점: λ„€νŠΈμ›Œν¬ λΈŒλ‘œλ“œμΊμŠ€νŠΈ νŠΈλž˜ν”½ κ°μ†Œ

Wireshark 캑처 μ˜ˆμ‹œ:

1
2
3
4
5
6
7
8
Ethernet II, Src: Dongwon_82:0d:aa, Dst: 72:f0:ec:4b:d8:70
Address Resolution Protocol (request)
  Hardware type: Ethernet (1)
  Protocol type: IPv4 (0x0800)
  Sender MAC: Dongwon_82:0d:aa (00:07:89:82:0d:aa)
  Sender IP: 172.30.1.254
  Target MAC: 00:00:00:00:00:00  ← Unicastμ΄μ§€λ§Œ MAC은 λͺ¨λ¦„
  Target IP: 172.30.1.13

ARP Cache Update μ •μ±…

Cache Update μ‹œλ‚˜λ¦¬μ˜€


상황: Aκ°€ Bλ‘œλΆ€ν„° ARP requestλ₯Ό 받은 경우

βœ… Case 1: ARP requestκ°€ A의 MAC μ£Όμ†Œλ₯Ό μš”κ΅¬ν•˜λŠ” 경우

1
2
3
4
1. AλŠ” request의 source MAC-IP (B)λ₯Ό cache에 μ €μž₯
2. AλŠ” μžμ‹ μ˜ MAC-IPλ₯Ό κ°€μ§€κ³  response 전솑
3. BλŠ” response의 source MAC-IP (A)λ₯Ό cache에 μ €μž₯
β†’ 정상적인 ARP λ™μž‘!

βœ… Case 2: ARP requestκ°€ C의 MAC μ£Όμ†Œλ₯Ό μš”κ΅¬ν•˜λŠ” 경우

  • A의 cache에 B의 MAC-IPκ°€ 이미 μžˆλŠ” 경우:
    • cache의 정보 = μˆ˜μ‹ ν•œ B의 MAC-IP β†’ OK, κ·ΈλŒ€λ‘œ μœ μ§€ * cache의 정보 β‰  μˆ˜μ‹ ν•œ B의 MAC-IP β†’ ARP poisoning μ˜μ‹¬!
  • A의 cache에 B의 MAC-IPκ°€ μ—†λŠ” 경우:
    • μƒˆλ‘œμš΄ μ—”νŠΈλ¦¬λ‘œ μΆ”κ°€ν•˜μ§€ μ•ŠμŒ (λ³΄μ•ˆμƒ 이유)
    • μš”μ²­λ°›μ€ 것도 μ•„λ‹Œλ° μ €μž₯ν•˜λ©΄ poisoning 곡격에 μ·¨μ•½!

Cache Update λ³΄μ•ˆ κ°œμ„ 

ꡬ뢄과거 λ°©μ‹ν˜„μž¬ 방식 (ACD)
방법announcement만 μ‚¬μš©Probe + Announcement
λ³΄μ•ˆβŒ Poisoning 곡격에 μ·¨μ•½βœ… Source IP 0.0.0.0 μ‚¬μš©μœΌλ‘œ μ•ˆμ „
단계1단계2단계 (검증 ν›„ μ•Œλ¦Ό)

ARP λ³΄μ•ˆ 취약점 뢄석

μ£Όμš” 취약점 3κ°€μ§€

❌ 취약점 1: 인증 μ—†μŒ

  • ARPλŠ” requestλ‚˜ replyλ₯Ό μΈμ¦ν•˜μ§€ μ•ŠμŒ
  • λˆ„κ΅¬λ“ μ§€ ARP Request와 Replyλ₯Ό μœ„μ‘° κ°€λŠ₯
  • μ‹ λ’°ν•  수 μžˆλŠ” 검증 λ©”μ»€λ‹ˆμ¦˜ λΆ€μž¬

❌ 취약점 2: Stateless ν”„λ‘œν† μ½œ

  • ARP ReplyλŠ” λŒ€μ‘ν•˜λŠ” ARP Request 없이도 전솑 κ°€λŠ₯
  • λˆ„κ΅°κ°€ 물어보지 μ•Šμ•˜λŠ”λ°λ„ λ‹΅λ³€ν•  수 있음
  • Unsolicited ARP Reply 곡격 κ°€λŠ₯

❌ 취약점 3: 무쑰건적 μΊμ‹œ μ—…λ°μ΄νŠΈ

  • ARP νŒ¨ν‚·(Request λ˜λŠ” Reply) μˆ˜μ‹  μ‹œ
  • μˆ˜μ‹  λ…Έλ“œλŠ” 이미 ν•΄λ‹Ή IP μ£Όμ†Œμ— λŒ€ν•œ μ—”νŠΈλ¦¬κ°€ 있으면
  • source ν•„λ“œμ˜ μ •λ³΄λ‘œ 둜컬 ARP μΊμ‹œλ₯Ό λ°˜λ“œμ‹œ μ—…λ°μ΄νŠΈ
  • 검증 없이 λ§Ήλͺ©μ μœΌλ‘œ μ‹ λ’°ν•˜λŠ” ꡬ쑰

ARP Poisoning / Spoofing 곡격

πŸ“šARP Poisoning: κ³΅κ²©μžκ°€ μ˜λ„μ μœΌλ‘œ 잘λͺ»λœ ARP 정보λ₯Ό μ „μ†‘ν•˜μ—¬ λ‹€λ₯Έ 호슀트의 ARP μΊμ‹œλ₯Ό μ˜€μ—Όμ‹œν‚€λŠ” 곡격

곡격 μ‹œλ‚˜λ¦¬μ˜€:

1
2
3
4
5
6
정상 λ„€νŠΈμ›Œν¬: A --- B --- C --- D (Ethernet)

곡격자 A의 행동:
  1. G-ARP (IP_C, MAC_A) 전솑  ← "IP_CλŠ” λ‚˜(A)ν•œν…Œ 보내!"
  2. B, DλŠ” μΊμ‹œ μ—…λ°μ΄νŠΈ: IP_C β†’ MAC_A
  3. B, Dκ°€ Cμ—κ²Œ λ³΄λ‚΄λŠ” λͺ¨λ“  frame이 A둜 전달됨!

곡격 결과:

  • ν”Όν•΄μž CλŠ” 일뢀 νŠΈλž˜ν”½λ§Œ μˆ˜μ‹  β†’ 느린 인터넷 체감
  • 곡격자 AλŠ” C둜 κ°€λŠ” νŠΈλž˜ν”½ 도청 κ°€λŠ₯
  • MITM (Man-in-the-Middle) 곡격의 기반

λ°©μ–΄ 방법:

  • λΌμš°ν„°κ°€ 주기적(~10초)으둜 ARP request 반볡 β†’ A, C λͺ¨λ‘ 응닡
  • 응닡에 randomness λ°œμƒ β†’ νŠΈλž˜ν”½ λΆ„μ‚°
  • ❌ ν•˜μ§€λ§Œ μ™„λ²½ν•œ λ°©μ–΄λŠ” 어렀움
  • βœ… 근본적 ν•΄κ²°: Static ARP ν…Œμ΄λΈ”, ARP λͺ¨λ‹ˆν„°λ§ 도ꡬ, Network Access Control

ARP Poisoning의 심각성: ARPλŠ” 인증 λ©”μ»€λ‹ˆμ¦˜μ΄ μ—†μ–΄ 본질적으둜 μ·¨μ•½ν•˜λ‹€. λ³΄μ•ˆμ΄ μ€‘μš”ν•œ ν™˜κ²½μ—μ„œλŠ” λ°˜λ“œμ‹œ μΆ”κ°€ λ³΄μ•ˆ 계측(802.1X, Static ARP, IDS/IPS)이 ν•„μš”ν•˜λ‹€!


ARP 특수 상황 처리

μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ ARP

  • λ™μž‘: μ—¬λŸ¬ ARP requestλ₯Ό 점점 μ¦κ°€ν•˜λŠ” μ‹œκ°„ κ°„κ²©μœΌλ‘œ 전솑
  • κ²°κ³Ό: κ²°κ΅­ ARPκ°€ 포기함 (give up) β†’ β€œNo route to host” μ—λŸ¬

μ‹€μ œ μ˜ˆμ‹œ:

1
2
3
4
5
6
7
8
Linux% date ; telnet 10.0.0.99 ; date
Fri Jan 29 14:46:33 PST 2010
Trying 10.0.0.99...
telnet: connect to address 10.0.0.99: No route to host
Fri Jan 29 14:46:36 PST 2010    ← 3초 ν›„ 포기

Linux% arp -a
? (10.0.0.99) at <incomplete> on eth0  ← 응닡 μ—†μŒ

tcpdump 캑처:

1
2
3
4
1  21:12:07.440845  arp who-has 10.0.0.99 tell 10.0.0.56
2  21:12:08.436842  arp who-has 10.0.0.99 tell 10.0.0.56  ← 1초 ν›„ μž¬μ‹œλ„
3  21:12:09.436836  arp who-has 10.0.0.99 tell 10.0.0.56  ← 1초 ν›„ μž¬μ‹œλ„
   β†’ 3번 μ‹œλ„ ν›„ 포기

ARP Cache κ°±μ‹  (Linux)


  • Linux의 적극적 κ°±μ‹  μ „λž΅
    • ν˜ΈμŠ€νŠΈκ°€ 주기적으둜 ARP Cache에 λ‚˜μ—΄λœ λͺ¨λ“  μ£Όμ†Œμ— λŒ€ν•΄ ARP Request 전솑
    • βœ…μž₯점: ARP cache λ‚΄μš© μ΅œμ‹  μƒνƒœ μœ μ§€
    • βŒλ‹¨μ : λ„€νŠΈμ›Œν¬ λΈŒλ‘œλ“œμΊμŠ€νŠΈ νŠΈλž˜ν”½ 증가
This post is licensed under CC BY 4.0 by the author.