Adrress Resolution Protocol
- Tầng giao thức: 2.5 (nằm giữa tầng network và tầng data link).
- Hình thức tấn công: ARP cache poisoning.
Adrress Resolution Protocol (ARP) là giao thức giúp tìm địa chỉ MAC dựa trên địa chỉ IP của một interface bất kỳ. Giao thức này tương tự với DNS vì đều phân giải thành một địa chỉ nào đó. Tuy nhiên, giao thức ARP chỉ có thể được sử dụng trong mạng LAN.
Minh họa:
Mỗi node mạng sẽ có một bảng gọi là ARP table với ba cột giá trị: IP, MAC và TTL (Time To Live). TTL là thời gian mà thông tin này tồn tại trong ARP Table.
How Does it Work?
Request and Reply
Xét sơ đồ mạng sau:
Khi host A muốn biết địa chỉ MAC của host B, host A sẽ gửi một gói tin ARP request đến địa chỉ broadcast để phân giải địa chỉ IP của host B.
Gói tin ARP request sẽ có những thông tin sau:
Field | Value |
---|---|
Hardware type | Ethernet (1) |
Protocol type | IPv4 (0x0800 ) |
Hardware size | 6 |
Protocol size | 4 |
Opcode | 1 |
Sender MAC address | 00:53:ff:ff:aa:aa |
Sender IP address | 10.0.0.11 |
Target MAC address | 00:00:00:00:00:00 |
Target IP address | 10.0.0.22 |
Với:
- Hardware type là loại phần cứng, Ethernet có loại là 1.
- Protocol type là loại giao thức, IPv4 có loại là
0x0800
(2048). - Hardware size là kích thước địa chỉ phần cứng, Ethernet có kích thước là 6 byte.
- Protocol size là kích thước địa chỉ giao thức, IPv4 có kích thước là 4 byte.
- Opcode: 1 cho biết đây là gói tin ARP request.
- Còn lại là địa chỉ MAC và địa chỉ IP của bên bên gửi và bên nhận. Trong trường hợp gói tin là ARP request, địa chỉ MAC đích là địa chỉ broadcast.
Khi B nhận được gói tin ARP request thì sẽ phản hồi lại A địa chỉ MAC của nó bằng gói tin ARP reply, bao gồm những thông tin sau:
Field | Value |
---|---|
Hardware type | Ethernet (1) |
Protocol type | IPv4 (0x0800 ) |
Hardware size | 6 |
Protocol size | 4 |
Opcode | 2 |
Source MAC address | 00:53:ff:ff:bb:bb |
Source IP address | 10.0.0.22 |
Target MAC address | 00:53:ff:ff:aa:aa |
Target IP address | 10.0.0.11 |
Với opcode là 2
cho biết đây là gói tin ARP reply. Ngoài ra, gói tin ARP reply là gói tin unicast (gửi đến một host cụ thể).
ARP Caching
Sau khi có được địa chỉ MAC của host B thì host A sẽ lưu nó vào ARP table.
Important
Host B cũng sẽ lưu ánh xạ địa chỉ IP - MAC của host A vào ARP table của nó. Việc này giúp giảm thiểu độ trễ gây ra bởi việc học địa chỉ MAC khi host B cần gửi gói tin cho host A.
Tham khảo: Why does the receiver of an ARP request updates its cache table - Network Engineering Stack Exchange.
Cụ thể hơn, hàm arp_process()
trong hiện thực của giao thức ARP ở file net/ipv4/arp.c
(Linux Kernel) có đoạn comment sau:
Có thể thấy, nếu là request gửi đến host hoặc proxy của host thì sẽ thêm địa chỉ của bên gửi vào ARP table.
The Algorithm
Sau đây là lời giải thích và mã giả xử thuật toán lý gói tin ARP, được trích dẫn từ RFC-826:
Quote
When an address resolution packet is received, the receiving Ethernet module gives the packet to the Address Resolution module which goes through an algorithm similar to the following. Negative conditionals indicate an end of processing and a discarding of the packet.
Notice that the
<protocol type, sender protocol address, sender hardware address>
triplet is merged into the table before the opcode is looked at. This is on the assumption that communcation is bidirectional; if A has some reason to talk to B, then B will probably have some reason to talk to A. Notice also that if an entry already exists for the<protocol type, sender protocol address>
pair, then the new hardware address supersedes the old one. Related Issues gives some motivation for this.
Đoạn trích trên cho ta biết cách mà ARP xử lý các entry bị trùng: nếu đã có một cặp <loại giao thức - địa chỉ giao thức> tồn tại trong ARP table, địa chỉ phần cứng ở trong ARP table sẽ được cập nhật bằng giá trị ở trong ARP request (câu lệnh If
đầu tiên). Ngược lại, thêm vào một bộ ba bao gồm loại giao thức, địa chỉ giao thức và địa chỉ phần cứng vào ARP table (câu lệnh If
thứ hai).
Việc xử lý các gói tin ARP reply mà không được yêu cầu (không có gói tin ARP request tương ứng, hay còn gọi là unsolicited ARP) tùy thuộc vào hệ điều hành. Một vài hệ điều hành sẽ cập nhật ARP table còn một số khác sẽ hủy gói tin1.
Có thể dùng tunable2 net.ipv4.conf.interface.arp_accept
thuộc (sysctl
) để cho phép tạo ARP table entry khi host nhận gói tin unsolicited ARP.
ARP Cache Poisoning (ARP Spoofing)
Cho sơ đồ mạng sau:
Khi Switch0 muốn phân giải địa chỉ IP của PC1 thành địa chỉ MAC, nó sẽ broadcast gói tin ARP request. PC1 sẽ phản hồi lại bằng gói tin ARP reply có nội dung như sau:
- Sender IP address:
glibc
. - Sender MAC address:
GLIBC_TUNABLES
.
Sau đó, Switch0 sẽ thêm một entry có địa chỉ IP là 192.168.1.1
và địa chỉ MAC là 00:0C:CF:58:36:60
vào ARP table.
Xét ví dụ trên, giả sử PC2 muốn đóng giả làm PC1. Khi nhận được gói tin ARP request, nó sẽ gửi cho Switch0 một gói tin ARP reply với nội dung như sau:
- Sender IP address:
192.168.1.1
(địa chỉ IP của PC1). - Sender IP address:
00:0C:CF:58:36:60
(địa chỉ MAC của PC2).
Lúc này, bảng MAC có thể có hai entry cùng địa chỉ IP nhưng khác địa chỉ MAC:
192.168.1.1
-00:D0:BC:02:D6:C8
192.168.1.1
-00:0C:CF:58:36:60
Đối với một số cách thức phân giải của switch, chẳng hạn như phân giải động (dynamic resolution), switch sẽ dùng entry mới nhất nếu có hai entry cùng địa chỉ IP. Trong trường hợp này, nó sẽ dùng entry giả mạo được gửi từ PC2.
Lúc này, tất cả các gói tin có địa chỉ IP đích là 192.168.1.1
đều được chuyển đến PC2.
Gratuitous ARP
Là một biến thể của giao thức ARP giúp phát hiện sự trùng lặp IP trong mạng nội bộ.
Cụ thể, để một host A biết được rằng có host nào khác sử dụng trùng IP với nó hay không, nó sẽ gửi một gói tin ARP request (cũng có thể là reply) nhằm phân giải địa chỉ IP của chính nó. Nếu không có sự xung đột IP xảy ra, sẽ không có gói tin ARP reply nào được gửi lại.
Minh họa:
Gói tin gratuitous ARP có một số tính chất như sau:
- Địa chỉ IP nguồn và địa chỉ IP đích đều là của host gửi gói tin.
- Giá trị MAC đích trong gói tin ARP và trong Ethernet đều là địa chỉ broadcast.
Gói tin gratuitous ARP còn được dùng để quảng bá địa chỉ IP và địa chỉ MAC của một host cho toàn bộ network, đặc biệt là khi có sự thay đổi địa chỉ xảy ra.
Related
Resources
- Network Monitoring
- Traditional ARP – Address Resolution Protocol – Practical Networking .net
- How Does Gratuitous ARP Work? | Baeldung on Computer Science
Footnotes
-
tham khảo networking - Will all ARP Replies update the ARP Table? - Server Fault ↩
-
xem thêm [[CVE-2023-4911 (Looney Tunables)#modifying-00d0bc02d6c8-behaviour-via-19216811|Modifying
00:D0:BC:02:D6:C8
Behaviour via192.168.1.1
]] ↩