Cơ chế tấn công SQL injection – SQLI là cách thức tận dụng hoặc khai thác triệt để những khuyết điểm, thiếu sót về mặt công nghệ được sử dụng để xây dựng website, và thông thường hacker sẽ kết hợp với những lỗ hổng trong quy trình bảo mật cơ sở dữ liệu. Nếu thành công trong việc xâm nhập này, hacker hoàn toàn có thể mạo danh tài khoản chính thức của người sử dụng, truy cập vào cơ sở dữ liệu và lấy cắp thông tin cá nhân.
Hình 3.9: Mô phỏng quá trình tấn công vào lỗ hổng SQL injection
Cách phòng chống SQL injection:
Điểm yếu của SQL injection bắt nguồn từ việc xử lí dữ liệu người dùng không tốt, do đó vấn đề xây dựng mã nguồn đảm bảo an ninh là cốt lõi của việc phòng chống SQL injection. Chính vì thế bộ phận lập trình của công ty phải xem lại mã nguồn của website công ty và điều chỉnh, xem lại việc chuẩn hóa dữ liệu đầu vào, xây dựng truy vấn theo mô hình tham số hóa, làm sạch dữ liệu đầu vào……
Ngoài ra thì phải xem những biện pháp bảo vệ từ mức nền tảng hệ thống như: • Các bộ lọc ngăn chặn
Hầu hết các ứng dụng tường lửa web đều được cài đặt mẫu lọc ngăn chặn trong cấu trúc của mình. Các bộ lọc này là một chuỗi các modul độc lập có thể được gắn kết với nhau để thực hiện thao tác xử lí trước và sau thao tác xử lí chính bên trong ứng dụng (Webpage, URL, Script). Chúng ta sẽ đề cập tới 2 cách triển khai bộ lọc ngăn chặn phổ biến nhất đó là dưới dạng plug – in cho các server và các modul cho các ứng dụng.
• Các biện pháp bảo vệ database
Giới hạn phạm vi ảnh hưởng của ứng dụng.
Các biện pháp này nhằm chuẩn bị, đề phòng cho tình huống xấu nhất khi kẻ xâm nhập có thể tấn công được vào database:
− Cấp quyền ưu tiên tối thiểu cho các tài khoản đăng nhập vào database.
− Hủy bỏ các quyền Public: các database thường cung cấp một số chế độ mặc định cho tất cả các đăng nhập, các chế độ này có một tập mặc định các quyền, bao gồm cả quyền truy cập tới một số đối tượng thuộc hệ thống. Các quyền công khai này đôi khi cung cấp những quyền truy cập tới những stored procedure có sẵn, một số các gói hoặc hàm có thể sử dụng cho mục đích quản trị. Vì vậy cần hủy quyền này tới mức tối đa có thể
− Sử dụng những thuật toán mã hóa mạnh để mã hóa và lưu trữ những dữ liệu nhạy cảm.
Giới hạn phạm vi ảnh hưởng của database.
Các biện pháp này được chuẩn bị để phòng trường hợp các đối tượng xâm nhập chiếm được quyền điều khiển database
− Khóa các quyền truy cập với các đối tượng có đặc quyền, ví dụ những tiện ích quản trị, tiện ích thực thi gián tiếp các lệnh phía điều hành hoặc các tiện ích sinh các kết nối tới các đối tượng databas khác.
− Hạn chế các truy vấn đặc biệt: câu lệnh Openrowset trong SQL server là một ví dụ. Việc sử dụng câu lệnh này có thể giúp kể tấn công cướp quyền truy vấn và thực hiện các kết nối tới database khác dưới chế độ xác thực lỏng lẻo hơn.
− Luôn cập nhật bản update của ứng dụng quản trị database. Đây là một nguyên tắc căn bản mà chúng ta cần tuân thủ