Tóm Tắt
1. SQL Injection là gì?
SQL Injection ( SQLi ) là kỹ thuật tiến công, trong đó tin tặc tận dụng lỗ hổng của việc kiểm tra tài liệu nguồn vào trong các ứng dụng web và các thông tin lỗi của hệ quản trị cơ sở tài liệu trả về để tiêm vào ( inject ) và thực thi các câu lệnh SQL phạm pháp .
SQL injection được cho phép tin tặc thực thi các thao tác như một người quản trị web trên cơ sở tài liệu của ứng dụng, thậm chí còn 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
Bạn đang đọc: SQL Injection là gì và cách phòng chống
2. Các loại SQL Injection
Có ba loại SQL Injection, gồm có : In-band SQLi ( Classic ), Inferential SQLi ( Blind ) và Out-of-band SQLi. Dưới đây là thông tin cụ thể 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 để mở màn các cuộc tiến công và tích lũy tác dụng. Chính sự đơn thuần và hiệu suất cao của In-band SQLi khiến nó trở thành một trong những kỹ thuật tiến công SQLi phổ cập nhất lúc bấy giờ. 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, vận 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 tiến công SQL Injection hoàn toàn có thể gây ra những hậu quả vô cùng nghiêm trọng với các tổ chức triển khai, 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 hoàn toàn có thể vận dụng các giải pháp dưới đây để hạn chế tối đa rủi ro đáng tiếc bị tin tặc tiế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à tăng trưởng. Vì vậy, đừng khi nào để chúng rơi vào tay tin tặc. Hãy kiếm tra xem website của doanh nghiệp có rủi ro đáng tiếc bị tiến công SQL Injection không. Nếu có, hãy triển khai các giải pháp hướng dẫn bên trên để khắc phục và ngăn ngừa triệt để. Ngoài ra, nếu vẫn còn do dự về việc bảo mật thông tin cho website, hãy ĐK vào form bên dưới để SecurityBox tương hỗ .
Source: https://final-blade.com
Category : Kiến thức Internet