Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
422,91 KB
Nội dung
Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân MỤC LỤC MỤC LỤC CHƯƠNG I: TÌM HIỂU VỀ CÁC DẠNG TẤN CÔNG SQL INJECTION 1.1Khái niệm 1.1.1 SQL (Structured Query Language ) 1.1.3 SQL Injection .7 CHƯƠNG II: CÁC DẠNG TẤN CÔNG SQL INJECTION 13 2.1 Dạng công vượt qua kiểm tra đăng nhập 13 2.2 Dạng công sử dụng câu lệnh SELECT 14 2.3 Dạng công sử dụng câu lệnh INSERT 16 2.4 Dạng công sử dụng stored-procedures 17 2.5 Kết luận 17 CHƯƠNG III: PHÒNG CHỐNG SQL INJECTION .18 3.1 Kiểm soát chặt chẽ liệu đầu vào .18 3.2 Sử dụng lớp giao tiếp trừu tượng 19 3.3 Thiết lập đối tượng giả làm mồi nhử .20 3.4 Thiết lập cấu hình an tồn cho hệ quản trị sở liệu 20 KẾT LUẬN 21 TÀI LIỆU THAM KHẢO 22 Nhóm sinh viên thực hiện: 1 Lớp M14CQTE02-B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xn CHƯƠNG I: TÌM HIỂU VỀ CÁC DẠNG TẤN CÔNG SQL INJECTION 1.1 Khái niệm 1.1.1 SQL (Structured Query Language ) Là ngơn ngữ truy vấn mang tính cấu trúc, loại ngơn ngữ máy tính phổ biến để tạo, sửa, lấy liệu từ hệ quản trị sở liệu quan hệ Ngôn ngữ phát triển vượt xa so với mục đích ban đầu để phục vụ hệ quản trị sở liệu đối tượng-quan hệ Nó tiêu chuẩn ANSI/ISO Từ báo tham dự hội thảo khoa học A Relational Model of Data for Large Share Data Banks (tạm dịch "Mơ hình quan hệ cho liệu dùng ngân hàng liệu chia sẻ có khối lượng lớn") tiến sĩ Edgar F Codd xuất tháng năm 1970 tạp chí Communications of the ACM Hiệp hội ACM[8], mô hình chấp nhận rộng rãi mơ hình tiêu chuẩn dùng cho hệ thống quản lý sở liệu quan hệ Giữa năm 1970, nhóm nhà phát triển trung tâm nghiên cứu IBM San Jose phát triển hệ thống sở liệu "Hệ thống R" dựa mơ hình Codd Structured English Query Language, viết tắt "SEQUEL" (tạm dịch "Ngơn ngữ truy vấn tiếng Anh có cấu trúc"), thiết kế để quản lý truy lục liệu lưu trữ Hệ thống R Sau này, tên viết tắt SEQUEL rút gọn thành SQL để tránh việc tranh chấp nhãn hiệu (từ SEQUEL công ty máy bay UK Hawker-Siddeley đăng ký) Mặc dù SQL bị ảnh hưởng công trình tiến sĩ Codd khơng tiến sĩ Codd thiết kế Ngôn ngữ SEQUEL thiết kế Donald D Chamberlin vàRaymond F Boyce IBM, khái niệm họ phổ biến để tăng ý SQL Phiên sở liệu quan hệ phi thương mại, không hỗ trợ SQL phát triển năm 1974.(Ingres from U.C Berkeley.) Năm 1978, việc thử nghiệm phương pháp khởi đầu sở thử nghiệm khách hàng Cuộc thử nghiệm chứng minh có ích tính thực tiễn hệ thống chứng tỏ thành cơng IBM Dựa vào kết đó, IBM bắt đầu phát triển sản phẩm thương mại bổ sung thêm SQL dựa nguyên mẫu Hệ thống R bao gồm System/38 (Hệ thống/38) (được công bố năm 1978 thương mại hóa tháng năm 1979, SQL/DS (được giới thiệu vào năm 1981) DB2 (năm 1983) Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xn Cùng thời điểm Relational Software, Inc (bây Oracle Corporation) nhận thấy tiềm khái niệm Chamberlin and Boyce đưa phát triển phiên Hệ quản trị sở dự liệu quan hệ riêng họ cho Navy, CIA tổ chức khác Vào mùa hè năm 1979, Relational Software, Inc giới thiệu Oracle V2 (Phiên 2), phiên thương mại hỗ trợ SQL cho máy tính VAX Oracle thường xuyên nhắc tới cách khơng nghiêm túc cơng thị trường IBM năm, việc táo bạo quan hệ công chúng họ công phiên IBM System/38 có vài tuần Tương lai Oracle đảm bảo có quan tâm đáng kể cơng chúng sau phát triển, có nhiều phiên nhà cung cấp khác IBM chậm việc phát triển SQL sản phẩm quan hệ, có lẽ ban đầu khơng dùng mơi trường Unix máy tính lớn (Mainframe), họ sợ làm giảm lợi nhuận thu từ việc bán sản phẩm sở liệu IMS (những sản phẩm dựa mô hình sở liệu định hướng khơng phải sở liệu quan hệ) Trong lúc đó, Oracle phát triển, IBM phát triển System/38, mong đợi hệ sở liệu quan hệ họ Với lực thiết kế tiên tiến nó, người ta cho thay cho hệ thống Unix máy tính lớn SQL thừa nhận tiêu chuẩn ANSI (American National Standards Institute) vào năm 1986 ISO (International Organization for Standardization) năm 1987 ANSI cơng bố cách phát âm thức SQL "ess kyoo ell", nhiều chuyên gia sở liệu nói tiếng Anh gọi sequel Một quan niệm sai khác phổ biến rộng rãi "SQL" chữ viết tắt "Structured Query Language" (Ngơn ngữ truy vấn có cấu trúc) Thực tế Năm Tên Tên khác SQL-87 1986 SQL-86 1989 1992 1999 2003 SQL-89 SQL-92 SQL2 SQL:1999 SQL3 SQL:2003 Chú giải Được công bố ANSI Được phê chuẩn ISO năm 1987 Thay đổi nhỏ Thay đổi lớn 1.1.2 SQL chia thành nhiều nhóm: Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân Lấy liệu Thao tác sử dụng nhiều sở liệu dựa giao dịch thao tác lấy liệu • • SELECT sử dụng để lấy liệu từ nhiều bảng sở liệu, SELECT lệnh thường dùng ngôn ngữ sửa đổi liệu (tạm dịch) (tiếng Anh: Data Manipulation Language - DML) Trong việc tạo câu truy vấn SELECT, người sử dụng phải đưa mô tả cho liệu muốn lấy khơng hành động vật lý bắt buộc phải thực để lấy kết Hệ thống sở liệu, hay xác tối ưu hóa câu truy vấn dịch từ câu truy vấn sang kế hoạch truy vấn tối ưu Những từ khóa liên quan tới SELECT bao gồm: • FROM dùng để định liệu lấy từ bảng nào, bảng quan hệ với • WHERE dùng để xác định ghi lấy ra, áp dụng với GROUP BY • GROUP BY dùng để kết hợp ghi có giá trị liên quan với thành phần tử tập hợp nhỏ ghi • HAVING dùng để xác định ghi nào, kết từ từ khóa GROUP BY, lấy • ORDER BY dùng để xác định liệu lấy xếp theo cột Ví dụ sau việc sử dụng câu lệnh SELECT để lấy danh sách sách có giá trị Câu truy vấn truy lục tất ghi bảng books với giá trị cột pricelớn 100.00 Kết xếp theo thứ tự tăng dần giá trị cột title Dấu (*) phần select list cho biết tất cột bảng books lấy thể kết SELECT * FROM books WHERE price > 100.00 ORDER BY title; Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xn Ví dụ sau giải thích cách liên kết nhiều bảng, tập hợp ghi câu truy vấn SQL, trả danh sách sách số tác giả sách SELECT books.title, count(*) AS Authors FROM books JOIN book_authors ON books.isbn = book_authors.isbn GROUP BY books.title; Kết ví dụ giống sau: Title Authors -SQL Examples and Guide The Joy of SQL How to use Wikipedia Pitfalls of SQL How SQL Saved my Dog (Kí tự gạch chân "_" thường sử dụng tên bảng tên cột để phân cách từ kí tự khác mâu thuẫn với cú pháp SQL Ví dụ như, dấu "-" hiểu dấu trừ.) Với điều kiện cột isbn cột chung hai bảng cột title tồn bảng books câu truy vấn viết lại theo mẫu sau: SELECT title, count(*) AS Authors FROM books NATURAL JOIN book_authors GROUP BY title; Tuy nhiên nhiều nhà cung cấp không hỗ trợ thức này, yêu cầu số quy ước tên cột Như vậy, câu truy vấn không phổ biến Sửa đổi liệu Ngôn ngữ sửa đổi liệu (Data Manipulation Language - DML), phần nhỏ ngơn ngữ, có thành phần tiêu chuẩn dùng để thêm, cập nhật xóa liệu delete data • INSERT dùng để thêm liệu vào bảng tồn Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo môn: An tồn Thơng tin Nâng cao Dậu • • • • GVHD: TS Hoàng Xuân UPDATE dùng để thay đổi giá trị tập hợp ghi bảng MERGE dùng để kết hợp liệu nhiều bảng Nó dùng việc kết hợp hai phần tử INSERT UPDATE DELETE xóa ghi tồn bảng TRUNCATE Xóa tồn liệu bảng (không phải tiêu chuẩn, lệnh SQL phổ biến) Giao dịch Giao dịch, có, dùng để bao bọc thao tác sửa đổi liệu Giao dịch (transaction) tập thao tác với Trên môi trường khách/chủ (client/server) hay môi trường sở liệu phân tán việc đảm bảo tính đắn liệu quan trọng Ví dụ: Một người rút tiền khỏi tài khoản ngân hàng, thời điểm rút tiền, thao tác rút tiền khác phải bị từ chối Các thao tác tài khoản hình dung sau: Thao tác 1: Thao tác 2: Thao tác 3: Để đảm bảo thao tác 1-3 phải liền với phải đưa vào transaction Thao tác 1: Thao tác 2: Thao tác 3: Các lệnh liên quan đến giao dịch: • BEGIN WORK (hoặc START TRANSACTION, tùy theo ngôn ngữ SQL khác nhau) sử dụng để đánh dấu việc bắt đầu giao dịch liệu (giao dịch liệu có kết thúc hồn tồn hay khơng) • COMMIT dùng để lưu lại thay đổi giao dịch • ROLLBACK dùng để quay lại thời điểm sử dụng lệnh COMMIT cuối Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân SQL Injection Là cách chèn đoạn lệnh SQL vào để thực việc vượt qua kiểm tra mệnh đề WHERE Ví dụ câu truy vấn lấy tài khoản người dùng: SELECT ID, NAME FROM USERS WHERE USERNAME='JONH' AND PASSWORD='1234' Câu thỏa cặp USERNAME PASSWORD tồn sở liệu Câu viết injection sau: thay cụm từ JONH thành: ' OR 1=1 or''=' (lưu ý ký tự nháy đơn ') câu SQL trở thành: SELECT ID, NAME FROM USERS WHERE USERNAME='' OR 1=1 or''='' AND PASSWORD='1234' đoạn mã hoạt động với password Việc phịng chống SQL Injection khơng khó, cần ý viết chống lại Định nghĩa liệu Ngôn ngữ định nghĩa liệu (Data Definition Language, viết tắt DDL) phần ngơn ngữ truy vấn Các câu lệnh dùng để định nghĩa cấu trúc củacơ sở liệu, bao gồm định nghĩa hàng, cột, bảng liệu, số số thuộc tính khác liên quan đến sở liệu vị trí file Các câu lệnh ngơn ngữ định nghĩa liệu thành phần hệ quản lý liệu có khác biệt nhiều ngôn ngữ truy vấn hệ khác 1.1.3 SQL Injection SQL Injection kĩ thuật cho phép kẻ công lợi dụng lỗ hổng việc kiểm tra liệu nhập ứng dụng web thông báo lỗi hệ quản trị sở liệu để "tiêm vào" (inject) thi hành câu lệnh SQL bất hợp pháp (không người phát triển ứng dụng lường trước) Hậu tai hại cho phép kẻ cơng thực thao tác xóa, hiệu chỉnh, … Do có tồn quyền sở liệu ứng dụng, chí server mà ứng dụng chạy Lỗi thường xảy ứng dụng web có liệu quản lí hệ quản trị sở liệu SQL Server, MySQL, Oracle, DB2, Sysbase Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xn Các dạng lỗi thường gặp Khơng kiểm tra ký tự thoát truy vấn Đây dạng lỗi SQL injection xảy thiếu đoạn mã kiểm tra liệu đầu vào câu truy vấn SQL Kết người dùng cuối thực số truy vấn không mong muốn sở liệu ứng dụng Dòng mã sau minh họa lỗi này: statement = "SELECT * FROM users WHERE name = '" + userName + "';" Câu lệnh thiết kế để trả ghi tên người dùng cụ thể từ bảng người dùng Tuy nhiên, biến "userName" nhập xác theo cách người dùng ác ý, trở thành câu truy vấn SQL với mục đích khác hẳn so với mong muốn tác giả đoạn mã Ví dụ, ta nhập vào giá trị biến userName sau: a' or 't'='t Khiến câu truy vấn hiểu sau: SELECT * FROM users WHERE name = 'a' or 't'='t'; Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo môn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xuân Nếu đoạn mã sử dụng thủ tục xác thực ví dụ sử dụng để bắt buộc lựa chọn tên người dùng hợp lệ 't'='t' Trong hầu hết SQL server cho phép thực nhiều truy vấn lúc với lần gọi, nhiên số SQL API mysql_query php lại khơng cho phép điều lý bảo mật Điều ngăn cản tin tặc công cách sử dụng câu lệnh riêng rẽ mà không ngăn cản tin tặc thay đổi từ cú pháp truy vấn Các giá trị biến "userName" câu truy vấn gây việc xoá người dùng từ bảng người dùng tương tự việc xóa tất liệu từ bảng liệu (về chất tiết lộ thơng tin người dùng), ví dụ minh họa API cho phép thực nhiều truy vấn lúc: a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't Điều đưa tới cú pháp cuối câu truy vấn sau: SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't'; Xử lý không kiểu Lỗi SQL injection dạng thường xảy lập trình viên hay người dùng định nghĩa đầu vào liệu không rõ ràng thiếu bước kiểm tra lọc kiểu liệu đầu vào Điều xảy trường số sử dụng truy vấn SQL lập trình viên lại thiếu bước kiểm tra liệu đầu vào để xác minh kiểu liệu mà người dùng nhập vào có phải số hay khơng Ví dụ sau: statement:= "SELECT * FROM data WHERE id = " + a_variable + ";" Ta nhận thấy cách rõ ràng ý định tác giả đoạn mã nhập vào số tương ứng với trường id - trường số Tuy nhiên, người dùng cuối, thay nhập vào số, họ nhập vào chuỗi ký tự, trở thành câu truy vấn SQL hoàn chỉnh mà bỏ qua ký tự Ví dụ, ta thiết lập giá trị biến a_variable là: 1;DROP TABLE users đó, thực thao tác xóa người dùng có id tương ứng khỏi sở liệu, câu truy vấn hoàn chỉnh hiểu là: SELECT * FROM data WHERE id=1;DROP TABLE users; Lỗi bảo mật bên máy chủ sở liệu Đôi lỗ hổng tồn phần mềm máy chủ sở liệu, trường hợp hàm mysql_real_escape_string() máy chủ MySQL Điều cho phép kẻ cơng thực cơng SQL injection thành cơng dựa Nhóm sinh viên thực hiện: Lớp M14CQTE02-B Báo cáo môn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xuân ký tự Unicode không thông thường đầu nhập vào thoát Chữ đậm Blind SQL injection Lỗi SQL injection dạng dạng lỗi tồn ứng dụng web hậu chúng lại không hiển thị trực quan cho kẻ cơng Nó gây sai khác hiển thị nội dung trang chứa lỗi bảo mật này, hậu công SQL injection dạng khiến cho lập trình viên hay người dùng phải nhiều thời gian để phục hồi xác bit liệu Những kẻ cơng cịn sử dụng số cơng cụ để dị tìm lỗi dạng cơng với thông tin thiết lập sẵn Thay đổi giá trị điều kiện truy vấn Dạng lỗi khiến cho kẻ cơng thay đổi giá trị điều kiện câu truy vấn, làm sai lệch hiển thị ứng dụng chứa lỗi SELECT booktitle from booklist where bookId = 'OOk14cd' AND 1=1; Sẽ hiển thị trang cách bình thường, khi: SELECT booktitle from booklist where bookId = 'OOk14cd' AND 1=2; hiển thị nội dung khác, không hiển thị ứng dụng web có chứa lỗi SQL injection dạng Lỗ hổng dạng cho phép tin tặc không gây ảnh hưởng tới bảng hay liệu mà ảnh hưởng tới liệu hay bảng khác phụ thuộc vào nội dung liệu hay bảng Điều kiện lỗi Lỗi SQL injection dạng dẫn tới việc buộc sở liệu phép đánh giá mà giá trị câu lệnh WHERE Ví dụ: SELECT 1/0 from users where username='Ralph'; Phép chia cho đánh giá lỗi mà người dùng có tên "Ralph" tồn sở liệu Thời gian trễ Lỗi SQL injection dạng tồn thời gian xử lý hay nhiều truy vấn SQL phụ thuộc vào liệu logic nhập vào trình xử lý truy vấn SQL engine cần nhiều thời gian Tin tặc sử dụng lỗi SQL injection dạng để xác định thời gian xác mà trang cần tải giá trị nhập vào Nhóm sinh viên thực hiện: B 10 Lớp M14CQTE02- Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân 1.2 Mức độ thiệt hại Thực chất, nguồn gốc trình công SQL Injection cẩu thả quy trình mã hóa ứng dụng, mật ứng dụng ngăn chặn được, nhiên mức độ thiệt hại lường trước phụ thuộc vào quy mơ database Trong q trình ứng dụng web giao tiếp với backen database phải cung cấp thơng tin đăng nhập tới sở liệu (quy trình khác hẳn so với lúc người dùng tiến hành đăng nhập vào website hay form login) Phụ thuộc vào mức phân quyền tương ứng mà ứng dụng web yêu cầu, tài khoản sở liệu sử dụng quyền chỉnh sửa nào, từ việc đơn giản đọc, ghi đơn bảng có sẵn mức quyền đầy đủ Chúng ta thấy việc nhập tên tài khoản (ví dụ “youruser”, “admin’ ” bất kỳ) hồn tồn đăng nhập trực tiếp vào database mà không cần biết password Khi bên hệ thống biết tài khoản bình thường có đầy đủ quyền tương ứng Về mặt chất, việc phân quyền database khơng cung cấp quyền xác tương ứng an tồn q trình này, thơng thường website phải có quyền đọc ghi tới sở liệu tương ứng Giải sử hệ thống website có đầy đủ quyền truy cập, bao gồm việc xóa liệu, thêm xóa bảng, tạo tài khoản… thực tế, có nhiều chương trình muốn cài đặt sử dụng phải phân quyền mức cao nhất, bạn phải cẩn thận thực việc gán quyền Để minh họa mức ộ thiệt hại xảy tình này, dựa vào hình vẽ trên, nhập phần thông tin sau vào trường Username: "Robert'; DROP TABLE Users; " Tải FULL (file word 22 trang): bit.ly/2Ywib4t Dự phòng: fb.com/KhoTaiLieuAZ Chỉ với vài thay đổi nho nhỏ, câu lênh query trở thành: Nhóm sinh viên thực hiện: B 11 Lớp M14CQTE02- Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân SELECT UserID FROM Users WHERE UserName='Robert'; DROP TABLE Users; ' AND Password='wrongpass' Lưu ý dấu phẩy MySQL sử dụng để kết thúc mệnh đề cũ bắt đầu mệnh đề Dòng lênh database thực thành: SELECT UserID FROM Users WHERE UserName='Robert' DROP TABLE Users Chỉ đơn giản thực thành công pha cơng SQLI nho nhỏ với mục đích xóa toàn bảng liệu Users 1.3 Kết luận Trong chương giới thiệu khái quát SQL, SQL Injection lỗi thường gặp mức độ thiệt hại cơng SQL Injection 4047596 Nhóm sinh viên thực hiện: B 12 Lớp M14CQTE02- .. .Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hồng Xn CHƯƠNG I: TÌM HIỂU VỀ CÁC DẠNG TẤN CÔNG SQL INJECTION 1.1 Khái niệm 1.1.1 SQL (Structured Query Language... rộng rãi "SQL" chữ viết tắt "Structured Query Language" (Ngơn ngữ truy vấn có cấu trúc) Thực tế Năm Tên Tên khác SQL- 87 1986 SQL- 86 1989 1992 1999 2003 SQL- 89 SQL- 92 SQL2 SQL: 1999 SQL3 SQL: 2003... Blind SQL injection Lỗi SQL injection dạng dạng lỗi tồn ứng dụng web hậu chúng lại không hiển thị trực quan cho kẻ cơng Nó gây sai khác hiển thị nội dung trang chứa lỗi bảo mật này, hậu cơng SQL injection