Bảo mật mạng không dây ở mức gói dữ liệu

Trong bài này chúng tôi sẽ giới thiệu cho các bạn một số kỹ thuật hữu dụng cho việc khắc phục sự cố các vấn đề mạng không dây ở mức gói dữ liệu.

Vấn đề rắc rối về mạng không dây là bạn không thể thấy những gì mình đang xử lý. Trong một mạng không dây, việc thiết lập kết nối không đơn giản như trong mạng chạy dây (chỉ cần cắm cáp), việc bảo mật vật lý không đơn giản chỉ là việc làm cản trở hay ngăn chặn hoàn toàn việc truy cập mạng của các cá nhân không được cấp phép, và việc khắc phục sự cố thậm chí là những vấn đề đơn giản đôi khi cũng có những khó khăn riêng đi kèm với các điểm truy cập. Điều đó nói nên rằng, việc bảo mật các mạng không dây sẽ tiếp tục là một thách thức cho tương lai thấy trước.

Trong bài này, chúng tôi sẽ giới thiệu cho các bạn một số kỹ thuật hữu dụng trong việc khắc phục sự cố các vấn đề không dây ở mức gói dữ liệu. Bài viết sẽ được bắt đầu bằng cách giới thiệu các phương pháp thu thập đúng các gói dữ liệu trong mạng không dây. Sau khi thu thập, chúng ta sẽ cùng thảo luận về các kỹ thuật phân tích, gồm có phân tích quá trình nhận thực WEP/WPA, lọc lưu lượng mã hóa và việc tìm kiếm các điểm truy cập giả mạo.

Việc capture các gói dữ liệu không dây

Mức gói dữ liệu trong các mạng không dây và mạng chạy dây có một số điểm tương đồng. Các mạng không dây vẫn sử dụng TCP/IP cho việc truyền thông dữ liệu và tuân thủ tất cả các luật lệ kết nối của các host chạy dây. Sự khác nhau giữa hai nền tảng kết nối này được tìm thấy ở các mức thấp hơn trong mô hình tham chiếu OSI. Các mạng không dây thực hiện truyền thông bằng cách gửi dữ liệu qua không trung, khác hoàn toàn với việc gửi dữ liệu theo dây dẫn tín hiệu. Không gian mà dữ liệu không dây được truyền thông trên đó là một môi trường chia sẻ, chính vì lý do đó cần phải có sự xem xét đặc biệt ở các lớp liên kết dữ liệu và lớp vật lý để bảo đảm rằng không có dữ liệu nào bị xung đột và dữ liệu được phân phối một cách tin cậy.

Điều này tương đương với việc khắc phục sự cố cho một mạng không dây vì chúng ta vẫn cần phải có một số cố gắng nhất định để có thể capture lớp hai trong các gói dữ liệu 802.11 cần thiết cho việc khắc phục sự cố một cách thỏa đáng. Để thực hiện điều này, bạn phải có khả năng đặt card giao diện mạng không dây (WNIC) của mình vào chế độ đặc biệt có tên gọi Monitor Mode. Monitor mode là một thiết lập driver đặc biệt, thiết lập hạn chế khả năng của các WNIC trong việc gửi dữ liệu và chỉ cho phép lắng nghe một cách thụ động trên kênh được chọn.

Trong các hệ điều hành dựa Linux, bạn có thể khá dễ dàng thay đổi WNIC sang chế độ monitor mode, tuy nhiên hầu hết các driver Windows lại không cho phép chức năng này. Kết quả là chúng ta phải cần dùng đến một mẩu đặc biệt để giúp nó làm việc. Mẩu này mang tên AirPcap và được sản xuất bởi CACE Technologies. Thiết bị AirPcap về cơ bản là một WNIC được thiết kế để sử dụng trong chế độ kiểm tra với Windows và tiện ích capture gói dữ liệu Wireshark. Sử dụng thiết bị này, bạn có thể capture lớp hai trong gói dữ liệu 802.11 từ kênh không dây đang lắng nghe.

Hình 1: Màn hình cấu hình AirPcap cho phép bạn cấu hình kênh đang lắng nghe

Cấu trúc gói dữ liệu 802.11

Sự khác biệt chính giữa các gói dữ liệu trong mạng không dây và chạy dây là phần header. Đây là một header hai lớp có chứa các thông tin mở rộng về gói và môi trường nó được truyền tải. Có ba kiểu gói ở đây: gói dữ liệu, gói quản lý, gói điều khiển.

* Gói quản lý – Các gói này được sử dụng để thiết lập kết nối giữa các host tại lớp hai. Một số kiểu quan trọng trong các gói dữ liệu quản lý này là: nhận thực, liên kết và báo hiệu.
* Gói điều khiển – Các gói điều khiển cho phép phân phối các gói quản lý và dữ liệu và có liên quan đến việc quản lý tắc nghẽn. Các kiểu của gói điều khiển gồm có: Request-to-Send và Clear-to-Send.
* Gói dữ liệu – Các gói này gồm có dữ liệu thực và là kiểu gói được chuyển tiếp từ mạng không dây sang mạng chạy dây.

