Các cách thức nghe gói tin trên mạng

Bắt gói tin không đơn giản chỉ là gắn 1 laptop vào 1 cổng mạng và "chụp" lại toàn bộ traffic. Trên thực tế, đôi khi việc đặt 1 công cụ bắt gói tin ở đâu trên 1 hệ thống mạng còn khó hơn việc phân tích các gói tin.
Hình dưới đây minh họa 1 tình huống đặc biệt. Bởi vì 3 thiết bị hay được dùng nhất trên 1 mạng hiện nay (Hub, Switch, Router), mỗi thiết bị có cách xử lý traffic khác nhau, cho nên ta phải nắm rõ được cấu trúc vật lý của mạng mà ta đang phân tích.


Chúng ta sẽ cùng đi vào nghiên cứu 1 số mạng thực tế để chỉ ra cách tốt nhất để bắt các gói tin trong từng môi trường mạng sử dụng Hub, Switch và Router.


Living Promiscuously (chế độ bắt tất cả các gói tin đi qua)
Trước khi nghe các gói tin trên mạng, ta cần 1 card mạng (NIC) có hỗ trợ chế độ Promiscuous. Chế độ Promiscuous cho phép card mạng nhìn thấy tất cả các gói tin đi qua hệ thống dây mạng.
Như bạn đã biết ở bài trước, với broadcast traffic, việc các máy tính nhận được các gói tin không mong muốn (các gói tin đó không được gửi cho nó) là chuyện bình thường. ARP được sử dụng để xác định địa chỉ MAC nào tương ứng với 1 địa chỉ IP cụ thể. Để tìm kiếm được chính xác địa chỉ MAC cần tìm, ARP gửi 1 gói tin broadcast đến tất cả các thiết bị ở trong vùng quảng bá của nó với hi vọng rằng sẽ có máy nào đó trả lời.
Một vùng broadcast (broadcast domain) là 1 phân mạng, nơi bất kỳ máy tính nào có thể gửi tin trực tiếp tới máy khác mà không cần phải thông qua bất kỳ 1 router nào. Một miền broadcast có thể bao gồm vài máy tính, nhưng chỉ 1 máy ở trong miền đó có hứng thú với gói tin ARP broadcast đó (chính là máy cần nhận gói tin). Nó sẽ trở nên không hiệu quả nếu khi tất cả các máy trên mạng phải thực sự xử lý gói tin broadcast đó. Thay vào đó, các card mạng của các máy không nhất thiết phải nhận gói tin đó sẽ nhận ra rằng gói tin đó không dành cho mình, và gói tin đó sẽ bị loại bỏ trước khi nó qua được card mạng để CPU xử lý.
Các gói tin bị loại bỏ không gửi đến được các máy kia sẽ cải thiện hiệu năng xử lý của máy, nhưng đối với những người phân tích gói tin thì điều đó không thực sự tuyệt vời cho lắm. Chúng ta luôn muốn thấy được tất cả các gói tin được gửi đi qua hệ thống dây mạng để có thể không bỏ lỡ bất kỳ một phần thông tin nào.
Có thể chắc chắn rằng ta bắt được tất cả lưu lượng bằng cách sử dụng chế độ Promiscuous của card mạng. Khi hoạt động trong chế độ Promiscuous, card mạng cho phép mọi gói tin mà nó thấy đi qua card mạng để đến với bộ xử lý của máy tính. Một khi gói tin tới được CPU, chương trình bắt gói tin sẽ lấy được gói tin đó để phân tích.
Hầu hết các card mạng hiện nay đều hỗ trợ chế độ Promiscuous, và Wireshark có bao gồm libpcap/WinPcap driver, cho phép chương trình có thể chuyển đổi card mạng của chúng ta sang chế độ Promiscuous.

Nghe trong mạng sử dụng Hub
Sniffing trên mạng môi trường Hub là 1 giấc mơ đối với bất kỳ ai. Như bài trước, thì lưu lượng được gửi đi qua thiết bị Hub thì sẽ đi qua bất kỳ cổng nào kết nối với Hub. Vì vậy, để phân tích lưu lượng đi qua 1 máy tính kết nối với 1 thiết bị Hub, điều ta cần làm là kết nối 1 packet sniffer tới 1 cổng còn trống trên Hub. Ta có thể thấy được tất cả truyền thông đến và đi từ máy tính đó, cũng như truyền thông giữa các thiết bị khác kết nối với thiết bị Hub đó. Hình dưới đây minh họa việc sniffer trên 1 mạng có Hub (vùng sniffer được giới hạn trong khung):


