Hai máy tính trong cùng mạng nội bộ muốn nói chuyện với nhau. Nhưng phần cứng mạng chỉ hiểu địa chỉ MAC (địa chỉ vật lý gắn cứng vào card mạng), không hiểu địa chỉ IP. ARP (Address Resolution Protocol) là giao thức tra ra địa chỉ MAC tương ứng với một địa chỉ IP, […]
Hai máy tính trong cùng mạng nội bộ muốn nói chuyện với nhau. Nhưng phần cứng mạng chỉ hiểu địa chỉ MAC (địa chỉ vật lý gắn cứng vào card mạng), không hiểu địa chỉ IP. ARP (Address Resolution Protocol) là giao thức tra ra địa chỉ MAC tương ứng với một địa chỉ IP, theo chuẩn RFC 826 công bố năm 1982. Giao thức này đơn giản tới mức không có bước xác thực nào. Bất kỳ máy nào trong mạng cũng có thể tự nhận là chủ của một IP mà không bị kiểm tra. Đây là gốc rễ của ARP Spoofing, kỹ thuật tấn công len vào giữa hai máy đang trao đổi dữ liệu. Bài viết giải thích cơ chế hoạt động của ARP, cấu trúc gói tin, các loại ARP, và cách phát hiện, phòng chống khi bị khai thác.
Contents
ARP (Address Resolution Protocol) là giao thức ánh xạ địa chỉ IP (tầng Network, Layer 3) sang địa chỉ MAC (tầng Data Link, Layer 2) trong cùng một mạng LAN. Chuẩn này được định nghĩa trong RFC 826 từ năm 1982 và gần như không đổi kể từ đó.
Hình dung giống việc bạn biết tên người nhận nhưng cần tìm đúng địa chỉ nhà để giao hàng. IP giống cái tên, MAC giống địa chỉ nhà cụ thể. ARP là bước tra cứu ở giữa, biến một cái tên thành một địa chỉ giao hàng chính xác.

Mạng cần ARP vì địa chỉ IP và địa chỉ MAC thuộc hai bản chất khác nhau, còn card mạng chỉ giao tiếp được bằng MAC. Hai bản chất đó khác nhau ở điểm sau:
Ở tầng Data Link, hai thiết bị chỉ gửi được khung dữ liệu (frame) cho nhau khi biết đúng địa chỉ MAC. Trong khi đó, phần mềm ứng dụng phía trên lại chỉ làm việc với IP. Nếu không có ARP, bạn phải tự tra và nhập tay bảng ánh xạ IP sang MAC cho toàn mạng mỗi khi một máy cần gửi dữ liệu. Việc này không thể duy trì thủ công khi mạng có vài chục thiết bị trở lên. ARP tự động hoá toàn bộ bước tra cứu đó, nên bạn không phải làm việc này bằng tay.
Giả sử máy A (192.168.1.10) muốn gửi dữ liệu tới máy B (192.168\.1.20) trong cùng mạng LAN. ARP xử lý việc này qua bốn bước sau:

