SQL Injection là gì và cách phòng chống

SQL Injection là một trong những kỹ thuật tấn công mạng phổ biến nhất hiện nay. Tuy không mới nhưng không phải doanh nghiệp nào cũng hiểu rõ về kỹ thuật này. Vậy, SQL Injection là gì, phân loại ra sao và cách phòng chống như thế nào? Bài viết sau đây sẽ đưa ra lời giải đáp. 

1. SQL Injection là gì?

SQL Injection (SQLi) là kỹ thuật tấn công, trong đó tin tặc lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vào trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu trả về để tiêm vào (inject) và thực thi các câu lệnh SQL bất hợp pháp. 

SQL injection cho phép tin tặc thực hiện các thao tác như một người quản trị web trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy.

Xem thêm: TOP 6 hình thức tấn công mạng phổ biến nhất hiện nay

2. Các loại SQL Injection 

Có ba loại SQL Injection, bao gồm: In-band SQLi (Classic), Inferential SQLi (Blind) và Out-of-band SQLi. Dưới đây là thông tin chi tiết về từng loại. 

2.1. In-band SQLi (Classic)

Tin tặc 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ả. Chính sự đơn giản và hiệu quả của In-band SQLi khiến nó trở thành một trong những kỹ thuật tấn công SQLi phổ biến nhất hiện nay. Kỹ thuật này có hai biến thể:

  • Error-based SQLi. Tin tặc sẽ làm cơ sở dữ liệu tạo ra thông báo lỗi. Qua đó, chúng có thể sử dụng dữ liệu được cung cấp bởi các thông báo lỗi này để thu thập thông tin về cấu trúc của cơ sở dữ liệu.
  • Union-based SQLi. Kỹ thuật này lợi dụng toán tử UNION SQL, sau đó kết hợp với nhiều câu lệnh được tạo ra bởi cơ sở dữ liệu để nhận được một HTTP response. Response này có thể chứa dữ liệu mà tin tặc có thể sử dụng.

2.2. Inferential SQLi (Blind)

Inferential SQLi là kỹ thuật trong đó tin tặc gửi các data payload đến server, sau đó quan sát phản ứng của server để tìm hiểu về cấu trúc của nó. Khi thực hiện Inferential SQLi, dữ liệu sẽ không được chuyển từ cơ sở dữ liệu trang web đến tin tặc. Do đó, tin tặc không thể nhìn thấy thông tin về cuộc tấn trong in-band.

Inferential SQL dựa trên phản ứng của server. Vì vậy, tốc độ thực thi của chúng thường chậm hơn. Inferential SQL được phân loại thành:

  • Boolean. Tin tặc gửi một truy vấn SQL đến cơ sở dữ liệu, chờ ứng dụng trả về một kết quả. Dựa trên kết quả đó, thông tin trong HTTP response sẽ sửa đổi hoặc không. Sau đó, tin tặc có thể xem xét thông báo tạo ra kết quả có đúng hay không.
  • Time-based. Tin tặc sẽ gửi một truy vấn SQL đến cơ sở dữ liệu, làm cho cơ sở dữ liệu đợi (một vài giây) trước khi hoạt động. Sau đó, từ thời gian cơ sở dữ liệu cần để phản hồi, tin tặc có thể xem truy vấn đó là đúng hay sai. Dựa trên kết quả, một HTTP repsonse sẽ được tạo ra. Tin tặc có thể biết được thông báo trả về đúng hay sai mà không cần dựa vào dữ liệu từ cơ sở dữ liệu.

2.3. Out-of-band SQLi

Tin tặc chỉ có thể tấn công Out-of-band SQLi khi có một số tính năng nhất định được kích hoạt trên server cơ sở dữ liệu được ứng dụng web sử dụng. Kỹ thuật này được thực hiện 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. Một lý do khác là do server quá chậm và không ổn định. Kỹ thuật Out-of-band SQLi dựa vào khả năng server tạo ra DNS hay HTTP request để chuyển dữ liệu cho tin tặc.