Không may là, mạng Hub rất hiếm tồn tại bởi vì nó gây ra cơn đau đầu cho các nhà quản trị mạng. Bởi vì chỉ có 1 thiết bị duy nhất có thể truyền thông tại 1 thời điểm, 1 thiết bị kết nối qua 1 Hub phải cạnh tranh băng thông với các thiết bị khác cũng đang cố gắng truyền thông qua thiết bị Hub đó. Khi 2 hay nhiều thiết bị truyền thông ngay tại cùng 1 thời điểm, sẽ xảy ra xung đột, như ở hình dưới đây. Kết quả gây ra sẽ là mất mát gói tin, và các thiết bị sẽ phải truyền lại các gói tin đó, khiến cho mạng càng trở nên tắc nghẽn. Khi đến 1 mức xung đột nào đó, thiết bị sẽ phải truyền lại 1 gói tin đến tận 3,4 lần và sẽ làm giảm hiệu năng của mạng. Từ đó ta có thể thấy dễ hiểu vì sao hầu hết các mạng ngày nay đều sử dụng Switch.


Nghe trong mạng sử dụng Switch
Như đã nói ở bài trước, Switch là loại thiết bị kết nối thông dụng nhất được sử dụng trong môi trường mạng hiện đại. Chúng cung cấp 1 giải pháp hiệu quả để truyền dữ liệu qua các lưu lượng broadcast, unicast và multicast. Ngoài ra, Switch còn cho phép truyền thông song công, có nghĩa là thiết bị có thể gửi và nhận dữ liệu cùng lúc đồng thời.
Không may là, Switch có 1 sự phức tạp nhất định. Khi bạn kết nối 1 sniffer tới 1 cổng trên Switch, bạn chỉ có thể thấy luồng traffic broadcast và traffic đó được truyền và nhận bởi thiết bị của bạn, được minh họa như hình dưới đây:


Có 3 cách mà chúng ta sẽ nhắc đến ở đây để bắt luồng traffic từ 1 thiết bị mục tiêu trên 1 mạng chuyển mạch: Port Mirroring, Hubbing Out và ARP Cache Poisoning.

Port Mirroring
Port Mirroring, hay Port Spanning có lẽ là cách đơn giản nhất để bắt traffic từ 1 thiết bị mục tiêu trên 1 mạng chuyển mạch. Trong loại thiết lập này, ta phải truy cập vào giao diện dòng lệnh hoặc giao diện quản trị web của Switch kết nối trực tiếp với máy mục tiêu. Switch cũng phải hỗ trợ tính năng Port Mirroring và có 1 cổng còn trống để bạn có thể cắm máy nghe vào.
Khi kích hoạt tính năng Port Mirroring, bạn đã copy toàn bộ lưu lượng đi qua cổng này sang 1 cổng khác, hay nói cách khác, tính năng Port Mirroring là 1 tính năng cho phép mọi traffic vào và ra 1 cổng sẽ được copy sang 1 cổng đích. Ở trên cổng đích, trên PC gắn vào cổng này, bạn cần cài đặt các chương trình có khả năng đọc và phân tích traffic. Ví dụ, để bắt được lưu lượng trên 1 thiết bị kết nối với cổng 3 của Switch, bạn phải kết nối PC có chương trình phân tích traffic với cổng 4 của Switch đó và ánh xạ các traffic từ cổng 3 sang cổng 4. Khi đó bạn sẽ thấy được toàn bộ lưu lượng được truyền và nhận bởi máy mục tiêu. Hình dưới đây minh họa điều này:


Cách bạn thiết lập tính năng Port Mirroring phụ thuộc vào nhà sản xuất Switch. Với hầu hết Switch, bạn sẽ cần phải đăng nhập vào giao diện dòng lệnh và sử dụng câu lệnh Port Mirroring. Dưới đây là 1 danh sách các câu lệnh port-mirroring phổ biến.


