SQL injection là một trong những kỹ thuật tấn công mạng phổ biến hiện nay, tuy không mới nhưng không phải doanh nghiệp nào cũng biết.
SQL injection là gì?
SQL injection hay còn được viết tắt là SQLi, đây là một kiểu tấn công dựa trên các câu lệnh SQL độc hại, nhằm mục đích kiểm soát máy chủ cơ sở dữ liệu trong một ứng dụng web.
Để có thể thực hiện được các cuộc tấn công này, tin tặc thường lợi dụng vào các lỗ hổng trong quá trình kiểm tra dữ liệu đầu vào, cũng như các phương thức bảo mật để injection.
Dựa trên bản chất của các cơ sở dữ liệu, mỗi cuộc tấn công SQL injection có thể cung cấp cho tin tắc quyền truy cập vào hệ điều hành máy chủ, đồng thời cho phép “đột nhập” vào các tài nguyên mạng lưới khác.
Trong thực tế, SQL injection được xem như một cuộc tấn công dễ thực hiện, các thao tác đa phần sẽ được thực hiện trên một trình duyệt web. Theo các chuyên gia trong ngành, thì hiện nay có gần 50% các vụ tấn công về bảo mật có liên quan đến SQL injection.
Các loại tấn công SQL injection
Trên thị trường hiện nay, SQL injection đang “hoành hành” dưới dạng 03 biến thể chính:
- In-band SQLi - Classic: Ở biến thể này, tin tặc chỉ cần sử dụng cùng một kênh liên lạc để bắt đầu các cuộc tấn công và thu thập kết quả. Có thể nói, đây là biến thể hoạt động khá phổ biến, trong In-band SQLi tồn tại thêm hai dạng “con”:
- Error-based SQLi: Tin tặc sẽ khiến database hiển thị các thông báo lỗi, rồi thông qua đó tận dụng các dữ liệu được tạo ra bởi thông báo lỗi để thu thập thông tin về cấu trúc cơ sở dữ liệu.
- Union-based SQLi: Lợi dụng toán tử UNION SQL, kết hợp cùng các câu lệnh trong cơ sở dữ liệu để nhận được một HTTP Response, bởi Response có thể chứa thông tin mà tin tặc cần.
- Inferential SQLi - Blind: Ở loại này, tin tặc sẽ gửi các data payload đến Server, sau đó quan sát phản ứng từ Server để tìm hiểu về cấu trúc của nó. Inferential SQLi diễn ra phụ thuộc vào phản ứng của Server, nên có tốc độ khá chậm. Nó cũng được chia thành 2 dạng chính:
- Boolean: Kẻ xâm nhập sẽ gửi một truy vấn SQL vào database, đến khi ứng dụng trả về kết quả (thông tin trong HTTP Response có thể thay đổi hoặc không), chúng sẽ dựa vào đó để xem xét thông báo tạo ra kết quả có đúng hay không.
- Time-based: Cũng tương tự như cách trên, nhưng lần này sẽ khiến database đợi vài giây trước khi hoạt động. Trong khi đợi phản hồi, kẻ xâm nhập có thể xem xét truy vấn đó đúng hay sai. Thông qua hoạt động này, sẽ có một HTTP Response được tạo ra và kẻ xấu có thể biết được thông báo trả về đúng hay sai mà không cần đến dữ liệu từ database.
- Out-of-band SQLi: Cuộc tấn công này chỉ diễn ra khi có các tính năng nhất định được kích hoạt trên Server database mà ứng dụng web sử dụng. Khi tin tặc không thể sử dụng cùng một kênh để bắt đầu tấn công và thu thập thông tin, hoặc Server hoạt động quá chậm và không ổn định, thì mới khiến phương pháp này được triển khai. Bởi kỹ thuật này hoạt động dựa trên khả năng Server tạo ra DNS hay HTTP Request để truyền dữ liệu cho kẻ đánh cắp.
SQL injection gây ra những hậu quả gì?
Khi một ứng dụng hay chương trình gặp các sự cố liên quan đến SQL injection, sẽ gây ra những hậu quả nghiêm trọng như:
- Các tài khoản cá nhân của người dùng lưu trữ trong phần mềm đều sẽ bị hack.
- Mọi dữ liệu nhạy cảm và quan trọng trong hệ thống sẽ nhanh chóng bị thay đổi, hoặc xóa bỏ.
- User sẽ dễ dàng đăng nhập vào phần mềm với tư cách của người dùng khác, thậm chí với tư cách Admin trang.
- Người dùng có thể nhìn thấy những thông tin riêng tư của người khác, điển hình như chi tiết giao dịch, số tài sản hiện có…
- Người dùng có thể thực hiện việc chỉnh sửa cấu trúc trong database, hoặc xóa luôn các bảng tồn tại trong cơ sở dữ liệu.
- Người dùng có thể kiểm soát hoạt động của Server máy chủ, đồng thời thuận tiện thực thi các lệnh theo mong muốn.
- Khiến doanh nghiệp mất sự uy tín và chuyên nghiệp trong quá trình hoạt động.
Phương pháp hạn chế SQL injection
Nhằm bảo vệ các ứng dụng, phần mềm luôn hoạt động an toàn tránh được các cuộc tấn công từ SQL injection, bạn có thể áp dụng một số biện pháp như:
- Xác thực đầu vào thông qua quá trình thực hành viết mã, để xác định đầu vào người dùng bất hợp pháp.
- Xây dựng hệ thống tường lửa cho các ứng dụng, phần mềm để nhanh chóng phát hiện SQL injection, cũng như các mối đe dọa trực tuyến khác.
- Tránh trường hợp cộng chuỗi để tạo SQL, thay vào đó hãy sử dụng Parameter. Khi có dữ liệu bất hợp pháp truyền vào, SQL Engine sẽ tự động báo lỗi mà không cần dùng code để check.
- Thường xuyên thực hiện quá trình Backup toàn bộ dữ liệu, nhằm dễ dàng khôi phục khi bị tin tặc đánh cắp.
- Ẩn Exception, Message khi xảy ra lỗi, để tin tặc không dựa vào đó để tìm ra cấu trúc database.
- Thiết lập trạng thái phân quyền rõ ràng cho những người có nhiệm vụ kết nối với cơ sở dữ liệu.
- Thực hiện chuyển các giá trị Numeric sang Integer hay sử dụng ISNUMERIC trước khi truy vấn SQL, nhằm chắc chắn nó là một Integer.
- Tiến hành loại bỏ những Stored Procedure trong database Master không sử dụng, như xp_cmdshell, xp_sendmail, sp_makewebtask…