Một số điểm cơ bản về cơ chế tấn công SQL Injection và DDoS
Trong phần lớn người sử dụng chúng ta, chắc hẳn nhiều người đã nghe nói tới khái niệm
tấn công, chiếm quyền điều khiển website bằng phương pháp SQL Injection – SQLI và
(Distributed) Denial of Service – DDoS. Vậy thực sự quá trình này được tin tặc sử dụng
như thế nào, dựa vào đâu mà hacker có thể xác định được những lỗ hổng bảo mật trên
website để tấn công vào đó... Trong bài viết dưới đây, Quản Trị Mạng sẽ giới thiệu một vài
điểm cơ bản để mọi người hiểu thêm về bản chất của cách thức tấn công khá phổ biến này.
Denial of Service Attack:
Để dễ hình dung hơn về DDoS, các bạn hãy tham khảo hình minh họa bên dưới:
Bản chất:
Denial of service (hay còn gọi là distributed denial of service hoặc DDoS) là hình thức tấn
công thường xảy ra khi 1 hệ thống (ở đây chúng ta đang đề cập tới web server) nhận được quá
nhiều yêu cầu truy cập trong cùng 1 thời điểm, do vậy hệ thống sẽ lâm vào tình trạng quá tải, và
dẫn tới việc hoạt động không ổn định, phát sinh thêm nhiều vấn đề khác. Mục đích chung của
phương pháp tấn công DDoS này là khiến cho website của nạn nhân lưu trữ trên server vượt
quá lượng truy cập thông thường.
Cơ chế hoạt động:
Để hiểu rõ về quá trình này, chúng ta sẽ cùng tham khảo qua 1 ví dụ phổ biến.
Chẳng hạn, có hàng ngàn người (đảm nhận việc tấn công – vai trò chính của hacker) cùng
tham gia vào quá trình làm cản trở việc kinh doanh của công ty X nào đó bằng cách liên lạc, gọi
điện thoại tới trung tâm hỗ trợ, chăm số khách hàng của họ. Thời gian cụ thể được xác định vào
lúc 9 giờ sáng ngày thứ 3, và trong hầu hết các trường hợp xảy ra thì hệ thống điện thoại của
công ty X sẽ không thể chịu được hàng triệu cuộc gọi đến vào lúc 9h, khác hẳn so với ngày
thường. Bên cạnh đó, những khách hàng thực sự muốn gọi điện đến thì lại không thể thực hiện
được cuộc gọi... và tất nhiên, uy tín của công ty X đó sẽ bị ảnh hưởng rất nhiều.
Về bản chất thì quá trình tấn công DDoS cũng được tiến hành tương tự như vậy. Bởi vì gần như
không có cách nào có thể xác định được nguồn gốc của những yêu cầu truy cập tới là của tin
tặc hay khách hàng thực sự cho tới lúc server xử lý kịp, cho nên hiệu quả và tỉ lệ thành công
của phương pháp này rất cao.
Quá trình thực hiện:
Lưu ý rằng các phần giá trị trong câu lệnh query SQL phải kết thúc bằng dấu nháy đơn ( ' ) và
đó cũng là lý do tại sao chúng xuất hiện quanh phần giá trị được nhập.
Quy trình yêu cầu sự trùng khớp giữa tên tài khoản được nhập vào (myuser) và mật khẩu
(mypass) với bản ghi lưu trữ thông tin trong bảng Users, và sau đó trả về giá trị UserID. Nếu
không trùng khớp thì sẽ không có giá trị UserID nào được trả về, và thông tin người dùng nhập
vào là không chính xác.
Tiếp theo, chúng ta hãy cùng tham khảo mẫu câu lệnh truy vấn xác nhận tài khoản có thể thay
thế giá trị của người dùng nhập vào trên web.
SELECT UserID FROM Users WHERE UserName=’[user]‘ AND
Password=’[pass]‘
Ngay từ cái nhìn đầu tiên, có thể nhiều người sẽ nghĩ rằng quy trình xác nhận tài khoản như vậy
là hoàn toàn hợp lý và chuẩn xác. Tuy nhiên, chỉ cần một sự thay đổi nho nhỏ trong cấu trúc
này thì đó có thể là dấu hiệu của đợt tấn công, xâm nhập của SQLI.
Ví dụ, “myuser’–” là giá trị nhập vào trường Username và “wrongpass” là mật khẩu, thì mẫu
câu lệnh truy vấn thay thế sẽ có dạng như sau:
SELECT UserID FROM Users WHERE UserName='myuser'--' AND
Password='wrongpass'
Điểm mấu chốt và đặc điểm nhận dạng ở đây chính là 2 dấu gạch ngang liền nhau (- -), đây là
điểm bắt đầu của phần thông báo đối với câu lệnh SQL, bất cứ những gì ở sau 2 dấu gạch
ngang này sẽ bị bỏ qua. Và do vậy, câu lệnh trên sẽ được cơ sở dữ liệu xác nhận thành:
SELECT UserID FROM Users WHERE UserName='myuser'
Phần thiếu sót lớn nhất ở đây chính là khâu kiểm tra mật khẩu, chỉ với 2 dấu gạch ngang như
trên hacker đã hoàn toàn có thể vượt qua được quá trình kiểm tra, và “ngang nhiên” đăng nhập