Một số nhà sản xuất Switch cho phép bạn ánh xạ nhiều cổng tới 1 cổng riêng biệt, nó có thể sẽ hữu ích khi phân tích truyền thông giữa 2 hay nhiều thiết bị trên 1 Switch. Tuy nhiên, hãy cân nhắc điều gì sẽ xảy ra bằng cách sử dụng vài phép toán đơn giản. Nếu bạn có 1 Switch 24 cổng và bạn ánh xạ 23 cổng Full-duplex 100Mbps tới 1 cổng, bạn có khả năng có 4600Mbps truyền qua cổng đó. Điều này vượt quá xa ngưỡng vật lý của 1 cổng, bởi vậy sẽ xảy ra việc mất mát gói tin hoặc mạng sẽ bị chậm lại khi lưu lượng đạt đến 1 mức độ nhất định. Trong những trường hợp này, Switch sẽ drop các gói tin dư thừa hoặc thậm chi tạm dừng việc truyền thông. Hãy chắc chắn rằng trường hợp này không xảy ra khi bạn đang bắt gói tin để phân tích.

Hubbing Out
Một cách đơn giản khác để bắt các lưu lượng của thiết bị mục tiêu trong 1 mạng Switch là Hubbing Out. Hubbing Out là kỹ thuật mà trong đó bạn đặt thiết bị mục tiêu và máy nghe vào cùng 1 phân mạng bằng cách đặt chúng trực tiếp vào 1 thiết bị Hub.


Rất nhiều người nghĩ rằng Hubbing Out là lừa dối, nhưng nó thật sự là 1 giải pháp hoàn hảo trong các tình huống mà bạn không thể thực hiện Port Mirroring nhưng vẫn có khả năng truy cập vật lý tới Switch mà thiết bị mục tiêu cắm vào.
Trong hầu hết các tình huống, Hubbing Out sẽ giảm tính năng song công của thiết bị mục tiêu (Full to Half). Phương thức này không phải là cách sạch sẽ nhất để nghe, và nó thường được bạn sử dụng như là 1 lựa chọn khi mà Switch không hỗ trợ Port Mirroring.
Khi Hubbing Out, chắc chắn rằng bạn sử dụng 1 thiết bị Hub chứ không phải là 1 Switch bị gán nhầm nhãn. Khi bạn sử dụng Hub, hãy kiểm tra để chắc chắn rằng nó là 1 thiết bị Hub bằng cách cắm 2 máy tính vào nó và nhìn xem 1 máy có thể nhìn thấy lưu lượng của máy còn lại hay không.

ARP Cache Poisoning
Tiến trình ARP
Nhớ lại bài trước, có 2 loại địa chỉ gói tin ở lớp 2 và lớp 3 của mô hình OSI. Các địa chỉ lớp 2, hay còn gọi là địa chỉ MAC, được sử dụng để kết hợp với địa chỉ lớp 3 của hệ thống mà bạn đang sử dụng. Địa chỉ lớp 3 còn được gọi với cái tên khác là địa chỉ IP.
Tất cả các thiết bị trên mạng giao tiếp với thiết bị khác ở lớp 3 sử dụng địa chỉ IP. Bởi vì Switch hoạt động ở lớp 2 của mô hình OSI, nên chúng chỉ có thể hiểu được các địa chỉ MAC, bởi vậy các thiết bị phải chứa cả thông tin này trong những gói tin mà chúng tạo ra. Khi thiết bị không biết địa chỉ MAC, thì chúng sẽ sử dụng địa chỉ IP để có thể chuyển tiếp lưu lượng tới thiết bị thích hợp. Quá trình dịch địa chỉ này được hoàn thành bởi giao thức ARP.
Tiến trình ARP bắt đầu khi 1 máy tính muốn giao tiếp với máy khác. Máy tính truyền tin đó đầu tiên kiểm tra ARP cache của nó để xem liệu nó đã có địa chỉ MAC tương ứng với địa chỉ IP của máy nhận hay chưa. Nếu chưa có, nó sẽ gửi 1 ARP Request tới lớp liên kết dữ liệu 1 địa chỉ broadcast FF:FF:FF:FF:FF:FF, như đã được giới thiệu ở bài trước. Bởi vì là 1 gói tin broadcast, cho nên gói tin này sẽ được nhận bởi tất cả các máy ở trên cùng phân mạng đó. Về cơ bản thì gói tin quảng bá này sẽ có nhiệm vụ hỏi "địa chỉ IP nào tương ứng với địa chỉ MAC XX:XX:XX:XX:XX:XX".
Các thiết bị có địa chỉ IP khác với địa chỉ IP trên sẽ tự động loại bỏ ARP Request. Máy đích có nhiệm vụ phản hồi lại gói tin địa chỉ MAC của nó thông qua ARP Reply. Ở thời điểm này, máy gửi bây giờ đã có thông tin về địa chỉ lớp 2 mà nó cần để giao tiếp với máy nhận, và nó lưu trữ thông tin đó ở trong bảng ARP cache để lần tiếp theo có thể gửi nhanh hơn mà không cần mất công dò hỏi lần nữa.
ARP Cache Poisoning hoạt động như thế nào?
ARP Cahe Poisoning, hay còn được gọi là ARP Spoofing, là 1 quá trình gửi thông điệp ARP tới 1 Switch hay 1 Router bằng 1 địa chỉ MAC giả mạo nhằm mục đích nghe lén lưu lượng của thiết bị mục tiêu. Hình dưới đây minh họa quá trình này:


