Căn Bản Flood

Bài viết này được tớ tìm hiểu từ nhiều nguồn và kết hợp lại với nhau để viết thành một bài hoàn chỉnh. Vì thế có những đoạn không biết tác giả là ai nên lỡ có "mạo phạm" tác giả bỏ qua
============================
============Tổng Quan Về Flood=============
=============Tác giả: Phstiger==============

I. TỔNG QUAN

Flood được hiểu nôm na là tràn ngập hay ngập lục. Chỉ hiện tượng các website có sử dụng CSDL để lưu trữ thông tin nhận được từ các biểu mẫu bị tràn ngập thông tin trong một khoảng thời gian ngắn. Các thông tin bên trong các biểu mẫu đăng ký hoặc biểu mẫu tiếp nhận thông tin có thể phát sinh ngẫu nhiên hoặc là những thông tin nhảm nhí (rác) được gửi từ một phía attacker hay từ nhiều phía.

II. PHÂN TÍCH KỸ THUẬT

1. Mô Hình Tiếp Nhận Thông Tin

Mô hình bên dưới (Hình 1) mô tả việc tiếp nhận thông tin từ người dùng.

Hình 1: Tiếp Nhận Thông Tin từ người dùng
Mô hình trên cho ta thấy để ghi nhận thông tin vào CSDL thì phải qua 2 khâu chính. Ban đầu người dùng phải nhập thông tin vào biểu mẫu A (biểu mẫu này thường tồn tại dưới hình thức là một trang web). Sau đó thông tin được chuyển qua khâu (B) để tiếp nhận thông tin và xử lý trước khi lưu vào CSDL.

2. Mô Hình Làm Ngập của attacker

Dựa vào mô hình tiếp nhận thông tin như hình 1 thì attacker có thể đưa ra 2 mô hình dùng để làm ngập website với mức độ nguy hiểm khác nhau: Ở đây ta chia ra làm 2 hình thức làm ngập.

a. Làm ngập từ một phía


Hình 2: Mô Hình Làm Ngập

Với mô hình trên (hình 2) thì thông tin được attacker truyền trực tiếp đến Khâu B để server xử lý bằng một chương trình làm ngập mà không phải qua khâu A để điền thông tin vào biểu mẫu một cách thủ công. Như vậy, với chương trình làm ngập attacker có thể làm ngập CSDL bằng cách lặp đi lặp lại mô hình trên trong một khoảng thời gian đủ lớn. Khi đó khâu B sẽ phải tiếp nhận hàng loạt thông tin gửi đến từ Chương trình làm ngập và lưu trữ liên tục vào CSDL, khiến cho CSDL ngày càng phình to ra.

b. Làm ngập từ nhiều phía


Hình 3: Mô hình làm ngập của Attacker

Tuy nhiên tấn công từ nhiều phía sẽ tận dụng các máy tính từ khắp nơi trên mạng đã bị attacker kiểm soát và biến chúng thành các zoombie để ồ ạt tấn công vào mục tiêu.
Hình thức tấn công này giúp attacker tiết kiệm được thời gian và tận dụng được một lượng lớn các zoombie cho việc tấn công có hiệu quả hơn và gây nguy hiểm hơn cho server. Vấn đề lúc này không còn đơn giản là server bị làm ngập bởi các dữ liệu rác nữa, nếu như số lượng các zoombie đủ lớn thì việc server xử lý một lượng khá lớn dữ liệu sẽ khiến server có thể bị nghẽn hoặc bị crash. Trường hợp này tương tự như kỹ thuật DDOS của attacker.
(Để hiểu rõ hơn về Zoombie cũng như các vấn đề liên quan, xem thêm Chương 10 - Tấn Công Từ Chối Dịch Vụ - DOS )

III. TÁC HẠI

