Giới thiệu
Có lẽ trong một vài bài báo, chúng ta cũng đã thấy được sự quan trọng của hai lĩnh vực về bảo mật máy tính đối với người mới sử dụng đó là: programming và networking. Trong khi chúng là hai phần khác nhau thì cả hai cần phải được xem có tầm quan trọng như nhau. Nếu không có việc lập trình các giao thức mạng thì sẽ không có mạng. Điều cần hỏi ở đây là: có bắt buộc cần phải có một lập trình viên để nắm được một cách đầy đủ các khái niệm về mạng và lý thuyết mạng ở mức thấp hay không? Trong nhiều trường hợp là không cần như vậy. Mặc dù vậy, một sự ham hiểu của các độc giả sẽ là tốt và có thể hướng anh ta vào việc lập trình tại một vài điểm để có thêm các thử nghiệm với các giao thức khác và lý thuyết mạng.
Với những người mới với lĩnh vực này, ấn tượng đầu tiên với một máy tính là cái gì đó khó có thể quên. Khi một ai đó khám phá ra Internet, sự giàu có của thông tin tạo cho họ một cảm giác kinh sợ và tạo nên cho họ một hứng khởi là các kỹ thuật bên trong của nó làm việc như thế nào. Bất kỳ ai dường như cũng bị rơi vào một thế giới hoàn toàn mới khi sử dụng một máy tính để kết nối với các hệ thống khác bên phía bờ kia của thế giới. Họ sẽ tò mò về các máy tính và mạng làm các công việc này như thế nào? Và thông tin truyền từ máy tính này đến máy tính kia đi qua tất cả các thiết bị khác nhau để đến được đích của nó như thế nào?
Các hành trình
Khi một ứng dụng Internet được gọi thì một loạt các sự kiện sẽ xảy ra. Trong bài viết này chúng tôi chỉ giới thiệu một cách đơn giản một gói được tạo ra như thế nào và các thiết bị sẽ đưa nó đi theo nhiều con đường để đến đích của nó ra sao. Việc hiểu biết về việc gì xảy ra giữa điểm A và điểm Z có thể khá hữu ích trong việc tiếp cận đến lĩnh vực này.
Bây giờ chúng ta nên mô tả những gì xảy ra từ thời điểm một ứng dụng được gọi đến lúc các gói được tạo ra bằng các ứng dụng tới được đích của nó. Giả sử rằng bạn sử dụng Firefox để kiểm tra xem một tin tức trên trang web yêu thích của bạn. Một loạt các sự kiện đã được thiết lập nên trong sự chuyển động này là hoàn toàn trong suốt đối với bạn. Sau khi bắt tay TCP/IP ban đầu, trình duyệt web của bạn sẽ gửi một yêu cầu đến máy chủ web server mà trang chủ của bạn đang hỏi cho trang chủ của nó. Thông tin yêu cầu HTTP GET bây giờ cần phải gửi đến web server. Những gì xảy ra với Firefox khi kích ứng dụng của bạn là làm một yêu cầu đến hệ thống. Quá trình này sẽ đưa dữ liệu mà Firefox muốn gửi được copy từ các không gian nhớ của các ứng dụng đến bộ đệm bên trong không gian trung tâm.
Phụ thuộc vào giao thức truyền tải nào mà ứng dụng sử dụng, lớp socket sẽ gọi cả UDP và TCP. Chúng ta cần phải nhớ rằng có rất nhiều ứng dụng không sử dụng TCP như một giao thức truyền tải. DNS sử dụng cả hai UDP và TCP, trong khi các ứng dụng khác như là TFTP chỉ sử dụng UDP. Lớp socket gọi giao thức truyền tải thích hợp, khi đó dữ liệu sẽ được copy xuống vào bộ đệm socket.
Sự chia nhỏ dữ liệu
Khi copy dữ liệu từ yêu cầu GET được thực hiện đến một bộ đệm socket, TCP sẽ chia nhỏ dữ liệu này nếu cần thiết. Mặc dù một yêu cầu GET là tương ứng với một gói và sẽ đi bên trong MTU của Ethernet không có vấn đề gì, nhưng việc gì sẽ xảy ra nếu các yêu cầu của trình duyệt vượt quá MTU? Khi đó TCP sẽ chia nhỏ dữ liệu để bảo đảm kích thước phù hợp với giới hạn 1500bytes của Ethernet MTU. Một điểm chính đáng nhớ ở đây là sự chia nhỏ này sẽ xảy ra tại lớp TCP nếu ứng dụng yêu cầu sử dụng TCP như là giao thức truyền tải dữ liệu của chúng.
Việc truyền tải dữ liệu trong môi trường mạng.
Dữ liệu được tạo hợp với chức năng lớp truyền tải riêng của nó, hãy xem xét lớp IP. Tại đây, header IP được xây dựng và tất cả các địa chỉ IP quan trọng được gán vào. Sau đó, dự liệu sẽ theo các đường liên kết dữ liệu, nơi mà cả hai lớp điều khiển liên kết logic và điều khiển truy cập thực hiện phần việc này. Cuối cùng, dữ liệu được sẵn sàng để truyền bằng các lớp vật lý được tích hợp trong hệ thống bằng các NIC card. Với hầu hết các người dùng tại nhà, một router SoHo đã được kết hợp của cả chuyển mạch (switch) và router đơn giản. Với người dùng trong công ty, switch là một phần cứng tách biệt với router của nó. Nếu trong môi trường công ty các máy tính có thể nối với các switch qua đường cáp. Nếu switch không có bảng hard-coded CAM thì swtich cần chú ý đến địa chỉ MAC của máy tính (duy nhất cho mỗi Ethernet card). Khi gói dữ liệu đến từ quá trình truyền tải của nó mang theo dữ liệu của website như được yêu cầu trong GET request chuyển mạch theo hướng ngược của trình khách nó sẽ hiểu nơi để gửi các gói đó trở lại.
Trình khách hiểu các gateway mặc định của nó như thế nào? Dù nó là mạng công ty hay tại nhà thì hệ thống sẽ luôn thực hiện một gói DHCP một lần để nó khởi động và lấy thông tin chính từ server DHCP. Do không phải tất cả các hệ thống đều sử dụng DHCP, vì thế không có địa chỉ IP hay gateway được định trước. Thông tin trong đó như là tên server DNS nào được sử dụng, địa chỉ IP của nó và địa chỉ IP gateway mặc định. Nếu DHCP bị tắt, người quản trị hệ thống sẽ phải vào tất cả các thông tin này bằng tay. Cực kỳ không hiệu quả chút nào, nên nó giải thích tại sao DHCP được bật trong hầu hết các mạng.
Với gateway mặc định ở gần, máy tính hiểu đích đi đến để truy cập Internet và lấy dữ liệu trang web khi được yêu cầu bởi Firefox. Sau khi các gói đi qua switch nó hình thành đường để dễ dàng đi qua firewall đến router. Các packet nên được cho qua một firewall, khi đó firewall sẽ làm một vài công việc chính. Một firewall với đầy đủ tính năng sẽ ghi địa chỉ IP và port nguồn, cộng địa chỉ IP và port đích. Firewall sẽ giữ thông tin này trong bảng trạng thái của bộ nhớ, bằng cách này nó sẽ quy định sự truy cập vào mạng bên trong như thế nào. Nếu một gói không được ghi thì nó sẽ không được truy cập vào trong mạng. Trong một dịp khác chúng tôi sẽ giới thiệu với các bạn về vai trò của firewall đối với việc bảo vệ máy tính của bạn như thế nào.
Các router và NAT
Bây giờ, khi các gói đã đi qua firewall, nếu hiện tại nó đang đi đến router. Địa chỉ IP cá nhân mà các gói có (giả định nó là một địa chỉ cơ bản 192.168/16) sẽ được biến đổi thành một địa chỉ IP chung có thể định tuyến, cái mà được cho bởi ISP của bạn. Nó cũng được gán cho router của bạn. Các gói bây giờ bắt đầu cuộc hành trình của nó trên Internet và qua vô số các router trong chuyến đi của nó. Mỗi thời điểm đó, các gói hướng đến một router khác. Vậy cái gì xảy ra với chính các gói.
Hãy bắt đầu bằng việc nhìn vào router. Nó sẽ định tuyến các gói dựa vào thông tin trong bảng định tuyến của chính nó. Đến khi router tiếp theo nhận được các gói này nó sẽ tính toán theo bảng định tuyến của nó để tìm ra con đường ngắn nhất cho việc truyền tải gói tin này. Một trong vài phần nó sẽ thay đổi đó là TTL “time to live”. Bây giờ phần header IP của nó được thay đổi, do đó các router cần phải tính toán một giá trị tổng mới cho các gói. Cứ tương tự như vậy cho tới khi các gói đến được địa chỉ đích mong muốn của nó.
Lớp vật lý sẽ thực hiện một IRQ đến CPU đã chỉ rõ rằng có dữ liệu đã được xử lý. Sau đó, dữ liệu sẽ đi lên lớp data link, đây chính là nơi mà webserver sẽ nhận ra MAC và tiếp tục đi lên lớp IP, sau đó là lớp transport (nơi dữ liệu được đưa vào bộ đệm). Tại lớp này các thông tin của ứng dụng mà dữ liệu mang theo cho nó được xử lý ở đây. Kết quả cuối cùng là thông tin được yêu cầu cho yêu cầu GET đã được gửi trở lại. Tương tự như thế với một gói mới thì quá trình cũng xảy một loạt các sự kiện như vậy.
Kết luận
Nhìn chung bài báo này đã cố gắng để trình bày cho các bạn có một kiến thức cơ bản về mạng và các khái niệm chung của routing, switching và NAT. Mong các bạn có thể tiếp tục thực hiện những nghiên cứu thêm để nắm sâu hơn về nó và chúc các bạn thành công.
-------------------------------------
Giới thiệu:
Hàng ngày, có hàng triệu vấn đề xảy ra trong 1 mạng máy tính, từ việc đơn giản là nhiễm Spyware cho đến việc phức tạp như lỗi cấu hình Router, và các vấn đề này không thể giải quyết tất cả ngay lập tức được. Tốt nhất chúng ta có thể hi vọng thực hiện các công việc đó bằng cách chuẩn bị đầy đủ các kiến thức và các công cụ chúng ta cần có để xử lý những dạng vấn đề như trên.
Tất cả các vấn đề trên mạng đều xuất phát ở mức gói tin, nơi mà không có gì có thể che giấu đối với chúng ta, không có thứ gì bị ẩn đi bởi các cấu trúc menu, các hình ảnh bắt mắt hoặc là các nhân viên không đáng tin cậy. Ở mức gói tin, không có gì bí mật, chúng ta có thể điều khiển được mạng và giải quyết các vấn đề. Đây chính là thế giới của phân tích gói tin.
Chúng tôi sẽ bắt đầu viết loạt bài về kỹ thuật phân tích gói tin với công cụ tiêu biểu mà chúng tôi muốn giới thiệu ở đây là Wireshark. Khi kết thúc loạt bài này, bạn sẽ có thể thực hiện các kỹ thuật phân tích gói tin ở trình độ advanced, lúc đó bạn sẽ có thể giải quyết các vấn đề khó ở trong mạng của chính mình.
Trong bài đầu tiên này, chúng ta sẽ khởi đầu với những kiến thức căn bản, tập trung vào truyền thông mạng máy tính.
Cơ bản về phân tích gói tin
Phân tích gói tin, hay còn thường được gọi là lắng nghe gói tin hoặc phân tích giao thức, mô tả quá trình bắt và diễn giải dữ liệu sống như là các luồng đang lưu chuyển trong mạng với mục tiêu hiểu rõ hơn điều gì đang diễn ra trên mạng. Phân tích gói tin thường được thực hiện bởi 1 packet sniffer, là 1 công cụ được sử dụng để bắt dữ liệu thô đang truyền trên đường dây.
Phân tích gói tin có thể giúp chúng ta:
- Hiểu được các đặc điểm của mạng (cấu tạo của mạng).
- Biết được ai đang ở trên mạng.
- Xác định được ai hay cái gì đang sử dụng băng thông.
- Xác định những thời điểm mà việc sử dụng mạng đạt cao điểm.
- Chỉ ra các khả năng tấn công và các hành vi phá hoại.
- Tìm ra các ứng dụng không được bảo mật.
Có 1 vài chương trình bắt gói tin, bao gồm cả chương trinh miễn phí và sản phẩm thương mại. Mỗi chương trình được thiết kế với các mục tiêu khác nhau. Một vài chương trình bắt gói tin phổ biến như là tcpdump, OmniPeek và Wireshark. tcpdump là 1 chương trình có giao diện dòng lệnh, 2 chương trình còn lại đều có giao diện đồ họa.
Đánh giá 1 chương trình bắt gói tin:
Bạn phải cân nhắc về các yếu tố sau khi lựa chọn 1 chương trình bắt gói tin:
- Các giao thức hỗ trợ: tất cả các chương trình bắt gói tin có thể diễn giải các giao thức khác nhau. Hầu hết có thể diễn giải các giao thức mạng thông dụng (IPv4, ICMP), các giao thức tầng vận chuyển (TCP, UDP), và thậm chí các giao thức tầng ứng dụng (DNS, HTTP). Tuy nhiên, chúng có thể không hỗ trợ các giao thức không thông dụng hay là các giao thức mới (IPv6, SMBv2 và SIP). Khi lựa chọn 1 chương trình, hãy chắc chắn rằng nó hỗ trợ những giao thức mà bạn sẽ sử dụng đến.
- Tính dễ sử dụng: ở đây chúng ta phải xem xét đến bố cục của chương trình, tính dễ cài đặt, và hoạt động theo tiêu chuẩn. Chương trình bạn chọn phải phù hợp với trình độ chuyên môn của bạn. Ví dụ, nếu bạn có ít kinh nghiệm trong việc phân tích gói tin, bạn nên tránh dùng những công cụ có giao diện dòng lệnh như tcpdump. Khi bạn đã có kinh nghiệm với việc phân tích, thì bạn sẽ thấy việc kết hợp các chương trình bắt gói tin rất hữu ích và phù hợp với các tình huống cụ thể.
- Giá cả: một điều tuyệt vời về các chương trình bắt gói tin là có nhiều chương trình miễn phí có thể cạnh tranh với bất kỳ sản phẩm thương mại nào. Sự khác biệt đáng chú ý nhất giữa các sản phẩm thương mại và các lựa chọn thay thế miễn phí là công cụ báo cáo việc phân tích của chúng. Các sản phẩm thương mại thường có những báo cáo chi tiết về việc phân tích mạng để chúng ta dễ hình dung hơn, dễ nắm bắt vấn đề của mạng hơn, trong khi các sản phẩm miễn phí không có được điều này.
- Hỗ trợ kỹ thuật: thậm chí sau khi bạn đã nắm rõ tất cả những gì cơ bản nhất của chương trình bắt gói tin, thì thỉnh thoảng bạn vẫn cần hỗ trợ để giải quyết những vấn đề mới. Mặc dù hầu như sẽ không có sự hỗ trợ nào cho các chương trình miễn phí như Wireshark, nhưng cộng đồng người dùng sử dụng các ứng dụng đó sẽ thường xuyên cập nhật các vấn đề gặp phải.
- Hỗ trợ của hệ điều hành: không may là, không phải tất cả các chương trình bắt gói tin đều hỗ trợ tất cả các hệ điều hành. Hãy chọn 1 chương trình mà sẽ làm việc được trên tất cả các hệ điều hành mà bạn cần hỗ trợ.
Quá trình bắt gói tin
Quá trình bắt gói tin có thể chia thành 3 bước:
- Thu thập dữ liệu: đây là bước đầu tiên, chương trình bắt gói tin chuyển giao diện mạng được lựa chọn sang chế độ Promiscuous. Chế độ này cho phép card mạng có thể lắng nghe tất cả các gói tin đang lưu chuyển trên phân mạng của nó. Chương trình bắt gói tin sử dụng chế độ này cùng với việc truy nhập ở mức thấp để bắt các dữ liệu nhị phân trên đường truyền.
- Chuyển đổi dữ liệu: trong bước này, các gói tin nhị phân trên được chuyển đổi thành các khuôn dạng có thể đọc được.
- Phân tích: bước cuối cùng là phân tích các dữ liệu đã được bắt lại và được chuyển đổi.
Cơ bản về mạng
Giao thức
Các mạng ngày nay được tạo nên bởi nhiều hệ thống đa dạng chạy trên nhiều nền tảng khác nhau. Để có thể truyền thông, chúng ta phải sử dụng 1 tập hợp các giao thức. Các giao thức thông thường bao gồm: TCP, IP, ARP và DHCP. Một chồng giao thức là 1 nhóm logic các giao thức hoạt động cùng nhau.
Một trong những cách tốt nhất để hiểu được các giao thức là hãy nghĩ rằng chúng cũng tương tự như những quy tắc chi phối ngôn ngữ nói hay viết của con người. Mỗi ngôn ngữ đều có các quy tắc, ví dụ như các động từ nên được kết hợp như thế nào, cách con người chào hỏi nhau, hay thậm chí là cách cám ơn một ai đó. Các giao thức cho chúng ta thấy được các gói tin được truyền đi như thế nào, làm thế nào để bắt đầu một kết nối, và làm thế nào để xác nhận việc đã nhận được dữ liệu chuyển đến.
Mô hình OSI
Các giao thức tùy theo chức năng của nó mà được chia ra dựa trên mô hình tham chiếu OSI (Open System Interconnection). OSI là 1 mô hình phân lớp được bắt đầu phác thảo từ năm 1977 bởi tổ chức ISO và được công bố vào năm 1983. Mô hình này chia các lớp công việc thành 7 tầng và mỗi tầng lại có chức năng riêng của nó. Hình dưới đây minh họa mô hình tham chiếu OSI:
Bây giờ chúng ta sẽ cùng nhau điểm qua chức năng của từng tầng:
- Tầng vật lý: có chức năng truyền 1 dòng bit thô qua 1 đường truyền vật lý cụ thể nào đó. Để làm được điều này thì tầng vật lý định nghĩa ra các thủ tục về điện, cơ; các thủ tục chức năng, các đặc tính kỹ thuật cho việc thiết lập, duy trì và kết thúc 1 kết nối vật lý nào đó. Ví dụ như giữa PC và Switch chúng ta phải đấu nối bằng cáp gì, hay cự li của đoạn cáp mạng chỉ được dài tối đa là bao nhiêu... là do tầng vật lý quy định.
- Tầng liên kết dữ liệu: thực hiện chức năng điều khiển việc truy nhập vào đường truyền vật lý và thực hiện giao tiếp với tầng mạng ở trên nó. Để điều khiển việc truy nhập vào đường truyền vật lý thì nó phải định nghĩa ra dữ liệu được định dạng cho việc truyền như thế nào và làm thế nào để điều khiển việc truy nhập vào đường truyền vật lý. Tầng liên kết dữ liệu cũng được cung cấp luôn cơ chế dò lỗi.
- Tầng mạng: chịu trách nhiệm định tuyến gói tin dữ liệu, chọn ra đường đi tối ưu nhất để truyền dữ liệu. Lớp mạng cung cấp địa chỉ logic (địa chỉ IP) cho các máy chủ mạng. Nó cũng giải quyết vấn đề về phân mảnh gói tin và được cung cấp cơ chế dò lỗi trong một vài trường hợp.
- Tầng vận chuyển: xử lý các vấn đề truyền tải giữa các host, đảm bảo rằng dữ liệu được truyền tải một cách đáng tin cậy từ điểm này đến điểm kia trong mạng. Ngoài ra tầng vận chuyển còn đảm bảo việc thiết lập, duy trì, kết thúc các đường kết nối ảo và còn cung cấp thêm cơ chế dò lỗi và phục hồi thông tin bằng cách điều khiển luồng.
- Tầng phiên: có chức năng truyền thông liên host bằng cách thiết lập, quản lý và kết thúc các phiên giữa các ứng dụng.
- Tầng trình diễn: đảm bảo rằng dữ liệu gửi đi bởi đầu này có thể đọc được bởi đầu kia. Nhiệm vụ của tầng này là định dạng lại dữ liệu, cấu trúc lại dữ liệu, thương lượng các cú pháp truyền dữ liệu cho tầng ứng dụng và cung cấp cơ chế mã hóa.
- Tầng ứng dụng: cung cấp phương tiện cho người sử dụng truy nhập các thông tin và dữ liệu trên mạng thông qua chương trình ứng dụng. Tầng này là giao diện chính để người dùng tương tác với chương trình ứng dụng, và qua đó tương tác với mạng.
Bảng 1-1 dưới đây liệt kê một số giao thức phổ biến được sử dụng tại các tầng của mô hình OSI:
Vậy dữ liệu được truyền như thế nào qua mô hình OSI? Việc truyền dữ liệu trên 1 mạng được bắt đầu từ tầng ứng dụng của máy gửi. Dữ liệu được truyền từ tầng ứng dụng đi xuống dần qua các tầng dưới cho đến khi tới được tầng vật lý, thì lúc đó dữ liệu sẽ được truyền từ máy gửi sang máy nhận. Máy nhận sẽ nhận dữ liệu tại lớp vật lý và từ đó truyền dữ liệu lên dần qua các tầng đến khi tới được tầng ứng dụng.
Các giao thức ở các tầng tương ứng trên máy gửi và máy nhận bổ trợ cho nhau. Ví dụ, nếu 1 giao thức ở tầng 7 của máy gửi có nhiệm vụ mã hóa dữ liệu để gửi đi, thì giao thức tương ứng trên tầng 7 ở máy nhận sẽ phải có trách nhiệm giải mã dữ liệu đã được mã hóa đó.
Quá trình đóng gói dữ liệu
Khi 1 máy tính gửi dữ liệu trên mạng để đến 1 máy khác thì dữ liệu phải trải qua 1 quá trình đóng gói (Encapsulation).
Quá trình đóng gói này thực ra là việc dùng các thông tin về các giao thức để "bao quanh" dữ liệu sao cho mỗi lần dữ liệu đến từng tầng thì mỗi tầng sẽ hiểu và sẽ xử lý thông tin một cách tốt nhất.
Để truyền tải và trao đổi dữ liệu thì mỗi tầng sẽ sử dụng Protocol Data Unit. Mỗi khi dữ liệu xuống 1 tầng nào đó sẽ được thêm thông tin của tầng đó và tầng tương ứng ở phía host nhận dữ liệu sẽ đọc được thông tin này. Sau khi đọc xong thì thông tin đó sẽ được gỡ bỏ để đưa lên cho tầng phía trên.
Hình dưới đây cho ta thấy các PDU và cách chúng thêm thông tin cho mỗi tầng. Dữ liệu được di chuyển xuống tầng vận chuyển, sau đó dữ liệu được chia nhỏ ra thành các phần giống nhau và như vậy đã tạo ra một Header của tầng vận chuyển. Mỗi phần nhỏ sau khi chia ra sẽ được đánh thứ tự để bên nhận có thể sắp xếp đúng sau khi nhận dữ liệu.
Cũng ở trong hình ta có thể thấy đơn vị dữ liệu cho các tầng:
- Transport: Segment
- Network: Packet
- Data Link: Frame
- Physical: Bit
Các Segment sẽ được đưa xuống tầng mạng để thêm vào IP Header, mục đích của tầng mạng là đánh địa chỉ mạng và chỉ đường đi cho gói tin trên mạng. Địa chỉ mạng (ví dụ IP) có mục đích là đưa Segment đến đúng nơi nhận. Segment sau khi được thêm IP Header của tầng mạng thì được gọi là Packet hay Datagram.
Khi Packet xuống đến tầng liên kết dữ liệu thì sẽ được đóng gói thành các Frame. Frame Header mang theo thông tin về địa chỉ vật lý của host nguồn và host đích.
Ở trên ta thấy các Packet được đóng gói thành các Frame sẽ được đưa thêm vào 2 thông tin là LLC Header và MAC Header. Điều đó là do trong tầng liên kết dữ liệu có 2 Sublayer là Logical Link Control (LLC) và Media Access Control (MAC).
Lớp LLC liên kết với tầng mạng để xác định loại địa chỉ logic đang dùng là gì và sẽ đóng gói Frame theo kiểu tương ứng. Lớp MAC lại kết hợp với tầng cuối cùng là tầng vật lý để biết môi trường truyền dẫn bên dưới là gì để có cách thức sử dụng phù hợp.
Các thiết bị mạng
Hub
Hub là 1 loại thiết bị có nhiều cổng RJ-45, giống như loại trong hình dưới đây. Hub được thiết kế trong giới hạn từ 4 cổng cho đến 48 cổng.
Bởi vì Hub có thể tạo ra nhiều lưu lượng mạng không cần thiết và chỉ có thể hoạt động ở chế độ bán song công (chúng không thể gửi và nhận dữ liệu đồng thời cùng 1 lúc), cho nên chúng sẽ không được sử dụng trong các mạng hiện đại hoặc các mạng có mật độ cao (Switch sẽ được sử dụng thay thế). Tuy nhiên, bạn nên biết Hub hoạt động như thế nào, bởi vì nó có liên quan đến kỹ thuật "hubbing out" mà chúng ta sẽ nói đến ở trong bài tiếp theo.
Hub được coi là 1 Repeater có nhiều cổng, Hub hoạt động ở tầng vật lý trong mô hình OSI. Hub nhận dữ liệu từ 1 cổng và truyền dữ liệu đó tới tất cả các cổng của nó. Ví dụ, nếu 1 máy tính kết nối với cổng 1 của thiết bị Hub có 4 cổng, máy tính đó cần gửi dữ liệu cho 1 máy tính kết nối với cổng 2, thì Hub sẽ gửi các gói tin đến các cổng 1,2,3,4. Các máy kết nối với cổng 3 và cổng 4 kiểm tra trường MAC Address trong Ethernet Header của gói tin, và chúng nhận ra rằng gói tin đó không dành cho chúng, bởi vậy chúng drop gói tin đó. Hình dưới đây minh họa ví dụ máy A truyền dữ liệu cho máy B qua Hub:
Khi máy A gửi dữ liệu, tất cả máy tính kết nối với thiết bị Hub đều nhận được dữ liệu đó. Tuy nhiên chỉ có máy B chấp nhận dữ liệu, còn các máy khác sẽ loại bỏ dữ liệu đó đi. Bạn có thể thấy điều này dẫn đến việc truyền thông không cần thiết và rất tốn thời gian.
Sự thay thế tốt nhất của Hub trong các mạng có mật độ cao chính là Switch, là các thiết bị song công (có thể gửi và nhận dữ liệu đồng thời).
Switch
Về cơ bản thì Switch có thiết kế tương tự Hub. Tuy nhiên, không giống Hub là quảng bá dữ liệu tới tất cả các cổng, thì Switch chỉ gửi dữ liệu tới máy tính là đích đến của dữ liệu. Hình ảnh dưới đây minh họa cho thiết bị Switch:
Một vài loại Switch lớn hơn trên thị trường, được quản lý thông qua phần mềm chuyên dụng hoặc là giao diện web. Các Switch này thường được gọi với cái tên Managed Switch. Managed Switch cung cấp 1 vài tính năng có thể hữu ích trong việc quản lý mạng, bao gồm khả năng kích hoạt hoặc vô hiệu hóa cổng nào đó, xem chi tiết cụ thể cổng nào đó, thay đổi cấu hình và khởi động lại từ xa.
Switch cũng cung cấp tính năng nâng cao là việc xử lý các gói tin được truyền. Để có thể truyền thông trực tiếp với các thiết bị cụ thể, thì Switch phải có khả năng nhận diện các thiết bị dựa trên địa chỉ MAC của chúng, có nghĩa là Switch phải hoạt động ở tầng liên kết dữ liệu trong mô hình OSI.
Switch lưu trữ các địa chỉ lớp 2 của tất cả các thiết bị kết nối trong 1 bảng CAM, có thể nói vui là bảng CAM đó hoạt động như 1 cảnh sát giao thông. Khi 1 gói tin được truyền đi, Switch đọc thông tin Header lớp 2 trong gói tin, sử dụng bảng CAM để tham chiếu, và nó sẽ quyết định cổng nào để gửi gói tin đi. Switch gửi gói tin đến các cổng cụ thể, do đó làm giảm đáng kể lưu lượng mạng.
Hình dưới đây minh họa lưu lượng truyền qua 1 Switch. Trong hình này, máy A gửi dữ liệu tới máy nhận là máy B.
Router
Router là 1 thiết bị mạng tiên tiến với nhiều chức năng cao cấp hơn Switch hay Hub. Một Router có thể có nhiều kiểu dáng hình thức khác nhau, nhưng hầu hết đều có 1 vài đèn LED ở mặt trước và 1 số cổng mạng ở mặt sau, tùy thuộc vào kích thước mạng. Hình dưới đây cho thấy ví dụ về 1 Router.
Các Router hoạt động ở tầng 3 của mô hình OSI, nó có trách nhiệm chuyển tiếp các gói tin giữa 2 hay nhiều mạng. Quá trình điều khiển luồng lưu lượng giữa các mạng được gọi là định tuyến. Router sử dụng địa chỉ lớp 3 (địa chỉ IP) để nhận diện các thiết bị mạng.
Kích thước và số lượng của các Router trên mạng thường sẽ phụ thuộc vào kích thước của mạng và chức năng của mạng. Mạng cá nhân và văn phòng có thể chỉ cần 1 Router nhỏ nằm ở trung tâm của mạng. Một mạng doanh nghiệp lớn có thể có nhiều Router trải đều khắp các phòng ban khác nhau, tất cả cùng kết nối với 1 Router trung tâm lớn hoặc Switch lớp 3 (một loại Switch tiên tiến tích hợp chức năng hoạt động như 1 Router).
Phân loại Traffic
Traffic mạng có thể được phân thành 3 nhóm chính: Broadcast, Multicast và Unicast. Mỗi loại có 1 đặc điểm riêng biệt để xác định cách các gói tin trong nhóm đó dược xử lý bằng phần cứng mạng như thế nào.
Broadcast Traffic
Một gói tin Broadcast là gói tin được gửi đến tất cả các cổng trên 1 phân mạng, bất kể phân mạng đó sử dụng Hub hay Switch. Tuy nhiên không phải tất cả các Broadcast Traffic đều như nhau. Có 2 dạng của Broadcast Traffic: Broadcast Traffic lớp 2 và Broadcast Traffic lớp 3. Ví dụ, ở lớp 2, địa chỉ MAC FF:FF:FF:FF:FF:FF là địa chỉ Broadcast dành riêng, bất kỳ traffic nào gửi đến địa chỉ này sẽ được quảng bá cho toàn bộ phân mạng. Lớp 3 cũng có 1 địa chỉ Broadcast cụ thể.
Địa chỉ IP cao nhất trong 1 dải mạng IP được dành riêng sử dụng làm địa chỉ quảng bá. Ví dụ, trong 1 mạng được cấu hình với 1 loạt địa chỉ IP là 192.168.0.xxx cùng vời Subnet Mask là 255.255.255.0, thì địa chỉ 192.168.0.255 là địa chỉ quảng bá.
Trong mạng lớn với nhiều Hub hoặc Switch kết nối qua các môi trường khác nhau, các gói tin Broadcast gửi từ 1 Switch tới tất cả các cổng trên các Switch khác trong mạng. Phạm vi di chuyển của gói tin Broadcast được gọi là Broadcast Domain, đó là phân mạng mà bất kỳ máy tính nào cũng có thể trực tiếp truyền tin sang máy khác mà không cần phải thông qua 1 Router. Hình dưới đây cho thấy ví dụ về 2 Broadcast Domain của 1 mạng nhỏ. Vì phạm vi của mỗi Broadcast Domain chỉ được kéo dài cho tới Router, nên các gói tin Broadcast chỉ truyền trong Broadcast Domain nhất định của nó.
Multicast Traffic
Các gói tin được gửi từ 1 địa chỉ nguồn đến 1 nhóm các máy tính. Địa chỉ đích tượng trưng bằng các host muốn nhận traffic này. Mặc định, 1 Router hoặc 1 Switch lớp 3 sẽ không chuyển các gói tin này trừ khi phải cấu hình Multicast Routing. Một thiết bị Switch lớp 2 sẽ không thể nhận biết được vị trí của địa chỉ Multicast đích. Tất cả các gói sẽ được phát tán ra tất cả các cổng ở chế độ mặc định.
Unicast Traffic
Các gói tin được gửi từ 1 địa chỉ nguồn đến 1 địa chỉ đích. Một Router hoặc thiết bị lớp 3 sẽ chuyển các gói tin bằng cách tìm địa chỉ đích trong bảng định tuyến. Nếu là 1 thiết bị lớp 2, thì nó chỉ cần dựa vào địa chỉ MAC.
Bài này đã trình bày những điều cơ bản cốt lõi mà bạn cần như 1 nền tảng cho việc phân tích gói tin. Bài tiếp theo, chúng tôi sẽ xây dựng các khái niệm và thảo luận về các nguyên tắc truyền thông mạng chuyên sâu hơn.
---------------------------------------
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ố.