Cái giá của việc đơn giản hóa
Số lượng các điểm truy cập mở - AP (Access Point) có thể kết nối không cần mật khẩu đang ngày một ít đi. Nếu như trước đây, người ta thậm chí không cần biết rằng mạng không dây có thể được bảo vệ bằng mật khẩu, thì ngày nay chủ sở hữu AP luôn được nhắc nên sử dụng tính năng này. Hầu hết các AP hiện nay đều hỗ trợ cơ chế WPS (Wifi Protected Setup). Nhờ nó mà chỉ cần vài giây, người dùng đã có thể thiết lập mật khẩu bảo vệ cho mạng wifi của mình. Bằng cách nhập mã PIN (PIN- code) gồm 8 chữ số (Hình 1).
Tháng 12/2011, có hai nhà nghiên cứu đã chỉ ra điểm yếu nghiêm trọng trong giao thức WPS. Điểm yếu đó có thể coi là một kênh ngầm cho phép kiểm soát một AP bất kỳ. Hầu hết AP đều kích hoạt mặc định WPS. Lưu ý rằng, ở đây ta nhấn mạnh là WPS được kích hoạt mặc định. Và điểm yếu trong giao thức WPS khiến cho thời gian để dò ra PIN- code chỉ tính bằng giờ.
Điểm yếu trong giao thức WPS
Thực tế đã công nhận rằng, ý tưởng của những người xây dựng WPS là rất tốt. Cơ chế được xác định bởi WPS sẽ tự động đặt tên cho mạng và kích hoạt chế độ mã hóa. Nhờ đó mà người dùng (chủ sở hữu AP) không phải tốn thời gian tìm hiểu giao diện web để thiết lập cấu hình cho AP – một việc khá phức tạp. Chính vì thế mà các nhà sản xuất thiết bị mạng như Cisco/Linksys, Netgaer, D- Link, Belkin, Buffalo, ZyXEL đều đưa ra các AP có hỗ trợ WPS. WPS hỗ trợ ba chế độ làm việc như sau:
- Chế độ “Push-Button-Connect” (PBC): Người dùng nhấn vào một nút đặc biệt trên AP để kích việc cấu hình AP. Vì khả năng tiếp cận vật lý tới AP không khó nên ta không xem xét chế độ này.
- Chế độ nhập PIN-code vào giao diện web: Người dùng truy cập vào trang web quản trị của AP, nhập vào PIN- code để tiến hành cấu hình. Việc này chỉ thích hợp với cấu hình lần đầu, và do đó ta cũng sẽ không xem xét chế độ này.
Chế độ nhập PIN- code trên máy người dùng (Hình 1): Một máy tính có thể thực hiện một phiên kết nối đặc biệt tới AP. Khi đó, người dùng được yêu cầu nhập PIN- code. Nếu nhập đúng thì có thể xem và thay đổi cấu hình của AP. Như vậy, về lý thuyết, PIN- code có thể bị tấn công vét cạn. Và đây là điều mà chúng ta quan tâm.
Vì PIN- code có 8 chữ số nên có 108 (100.000.000) khả năng. Nhưng thực ra, chữ số thứ 8 đóng vai trò là tổng kiểm tra nên số khả năng còn lại chỉ là 107 (10.000.000). Vẫn chưa hết, người ta khám phá ra rằng việc kiểm tra PIN- code gồm hai giai đoạn. PIN- code được chia làm 2 phần bằng nhau, mỗi phần được kiểm tra riêng rẽ (Bảng 1).
Bảng 1. Giao thức xác thực WPS IEEE 802.11
Theo sơ đồ thuật toán vét cạn mô tả trong Hình 2, nếu sau khi gửi thông điệp M4, kẻ tấn công nhận được EAP- NACK thì có nghĩa là phần đầu của PIN- code đã sai. Còn nếu nhận được EAP-NACK sau khi gửi thông điệp M6 thì có nghĩa là phần hai của PIN- code đã sai. Như vậy, có 104 (10.000) trường hợp cho phần đầu và 103 (1.000) trường hợp cho phần thứ hai của PIN- code. Và tổng cộng số trường hợp cần vét cạn là 11.000.
Hình 2. Sơ đồ thuật toán vét cạn PIN-code WPS
Cần lưu ý rằng tốc độ dò PIN- code phụ thuộc vào tốc độ xử lý các WPS- request. Thời gian cần để xử lý một WPS- request có thể từ 1 đến 10 giây. Thực tế cho thấy PIN- code được tìm ra khi dò hết khoảng một nửa số khả năng. Và thời gian trung bình để tìm ra PIN- code là khoảng 4 giờ.
Thực hiện tấn công
Công cụ đầu tiên cho phép khai thác điểm yếu trên đây của WPS là wpscrack (http://goo.gle/9wABj) được viết bởi Stefan Viehboeck bằng ngôn ngữ Python, có sử dụng thư viện Scapy.
$ ./wpscrack.py —iface mon0 \
—client 94:0#:ád:88:00:00\
—bssid f4:ec:38:cf:00:00 —ssid testap -v
sniffer started
trying 00000000
attempt took 0.95 seconds
trying 00010009
<...>
trying 18660005
attempt took 1.08 seconds
trying 18670004 #found 1st half of PIN
attempt took 1.09 seconds
trying 18670011
attempt took 1.08 seconds
<...>
trying 18674095 #found 2nd half of PIN
<...>
Network Ê#ó:
really_really_long_wpa_passphrase_good_luck_cracking_this_one
<...>
Trên đây là ví dụ về quá trình làm việc của wpscrack. Như đã thấy, ban đầu chương trình sẽ dò phần 1 của PIN- code, sau đó dò tiếp phần 2, và cuối cùng là đưa ra mật khẩu để truy cập vào mạng wifi. Thật khó hình dung được cần bao nhiêu thời gian để vét cạn mật khẩu có độ dài 61 ký tự trên bằng các cách thức cũ. Nhưng ở đây, nhờ điểm yếu trong WPS mà mật khẩu đã được tìm ra trong thời gian tương đối ngắn.
Sau khi wpscrack xuất hiện, một nhà nghiên cứu khác là Craig Heffner cũng công bố chương trình của mình, đó là: Reaver (http://code.google. com/p /reaver- wps). So với wpscrack, Reaver hỗ trợ nhiều card mạng hơn, nhưng có cùng cơ chế hoạt động. Cả hai công cụ trên đây đều được viết để chạy trong môi trường Linux, và đều yêu cầu phải chuyển card mạng không dây sang chế độ monitoring trước khi tiến hành dò PIN- code.
Có thể chống lại tấn công này?
Hiện tại, chỉ có một cách để chống lại dạng tấn công này, đó là tắt WPS trên AP. Tuy nhiên, điều đó không phải bao giờ cũng thực hiện được. Thêm vào đó, vì điểm yếu này tồn tại trong chính giao thức chứ không phải trong cài đặt giao thức, cho nên không thể đợi các nhà sản xuất phát hành bản cập nhật để giải quyết vấn đề. Điều mà họ có thể làm bây giờ là làm tăng tối đa thời gian vét cạn. Ví dụ, phát hành bản cập nhật, trong đó khóa WPS trong vòng một tiếng sau mỗi 5 lần nhập sai PIN- code. Trong trường hợp đó, thời gian để vét cạn sẽ vào khoảng 90 ngày. Nhưng vấn đề là để thực hiện việc cập nhật cho hàng triệu AP đang hoạt động trên khắp thế giới thì hẳn là cần thời gian không ít.