CHƯƠNG 3. PHÁT HIỆN VÀ PHÒNG CHỐNG TẤN CÔNG WEB APP-DDOS
3.5. Phòng chống tấn công Web App-DDoS sử dụng phương pháp FDDA
3.5.4. Tiêu chí về tần suất truy cập
3.5.4.3. Thuật toán chi tiết tính tần suất f thời gian thực
Thuật toán chúng tôi đề xuất bao gồm 02 tác vụ xử lý cơ bản: xử lý mỗi gói tin truy cập hệ thống Web và tính toán và báo cáo các tần suất f (Reporting) sau mỗi khoảng thời gian ∆t.
(1) : The normal update (2)-(3): Zoom-in update
Hình 3.8 Minh họa xử lý bảng vết truy cập
(2-3): First zoom-in update with IPB (4): Zoom-in update after tZin with IPC Hình 3.9 Minh họa xử lý bảng vết truy cập (tiếp theo) 1) Xử lý mỗi srcIP gửi yêu cầu tới máy chủ:
Mỗi srcIP gửi yêu cầu gửi đến máy chủ sẽ được kiểm tra xem có tồn tại trong TraTab hay chưa? Nếu chưa, một dòng dữ liệu mới sẽ được thêm vào với các thông tin khởi tạo là srcIP tương ứng, giá trị tL (thời điểm cuối slot này và cũng là đầu slot tiếp theo tính từ đồng hồ hệ thống) và Trace [TS]; giá trị f và các bit của trường Trace được thiết lập mặc định là 0. Các giá trị này sẽ được cập nhật khi có sự kiện truy cập tiếp theo.
Algorithm 1: Processing trace table Input: initial setting values ∆, 𝑇𝑆
Output: Report 𝑓[𝑖] at the end of each interval ∆ 1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Initiation
← ∆/𝑇𝑆 // Interval ∆ is divided into 𝑇𝑆 slots bZoomIn
← 𝐹𝑎𝑙𝑠𝑒; 𝑡𝑅𝑒𝑝 ← 0 Start
Loop
if there is a new incoming request 𝑡𝑐 ← 𝐶𝑢𝑟𝑟𝑒𝑛𝑡 𝑇𝑖𝑚𝑒
𝑆𝑟𝑐𝐼𝑃 ← the source IP of the req. packet Update the row indexed by 𝑆𝑟𝑐𝐼𝑃
if 𝑡𝑐 > 𝑡𝐿 // normal situation
if bZoomIn then Exec ope Zooming-in Exec ope Update-Row (𝑡𝑐, , 1)
else // packets coming too densely Exec ope Zooming-in
end if end if
if 𝑡𝑐− 𝑡𝑅𝑒𝑝 ≥ ∆ // Report the f[i]’s every time ∆ for 𝑒𝑎𝑐ℎ 𝑟𝑜𝑤 do // Update rows before rep.
if 𝑡𝑐− 𝑡𝐿 ≥ ∆ then 𝐷𝑒𝑙𝑒𝑡𝑒 𝑟𝑜𝑤//inactive Exec ope Update-Row (𝑡𝑅𝑒𝑝+ ∆, , 0) end for
𝑡𝑅𝑒𝑝 ← 𝑡𝑅𝑒𝑝+ ∆ Report: 𝑎𝑙𝑙 𝑡ℎ𝑒 𝑓[𝑖]′𝑠 endif
End
Operation Update-Row (𝑝𝑡: point in time, 𝑑𝑡: slot length, 𝑙𝑎𝑠𝑡𝐵𝑖𝑡: 0..1)
𝑛𝐵𝑖𝑡𝑠 =𝑝𝑡 − 𝑡𝐿) 𝑑𝑡⁄
𝑓 ← 𝑓 − 𝑆𝑢𝑚(𝑡𝑟𝑎𝑐𝑒, 𝑛𝐵𝑖𝑡𝑠) + 𝑙𝑎𝑠𝑡𝐵𝑖𝑡 𝑆ℎ𝑖𝑓𝑡𝐿𝑒𝑓𝑡 trace 𝑏𝑦 𝑛𝐵𝑖𝑡𝑠
𝑡𝑟𝑎𝑐𝑒 [𝑇𝑆] ← 𝑙𝑎𝑠𝑡𝐵𝑖𝑡 𝑡𝐿 ← 𝑡𝐿+ 𝑑𝑡 ∗ 𝑛𝐵𝑖𝑡𝑠 End
Hình 3.10 Thuật toán tìm tần suất truy cập theo thời gian thực
Nếu srcIP đó đã tồn tại thì tiếp theo sẽ có 2 trường hợp xử lý, tùy thuộc vào xảy ra chăng sự kiện thời điểm truy cập này quá sát với truy cập trước (mật độ dày) tức là xảy ra trùng lặp 2 truy cập trong cùng một slot:
Nếu không trùng lặp (𝑡𝑐 > 𝑡𝐿), giá trị 𝑡𝐿, tần suất f và mảng Trace sẽ được tính mới
& cập nhật – minh họa qua hình 3.8 trong trường hợp xử lý (1). Trong hình 3.10 (trình bày giả mã thuật toán), xử lý này thể hiện ở lời gọi ở dòng 12 tới thủ tục thao tác Update-Row ở dòng 26). Thủ tục này sẽ cập nhật theo quãng thời gian từ thời điểm 𝑡𝐿 trước đây cho đến hiện thời (𝑡𝑐). Giá trị 𝑛𝐵𝑖𝑡𝑠 thể hiện sự chênh lệch giữa 2
thời điểm này tính theo slot (làm tròn lên), từ đó mảng Trace sẽ được dịch trái theo từng ấy vị trí (bits) để loại bỏ thông tin cũ (ở về trước quãng ∆ hiện thời).
Nếu trùng lặp (slot hiện thời cũng đã có một truy cập ngay trước đó rơi vào), mật độ truy cập được coi là quá dày và xử lý Zoom-In được thực hiện để TraTab sẽ cập nhật các sự kiện truy cập ứng với quãng thời gian ∆ (và ) giảm còn nửa như cũ. Xử lý Zoom-in được khởi tạo trong trường hợp này (với truy cập đầu tiên bị trùng lặp slot) được minh họa bởi trường hợp xử lý (2)-(3) trong hình 3.8.
Thao tác xử lý Zoom-in được trình bày chi tiết bằng mã giả trong hình 3.11. Khi thủ tục này được khởi tạo, các dòng lệnh 3-5 được thực hiện để khởi tạo các tham số quan trọng, trong đó có tZin, thời điểm bắt đầu của chu kỳ ∆ mới (bằng nửa cũ). Tiếp theo dòng 8 sẽ thực hiện lời gọi thủ tục Update-Row cập nhật lại trường Trace tương ứng cho đến thời điểm tZin (giống như tL, giá trị này thực tế vượt qua thời điểm hiện thời); thao tác này được minh họa như trường hợp xử lý (2) trong hình 3.8.
Algorithm 2: Operation Zooming-in 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17
Start
if not bZoomIn bZoomIn ← 𝑇𝑟𝑢𝑒 𝑡𝑍𝑖𝑛 ←𝑡𝐶− 𝑡𝐿)⁄∗
∆← ∆/2; 𝑂 ← ; ←/2 end if
if 𝑡𝐿 < 𝑡𝑍𝑖𝑛
// Update the row till 𝑡𝑍𝑖𝑛; last bit still 0 Execute operation Update-Row (𝑡𝑍𝑖𝑛, 𝑂, 0) // Zoom into the interval [𝑡𝑍𝑖𝑛− ∆, 𝑡𝑍𝑖𝑛] for i:=1 to TS/2 do
𝑡𝑟𝑎𝑐𝑒[2𝑖] = 𝑡𝑟𝑎𝑐𝑒[𝑖];
𝑡𝑟𝑎𝑐𝑒[2𝑖 − 1] ← 0 end for
if 𝑡𝑐 < 𝑡𝑍𝑖𝑛 then 𝑡𝑟𝑎𝑐𝑒 [𝑇𝑆] ← 1 else
if 𝑡𝑐 − 𝑡𝑍𝑖𝑛 ≥ ∆ then bZoomIn ← 𝐹𝑎𝑙𝑠𝑒 end if
End
Hình 3.11 Tiến trình xử lý Zooming-in
Tiếp theo các dòng lệnh 9-12 thực hiện việc thu lại (zoom-in) khung nhìn vào interval ∆ mới bằng nửa cũ – minh họa như xử lý (3) trong hình 3.8.
Sau khi giai đoạn Zoom-In đã được kích hoạt (bZoomIn= 𝑇𝑟𝑢𝑒), các truy cập tiếp theo (sau thời điểm tZin) có thể rơi vào 2 trường hợp: i) với SrcIP đã từng cập nhật sau tZin, khi đó quá trình xảy ra là đơn giản như ở trường hợp (1) hình 3.10 (ứng với dòng lệnh 12 trong thuật toán chính – hình 3.10); hay ii) với SrcIP chưa từng cập nhật sau tZin, khi đó một loạt thao tác xử lý minh họa như trường hợp xử lý (4) trong hình 3.11, bao gồm các việc cập nhật Trace đến thời điểm tZin, co thu mảng Trace lại, và cập nhật đến thời điểm hiện thời tc.
2) Cập nhật tần suất f
Với mỗi trup cập ứng với mỗi SrcIP, mảng Trace được cập nhật (như ở trên) và giá trị f được cập nhật tương ứng. Giá trị f tương ứng với mỗi SrcIP chính là tổng số bit 1 có trong trường Trace sau khi được cập nhật. Tuy nhiên ta không cần tính lại tổng này mỗi lần cập nhật vì chú ý rằng thao tác dịch trái với Trace (Shift-left) chỉ làm mất đi một nhóm các bit ở mút trái, và thay thế chúng với các bit đầu mút bên phải gồm toàn 0 và duy nhất bit Trace [TS]=1.
Vì vậy cập nhật f là rất đơn giản là tính bù trừ trên giá trị f trước đây, như ở dòng lệnh 28, thủ tục thao tác Update-Row của mã giả thuật toán (hình 3.10).
Để báo cáo các tần suất f vào thời điểm cuối mỗi chu kỳ ∆, trước hết ta phải tính lại đồng bộ tất cả các giá trị f trong các dòng của TraTab tính đến thời điểm 𝑡𝑅𝑒𝑝 này. Việc gọi thủ tục Update-Row (dòng lệnh 20) sẽ xác định các tần suất f[SrcIP] cùng vào thời điểm hiện thời 𝑡𝑅𝑒𝑝 này.