CHƯƠNG 1: NGHIÊN CỨU CÁC GIẢI PHÁP NGĂN CHẶN TẤN CÔNG TỪ CHỐI DỊCH VỤ TRÊN TẦNG ỨNG DỤNG CHO WEBSITES
1.2. Phương pháp luận nghiên cứu các giải pháp ngăn chặn tấn công từ chối dịch vụ
Để tiến hành nghiên cứu giải pháp ngăn chặn tấn công từ chối dịch vụ ở tầng ứng dụng ta sẽ đi vào nghiên cứu các vấn đề chung nhất cần được giải quyết để có thể phát hiện được kiểu tấn công này.
1.2.1. Các yêu cầu đối với một hệ thống chấn tấn công từ chối dịch vụ.
Phát hiện nhiều cơ chế
Hiện nay các hình thức tấn công từ chối dịch vụ rất đa dạng và luôn được phát triển không ngừng. Càng ngày càng có nhiều kiểu tấn công mới. Do vậy, một hệ thống phát hiện từ chối dịch vụ thật sự hiệu quả khi phát hiện được hầu hết các kiểu tấn công. Luôn đánh giá được hệ thống mạng khi có những dấu hiệu bất thường, phải cập nhật thường xuyên những kiểu tấn công mới để có biện pháp phát hiện nhanh nhất.
Tính trong suốt với người dùng
Về cơ bản khi triển khai hệ thống phát hiện từ chối dịch vụ phải hoàn toàn trong suốt với người dùng. Người dùng hoàn toàn không biết hoặc rất khó để biết có sự tồn tại của hệ thống là yêu cầu rất cần thiết. Một hệ thống chống tấn công từ chối dịch vụ khiến trải nghiệm của người dùng bị giảm sút sẽ không có giá trị nhiều trong thực tế.
Phân biệt được bot của các trang tìm kiếm
Các trang tìm kiếm trên thế giới hầu như đều có bot để tiến hành lấy nội dung của tất cả các website trên internet. Về mặt kỹ thuật các con bot này hoạt động rất giống các công cụ tấn công từ chối dịch vụ hay botnet. Thêm vào đó lượng khách hàng của các trang thương mại điện tử đến từ các trang tìm kiếm như google là rất nhiều. Do đó nếu hệ thống chống tấn công mà chặn nhầm bot của các trang tìm kiếm thì cũng ảnh hưởng nhiều đến website hệ thống đang bảo vệ.
Phản ứng
15
Khi một cuộc tấn công từ chối dịch vụ xảy ra. Bước đầu tiên và cũng là quan trọng nhất là phát hiện chính xác cách tấn công. Hệ thống phòng thủ phải đáp ứng trong thời gian thực, đặc biệt là tốc độ phản ứng phải cao. Tránh trường hợp chặn nhầm người dùng hợp lệ.
1.2.2. Phương pháp để xác định tấn công từ chối dịch vụ.
1.2.2.1. Xác thực người dùng.
Vấn đề quan trọng của một hệ thống chống tấn công từ chối dịch vụ trên tầng ứng dụng cho website là làm sao phân biệt được người dùng thật với request đến từ công cụ hay botnet hay các hệ thống khác. Để làm được việc này ta phải nghiên cứu kỹ các thức thực hiện của các dạng tấn công từ chối dịch vụ mà ta đã từng biết. Các công cụ tấn công từ chối dịch vụ như đã nói ở phần 1.1.3 kể cả botnet hiện tại đều thực hiện tấn công bằng cách tạo request http bằng một thư viện nào đó mức socket vì nếu thực hiện đầy đủ request như một browser bình thường thì dữ liệu phải nhận về sẽ rất lớn, phải mô phỏng được browser chạy do đó kích thước và mức độ tiêu tốn tài nguyên cũng rất cao. Cùng với đó các kỹ thuật tấn công qua các website có người dùng nhiều cũng có những vấn đề như khi load ảnh thì browser chỉ lấy được cookie của trang web khi cookie đó được set qua header, javascript cũng chỉ có được cookie nếu cookie đó không được bật cờ http only. Do đó để xác thực được người dùng với các request tấn công từ chối dịch vụ thì cách tốt nhất là dùng một cookie để xác thực người dùng vào cookie đó nên được set thông qua javascript.
Tuy vậy nếu việc kiểm tra bằng cookie này không được làm tốt thì người tấn công có thể có cách để qua mặt được cơ chế kiểm tra này như: dùng browser hoặc mô phỏng browser để lấy được cookie xác thực sau đó dùng cookie này để tạo các request tấn công ddos sau này. Để giải quyết vấn đề đó thì cookie khi được tạo ra phải có thời gian tồn tại tức là sau thời gian đó browser phải xác thực lại mới có thể request tiếp được. Để đảm bảo tính an toàn và tránh khả năng người tấn công có thể tìm cách tạo ra được cookie hợp lệ, cookie xác thực này phải được tạo ra bằng các phương pháp mã hoá đủ tốt. Trong trường hợp người tấn công dùng cách nào đó như mô phỏng browser để vượt qua được tất cả các bước này ta cần có cách xác
16
thực tốt hơn quá trình này có thể làm bằng cách dùng phương thức giới hạn số request trong một thời gian xác định, nếu người dùng vượt qua giới hạn này thì phải được xác thực bằng phương pháp xác thực khó vượt qua hơn. Phương thức xác thực thế này cũng đã được google triển khai ở hệ thống của mình. Hiện tại một số công cụ mô phỏng browser đã phát triển rất mạnh do đó phương thức xác thực chỉ dùng cookie và javascript là chưa đủ, captcha là công cụ để phát hiện người dùng và máy rất hữu hiệu và khả năng để có thể vượt qua được là không cao.
Hình 4. Captcha để xác thực người dùng với bot.
Với những vấn đề đã nêu ở trên tác giả đề xuất ra giải pháp để xác thực người dùng như sau: khi người dùng vào sẽ được cấp một cookie xác thực theo các đặc điểm chỉ riêng người dùng đó có, cookie này sẽ được chuyển xuống người dùng thông qua javascript đây là bước xác nhận người dùng đầu tiên và gần như trong suốt với người dùng do hoàn toàn do browser thực hiện. Khi người dùng tạo request quá một giới hạn nào đó trên một khoảng thời gian thì người dùng sẽ phải xác thực thông qua catpcha để có được cookie xác thực. Cookie xác thực được tạo thành bởi các yếu tố riêng biệt từ người dùng với một mã bí mật chỉ server có và có thời gian tồn tại xác định. Với các xác thực thế này có thể tạo thành một hệ thống khá tốt để ngăn chặn gần như tất cả các request tấn công từ chối dịch vụ đến hệ thống website.
17
1.2.2.2. Xác thực các bot của trang tìm kiếm.
Khi xây dựng tường lửa cho website ta cũng phải chú ý đến việc xác thực được bot đến từ các trang tìm kiếm. Các công cụ chống tấn công từ chối dịch vụ được phổ biến rộng rãi trên mạng làm việc này bằng cách là kiểm tra xem useragent trong phần request có phải là useragent của các bot này không nếu đúng thì sẽ cho qua luôn không cần xác thực gì. Tuy vậy việc này dẫn đến người tấn công có thể dễ dàng qua mặt được hệ thống bảo vệ này khi đặt useragent của request là useragent của các bot tìm kiếm này. Cách làm này được phổ biến rất rộng rãi trên các diễn đàn của Việt Nam từ những năm 2009 đến nay. Thêm vào đó các bot của các công cụ tìm kiếm này đều không hỗ trợ javascript hay bất cứ cách nào để giải mã được captcha do đó phương thức xác thực người dùng như ở phần 1.2.2.1 là không thể dùng được trong trường hợp này.
Quá trình nghiên cứu đặc điểm của các bot của các công cụ tìm kiếm lớn tác giả thấy rằng việc kiểm tra xem bot có phải của các công cụ tìm kiếm có 2 cách đơn giản sau đây: kiểm tra dựa vào dns, kiểm tra dựa vào địa chỉ ip.
Kiểm tra dựa vào dns được dùng với 2 công cụ tìm kiếm phổ biến trên internet là google và bing. Các bot tìm kiếm của 2 công cụ này khi truy vấn đến các website sẽ đến từ các ip có hostname là id của bot đó và một domain được quy định chung nhất. Do đó các bot này rất dễ để xác thực bằng cách kiểm tra địa chỉ ip của bot có phải có hostname theo tiêu chuẩn nêu trên không. Việc kiểm tra này thông qua dns là một giao thức rất nhanh nên không tiêu tốn quá nhiều tài nguyên của server.
Kiểm tra dựa vào địa chỉ ip thông thường các hãng công nghệ lớn trên thế giới để đăng ký cho mình các dải ip cụ thể. Một số bot của một số hãng công nghệ như facebook không dùng tiêu chuẩn như google hay bing là các địa chỉ ip nó dùng được gắn với hostname theo định dạng cụ thể do đó việc kiểm tra tính xác thực của bot này phải thông qua việc kiểm tra ip của bot có thuộc sở hữu của các hãng công nghệ cụ thể của bot không. Quá trình kiểm tra này cũng đúng với cả các bot tìm kiếm của google và bing.
18
CH ƯƠNG 2: XÂY DỰNG HỆ THỐNG NGĂN CHẶN T ẤN CÔNG TỪ CHỐI DICH VỤ CHO WEBSITES.