ARP Cache Poisoning là 1 kỹ thuật nâng cao trong việc nghe đường truyền trong 1 mạng Switch. Nó được sử dụng phổ biến bởi hacker để gửi các gói tin địa chỉ sai tới máy nhận với mục tiêu để nghe trộm đường truyền hiện tại hoặc tấn công từ chối dịch vụ, nhưng ARP Cache Poisoning chỉ có thể phục vụ như là 1 cách hợp pháp để bắt các gói tin của máy mục tiêu trong mạng Switch.

Nghe trong mạng sử dụng Router
Tất cả các kỹ thuật nghe trong mạng Switch đều có thể được sử dụng trong mạng Router. Chỉ có 1 việc cần quan tâm khi mà thực hiện với mạng Router là sự quan trọng của việc đặt máy nghe khi mà thực hiện xử lý 1 vấn đề liên quan đến nhiều phân mạng. Broadcast Domain của 1 thiết bị được mở rộng cho đến khi nó gặp Router. Khi đó, lưu lượng sẽ được chuyển giao sang dòng dữ liệu Router tiếp theo và bạn sẽ mất liên lạc với các gói tin đó cho đến khi bạn nhận được 1 ACK của các máy nhận trả về. Trong tình huống này, dữ liệu sẽ lưu chuyển qua nhiều Router, vì vậy rất quan trọng để thực hiện phân tích tất cả lưu lượng trên các giao diện của Router.
Ví dụ, liên quan đến vấn đề liên kết, bạn có thể gặp phải 1 mạng với 1 số phân mạng được kết nối với nhau thông qua các Router. Trong mạng đó, 1 phân mạng liên kết với 1 phân mạng với mục đích lưu trữ và tham chiếu dữ liệu. Vấn đề mà chúng ta đang cố gắng giải quyết là phân mạng D không thể kết nối với các thiết bị trong phân mạng A.


Khi mà bạn nghe lưu lượng của 1 thiết bị trong phân mạng D. Khi đó, bạn có thể nhìn thấy rõ ràng lưu lượng truyền tới phân mạng A, nhưng không có biên nhận (ACK) nào được gửi trả lại. Khi bạn nghe luồng lưu lượng ở phân mạng cấp trên để tìm ra nguyên nhân vấn đề, bạn tìm ra rằng lưu lượng bị hủy bởi Router ở phân mạng B. Cuối cùng dẫn đến việc bạn kiểm tra cấu hình của Router, nếu đúng, hãy giải quyết vấn đề đó của bạn. Đó là 1 ví dụ điển hình lý do vì sao cần nghe lưu lượng của nhiều thiết bị trên nhiều phân mạng với mục tiêu xác định chính xác vấn đề.

Network Maps
Để quyết định việc đặt máy nghe ở đâu, cách tốt nhất là bạn phải biết được một cách rõ ràng mạng mà bạn định phân tích. Nhiều khi việc xác định vấn đề đã chiếm nửa khối lượng công việc trong việc xử lý sự cố.

3 nhận xét:

  1. Anh có tài liệu nào nữa không ạ,,cho em xin. Em đang làm đồ án về wireshark.

    Trả lờiXóa
    Trả lời
    1. Bạn vào phần Ebook của blog này, mình có up lên 1 quyển sách về Wireshark đấy, bạn down về và thưởng thức nhé. Thanks!

      Xóa
  2. Cậu bạn ơi, có thể cho tôi xin ít tài liệu nói về các thuật toán phân loại gói tin không???

    Trả lờiXóa