chia sẻ:

SQL Injection/ DDoS là gì ?

22/03/2012 09:31 | Thông tin công nghệ

Gần đây, hàng loạt các sự kiện hack được thông báo như nhóm Anonymous và LulzSec, bạn cũng đã có thể có nghe về việc các website bị hack như vụ của Sony nhưng đã bao giờ bạn hỏi chúng là gì?
Có rất nhiều công cụ và kỹ thuật được các nhóm này sử dụng, và sẽ rất hữu ích nếu bạn hiểu được một vài kỹ thuật trong đó để có thể phòng tránh. Hai kỹ thuật chính là Distributed Denial of Service (DDoS) và SQL Injection.


Distributed Denial of Service Attack

DDOS là gì?
DDOS là kỹ thuật tấn công xảy ra khi một hệ thống, trong trường hợp này là một server web, nhận nhiều yêu cầu tại một thời điểm đến nổi tài nguyên của server bị quá tải dẫn đến việc rối loạn và tự động tắt. Mục tiêu và kết quả của một vụ tấn công DDOS thành công là website mục tiêu không thể phản hồi yêu cầu được nữa

Cách hoạt động
Bạn có thể xem ví dụ sau để hiểu cơ chế



Tưởng tượng rằng có khoảng 1 triệu người (hackers) kết hợp với nhau để phá hoại công ty A bằng cách phá trung tâm hỗ trợ của công ty này. Các kẻ tấn công hẹn nhau rằng sáng thứ 3 lúc 9h họ sẽ gọi đến số của công ty A. Dĩ nhiên, trong cùng thời điểm đó công ty A sẽ không thể nhận cả triệu cuộc gọi và sẽ trở nên tê liệt. Kết quả là những cuộc gọi của khách hàng sẽ không thể nào liên lạc được vì hệ thống đã bị các cuộc gọi phá rối làm tê liệt. Vì vậy công ty A có khả năng sẽ gặp vấn đề trong kinh doanh đến khi việc này dừng lại.

Một vụ tấn công DDoS cũng diễn ra tương tự. Vì không có cách nào biết được lưu lượng tài nguyên từ các yêu cầu thật sự và do các hacker giả mạo nên cách tấn công này cực kỳ hiệu quả.

Tấn công SQL Injection

SQL Injection là gì?
Một vụ tấn công "SQL Injection" (SQLI) dựa trên sự tiên tiến của một trang web nghèo nàn về kỹ thuật, và có lỗi trong bảo mật dữ liệu. Kết quả của một vụ tấn công có thể lấy toàn bộ dữ liệu từ database hay server. Không như tấn công bằng DDoS, một vụ SQLI hoàn toàn dễ dàng ngăn chặn nếu web được lập trình đúng cách.



Cách hoạt động
Bất kỳ khi nào bạn login vào một trang web và nhập pass cũng như user, để thử bạn hãy nhập chuỗi sau vào:

1
SELECT UserID FROM Users WHERE UserName='myuser' AND Password='mypass';



với myuser và mypass là tài khoản của bạn.

Nếu đúng username và password, hệ thống sẽ trả về UserID. 

Làm sao để ngăn chặn?
Một cuộc tấn công SQL injection được gây ra vì cách mã hóa ứng dụng cẩu thả và vô trách nhiệm và hoàn toàn phòng ngừa được (sẽ được giới thiệu trong một bài viết khác), tuy nhiên mức độ thiệt hại có thể được thực hiện phụ thuộc vào việc thiết lập cơ sở dữ liệu. Để cho một ứng dụng web để giao tiếp với cơ sở dữ liệu phụ trợ, các ứng dụng phải cung cấp một đăng nhập cơ sở dữ liệu (lưu ý, đây là khác nhau hơn là một người dùng đăng nhập trang web riêng của mình). Tùy thuộc vào những gì cho phép các ứng dụng web đòi hỏi, tài khoản này cơ sở dữ liệu tương ứng có thể yêu cầu bất cứ điều gì từ đọc / ghi được phép trong các bảng hiện có để truy cập cơ sở dữ liệu đầy đủ. Nếu điều này là không rõ ràng bây giờ, một vài ví dụ sẽ giúp cung cấp một số rõ ràng.

Căn cứ vào ví dụ trên, bạn có thể thấy rằng bằng cách nhập vào, ví dụ, "youruser' -", "admin' -" hoặc người sử dụng bất kỳ tên nào khác, ngay lập tức có thể đăng nhập vào các trang web cho dù người dùng đó mà không biết mật khẩu. Một khi đã vào được, hệ thống không biết đây không thực sự mà người sử dụng vì vậy có thể truy cập vào tài khoản tương ứng. Quyền truy cập cơ sở dữ liệu sẽ không cung cấp một mạng lưới an toàn cho điều này bởi vì, thông thường, một trang web phải có ít nhất là đọc / ghi truy cập vào cơ sở dữ liệu tương ứng của nó.

Bây giờ hãy giả sử các trang web có toàn quyền kiểm soát của cơ sở dữ liệu tương ứng của nó cung cấp cho các khả năng để xóa các bản ghi, thêm / gỡ bỏ bảng, thêm các tài khoản bảo mật mới, ... Điều quan trọng là cần lưu ý rằng một số ứng dụng web có thể cần loại phép này, do đó nó không tự động là một điều xấu được kiểm soát đầy đủ được cấp.

Cách phòng tránh
Như đã đề cập nhiều lần trước đây, một cuộc tấn công SQL injection là dễ dàng ngăn ngừa được. Một trong những quy tắc của phát triển web là bạn không bao giờ tin tưởng người dùng nhập vào một cách mù quáng.

Một cuộc tấn công SQLI là dễ dàng cản trở bởi những gì được gọi là ngăn chặn (hoặc thoát ra) phần input. Quá trình thực sự bình thường như tất cả về cơ bản không xử lý bất kỳ trích dẫn nội dung bài viết (') nhân vật một cách thích hợp mà họ không thể được sử dụng để sớm chấm dứt một chuỗi bên trong một câu lệnh SQL.

Ví dụ, nếu bạn muốn để tra cứu "O'Neil" trong một cơ sở dữ liệu, bạn không thể sử dụng thay thế đơn giản bởi vì trích dẫn nội dung bài viết duy nhất sau khi O sẽ gây ra các chuỗi để sớm kết thúc. Thay vào đó bạn làm vệ sinh bằng cách sử dụng nhân vật thoát khỏi cơ sở dữ liệu tương ứng. Giả sử các ký tự thoát cho một nội tuyến duy nhất trích dẫn nội dung bài viết này là prefacing mỗi trích dẫn nội dung bài viết này với một biểu tượng \. Vì vậy, "O'Neal" sẽ được làm vệ sinh như "O \ 'neil".