Giải thuật RRED

Một phần của tài liệu Cải thiện hiệu năng giải thuật RRED chống tấn công từ chối dịch vụ tốc độ thấp (Trang 31)

Nhƣ đã đề cập, các dòng gói tin tấn công DoS tốc độ thấp có tốc độ gửi gói tin trung bình thấp nhƣng truyền các gói tin theo các xung tốc độ cao trong những khoảng thời gian ngắn. Các mẫu lƣu lƣợng nhƣ vậy có thể đƣợc các thuật toán ở router xác định là tấn công DoS hay không? Câu hỏi này sẽ đƣợc giải đáp ở đây. Các cơ chế xử lý gói tin theo dòng ở router có thể đƣợc phân loại thành cơ chế xếp lịch và cơ chế loại bỏ gói tin theo ƣu tiên. Thực hiện cơ chế loại bỏ gói tin theo ƣu tiên dễ hơn so với thực hiện cơ chế xếp lịch. Cùng với các lợi thế khác của cơ chế loại bỏ gói tin theo ƣu tiên so với cơ chế xếp lịch, cơ chế loại bỏ gói tin theo ƣu tiên sẽ đƣợc tập trung nghiên cứu ở đây, đặc biệt dùng để phát hiện các dòng tấn công DoS và cơ chế này cũng đạt đƣợc sự công bằng giữa các dòng có khả năng thích ứng và các dòng không có khả năng thích ứng với điều kiện mạng. Phần này sẽ giải thích về thiết kế và thực hiện thuật toán lọc tốc độ thấp RRED, sau đây tôi gọi là LF-RED (the Low-rate Filter LF-RED), 2 tên gọi này có thể dùng hoán đổi vị trí cho nhau và cùng là một thuật toán.

Hình 2.4: Kiến trúc của LF-RED

Hình 2.4 mô tả kiến trúc cơ bản của thuật toán LF-RED. Một khối phát hiện và lọc gói tin (DF) đƣợc đặt trƣớc khối RED thông thƣờng trên một router. Ý tƣởng cơ bản của thuật toán LF-RED là phát hiện và lọc ra các gói tin đang đến router từ các dòng tấn công DoS tốc độ thấp trƣớc khi nó đƣợc chuyển đến khối RED.

Các gói tin TCP đến router thuộc các dòng gói tin khác nhau. Có 5 yếu tố đƣợc sử dụng để định nghĩa một dòng gói tin bao gồm: địa chỉ IP nguồn, địa chỉ cổng nguồn, địa chỉ IP đích, địa chỉ cổng đích, giao thức của gói tin. Một biến F.I đƣợc dùng để xác định dòng gói tin F là dòng TCP thông thƣờng hay là dòng tấn công DoS tốc độ thấp. F.I đƣợc tính nhƣ sau:

 Nếu một gói tin từ dòng F đƣợc coi là một gói tin tấn công thì F.I giảm một đơn vị (F.I = F.I - 1).

 Nếu một gói tin từ dòng F đƣợc coi là một gói tin bình thƣờng thì F.I đƣợc tăng lên một đơn vị (F.I = F.I + 1).

Khi đó một gói tin đến router từ một dòng với giá trị F.I < 0 sẽ bị lọc ra. Các gói tin khác từ các dòng với F.I ≥ 0 sẽ tiếp tục đƣợc chuyển đến khối RED. Một gói tin đến router từ một dòng F đƣợc coi là một gói tin tấn công nếu một trong hai điều kiện sau đây xảy ra:

1. Gói tin này đến trong khoảng thời gian ngắn kể từ thời điểm cuối cùng một gói tin của dòng F bị lọc ra bởi khối DF.

2. Gói tin này đến trong khoảng thời gian ngắn kể từ thời điểm cuối cùng một gói tin của bất kỳ dòng nào đến router bị lọc ra bởi khối RED.

Khoảng thời gian ngắn đƣợc định nghĩa là [Tmax, Tmax + T*], trong đó: Tmax = MAX(F.T1, T2)

Trong công thức này, với mỗi dòng F (không phân biệt là dòng TCP thông thƣờng hay dòng tấn công DoS tốc độ thấp):

 F.T1 là thời gian đến của gói tin cuối cùng từ dòng F bị loại ra bởi khối DF.

 T2 là thời gian đến của gói tin cuối cùng từ bất kỳ dòng nào bị loại ra bởi khối RED.

 T* là một hằng số và đƣợc chọn sao cho có thể lọc ra hầu hết các gói tin tấn công và không lọc hầu hết các gói tin thông thƣờng. Theo [3] chọn T* = 10 (ms) đạt đƣợc hiệu quả lọc ra các gói tin tấn công tốc độ thấp.

Nếu thời gian đến của một gói tin thuộc dòng F rơi vào khoảng này thì gói tin đó đƣợc coi là gói tin tấn công. Chú ý rằng giá trị T1 là khác nhau đối với mỗi dòng còn giá trị T2 là chung cho tất cả các dòng, chúng lần lƣợt lƣu giữ đặc điểm cơ bản của dòng tấn công DoS tốc độ thấp và ảnh hƣởng tổng thể của cuộc tấn công đối với toàn bộ mạng.

