CAPTCHA (Completely Automated Public Turing Tests to Tell Computers and Humans Apart), là thuật ngữ dùng để chỉ nhóm các kỹ thuật giúp phân biệt người dùng thực sự với những công cụ tự động thường được dùng để gửi thư rác hay tấn công các website. Có rất nhiều động lực khác nhau trong việc tự động hóa các cuộc tấn công nhằm vào các website như: Quảng cáo quy mô lớn; Can thiệp vào các hệ thống bình chọn trực tuyến; Tấn công từ chối dịch vụ các website; Tạo ra các liên kết giả để nâng hạng của website trong các máy tìm kiếm; Truy cập thông tin bí mật hoặc lây lan mã độc....
Hầu hết chủ sở hữu của các website đều biết rằng việc sử dụng CAPTCHA là rất quan trọng. Ngăn chặn các cuộc tấn công CAPTCHA là động lực để thúc đẩy sử dụng CAPTCHA trên toàn cầu. Loại CAPTCHA phổ biến nhất là một dãy các ký tự bị bóp méo và làm rối bằng nhiều cách khác nhau, sao cho chỉ có con người mới có thể nhận dạng. Ngoài ra, còn nhiều hình thức khác như yêu cầu nhận dạng âm thanh hay hình ảnh. Bài viết này không đề cập đến các dạng của CAPTCHA mà đi sâu xem xét các loại tấn công CAPTCHA và tính khả dụng (khả năng kháng các tấn công) này của chúng, từ đó đề xuất một số thử nghiệm thay thế thích hợp hơn.
Các kiểu tấn công CAPTCHA
Tính khả dụng của CAPTCHA trước tiên được đánh giá qua khả năng chống lại các cuộc tấn công tự động. Tuy nhiên, rất nhiều hệ thống CAPTCHA đã bị phá vỡ một cách tương đối dễ dàng. Chẳng hạn như dịch vụ Microsoft CAPTCHA dựa trên những đoạn văn bản được sử dụng để bảo vệ các dịch vụ trực tuyến của Microsoft. Dịch vụ này được đưa vào sử dụng từ năm 2002, nhưng tới năm 2008 đã bị giải bởi Je Yan và El Ahmad của đại học Newcastel (Anh). Đến năm 2011, các nhà khoa học thuộc trường đại học Stanford (Mỹ) cũng đã giải thành công 13 trong số 15 cơ chế CAPTCHA phổ biến nhất được sử dụng.
Điều đáng chú ý là, để giải được các cơ chế CAPTCHA, tin tặc nhiều khi không cần bỏ công nghiên cứu, phát triển các phần mềm nhận dạng tiên tiến mà có thể qua mặt quá trình sinh và kiểm tra phức tạp trên bằng nhiều cách khác nhau, trong đó có hai loại phổ biến nhất là tấn công vào máy khách và tấn công vào máy chủ.
Một số dạng tấn công vào máy khách
Do có nhiều lập trình viên thực hiện việc sinh, lưu trữ và kiểm tra CAPTCHA tại máy khách (điều này đi ngược các nguyên tắc thiết kế an toàn cho các hệ thống phân tán và ứng dụng web) nên tin tặc có thể truy xuất lời giải CAPTCHA. Một số cách tấn công máy khách phổ biến gồm:
- Tấn công vào các trường ẩn và vùng lưu trữ trên máy khách: các trường ẩn và vùng lưu trữ trên máy khách luôn được coi là không an toàn để truyền nhận thông tin giữa máy chủ và máy khách. Những giải pháp sử dụng JavaScript và các trường ẩn để kiểm tra CAPTCHA ở phía máy khách sẽ không mang lại giá trị bảo vệ nào và có thể bị tin tặc tấn công một cách dễ dàng.
- Tấn công lựa chọn giá trị chuỗi CAPTCHA: Một số website đặt các hàm sinh CAPTCHA ở phía máy khách và các thành phần kiểm tra trên máy chủ. Tuy nhiên, ngay cả những giải pháp CAPTCHA không sử dụng mã lệnh trên máy khách cũng không phải đã an toàn 100%. Tin tặc vẫn có thể tấn công CAPTCHA phía máy chủ.
Một số dạng tấn công vào máy chủ
- Tấn công bằng bảng Rainbow cho CAPTCHA: Việc sinh các hình ảnh ngẫu nhiên là một phần quan trọng của một hệ thống CAPTCHA an toàn. Hầu hết các website hiện đang dùng một số hữu hạn các giá trị CAPTCHA và mỗi giá trị đó được gán một mã định danh. Mã định danh đó được gửi tới máy khách như một trường ẩn, hay một phần của URL khi nhận hình ảnh CAPTCHA. Với những website sử dụng mã định danh CAPTCHA tĩnh, phần lớn các hình ảnh CAPTCHA có thể được tải xuống, xử lý bằng các phần mềm OCR hay xử lý thủ công để tạo nên một bảng Rainbow. Khi máy chủ trả về một mã định danh CAPTCHA đã được giải, thì lời giải sẽ được tìm thấy ngay trong bảng và được gửi lên để vượt qua mặt công đoạn kiểm tra. Ngược lại, máy khách cũng có thể gửi liên tiếp các yêu cầu CAPTCHA cho đến khi một hình ảnh với mã định danh đã biết được trả về. Với những website sử dụng mã định danh CAPTCHA động cho một số hình ảnh hữu hạn, tin tặc vẫn có thể lập các bảng Rainbow dựa trên giá trị băm (MD5 hay SHA1) của hình ảnh. Khi nhận một hình ảnh CAPTCHA mới, chúng sẽ tính giá trị băm rồi dùng nó để tìm lời giải tương ứng với giá trị băm đó từ bảng dữ liệu có sẵn.
- Tấn công lựa chọn CAPTCHA với mã định danh nhất định: Trong một số giải pháp, máy chủ trả về mã định danh CAPTCHA cho máy khách, nhưng không lưu mã định danh hay lời giải tương ứng trong phiên HTTP. Khi máy khách gửi tin lên, máy chủ mới trích xuất mã định danh từ trong đó và dùng nó để tìm kiếm lời giải tương ứng. Tin tặc có thể lợi dụng điều đó để nhận dạng một hình ảnh CAPTCHA duy nhất, lưu lại mã định danh và lời giải rồi gửi những thông tin đó trong hàng loạt yêu cầu kiểm tra khác nhau. Một biến thể khác của kiểu tấn công này là vét cạn (thử nhiều lần liên tiếp) trong cùng phiên làm việc. Khi đoạn mã sinh hình ảnh CAPTCHA mới và thiết lập lời giải trong phiên HTTP làm việc độc lập với đoạn mã kiểm tra CAPTCHA, đoạn mã kiểm tra CAPTCHA không xoá lời giải trong phiên HTTP, tin tặc có thể gửi đi, gửi lại các câu trả lời khác nhau cho cùng một hình ảnh để dò ra câu trả lời đúng.
- Tấn công CAPTCHA tích lũy: Một số giải pháp CAPTCHA tích lũy các lời giải hay mã định danh CAPTCHA trong phiên HTTP. Điều đó có nghĩa là với mỗi yêu cầu nhận hình ảnh CAPTCHA mới, những giá trị cũ vẫn được giữ lại và lời giải hay mã định danh của CAPTCHA mới được thêm vào phiên HTTP. Tin tặc có thể lợi dụng cách làm này để nhận dạng thủ công một hình ảnh CAPTCHA cho một phiên HTTP, sau đó dùng lại lời giải/mã định danh đó cùng với Session ID cho nhiều lần gửi thông tin lên máy chủ.
- Tấn công bằng cách dùng phần mềm nhận dạng: Không phải giải pháp CAPTCHA nào cũng xử lý đủ tốt để ngăn chặn các phần mềm OCR. Giải pháp CAPTCHA có thể bị qua mặt bởi những phần mềm nhận dạng tiên tiến. Hơn thế nữa, tin tặc có thể sử dụng đồng thời nhiều phần mềm OCR khác nhau để tấn công: hình ảnh CAPTCHA được sao chép về để cho các cơ chế nhận dạng khác nhau xử lý đồng thời. Nếu cách triển khai CAPTCHA có lỗ hổng để tấn công vét cạn có thể khai thác trong cùng phiên làm việc, thì việc sử dụng nhiều phần mềm CAPTCHA khác nhau có thể giảm đáng kể số lần cần thử, để tìm ra lời giải đúng cho một phiên HTTP.
- Tấn công bằng cách sử dụng con người để nhận dạng: Từng có giả định rằng, tin tặc có thể sử dụng các website có nội dung xấu để chuyển yêu cầu nhận dạng CAPTCHA từ các website nghiêm túc sang, qua đó lợi dụng những người muốn truy cập nội dung không lành mạnh này để giải mã thay cho các máy gửi spam. Tuy nhiên, cách làm đó không đảm bảo duy trì dịch vụ liên tục và lại quá phức tạp. Bên cạnh đó cũng tồn tại một loại hình dịch vụ nhận dạng bằng cách sử dụng lao động giá rẻ ở một số nước châu Á thông qua trang web kolotibablo.com. Trang này cung cấp API để khách hàng của họ có thể gửi các hình ảnh CAPTCHA theo thời gian thực cho mình và nhận về giá trị do những nhân công giá rẻ này nhận diện. Họ cho biết có khoảng 500-1000 nhân công làm việc trực tuyến trên toàn thế giới và con số này vẫn đang tiếp tục tăng lên.
Hạn chế của CAPTCHA và những thử nghiệm thay thế
Việc hoàn thành một CAPTCHA không phải là một công việc dễ dàng. Nhiều người cho rằng, nên ngừng sử dụng CAPTCHA vì chúng gây khó khăn cho những người có thị lực kém, rối loạn khả năng đọc (dyslexia) hay có những chứng bệnh đặc biệt khác. Việc chuyển trách nhiệm từ chủ sở hữu các website sang những người dùng (những người góp phần tạo nên giá trị của website) không phải là cách tốt nhất. Xét từ khía cạnh pháp lý, việc sử dụng CAPTCHA có thể khiến chủ sở hữu website bị người dùng kiện và một số nơi đã có quy định về vấn đề này. Vì thế, trong Dự án mở về bảo mật ứng dụng web (OWASP) cũng khuyên, nên thận trọng khi quyết định sử dụng CAPTCHA. Bên cạnh đó, những giải pháp CAPTCHA sử dụng âm thanh (audio captcha) cũng có nhiều vấn đề hạn chế liên quan đến ngôn ngữ và cũng không an toàn hơn so với các CAPTCHA sử dụng hình ảnh (phần mềm DeCAPTCHA của các nhà nghiên cứu ở đại học Stanford có khả năng nhận dạng thành công 75% audio captcha của eBay).
Những thất bại trong việc tìm kiếm các giải pháp CAPTCHA tiện lợi cho người dùng, khiến chúng ta cần xem xét một cách nghiêm túc việc sử dụng CAPTCHA và tìm kiếm những hướng đi mới. Dù các hệ thống trí tuệ nhân tạo có rất nhiều tiến bộ nhưng phần lớn các cơ chế chống spam vẫn rất thô sơ. Trong khi đó, những nghiên cứu phá vỡ CAPTCHA xuất hiện ngày một nhiều và tin tặc thì chủ yếu tập trung khai thác những lỗ hổng trong lôgic ứng dụng thay vì cố gắng nhận dạng tự động, điều này khiến hy vọng việc sử dụng CAPTCHA sẽ thúc đẩy công nghệ nhận dạng trở nên khó khăn. Dưới đây là một số gợi ý có thể thay thế cho CAPTCHA:
- Sử dụng các giải pháp Akismet, Mollom và SBlam! để phân tích dữ liệu do máy khách gửi lên, từ đó có thể tự động phát hiện spam. Mollom đôi khi vẫn sử dụng CAPTCHA, nhưng chỉ trong trường hợp hệ thống không thể xác định chắc chắn. Các website cũng có thể phát triển hệ thống riêng dựa trên các giải pháp lựa chọn phù hợp.
- Năm 2007, Phil Haack đề xuất một phương pháp thông minh để phát hiện những máy gửi spam đó là thêm một trường ẩn vào web form. Các phần mềm tự động sẽ tương tác với mã HTML gốc chứ không phân tích kết quả của chúng, do đó không phát hiện việc người dùng không nhìn thấy trường ẩn. Nếu có dữ liệu trong trường ẩn, thì máy chủ có thể chắc chắn rằng dữ liệu gửi tới không phải là do người dùng thực cung cấp. Phương pháp này có thể được phức tạp hóa bằng cách dùng JavaScript và băm dữ liệu. Các biện pháp làm rối đó có độ an toàn không quá cao, nhưng chúng ta có thể giả định rằng những máy gửi spam tự động sẽ không đủ tinh vi để nhập đúng thông tin. Ngoài ra, có thể dùng JavaScript để tự động điền vào các trường ẩn, sau đó máy chủ sẽ kiểm tra xem có khớp không. Việc kiểm tra thêm thời gian và dữ liệu phiên có thể phát hiện ra những lần gửi dữ liệu tự động.
- Ngoài ra, các phương pháp như đo thời gian nhập thông tin vào mẫu hay soạn thảo bình luận, theo dõi thao tác di chuột và gõ phím của người dùng tại máy khách cũng có thể dùng để phân biệt người dùng thực sự với máy móc. Tất nhiên, chúng chỉ có thể dùng như những biện pháp bổ trợ chứ không thể là giải pháp chính cho cuộc chiến chống spam.
- Cuối cùng, có thể tích hợp website với các mạng xã hội phổ biến để góp phần hạn chế việc gửi tin nặc danh. Các dịch vụ tích hợp như Janrain cho phép các website kết nối với các mạng xã hội khác nhau.
Kết luận
Trong trường hợp vẫn muốn sử dụng CAPTCHA, người dùng nên lựa chọn sử dụng những giải pháp mạnh, đã được kiểm chứng. Chẳng hạn như reCAPTCHA - một trong những giải pháp CAPTCHA thân thiện và an toàn nhất trên thị trường. Một điều quan trọng khiến reCAPTCHA khác biệt với các giải pháp khác là nó sử dụng Adaptive Security của Google. Tất cả các hình ảnh reCAPTCHA đều được sinh trên máy chủ của Google và nếu có dấu hiệu một hình ảnh có thể bị giải mã tự động thì hình ảnh đó sẽ được sửa đổi gần như ngay tức khắc. Tuy nhiên, reCAPTCHA vẫn còn có một số hạn chế như: phụ thuộc vào kết nối với Google, việc sử dụng CAPTCHA đòi hỏi những biện pháp bảo vệ bổ sung thích hợp để tránh tin tặc tấn công kết nối.