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. Để đảm bảo an toàn thông tin, doanh nghiệp cần phải biết được các biện pháp phòng chống hiệu quả. Bài viết hôm nay cùng tìm hiểu SQL Injection là gì, có những loại tấn công nào, cũng như các biện pháp phòng tránh. Đồng hành với 3T Software ngay nào!
SQL Injection là gì?
SQL Injection (SQLi) là kỹ thuật tấn công mà 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ề. Tại đây, tin tặc sẽ 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à trên server mà ứng dụng đó đang chạy.
Bạn có thể tham khảo: 6 Cách Ngăn Chặn Các Cuộc Tấn Công Ransomware Hiệu Quả
Các loại SQL Injection
Hiện nay, có ba loại tấn công SQL Injection, bao gồm: In-band SQLi (Classic), Inferential SQLi (Blind) và Out-of-band SQLi. Cụ thể từng loại cùng tìm hiểu trong nội dung ngay bên dưới nào!
In-band SQLi (Classic)
Đây là kỹ thuật 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ả. In-band SQLi thực hiện đơn giản và nhưng lại mang đến hiệu quả 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. Với kỹ thuật này sẽ có hai biến thể:
- Error-based SQLi. Tin tặc tạo ra thông báo lỗi trên hệ quản trị cơ sở dữ liệu của bạn. Từ đó, chúng sẽ sử dụng dữ liệu cung cấp bởi các thông báo lỗi này và thu thập thông tin về cấu trúc của cơ sở dữ liệu.
- Union-based SQLi. Lợi dụng toán tử UNION SQL và kết hợp với nhiều câu lệnh được tạo ra bởi cơ sở dữ liệu từ đó nhận được một HTTP response. Response này là nơi chứa dữ liệu mà tin tặc có thể sử dụng.
Inferential SQLi (Blind)
Inferential SQLi là kỹ thuật mà tin tặc gửi các data payload đến server, sau đó quan sát các kết quả trả về của server với mục đích tìm hiểu về cấu trúc của nó. 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. Nghĩa là trả kết quả đúng hoặc sai. Tin tặc thực hiện gửi một truy vấn SQL đến cơ sở dữ liệu và ứng dụng sẽ trả về một kết quả. Trong kết quả đó, thông tin trong HTTP response sẽ sửa đổi hoặc không, tin tặc sẽ 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, với mục đích làm cho cơ sở dữ liệu đợi (một vài giây) trước khi hoạt động. Dựa vào thời gian mà cơ sở dữ liệu cần để phản hồi, tin tặc sẽ xem truy vấn đó là đúng hay sai. Dựa trên kết quả đó, một HTTP response 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ừ CSDL.
Out-of-band SQLi
Với kỹ thuật Out-of-band SQLi chỉ thực hiện được 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. Tin tặc sẽ sử dụng Out-of-band khi không thể sử dụng cùng một kênh hoặc do server quá chậm và không ổn định để bắt đầu tấn công và thu thập thông tin. 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.
Hậu quả khi bị tấn công SQL Injection
Hệ thống thông tin của bạn sẽ như thế nào khi bị tấn công SQL Injection? Dưới đây là một số hậu quả:
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. Tùy thuộc vào dữ liệu bị đánh cắp có mức độ quan trọng cao hay thấp thì tương ứng với thiệt hại mà doanh nghiệp phải chịu.
Ả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.
Bạn có thể tham khảo: Cách tạo mật khẩu mạnh và an toàn
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 các dữ liệu bị phát tán ra bên ngoài. Mất niềm tin giữa khách hàng và doanh nghiệp sẽ xảy ra, họ chuyển sang sử dụng sản phẩm/dịch vụ của doanh nghiệp đối thủ. Hậu quả nghiêm trọng hơn nữa đó chính là doanh thu bị sụt giảm.
Cách phòng chống SQL Injection
Không tin tưởng các thông tin đăng nhập của người dùng. 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ài đặt xác thực 2 bước đảm bảo rằng dữ liệu đưa vào luôn đúng và an toàn.
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 thích hợp, SQL Engine sẽ tự động đưa ra báo lỗi.
Sao lưu dữ liệu thường xuyên. Dữ liệu cần được sao lưu thường xuyên để phòng trường hợp xấu nhất là bị tin tặc xóa 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 cơ sở dữ liệu. 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. Mỗi tài khoản của người dùng nên phân ra các quyền truy cập phù hợp với công việc. Rủi ro tìm ẩn rất cao khi cho phép tất cả các tài khoản truy cập vào cơ sở dữ liệu. Phân quyền sẽ giúp hạn chế các lệnh SQL được thực thi tự động trên server.
Hệ thống thông tin hay dữ liệu của doanh nghiệp là yếu tố quan trọng để duy trì và phát triển. SQL Injection là một trong số nhiều cuộc tấn công của tin tặc, doanh nghiệp cần phải biết được các biện pháp phòng tránh cho riêng mình. Hy vọng bài viết mang lại nhiều lợi ích dành cho bạn, hẹn gặp lại trong bài chia sẻ tiếp theo.