- CSDL sẽ phình to ra với những dữ liệu rác không mong muốn.
- Gây nghẽn tạm thời đối với server hoặc gây crash khi có một lượng lớn dữ liệu gửi đến.
- Truy cập và load thông tin chậm chạp vì CSDL quá lớn làm gia tăng thời gian truy vấn dữ liệu.
- Vì website là bộ mặt của công ty hay một tổ chức nào đó, nên có thể sẽ gây mất uy tín đối với khách hàng.
- . . . . . . . .

IV. PHÒNG CHỐNG

Có rất nhiều phương pháp để phòng chống Flood như: Sử dụng session, ghi nhận IP của máy đang truy cập, sử dụng captcha image, . . . Tuy nhiên trong khuôn khổ của luận văn này, sẽ trình bày sơ lượt về hai phương pháp được sử dụng khá phổ biến là dùng session và capcha image.

a. Sử Dụng Session

Phương pháp này sẽ giới hạn việc gửi thông tin liên tục đến server bằng cách kiểm soát thời gian giữa giữa 2 lần tiếp nhận dữ liệu. Nghĩa là sau một khoảng thời gian nhất định nào đó thì mới cho phép chèn dữ liệu vào.

Ta có thể cài đặt bằng code PHP như sau:
Tạo 1 file PHP tên là anti_flood.php, với code sau:

Code:
session_start();
$timeout = 60;
$session_name = "action_time";
if ( isset($_SESSION["{$session_name}"]) && ( $_SESSION["{$session_name}"] >= time() - $timeout ) )
{
print "Làm ơn đợi {$timeout} giây rồi quay lại kiếm tôi!!";
return false;
}
$_SESSION["{$session_name}"] = time();
?>
Giải thích:
Dòng thứ 2 dùng session_start() để khởi động dữ liệu của session.
Dòng thứ 3 để thiết lập thời gian cho một session, mặc định là 60 giây.
Dòng thứ 4 $session_name: đơn giản chỉ là đặt tên cho session.
Dòng thứ 5 dùng để kiểm tra thời gian của phiên làm việc trước đó (nếu trước đó có một session đã thực hiện và session đó phải lớn hơn hoặc bằng thời gian hiện tại trừ cho thời gian thiết lập cho mổi session).
+ Điều đó có nghĩa là nếu session đã thực hiện trước đó (session thứ 1) chỉ cách session thứ 2 dưới 60 giây (đây là thời gian do lập trình viên qui định: $timeout = 60) thì sẽ được xét vào dạng Flood data, và ngược lại thì sẽ cho qua và xác nhận hợp lệ.
Dòng cuối cùng là thiết lập thời gian "hiện tại" cho session "hiện tại".

¢ Có 2 cách để sử dụng đoạn code trên:

Cách 1:

Load trực tiếp file anti_flood.php, áp dụng cho site có ít FORM cần chống flood.

Code:
    require_once("anti_flood.php");
?>
Cách 2:

Copy trực tiếp đoạn code dưới đây rồi sửa lại tên session để dễ phân biệt cho site có nhiều FORM cần chống flood:
Code:
require_once("anti_flood.php");
?>
Nhận xét:

Phương pháp chống Flood bằng Session thực chất chỉ để làm chậm quá trình ngập chứ không giải quyết định vấn đề chống ngập. Chẳng hạn, nếu ta quy định ít nhất sau 60 giây mới cho chèn dữ liệu vào thì sau 60 giây, cơ sở dữ liệu có thể nhận thêm một mẫu tin nữa do chương trình làm ngập gửi đến. Số mẫu tin vẫn cứ tăng, vì thế phương pháp này không thể ngăn chặn được.

b. Sử Dụng Captcha Image.

Captcha Image hay còn gọi là Image Verification Code (IVC) là một hình thức bảo vệ Flood rất hiệu quả và thông dụng trên Internet hiện nay. Nó được sử dụng phổ biến trên các website và các diễn đàn nổi tiếng như VBB, IBF, IPB . . . . trong việc đăng ký thành viên mới, đăng một chủ để mới, bình luận một bài viết trên một trang web, . . . .

Tác giả: Phstiger (VBF)

Còn tiếp......

Không có nhận xét nào:

Đăng nhận xét