Tổng quan về SQL injection

6 346 3
Tổng quan về SQL injection

Đang tải... (xem toàn văn)

Thông tin tài liệu

Tổng quan về SQL Injection :+ Khái niệm về SQL Injection+ Phân loại về SQL Injection+ Cách khắc phục về SQL InjectionTấ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

SQL INJECTION Khái niệm 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 : (1) vượt qua khâu xác thực người dùng (2) chèn, xóa sửa đổi liệu (3) đánh cắp thông tin sở liệu (4) 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 - Có ngun 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 Các kiểu công SQL Injection a) 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 trên: Tên đăng nhập: Mật khẩu: 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 %> Nếu người dùng nhập chuỗi "Samsung Galaxy S4" 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 S4';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 S4';DELETE FROM tbl_products; %' Toàn liệu bảng tbl_products bị xóa c) Đánh cắp thông tin từ 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 d) Chiếm quyền điều khiển hệ thống database 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 Chẳng hạn, hệ quản trị sở liệu MSSQL 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 MS 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 Cách 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 cụ thể á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 + Hashing mật khẩu, điều giảm thiểu nguy người dùng độc hại đánh cắp thông tin đăng nhập mạo danh người dùng khác - 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ờ hạn 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 cậ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 cậ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 cập bảng biểu, thực câu truy vấn chạy thủ tục + Tốt nhất, 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 - Xác thực bên thứ ba Xem xét việc tìm nguồn cung ứng quy trình xác thực hồn tồn cho ứng dụng bạn Facebook, Twitter Google cung cấp API OAuth trưởng thành, sử dụng phép người dùng đăng nhập vào trang web bạn tài khoản có họ hệ thống Điều giúp tiết kiệm nhà phát triển ứng dụng từ việc xác thực riêng bạn đảm bảo người dùng bạn mật họ lưu trữ vị trí ... 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... Request.Form("password") ' tạo thực câu truy vấn sql sqlString = "SELECT * FROM tbl_accounts WHERE username='" & username & "' AND password = '" & password & "'" set rsLogin = conn.execute(sqlString) if (NOT rsLogin.eof())... 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

Ngày đăng: 20/11/2018, 21:05

Tài liệu cùng người dùng

Tài liệu liên quan