SQL injection là một kiểu tấn công tiêm. Các cuộc tấn công tiêm xảy ra khi những đầu vào được tạo thủ công độc hại được gửi bởi kẻ tấn công, khiến ứng dụng thực hiện một hành động ngoài ý muốn. Do tính phổ biến của cơ sở dữ liệu SQL, SQL injection là một trong những kiểu tấn công phổ biến nhất trên internet. Tấn công chèn mã SQL (SQL Injection) là một kỹ thuật cho phép kẻ tấn công chèn mã SQL vào dữ liệu gửi đến máy chủ và cuối cùng được thực hiện trên máy chủ cơ sở dữ liệu. Tùy vào mức độ tinh vi, tấn công chèn mã SQL có thể cho phép kẻ tấn công vượt qua các khâu xác thực người dùng, chèn, sửa đổi, hoặc xóa dữ liệu, đánh cắp các thông tin trong cơ sở dữ liệu và chiếm quyền điều khiển hệ thống máy chủ cơ sở dữ liệu. Tấn công chèn mã SQL là dạng tấn công thường gặp ở các ứng dụng web, các trang web có kết nối đến cơ sở dữ liệu.
Mục Lục Đề tài: Nghiên cứu SQL Injection Chương: Tìm hiểu nghiên cứu SQL Injection Khái quát 1.1 Khái niệm: SQL injection kiểu công tiêm Các công tiêm xảy đầu vào tạo thủ công độc hại gửi kẻ công, khiến ứng dụng thực hành động ngồi ý muốn Do tính phổ biến sở liệu SQL, SQL injection kiểu công phổ biến internet Tấn công chèn mã SQL (SQL Injection) kỹ thuật cho phép kẻ công chèn mã SQL vào liệu gửi đến máy chủ cuối thực máy chủ sở liệu Tùy vào mức độ tinh vi, cơng chèn mã SQL cho phép kẻ công vượt qua khâu xác thực người dùng, chèn, sửa đổi, xóa liệu, đánh cắp thông tin sở liệu chiếm quyền điều khiển hệ thống máy chủ sở liệu Tấn công chèn mã SQL dạng công thường gặp ứng dụng web, trang web có kết nối đến sở liệu 1.2 Nguyên nhân Có nguyên nhân lỗ hổng ứng dụng cho phép thực công chèn mã SQL: - Dữ liệu đầu vào từ người dùng từ nguồn khác không kiểm tra kiểm tra không kỹ lưỡng - Sử dụng câu lệnh SQL động ứng dụng, có thao tác nối liệu người dùng với mã lệnh SQL gốc 1.3 Các phần dễ bị công Các phần dễ bị công bao gồm: - Trường đăng nhập (Login fields) - Trường tìm kiếm (Search fields) - Trường nhận xét (Comment fields) - Bất kì trường lưu trường đầu vào liệu (Any other data entry and saving fields) - Liên kết website (Website's links) Vượt qua khâu xác thực người dùng Xem xét form đăng nhập (Log in) đoạn mã xử lý xác thực người dùng lưu bảng sở liệu tbl_accounts(username, password) cho Hình Tên đăng nhập: Mật khẩu: Nhập tên sản phẩm: ' Mã ASP xử lý tìm sản phẩm file search.asp: ' giả thiết kết nối với CSDL SQL server qua connection ' conn bảng tbl_products lưu thông tin sản phẩm Dim keyword, sqlString, rsSearch ' lấy liệu từ form keyword = Request.Form("keyword") ' tạo thực câu truy vấn SQL sqlString = "SELECT * FROM tbl_products WHERE product_name like '%" & keyword & "%'" set rsSearch = conn.execute(sqlString) if (NOT rsSearch.eof()) then ' hiển thị danh sách sản phẩm else ' thơng báo khơng tìm thấy sản phẩm end if %> Hình Form tìm kiếm sản phẩm đoạn mã xử lý tìm sản phẩm Nếu người dùng nhập chuỗi "Samsung Galaxy S8" vào trường keyword form, mã xử lý hoạt động đúng: Nếu tìm thấy sản phẩm có tên chứa từ khóa, hệ thống hiển thị danh sách sản phẩm tìm thấy; Nếu khơng tìm thấy sản phẩm có tên chứa từ khóa, hệ thống thơng báo khơng tìm thấy sản phẩm Tuy nhiên, người dùng nhập chuỗi "Samsung Galaxy S8';DELETE FROM tbl_products; " vào trường keyword form, mã xử lý hoạt động sai chuỗi chứa câu truy vấn SQL trở thành: SELECT * FROM tbl_products WHERE keyword like '%Samsung Galaxy S8';DELETE FROM tbl_products; %' Chuỗi lệnh SQL gồm lệnh SQL: câu lệnh SELECT tìm kiếm sản phẩm có tên chứa từ khóa "Samsung Galaxy S8" bảng tbl_products câu lệnh DELETE xóa tất sản phẩm bảng tbl_products Sở dĩ kẻ cơng làm điều hệ quản trị sở liệu MS-SQL server nói riêng hầu hết hệ quản trị sở liệu nói chung cho phép thực nhiều lệnh SQL theo lô dùng dấu ; để ngăn cách lệnh Ký hiệu dùng để hủy tác dụng phần lệnh cịn lại có Bằng thủ thuật tương tự, kẻ cơng thay lệnh DELETE lệnh UPDATE INSERT để chỉnh sửa, chèn thêm liệu Chẳng hạn, kẻ công chèn thêm lệnh UPDATE để cập nhật mật người quản trị cách nhập chuỗi sau làm từ khóa tìm kiếm (giả thiết bảng tbl_administrators chứa thông tin người quản trị): Galaxy S8';UPDATE tbl_administrators SET password=abc123 WHERE username = 'admin'; Hoặc kẻ cơng chèn thêm ghi vào bảng tbl_administrators cách nhập chuỗi sau làm từ khóa tìm kiếm: Galaxy S8';INSERT INTO tbl_administrators (username, password) VALUES ('attacker', 'abc12345'); Đánh cắp thông tin sở liệu Lỗ hổng chèn mã SQL giúp kẻ cơng đánh cắp liệu sở liệu thông qua số bước sau: - Tìm lỗ hổng chèn mã SQL thăm dị thơng tin hệ quản trị sở liệu: + Nhập số liệu mẫu để kiểm tra trang web có chứa lỗ hổng chèn mã SQL, dấu nháy đơn, dấu ,… + Tìm phiên máy chủ sở liệu: nhập câu lệnh lỗi kiểm tra thông báo lỗi, sử dụng @@version (với MS-SQL Server), version() (với MySQL) câu lệnh ghép với UNION SELECT - Tìm thơng tin số lượng kiểu liệu trường câu truy vấn trang web + Sử dụng mệnh đề ORDER BY + Sử dụng UNION SELECT 1, 2, 3, … - Trích xuất thơng tin bảng, trường sở liệu thông qua bảng hệ thống (metadata) - Sử dụng lệnh UNION SELECT để ghép thơng tin định trích xuất vào câu truy vấn ứng dụng Chiếm quyền điều khiển hệ thống máy chủ sở liệu Khả máy chủ sở liệu bị chiếm quyền điều khiển xảy trang web tồn đồng thời lỗ hổng: (1) lỗ hổng cho phép công chèn mã SQL (2) lỗ hổng thiết lập quyền truy nhập sở liệu – sử dụng người dùng có quyền quản trị để truy nhập thao tác liệu website Khai thác lỗ hổng này, kẻ cơng gọi thực lệnh hệ thống máy chủ sở liệu cho phép can thiệp sâu vào sở liệu, hệ quản trị sở liệu hệ điều hành máy chủ Chẳng hạn, hệ quản trị sở liệu MS-SQL Server cung cấp thủ tục sp_send_dbmail cho phép gửi email từ máy chủ sở liệu thủ tục xp_cmdshell cho phép chạy lệnh chương trình cài đặt hệ điều hành Microsoft Windows Sau số ví dụ chạy lệnh Microsoft Windows thơng qua thủ tục xp_cmdshell: EXEC xp_cmdshell 'dir *.exe' : liệt kê nội dung thư mục thời EXEC xp_cmdshell 'shutdown /s /t 00': tắt máy chủ chạy hệ quản trị CSDL EXEC xp_cmdshell 'net stop W3SVC' : dừng hoạt động máy chủ web EXEC xp_cmdshell 'net stop MSSQLSERVER': dừng hoạt động máy chủ CSDL Ngồi ra, kẻ cơng thực thao tác nguy hiểm đến sở liệu có quyền người quản trị sở liệu quản trị hệ thống, như: Xóa bảng (gồm cấu trúc): DROP TABLE Xóa sở liệu: DROP DATABASE Tạo tài khoản truy nhập CSDL: sp_addlogin Đổi mật tài khoản truy nhập CSDL: sp_password • Hậu SQL Injection Hậu lớn mà SQL Injection gây là: Làm lộ liệu database Tuỳ vào tầm quan trọng liệu mà hậu dao động mức nhẹ vơ nghiêm trọng • Lộ liệu khách hàng ảnh hưởng nghiêm trọng đến cơng ty Hình ảnh cơng ty bị ảnh hưởng, khách hàng chuyển qua sử dụng dịch vụ khác, dẫn đến phá sản v…v • Lỗ hỗng ảnh hưởng lớn đến khách hàng Do họ thường dùng chung mật cho nhiều tài khoản, cần lộ mật tài khoản tài khoản khác lộ theo • Đây lý phải mã hố mật khẩu, database có bị cơng người dùng khơng bị mật • Trong nhiều trường hợp, hacker khơng đọc liệu mà cịn chỉnh sửa liệu Lúc hacker đăng nhập vai trị admin, lợi dụng hệ thống, xố tồn liệu để hệ thống ngừng hoạt động Phòng chống Do tính chất nguy hiểm cơng chèn mã SQL, nhiều giải pháp đề xuất nhằm hạn chế tác hại ngăn chặn triệt để dạng cơng Nhìn chung, cần áp dụng kết hợp biện pháp phịng chống cơng chèn mã SQL để đảm bảo an toàn cho hệ thống Các biện pháp, kỹ thuật áp dụng gồm: - Các biện pháp phòng chống dựa kiểm tra lọc liệu đầu vào: + Kiểm tra tất liệu đầu vào, đặc biệt liệu nhập từ người dùng từ nguồn không tin cậy + Kiểm tra kích thước định dạng liệu đầu vào + Tạo lọc để lọc bỏ ký tự đặc biệt (như *, ‘, =, ) từ khóa ngơn ngữ SQL (SELECT, INSERT, UPDATE, DELETE, DROP, ) mà kẻ cơng sử dụng - Sử dụng thủ tục sở liệu (stored procedures) chế tham số hóa liệu: + Đưa tất câu truy vấn (SELECT) cập nhật, sửa, xóa liệu (INSERT, UPDATE, DELETE) vào thủ tục Dữ liệu truyền vào thủ tục thông qua tham số, giúp tách liệu khỏi mã lệnh SQL, nhờ ngăn chặn hiệu công chèn mã SQL; + Hạn chế thực câu lệnh SQL động thủ tục; + Sử dụng chế tham số hóa liệu hỗ trợ nhiều ngơn ngữ lập trình web ASP.NET, PHP JSP - Các biện pháp phòng chống dựa thiết lập quyền truy nhập người dùng sở liệu: + Khơng sử dụng người dùng có quyền quản trị hệ thống quản trị sở liệu làm người dùng truy nhập liệu Ví dụ: khơng dùng người dùng sa (Microsoft SQL) root (MySQL) làm người dùng truy nhập liệu Chỉ dùng người dùng cho mục đích quản trị + Chia nhóm người dùng, cấp quyền vừa đủ để truy nhập bảng biểu, thực câu truy vấn chạy thủ tục + Không cấp quyền thực câu truy vấn, cập nhật, sửa, xóa trực tiếp bảng liệu Thủ tục hóa tất câu lệnh cấp quyền thực thủ tục + Cấm vơ hiệu hóa (disable) việc thực thủ tục hệ thống (các thủ tục sở liệu có sẵn) cho phép can thiệp vào hệ quản trị sở liệu hệ điều hành - Sử dụng công cụ rà quét lỗ hổng chèn mã SQL, SQLMap, Acunetix Vulnerability Scanner để chủ động rà quét, tìm lỗ hổng chèn mã SQL có biện pháp khắc phục phù hợp ...Đề tài: Nghiên cứu SQL Injection Chương: Tìm hiểu nghiên cứu SQL Injection Khái quát 1.1 Khái niệm: SQL injection kiểu công tiêm Các công tiêm xảy đầu vào... động ý muốn Do tính phổ biến sở liệu SQL, SQL injection kiểu công phổ biến internet Tấn công chèn mã SQL (SQL Injection) kỹ thuật cho phép kẻ công chèn mã SQL vào liệu gửi đến máy chủ cuối thực... CSDL SQL server qua connection ' conn bảng tbl_products lưu thông tin sản phẩm Dim keyword, sqlString, rsSearch ' lấy liệu từ form keyword = Request.Form("keyword") ' tạo thực câu truy vấn SQL sqlString