Trong bài này chúng tôi sẽ không giới thiệu về các kiểu con trong các gói dữ liệu 802.11 này mà chỉ tập trung vào một số lĩnh vực có liên quan đến vấn đề bảo mật.

Tìm các điểm truy cập giả mạo

Bảo mật vật lý cho các tài sản CNTT là miền bảo mật được xem xét thường xuyên nhất. Một trong những sơ xuất nói chung trong lĩnh vực này là sự bổ sung thêm các thiết bị không được cấp quyền trong mạng. Trong thế giới các mạng chạy dây, một router không được cấp quyền có thể gây ra từ chối dịch vụ. Mặc dù vậy một điểm truy cập không dây WAP giả mạo bao giờ cũng là mối quan tâm lớn hơn vì nó có thể cho phép ai đó từ bên ngoài có thể tăng truy cập vào mạng cứ như thể họ đã đột nhật vào và cắp laptop của họ với giắc mạng trên tường.

May mắn cho chúng ta ở đây là việc phát hiện một WAP có thể được thực hiện khá dễ dàng. Để thực hiện được điều này, bạn phải bắt đầu bằng cách capture lưu lượng không dây từ một số vùng bên trong phạm vi quảng bá của các mạng. Khi thực hiện xong điều này, sẽ có một vài bộ lọc khác nhau được sử dụng để phát hiện liệu có tồn tại các điểm truy cập giả mạo hay không và liệu các máy khách có dính líu đến chúng hay không.

Một trong những giải pháp đơn giản nhất để thực hiện điều đó là biết địa chỉ MAC của WAP hợp pháp. Bằng cách sử dụng thông tin này, bạn có thể thực hiện lọc !wlan.bssid == 00:11:88:6b:68:30, thay thế WAP MAC của bạn ở vị trí địa chỉ MAC mà chúng tôi cung cấp. Thao tác này sẽ hiển thị cho bạn tất cả lưu lượng không dây đang luân chuyển vào ra khỏi WAP. Nếu có nhiều WAP trong vùng, bạn có thể kết hợp các bộ lọc này bằng toán tử OR (||). Trong thường hợp đó, bạn có thể sử dụng !wlan.bssid == 00:11:88:6b:68:30 || !wlan.bssid == 00:11:ff:a1:a4:22 để lọc ra hai điểm truy cập hợp lệ đã biết.

Phương pháp đó có thể giúp bạn phát hiện các điểm truy cập nói chung, tuy nhiên điều gì sẽ xảy ra nếu bạn muốn đi xa hơn nữa và muốn tìm ra liệu các máy trạm di động của bạn có đang kết nối với WAP giả mạo hay không? Có một cách để thực hiện điều này là lọc các yêu cầu liên kết. Để thực hiện điều này, bạn có thể kết hợp một trong các bộ lọc trên với các bộ lọc wlac.fc.type_subtype eq 0 và wlac.fc.type_subtype eq 2. Bộ lọc đầu tiên sẽ hiển thị tất cả các yêu cầu kết nối còn bộ lọc thứ hai sẽ hiển thị các yêu cầu kết nối lại. Khi cần thiết, bạn có thể kết hợp một trong các bộ lọc này với các bộ lọc trên bằng cách sử dụng toán tử AND (&&).

Cuối cùng, bạn có thể tiến hành một bước xa hơn nữa bằng cách xác định xem liệu có dữ liệu thực nào đang được truyền tải giữa các máy khách di động và WAP giả mạo hay không. Có thể thực hiện bằng cách lọc tất cả gói dữ liệu đang được truyền thông với điểm truy cập không hợp pháp bằng cách sử dụng bộ lọc wlan.fc.type eq 2 kết hợp với các bộ lọc trước, ngoại trừ các WAP hợp lệ đã biết

Lọc lưu lượng không mã hóa

Chỉ có một hy vọng trong việc chống không cho các gói dữ liệu bị nghe trộm khi chúng được phát trong không trung là sử dụng mã hóa. Việc mã hóa này được thực hiện qua thực thi WPA hoặc WPA2 trong các hệ thống hiện đại. Điều đó nói lên rằng, chúng ta cần phải thẩm định sao cho các mạng không dây của mình một cách thường xuyên hơn để bảo đảm rằng không có máy khách không dây nào truyền tải dữ liệu không được mã hóa.

Việc tìm dữ liệu không được mã hóa trong mạng không dây cần phải sử dụng một bộ lọc khác. Trong trường hợp này, chúng ta có thể tìm tất cả các dói dữ liệu chưa mã hóa bằng cách sử dụng bộ lọc wlan.fc.protected == 0. Lúc này nếu sử dụng ngay, bạn sẽ thấy trả về một số kết quả không như mong đợi. Các khung quản lý và điều khiển 802.11 không được mã hóa mà chỉ thực hiện các chức năng quản trị cho WAP và máy khách không dây. Với vấn đề này, chúng ta phải mở rộng bộ lọc bằng cách gắn thêm vào wlan.fc.type eq 2. Điều này sẽ bảo đảm rằng bộ lọc chỉ hiển thị các gói dữ liệu không được mã hóa. Bộ lọc cuối cùng sẽ là wlan.fc.protected == 0 && wlan.fc.type eq 2.

