Tấn công CSDL bằng phương pháp SQL injection.

21 4 0
Tấn công CSDL bằng phương pháp SQL injection.

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

SQL Injection đã tồn tại quanh ta trong nhiều thập kỷ và có thể sẽ tiếp tục đứng đầu bảng xếp hạng các lỗ hổng nguy hiểm trong những năm tới. Chỉ mất một vài bước dễ dàng –nhưng sẽ là một sự toan tính rất tốt – để bảo vệ chính bạn và người dùng của bạn khỏi sự tấn công này

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT BÁO CÁO AN NINH CƠ SỞ DỮ LIỆU ĐỀ TÀI TẤN CÔNG CSDL BẰNG PHƯƠNG PHÁP SQL INJECTION Hà Nội, 9/2020 MỤC LỤC Chương I LÝ THUYẾT .1 Giới Thiệu SQL injection gì? Bản chất công Các dạng công SQL Injection Cách phát lỗ hổng SQL injection Hậu SQL Injection .6 Cách phòng chống kiểu công .7 CHƯƠNG II THỰC HÀNH Ex1: Tautologies .9 Ex2: Truy vấn Union .14 Kết luận 18 TÀI LIỆU THAM KHẢO 19 [B1]-Tấn công CSDL phương pháp SQL injection Chương I LÝ THUYẾT Giới Thiệu Ngày nay, ứng dụng web phổ biến khắp giới Gần công ty tổ chức lớn có web Tối đa cơng ty tổ chức sử dụng ứng dụng web để cung cấp dịch vụ khác cho người dùng Một số ứng dụng web sử dụng nội dung hướng sở liệu Cơ sở liệu back-end thường chứa thơng tin bí mật nhạy cảm số bảo mật, số thẻ tín dụng, liệu tài chính, liệu y tế Thông thường, người dùng web cung cấp thông tin, chẳng hạn tên người dùng mật ứng dụng web nhận yêu cầu người dùng tương tác với sở liệu phía sau trả lại liệu có liên quan cho người dùng SQL injection gì? SQL injection kỹ thuật (giống chế công web khác) để công ứng dụng hướng liệu Cuộc cơng vượt qua tường lửa ảnh hưởng đến hệ thống vá đầy đủ Kẻ công lợi dụng ký tự lọc không thoát cách nhúng câu lệnh SQL để phân tích cú pháp liệu biến từ đầu vào người dùng Kẻ công đưa liệu tùy ý, thường truy vấn sở liệu, vào chuỗi mà cuối sở liệu thực thi thơng qua ứng dụng web (ví dụ: biểu mẫu đăng nhập) Page | [B1]-Tấn công CSDL phương pháp SQL injection Thông qua SQL Injection, kẻ cơng có quyền truy cập trái phép vào sở liệu tạo, đọc, cập nhật, thay đổi xóa liệu lưu trữ sở liệu phía sau Hiện tại, hầu hết tất sở liệu SQL Oracle, MySQL, PostgreSQL, MSSQL Server, MS Access có khả bị cơng SQL injection Ở dạng phổ biến nhất, công SQL injection cho phép truy cập vào thông tin nhạy cảm số an sinh xã hội, số thẻ tín dụng liệu tài khác Bản chất cơng Như đề cập phía trên, chất cơng hack database với mục đích độc hại Để thực Security Testing, ban đầu, bạn cần tìm lỗ hổng hệ thống sau thơng qua chúng gửi mã SQL độc hại đến database Nếu thực Page | [B1]-Tấn cơng CSDL phương pháp SQL injection được, mã SQL độc hại gửi hành động gây hại thực database Mỗi trường website tương tự cánh cổng dẫn vào database Bất kỳ liệu đầu vào mà thường nhập vào trường hệ thống trang web đến database Do đó, thay nhập liệu đúng, chũng ta nhập mã code độc hại nào, thực câu lệnh truy vấn database mang lại hậu nghiêm trọng Các dạng cơng SQL Injection Có bốn dạng công thường gặp bao gồm: vượt qua kiểm tra lúc đăng nhập, sử dụng câu lệnh SELECT, sử dụng câu lệnh INSERT, sử dụng stored-procedures 4.1 Dạng công vượt qua kiểm tra lúc đăng nhập Với dạng cơng này, kẻ cơng dễ dàng vượt qua trang đăng nhập nhờ vào lỗi dùng câu lệnh SQL thao tác sở liệu ứng dụng web Thông thường phép người dùng truy cập vào trang web bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin tên đăng nhập mật Sau người dùng nhập thông tin vào, hệ thống kiểm tra tên đăng nhập mật có hợp lệ hay khơng để định cho phép hay từ chối thực tiếp 4.2 Dạng công sử dụng câu lệnh SELECT Dạng công phức tạp Để thực kiểu cơng này, kẻ cơng phải có khả hiểu lợi dụng sơ hở thơng báo lỗi từ hệ thống để dị tìm điểm yếu khởi đầu cho việc công Chúng ta có tể gặp website tin tức có tham số truyền vào như: index.php?id=21 , index.asp?id=6, cần thêm kí tự Page | [B1]-Tấn công CSDL phương pháp SQL injection dấu nháy đơn ('), dấu nháy kép ("), phần trăm 27 (%27), 00 phần trăm (00%) vào sau id để kiểm tra lỗi khơng (khác hồn tồn với lúc ban đầu 90% có khả khai thác lỗi này) Ví dụ http://www.ampak.com.tw/product.php?id=22 website bị lỗi SQL Injection thử với http://www.ampak.com.tw/product.php? id=22'hoặc http://www.ampak.com.tw/product.php?id=22' trả trang lỗi Trong tình thơng thường, URL hiển thị nội dung tin có ID trùng với ID định không thấy có lỗi Tuy nhiên, giống ví dụ đăng nhập trước, đoạn mã để lộ sơ hở cho lỗi SQL injection khác Kẻ cơng thay ID hợp lệ cách gán ID cho giá trị khác, từ bắt đầu cho cơng bất hợp pháp, ví dụ như: OR 1=1 (nghĩa http://www.ampak.com.tw/product.php?id=0 or 1=1) Câu truy vấn SQL lúc không trả trang lỗi khơng có sản phẩm có ID = 0, thực câu lệnh: SELECT * FROM Products WHERE Product_ID=0 or 1=1 Tương tự trên, kẻ cơng lợi dụng sơ hở câu truy vấn SQL để nhập thêm lệnh tiếp theo: '; DROP TABLE users – Lúc này, chương trình chạy câu truy vấn thực việc xóa bảng users 4.3 Dạng cơng sử dụng câu lệnh INSERT Thông thường ứng dụng web cho phép người dùng đăng kí tài khoản để tham gia Chức thiếu sau đăng kí thành cơng, người dùng xem hiệu chỉnh thơng tin SQL injection dùng hệ thống khơng kiểm tra tính hợp lệ thơng tin nhập vào Ví dụ, câu lệnh INSERT có cú pháp dạng: Page | [B1]-Tấn công CSDL phương pháp SQL injection INSERT INTO TableName VALUES('1st Value', '2nd Value', '3rd Value') Thì chắn bị lỗi Sql Injection, ta nhập vào trường thứ ví dụ như: ' + (SELECT TOP FieldName FROM TableName) + ' Lúc câu truy vấn là: INSERT INTO TableName VALUES(' ' + (SELECT TOP FieldName FROM TableName) + ' ', 'abc', 'def') Khi đó, lúc thực lệnh xem thơng tin, xem yêu cầu thực thêm lệnh là: SELECT TOP FieldName FROM TableName 4.4 Dạng công sử dụng stored-procedures Stored Procedure sử dụng lập trình web với mục đích nhằm giảm phức tạp ứng dụng tránh công kỹ thuật SQL Injection Tuy nhiên kẻ cơng lợi dụng stored procedure để công vào hệ thống Việc công gây tác hại lớn ứng dụng thực thi với quyền quản trị hệ thống ‘sa’ Ví dụ 1: stored procedure splogin gồm hai tham số username password, kẻ công nhập: Username: thanhcong Password: ' ; shutdown- - Lệnh gọi stored procedure sau: EXEC splogin 'thanhcong','';shutdown- -' Lệnh shutdown thực dừng sql server Lúc hệ thống thực lệnh liệt kê thư mục ổ đĩa C:\ cài đặt server Việc phá hoại kiểu tuỳ thuộc vào câu lệnh đằng sau cmd.exe Cách phát lỗ hổng SQL injection Page | [B1]-Tấn công CSDL phương pháp SQL injection Phần lớn lỗ hổng SQL injection tìm thấy nhanh chóng đáng tin cậy cách sử dụng trình qt lỗ hổng web có sẵn internet SQL injection phát thủ cơng cách sử dụng kiểm tra có hệ thống điểm vào ứng dụng Điều thường bao gồm:  Gửi ký tự trích dẫn ‘ tìm kiếm lỗi bất thường khác  Đệ trình số cú pháp dành riêng cho SQL để đánh giá giá trị sở (bản gốc) điểm nhập đến giá trị khác tìm kiếm khác biệt có hệ thống phản hồi ứng dụng  Đệ trình điều kiện Boolean OR = OR = tìm kiếm khác biệt phản hồi ứng dụng  Gửi tải trọng thiết kế để kích hoạt độ trễ thời gian thực truy vấn SQL tìm kiếm khác biệt thời gian thực để phản hồi  Gửi tải trọng OAST thiết kế để kích hoạt tương tác mạng băng thực truy vấn SQL giám sát tương tác kết Hậu SQL Injection Ngày nay, database sử dụng cho gần tất hệ thống website, liệu nên lưu trữ nhiều nơi Khi liệu nhạy cảm lưu trữ database, có nhiều rủi ro bảo mật hệ thống Nếu liệu website blog cá nhân bị đánh cắp, khơng gây thiệt hại nhiều liệu ngân hàng bị đánh cắp Mục đích cơng hack database hệ thống, hậu thật nguy hại Những điều sau kết SQL Injection: Page | [B1]-Tấn công CSDL phương pháp 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ý nhắc nhở phải mã hố mật khẩu, database có bị cơng người dùng không bị mật (Đây lý vietnamwork bị ăn chửi khơng mã hố mật khẩu)  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 Những rủi ro liệt kê bên thực nguy hiểm, để restore database liệu nhiều chi phí Nó làm danh tiếng tiền bạc công ty bạn để khôi phục liệu hệ thống bị Vì vậy, cần phải quan tâm cao đến việc bảo vệ hệ thống khỏi công, Security testing giải pháp tốt cho uy tín sản phẩm cơng ty bạn Cách phịng chống kiểu công May thay, SQL nguy hại dễ phòng chống Gần đây, viết SQL mà tồn sử dụng ORM (Object-Relational Mapping) framework Các framework web tự tạo câu lệnh SQL nên hacker khó cơng Page | [B1]-Tấn công CSDL phương pháp SQL injection Tuy nhiên, có nhiều site sử dụng SQL để truy cập liệu Đây mồi ngon cho hacker Để bảo vệ thân trước SQL Injection, ta thực biện pháp sau  Lọc liệu từ người dùng: Cách phòng chống tương tự XSS Ta sử dụng filter để lọc kí tự đặc biệt (; ” ‘) từ khoá (SELECT, UNION) người dùng nhập vào Nên sử dụng thư viện/function cung cấp framework Viết lại từ đầu vừa tốn thời gian vừa dễ sơ sót  Khơng cộng chuỗi để tạo SQL: Sử dụng parameter thay cộng chuỗi Nếu liệu truyền vào không hợp pháp, SQL Engine tự động báo lỗi, ta không cần dùng code để check  Không hiển thị exception, message lỗi: Hacker dựa vào message lỗi để tìm cấu trúc database Khi có lỗi, ta thông báo lỗi đừng hiển thị đầy đủ thông tin lỗi, tránh hacker lợi dụng  Phân quyền rõ ràng DB: Nếu truy cập liệu từ số bảng, tạo account DB, gán quyền truy cập cho account đừng dùng account root hay sa Lúc này, dù hacker có inject sql khơng thể đọc liệu từ bảng chính, sửa hay xố liệu  Backup liệu thường xuyên: Các cụ có câu “cẩn tắc vô áy náy” Dữ liệu phải thường xuyên backup để có bị hacker xố ta khơi phục Cịn liệu backup bị xố ln … chúc mừng bạn, update CV tìm cách chuyển cơng ty thơi! Page | [B1]-Tấn công CSDL phương pháp SQL injection CHƯƠNG II THỰC HÀNH Ex1: Tautologies Các công SQL Injection thực cách gửi lệnh SQL độc hại đến máy chủ sở liệu thông qua yêu cầu người dùng mà website cho phép Bất kỳ kênh input sử dụng để gửi lệnh độc hại, bao gồm thẻ, chuỗi truy vấn (query strings), cookie tệp tin Để xem cách hoạt động, thử nghiệm đây: - Cấu trúc bảng: user_details - Bản ghi bảng: user_details Page | [B1]-Tấn công CSDL phương pháp SQL injection Một form đăng nhập có input username password đây: Nếu sử dụng mật khớp với ghi sở liệu, thông tin cá nhân người dùng hiển thị Nếu không, " ID người dùng mật không hợp lệ " hiển thị Bây nhập userrid mật hợp lệ vào kiểm tra kết quả: Page | 10 [B1]-Tấn công CSDL phương pháp SQL injection Kết quả: Nhập userrid hợp lệ mật không hợp lệ vào form.html kiểm tra kết quả: Page | 11 [B1]-Tấn công CSDL phương pháp SQL injection Khi người dùng nhập thông tin đăng nhập họ nhấn vào nút “log in”, thông tin gửi lại cho máy chủ web bạn, kết hợp với lệnh SQL Ví dụ, PHP, mã giống sau: $uid = $_POST['uid'];$pid = $_POST['passid'];$SQL = "select * from user_details where userid = '$uid' and password = '$pid' "; $result = mySQL_query($SQL); Lệnh sau gửi đến máy chủ sở liệu tập liệu kết xác định xem username password có tương ứng với tài khoản người dùng hợp lệ hay không Nhưng điều xảy kẻ cơng cung cấp abcd dạng userid thứ 'hoặc' x '=' x làm mật khẩu, truy vấn xây dựng như: $ SQL = "select * from user_details where userid = 'abcd' and password = 'anything' or 'x' = 'x'"; Page | 12 [B1]-Tấn công CSDL phương pháp SQL injection Dựa ưu tiên toán tử, mệnh đề WHERE cho hàng, truy vấn trả tất ghi Bằng cách này, kẻ cơng xem tất thông tin cá nhân người dùng Xem mẫu đăng nhập sau kết 'anything' or 'x' = 'x' Page | 13 [B1]-Tấn công CSDL phương pháp SQL injection Kết quả: Ex2: Truy vấn Union Kiểu cơng thực cách chèn truy vấn UNION vào tham số dễ bị cơng, trả tập liệu kết hợp kết truy vấn ban đầu kết truy vấn đưa vào Toán tử SQL UNION kết hợp kết hai nhiều truy vấn tạo tập kết bao gồm hàng tìm nạp từ truy vấn tham gia UNION Theo mặc định, UNION hoạt động giống UNION [DISTINCT], tức loại bỏ hàng trùng lặp; nhiên, việc sử dụng từ khóa ALL với UNION trả tất hàng, kể hàng trùng lặp Page | 14 [B1]-Tấn công CSDL phương pháp SQL injection Kẻ công cố gắng sử dụng phương pháp phải có kiến thức vững lược đồ DB Hãy thử phương pháp với hai bảng user_details , emp_details biểu mẫu đăng nhập đầu tiên: Cấu trúc bảng: user_details Bản ghi bảng: user_details Cấu trúc bảng: emp_details Page | 15 [B1]-Tấn công CSDL phương pháp SQL injection Bản ghi bảng: emp_details Giả sử kẻ công nhập ' UNION SELECT * FROM emp_details trường User ID abcd Mật lưu dạng userid mật tạo truy vấn sau: SELECT * FROM user_details WHERE userid ='' UNION SELECT * FROM EMP_DETAILS ' and password = 'abcd' Hai dấu gạch ngang (-) nhận xét phần lại truy vấn tức 'và password =' abcd ' Do đó, truy vấn trở thành kết hợp hai truy vấn SELECT Truy vấn SELECT trả tập hợp rỗng khơng có ghi phù hợp bảng user_details Truy vấn thứ hai trả tất liệu từ bảng emp_details Page | 16 [B1]-Tấn công CSDL phương pháp SQL injection Kết quả: Kết luận Page | 17 [B1]-Tấn công CSDL phương pháp SQL injection SQL Injection tồn quanh ta nhiều thập kỷ tiếp tục đứng đầu bảng xếp hạng lỗ hổng nguy hiểm năm tới Chỉ vài bước dễ dàng –nhưng toan tính tốt – để bảo vệ bạn người dùng bạn khỏi công này, lỗ hổng ưu tiên hàng đầu kiểm tra mã nguồn cho lỗ hổng bảo mật Việc cần làm để tránh trở thành nạn nhân công vi phạm liệu SQL injection kiểm soát xác nhận input người dùng, cần tự trang bị công cụ cần thiết để bảo vệ cho website chúng ghé thăm Page | 18

Ngày đăng: 17/05/2023, 17:23

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

Tài liệu liên quan