3. Hậu quả khi bị tấn công SQL Injection 

Các cuộc tấn công SQL Injection có thể gây ra những hậu quả vô cùng nghiêm trọng với các tổ chức, doanh nghiệp là nạn nhân của chúng.

  • Làm rò rỉ dữ liệu. Khi tấn công SQLi thành công, tin tặc có thể truy cập vào cơ sở dữ liệu, sau đó chỉnh sửa, xóa hoặc đánh cắp chúng. Thiệt hại mà doanh nghiệp phải chịu sẽ phụ thuộc vào mức độ quan trọng của dữ liệu bị rò rỉ.  
  • Làm ảnh hưởng đến khách hàng. Nhiều khách hàng hiện nay vẫn có thói quen dùng một mật khẩu cho nhiều tài khoản. Như vậy, chỉ cần mật khẩu của một tài khoản bị lộ thì các tài khoản khác cũng gặp rủi ro mất an toàn. 
  • Làm giảm uy tín của doanh nghiệp. Uy tín và hình ảnh của doanh nghiệp sẽ bị ảnh hưởng nghiêm trọng sau khi thông tin về sự cố bị phát ra ngoài. Khách hàng sẽ mất niềm tin vào doanh nghiệp và chuyển sang sử dụng sản phẩm/ dịch vụ của doanh nghiệp đối thủ. Giảm doanh thu là hậu quả tất yếu mà ai cũng có thể nhìn thấy. 

4. Cách phòng chống SQL Injection 

Tổ chức, doanh nghiệp có thể áp dụng các biện pháp dưới đây để hạn chế tối đa rủi ro bị tin tặc tấn công SQL Injection.

  • Không tin tưởng các input do người dùng nhập vào. Dữ liệu luôn phải được xác thực trước khi sử dụng trong các câu lệnh SQL. Doanh nghiệp có thể sử dụng filter để lọc các kí tự đặc biệt hoặc các từ khoá (SELECT, UNION) do người dùng nhập. 
  • Không cộng chuỗi để tạo SQL. Hãy sử dụng parameter thay vì cộng chuỗi. Nếu dữ liệu truyền vào không hợp pháp, SQL Engine sẽ tự động báo lỗi. Doanh nghiệp không cần dùng code để check.
  • Sao lưu dữ liệu thường xuyên. Dữ liệu cần được sao lưu thường xuyên để trong trường hợp xấu nhất là bị tin tặc xoá thì doanh nghiệp vẫn có thể khôi phục. 
  • Không hiển thị exception, message lỗi. Tin tặc có thể dựa vào message lỗi để tìm ra cấu trúc database. Vì vậy, khi có lỗi, trang web chỉ nên hiển thị thông báo lỗi (không hiển thị thông tin nhạy cảm về lỗi) để tránh bị tin tặc lợi dụng. 
  • Phân quyền truy cập rõ ràng. Việc cho phép mọi tài khoản đều được truy cập vào cơ sở dữ liệu tiềm ẩn nhiều rủi ro. Hãy chỉ định một số tài khoản nhất định có quyền kết nối với cơ sở dữ liệu. Việc này sẽ giúp hạn chế các lệnh SQL được thực thi tự động trên server.

5. Kết luận

Dữ liệu là huyết mạch để doanh nghiệp duy trì và phát triển. Vì vậy, đừng bao giờ để chúng rơi vào tay tin tặc. Hãy kiếm tra xem trang web của doanh nghiệp có rủi ro bị tấn công SQL Injection không. Nếu có, hãy thực hiện các biện pháp hướng dẫn bên trên để khắc phục và ngăn chặn triệt để. Ngoài ra, nếu vẫn còn băn khoăn về việc bảo mật cho trang web, hãy đăng ký vào form bên dưới để SecurityBox hỗ trợ.