Thời gian một entry (một dòng ánh xạ IP-MAC) tồn tại trong ARP cache chênh lệch rất lớn giữa các nền tảng. Dưới đây là mức mặc định trên ba nền tảng phổ biến:
Vì mức chênh lệch này, khi bạn đổi card mạng hay đổi router, kết nối đôi khi gián đoạn tạm thời. Tình trạng này kéo dài cho tới khi cache cũ hết hạn, hoặc được cập nhật qua một gói ARP tự phát, loại gói ARP sẽ nói rõ ở mục sau.
Toàn bộ Request và Reply ở trên thực chất là hai dạng của cùng một loại gói tin ARP. Mục tiếp theo mổ xẻ chính xác bên trong gói tin đó chứa gì.
Một gói tin ARP có cấu trúc cố định gồm các trường sau, minh hoạ lại đúng ví dụ máy A gửi tới máy B ở mục trên. Giá trị Hardware Type trong bảng ứng với Ethernet, chuẩn kết nối vật lý phổ biến nhất trong mạng LAN hiện nay:
|
Trường |
Ý nghĩa |
Ví dụ giá trị |
|
Hardware Type |
Loại mạng vật lý |
1 (Ethernet) |
|
Protocol Type |
Loại giao thức lớp mạng |
0x0800 (IPv4) |
|
Opcode |
Loại bản tin |
1 = Request, 2 = Reply |
|
Sender MAC / IP |
Địa chỉ của bên gửi (máy A) |
AA:BB:CC:00:00:01 / 192.168.1.10 |
|
Target MAC / IP |
Địa chỉ của bên nhận là máy B |
00:00:00:00:00:00 / 192.168.1.20 |
Ở Request, Target MAC luôn để trống vì máy A chưa biết. Khác biệt duy nhất giữa hai loại bản tin nằm ở giá trị Opcode (1 hoặc 2) và việc Target MAC có được điền hay không. Ngoài 5 trường chính này, gói tin ARP còn 2 trường phụ mà bạn ít khi cần quan tâm khi đọc gói tin:
Điểm mấu chốt là không trường nào trong toàn bộ gói tin dùng để xác thực danh tính bên gửi.
ARP có bốn biến thể chính, mỗi loại phục vụ một tình huống khác nhau:
|
Loại |
Chức năng |
|
Proxy ARP |
Một thiết bị, thường là router, trả lời ARP Request thay cho thiết bị khác, dùng khi hai mạng con khác nhau cần giao tiếp như cùng một LAN |
|
Gratuitous ARP |
Thiết bị tự gửi ARP Reply dù không có Request nào trước đó, dùng để thông báo IP-MAC của mình hoặc phát hiện IP trùng lặp khi vừa khởi động |
|
Reverse ARP (RARP) |
Tìm IP từ MAC, tức chiều ngược của ARP thông thường; đã lỗi thời, được thay thế bởi DHCP |
|
Inverse ARP (InARP) |
Dùng trong mạng Frame Relay để ánh xạ DLCI (Data Link Connection Identifier) sang địa chỉ IP |
Cơ chế “tự thông báo mà không cần ai hỏi” của Gratuitous ARP chính là kẽ hở kẻ tấn công lợi dụng nhiều nhất. Mục tiếp theo nói rõ cách khai thác.
ARP Spoofing khai thác đúng một điểm yếu: ARP không có cơ chế xác thực. Vì vậy, thiết bị nhận một ARP Reply không kiểm tra được nó có thực sự đến từ đúng chủ sở hữu IP hay không. Điều này đúng kể cả khi thiết bị đó chưa từng gửi Request. Kẻ tấn công lợi dụng chính Gratuitous ARP, loại bản tin hợp lệ dùng để tự thông báo, để gửi thông tin giả.
Quy trình tấn công về cơ bản gồm ba giai đoạn theo mô tả của Veracode. Ba giai đoạn đó là: chọn mục tiêu trong mạng, gửi gói ARP giả để đầu độc cache, rồi khai thác vị trí trung gian vừa chiếm được. Cụ thể hơn, kẻ tấn công thực hiện theo trình tự sau:

ARP Spoofing dẫn tới bốn hậu quả cụ thể:
Bạn phát hiện ARP Spoofing thủ công bằng cách xem ARP cache trên máy. Nếu hai địa chỉ IP khác nhau cùng trỏ về một địa chỉ MAC, đây là dấu hiệu rõ ràng của việc bị đầu độc (poisoning). Ví dụ minh hoạ:
|
IP |
MAC |
|
192.168.1.1 (gateway) |
AA:BB:CC:11:22:33 |
|
192.168.1.20 (máy khác) |
AA:BB:CC:11:22:33 |
Cùng một MAC xuất hiện cho hai IP khác nhau là bất thường, vì mỗi card mạng chỉ có đúng một MAC.
Với mạng lớn hơn, bạn có thêm hai công cụ chuyên dụng để phát hiện sớm hơn:
Vì bản thân ARP không thể vá, các biện pháp dưới đây đều là lớp phòng thủ đặt bên ngoài giao thức. Chúng không loại bỏ được lỗ hổng gốc, nhưng giảm đáng kể rủi ro bị khai thác. Bạn nên triển khai theo thứ tự từ dễ tới khó:

Bạn tự kiểm tra ARP cache ngay trên máy mà không cần cài thêm công cụ. Lệnh arp -a dùng được trên cả Windows và Linux/macOS, dù đây là lệnh cũ. Trên Linux, lệnh hiện đại hơn để xem cùng thông tin là ip neigh show.

Khi nghi ngờ cache đang chứa dữ liệu cũ hoặc sai, bạn xoá cache theo cách sau:
arp -d <IP>.Ngay sau khi đọc mục phát hiện Spoofing ở trên, bạn nên tự chạy arp -a trên máy mình một lần. Việc này giúp bạn quen mặt bảng ARP cache bình thường, nên nhận ra bất thường nhanh hơn nếu gặp lại sau này.
Không. IPv6 dùng Neighbor Discovery Protocol (NDP) chạy trên ICMPv6 thay cho ARP, đảm nhiệm cùng công việc ánh xạ địa chỉ IP sang MAC nhưng theo cơ chế khác.
Điểm khác biệt cốt lõi nằm ở khả năng xác thực. NDP có thể kết hợp thêm SEND (Secure Neighbor Discovery), dùng chữ ký số để xác thực bên gửi trước khi thiết bị khác chấp nhận thông tin ánh xạ. Ngược lại, ARP không có bất kỳ cơ chế xác thực nào ở tầng giao thức, kể cả tùy chọn.
Đây chính là lý do ARP Spoofing tồn tại suốt hơn 40 năm mà gần như không thể vá triệt để trong bản thân giao thức. Ngược lại, NDP khi bật SEND khó bị giả mạo hơn hẳn. Tuy vậy, bạn cần biết thêm một điều: SEND không bật mặc định và ít được triển khai trong thực tế. Vì vậy, phần lớn mạng IPv6 hiện nay vẫn dùng NDP thuần và cũng có nguy cơ bị giả mạo tương tự ARP.

ARP là cầu nối bắt buộc giữa địa chỉ IP và địa chỉ MAC trong mạng LAN. Cơ chế hoạt động của nó đơn giản. Nhưng chính sự đơn giản đó là lý do giao thức này không có bước xác thực, dẫn tới rủi ro ARP Spoofing. Khi bạn hiểu đúng cơ chế Request/Reply và biết cách đọc ARP cache, bạn đã nắm kiến thức nền về mạng. Nắm thêm thứ tự ưu tiên các biện pháp phòng chống giúp bạn chủ động bảo vệ hệ thống trước một lỗ hổng đã tồn tại từ khi giao thức ra đời.
ARP hoạt động giữa tầng Network (Layer 3) và tầng Data Link (Layer 2) trong mô hình OSI (khung 7 tầng mô tả cách dữ liệu di chuyển qua mạng). Nó lấy địa chỉ IP ở Layer 3 làm đầu vào và trả về địa chỉ MAC ở Layer 2. Vì vậy, tài liệu kỹ thuật thường xếp ARP vào Layer 2.5.
Không trực tiếp. ARP chỉ hoạt động trong phạm vi một mạng LAN, vì gói ARP Request gửi theo kiểu broadcast không vượt qua được router. Giữa hai subnet khác nhau, dữ liệu đi qua router bằng địa chỉ MAC của router, không phải ARP xuyên subnet. Proxy ARP là ngoại lệ có kiểm soát: router trả lời ARP Request thay cho thiết bị ở subnet khác, nên tạo cảm giác hai subnet dùng chung một LAN. Nhưng bản thân gói ARP thật vẫn không vượt qua router.
ARP tra địa chỉ MAC từ một địa chỉ IP đã biết. RARP làm ngược lại, tra địa chỉ IP từ một địa chỉ MAC đã biết. RARP đã lỗi thời và được thay thế hoàn toàn bởi DHCP từ nhiều năm nay.
Không nên tắt. ARP là bắt buộc để thiết bị giao tiếp trong mạng LAN bằng IP. Tắt ARP khiến máy không tra được địa chỉ MAC của bất kỳ thiết bị nào, dẫn tới mất kết nối mạng nội bộ hoàn toàn.