Phân tích kỹ thuật nhận thực WEP và WPA

Phương pháp trước kia được sử dụng cho việc bảo mật dữ liệu khi phát trong các mạng không dây là Wired Equivalent Privacy (WEP). WEP đã khá thành công trong những năm trước dây cho tới khi người ta phát hiện ra một số điểm yếu trong vấn đề quản lý khóa mã hóa của nó. Kết quả là, các chuẩn mới đã được đưa ra, gồm có Protected Access (WPA) và WPA2. Mặc dù WPA và WPA2 vẫn chưa thực sự an toàn tuyệt đối nhưng nó được cho là an toàn hơn WEP.

Khá hữu dụng cho việc có thể phân biệt nhận thực WEP và WPA trên mạng chạy dây. Nếu có thể thực hiện điều này, bạn có thể bỏ kiểu nhận thực WEP trên mạng của mình và chuyển sang WPA. Cùng với đó, bạn cần có khả năng phân tích các cố gắng nhận thực thất bại khi chúng xảy ra.

Nhận thực WEP

Nhận thực WEP làm việc bằng cách sử dụng cơ chế yêu cầu và đáp trả. Khi máy khách cố gắng kết nối với WAP, WAP sẽ phát văn bản yêu cầu. Yêu cầu này được phúc đáp và sau đó máy khách sẽ sử dụng văn bản này, giải mã nó bằng khóa WEP được cung cấp bởi máy khách và phát chuỗi tổng hợp quay trở lại WAP.

Khi WAP thẩm định được rằng văn bản đáp trả là những gì cần thiết, nó sẽ phát một thông báo trở lại máy khách để thông báo rằng quá trình nhận thực đã thành công. Bộ lọc để tìm các đáp trả nhận thực thành công là wlan_mgt.fixed.status_code == 0x0000.

Hình 2: WAP cảnh báo cho máy khách rằng quá trình nhận thực đã thành công

Trong trường hợp nhận thực không thành công, WAP sẽ phát đi một thông báo tuyên bố rằng nói rằng nó đã thất bại trong việc nhận thực.

Hình 3: WAP cảnh báo cho máy khách rằng quá trình nhận thực đã thất bại

Bộ lọc để tìm ra gói thông báo thất bại là wlan_mgt.fixed.status_code == 0x000e.

Nhận thực WPA

Nhận thực WPA cũng sử dụng cơ chế yêu cầu và đáp trả, tuy nhiên nó làm việc theo một cách khác. Ở mức gói dữ liệu, nhận thực WPA sử dụng EAPOL để thực hiện việc yêu cầu và đáp trả của nó. Bạn có thể tìm thấy các gói dữ liệu này bằng cách sử dụng bộ lọc đơn giản EAPOL. Trong quá trình nhận thực thành công, bạn sẽ thấy bốn gói EAPOL tương ứng với hai yêu cầu và hai đáp trả. Mỗi một yêu cầu và đáp trả có thể được ghép cặp với nhau bằng cách sử dụng giá trị Replay Counter bên trong gói.

Hình 4: Trường Replay Counter được sử dụng để sửa một số vấn đề và các đáp trả

Trong tình huống mà ở đó quá trình nhận thực WPA thất bại, bạn sẽ sử dụng thêm một số bộ lọc EAPOL ở nơi yêu cầu và đáp trả được cố gắng nhiều lần. Khi quá trình này thực sự gặp thất bại, bạn sẽ thấy một gói giải nhận thực.

Hình 5: Sau khi bắt tay WPA thất bại, máy khách sẽ thực hiện nhận thực lại

Có hai cách để lọc nhận thực WPA thất bại. Cách đầu tiên là sử dụng bộ lọc EAPOL và đếm số gói được truyền tải giữa WAP và máy khách không dây. Cách khác là lọc các gói giải nhận thực bằng bộ lọc wlan.fc.type_subtype == 0x0c. Bộ lọc này sẽ trả về một số kết quả bổ sung không liên quan đến quá trình nhận thực thất bại vì vậy để có thể thẩm định rằng các gói liên quan với vấn đề này, bạn cần phải tìm hiểu sâu hơn nữa và tạo một bộ lọc khác chứa tất cả các gói dữ liệu giữa WAP và máy khách không dây được nói đến.

Kết luận

Trong bài này, chúng tôi đã giới thiệu được cho các bạn một số chi tiết cơ bản về việc capture gói dữ liệu mạng và một số ứng dụng quan trọng cho việc phân tích gói trên quan điểm bảo mật không dây. Kết nối không dây, bảo mật không dây, phân tích gói dữ liệu, tất cả đều là các chủ đề rộng. Bài viết này không thể trình bày cho các bạn một cách chi tiết mà chỉ góp phần khơi dậy các nghiên cứu sâu hơn về các lĩnh vực này. Nếu đặc biệt quan tâm về việc phân tích gói dữ liệu, bạn hãy download Wireshark hay một tiện ích capture dữ liệu khác và bắt đầu việc phân tích gói của mình.

Bài viết liên quan