Để lƣu thông tin của một số lƣợng lớn các dòng gói tin đến router ngƣời ta sử dụng kỹ thuật Bloom-filters [2].

Bộ lọc Bloom đƣợc đƣa ra năm 1970 bởi H. Bloom.

Bộ lọc Bloom là một cấu trúc dữ liệu đƣợc sử dụng để hỗ trợ cho các truy vấn để kiểm tra xem một phần tử có thuộc vào một tập hợp hay không. Các đặc điểm chính của bộ lọc Bloom là:

 Không gian bộ nhớ dùng để lƣu bộ lọc Bloom nhỏ hơn so với tổng số dữ liệu thuộc tập hợp.

 Thời gian để kiểm tra một phần tử có thuộc vào một tập hợp hay không không phụ thuộc vào số phần tử của tập hợp đó.

 Nếu phần tử thuộc vào tập hợp thì câu trả lời luôn đúng.

 Nếu phần tử không thuộc vào tập hợp thì câu trả lời vẫn có thể là có thuộc vào tập hợp vì cách sử dụng hàm băm, trong thực tế luôn có một tần suất lỗi này và có thể điều khiển đƣợc.

Một bộ lọc Bloom dựa trên một mảng gồm m bít (b1, b2, …, bm) đƣợc khởi tạo là vectơ không (0, 0, …, 0).

Ngƣời ta sử dụng k hàm băm (h1, h2, …, hk) mỗi hàm trả về giá trị từ 1 đến m. Để lƣu một phần tử vào mảng bít trên, mỗi hàm băm sẽ đƣợc áp dụng vào phần tử đó. Dựa trên mảng giá trị trả về (r1, r2, …, rk) đặt các bít trong mảng b ở các vị trí tƣơng ứng thành 1. Bởi vì có k hàm băm nên nhiều nhất là k bít trong mảng b đƣợc đặt giá trị là 1 (có thể ít hơn vì một vài hàm băm có thể trả về cùng một giá trị). Hình 2.5 mô tả một bộ lọc Bloom với m = 16, k = 4 và e là phần tử cần lƣu vào mảng bít.

Hình 2.5: Một bộ lọc Bloom

Để kiểm tra một phần tử e đã đƣợc lƣu vào mảng bít hay chƣa, áp dụng k hàm băm này vào phần tử e đƣợc k giá trị trả về (r1, r2, …, rk), kiểm tra xem các bít ở các vị trí tƣơng ứng có giá trị là 1 hay không, nếu đều là 1 thì e thuộc tập hợp, nếu có bất kỳ giá trị nào là 0 thì e không thuộc tập hợp.

Trong thuật toán LF-RED, bộ lọc Bloom đƣợc xây dựng với L mức, mỗi mức bao gồm N biến. Ở mỗi mức có một hàm băm riêng biệt. Một dòng gói tin sẽ đƣợc ánh xạ tới L biến, mỗi biến nằm trên một mức.

Nếu một gói tin thuộc một dòng đƣợc coi là gói tin tấn công, tất cả L biến của dòng F đó sẽ giảm đi một đơn vị. Ngƣợc lại, tất cả L biến của dòng F sẽ tăng lên một đơn vị nếu gói tin đƣợc coi là gói tin thông thƣờng.

Trong một mức cụ thể, một dòng tấn công DoS tốc độ thấp có thể cùng chia sẻ một biến với dòng thông thƣờng. Chính vì vậy có thể xảy ra tình huống một dòng thông thƣờng bị “đầu độc” bởi một dòng tấn công DoS tốc độ thấp do biến chia sẻ này. Để tránh tình huống này ngƣời ta đặt cận trên là 10 và cận dƣới là -1 cho mỗi biến. Vì vậy một dòng tấn công DoS tốc độ thấp không thể “đầu độc” một dòng bình thƣờng bằng việc giảm giá trị biến chia sẻ tới một giá trị âm quá thấp. Khi đó biến F.I của một dòng F là giá trị lớn nhất của L biến tƣơng ứng với dòng F đó. Giả mã của thuật toán LF-RED nhƣ sau:

LFRED − ENQUE(pkt)

1: f ← LFRED–FLOWHASH(pkt) 2: Tmax ← MAX(Flow[f].T1, T2)

3: if pkt.arrivaltime [Tmax, Tmax + T*] then

4: Giảm chỉ số cục bộ đi 1 cho mỗi ô nhớ của luồng f 5: else

6: Tăng chỉ số cục bộ lên 1 cho mỗi ô nhớ của luồng f 7: end if

8: Flow[f].I ← Giá trị lớn nhất của các chỉ số cục bộ của luồng f 9: if Flow[f].I ≥ 0 then

10: RED−ENQUE(pkt) //pass pkt to the RED block 11: if RED drops pkt then

13: end if 14: else 15: Flow[f].T1 ← pkt.arrivaltime 16: drop(pkt) 17: end if 18: return

Một phần của tài liệu Cải thiện hiệu năng giải thuật RRED chống tấn công từ chối dịch vụ tốc độ thấp (Trang 31)

Tải bản đầy đủ (PDF)

(100 trang)