Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
323,11 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 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.1Khá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 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ế khơng phải Năm Chú giải 1986 Được công bố ANSI Được phê chuẩn ISO năm 1987 Thay đổi nhỏ Thay đổi lớn 1989 1992 1999 2003 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 Hồng Xn 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: bảng quan hệ với áp dụng với GROUP BY với thành phần tử tập hợp nhỏ ghi GROUP BY, lấy cột Ví dụ sau việc sử dụng câu lệnh giá trị Câu truy vấn truy lục tất ghi bảng books với giá t cột pricelớn 100.00 Kết xếp theo thứ tự tăng dần g cột title Dấu (*) phần select list cho biết tất cột bảng boo 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 Hồng Xn 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ử UPDATE DELETE xóa ghi tồn bảng · · INSERT 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 Nhóm sinh viên thực hiện: COMMIT cuối 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 Xn 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 Xn 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 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 q 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 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; " 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 Báo cáo mơn: An tồn Thơng tin Nâng cao GVHD: TS Hoàng Xuân Dậu 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 tồn bảng liệu Users 1.3Kế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 Nhóm sinh viên thực hiện: 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 II: CÁC DẠNG TẤN CÔNG SQL INJECTION 2.1 Dạng công vượt qua kiểm tra đăng nhập Với dạng cơng này, tin tặc 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 Xét ví dụ điển hình, 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 Trong trường hợp này, người ta dùng hai trang, trang HTML để hiển thị form nhập liệu trang ASP dùng để xử lí thơng tin nhập từ phía người dùng Ví dụ: login.htm Username: Password: execlogin.asp Thoạt nhìn, đoạn mã trang execlogin.asp dường không chứa lỗ hổng an toàn Người dùng khơng thể đăng nhập mà khơng có tên đăng nhập mật hợp lệ Tuy nhiên, đoạn mã thực khơng an tồn tiền đề cho lỗi SQL injection Đặc biệt, chỗ sơ hở nằm chỗ liệu nhập vào từ người dùng dùng để xây dựng trực tiếp câu lệnh SQL Chính điều cho phép kẻ cơng điều khiển câu truy vấn thực Ví dụ, người dùng nhập chuỗi sau vào ô nhập liệu username/password trang login.htm là: ' OR ' ' = ' ' Lúc này, câu truy vấn gọi thực là: SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''='' Câu truy vấn hợp lệ trả tất ghi T_USERS đoạn mã xử lí người dùng đăng nhập bất hợp pháp người dùng đăng nhập hợp lệ 2.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 Xét ví dụ thường gặp website tin tức Thơng thường, có trang nhận ID tin cần hiển thị sau truy vấn nội dung tin có ID Nhóm sinh viên thực hiện: 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ụ:http://www.myhost.com/shownews.asp?ID=123 Mã nguồn cho chức thường viết đơn giản theo dạng Trong tình thông thường, đoạn mã 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ừ đó, khởi đầu cho cơng bất hợp pháp, ví dụ như: OR 1=1 (nghĩa là, http://www.myhost.com/shownews.asp?ID=0 or 1=1) Câu truy vấn SQL lúc trả tất article từ bảng liệu thực câu lệnh: SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1 Một trường hợp khác, ví dụ trang tìm kiếm Trang cho phép người dùng nhập vào thơng tin tìm kiếm Họ, Tên, … Đoạn mã thường gặp là: Tương tự trên, tin tặc lợi dụng sơ hở câu truy vấn SQL để nhập vào trường tên tác giả chuỗi giá trị: ' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, câu truy vấn đầu khơng thành cơng, chương trình thực thêm lệnh sau từ khóa UNION Tất nhiên ví dụ nói trên, dường khơng có nguy hiểm, thử tưởng tượng kẻ cơng xóa tồn sở liệu cách chèn vào đoạn lệnh nguy hiểm lệnh DROP TABLE Ví dụ như: ' DROP TABLE T_AUTHORS – Chắc bạn thắc mắc biết ứng dụng web bị lỗi dạng Rất đơn giản, nhập vào chuỗi (*) trên, hệ thống báo lỗi cú pháp dạng: Invalid object name “OtherTable”; ta biết hệ thống thực câu SELECT sau từ khóa UNION, trả lỗi mà ta cố tình tạo câu lệnh SELECT Cũng có thắc mắc làm biết tên bảng liệu mà thực thao tác phá hoại ứng dụng web bị lỗi SQL injection Cũng đơn giản, SQL Server, có hai đối tượng sysobjects syscolumns cho phép liệt kê tất tên bảng cột có hệ thống Ta cần chỉnh lại câu lệnh SELECT, ví dụ như: ' UNION SELECT name FROM sysobjects WHERE xtype = 'U' liệt kê tên tất bảng liệu 2.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 khơng thể thiếu sau đăng kí thành cơng, người dùng Nhóm sinh viên thực hiện: B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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: INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three') Nếu đoạn mã xây dựng câu lệnh SQL có dạng : 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 bạn yêu cầu thực thêm lệnh là: SELECT TOP FieldName FROM TableName 2.4 Dạng công sử dụng stored-procedures Việc công stored-procedures 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ụ, ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: ' 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 2.5 Kết luận Trong chương biết dạng cơng SQL Injection Nhóm sinh viên thực hiện: 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 III: PHỊNG CHỐNG SQL INJECTION 3.1 Kiểm sốt chặt chẽ liệu đầu vào Điểm yếu sql injection bắt nguồn từ việc xử lý liệu từ người dùng khơng tốt,do vấn đề xây dựng mã nguồn đảm bảo an ninh cốt lõi việc phòng chống sql injection Để phịng tránh nguy xảy ra, bảo vệ câu lệnh SQL cách kiểm soát chặt chẽ tất liệu nhập nhận từ đối tượng Request (Request, Request.QueryString, Request.Form, Request.Cookies, and Request.ServerVariables) Ví dụ, giới hạn chiều dài chuỗi nhập liệu, xây dựng hàm EscapeQuotes để thay dấu nháy đơn dấu nháy đơn như: Trong trường hợp liệu nhập vào số, lỗi xuất phát từ việc thay giá trị tiên đoán liệu số chuỗi chứa câu lệnh SQL bất hợp pháp Để tránh điều này, đơn giản kiểm tra liệu có kiểu hay khơng hàm IsNumeric() Ngồi xây dựng hàm loại bỏ số kí tự từ khóa nguy hiểm như: ;, , select, insert, xp_, … khỏi chuỗi liệu nhập từ phía người dùng để hạn chế cơng dạng này: Nhóm sinh viên thực hiện: B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân 3.2 Sử dụng lớp giao tiếp trừu tượng Khi thiết kế ứng dụng doanh nghiệp thường có yêu cầu đặt định nghĩa lớp (layer) mơ hình n-tier, ví dụ lớp trình diễn (presentation), lớp nghiệp vụ (business), lớp truy cập liệu (data access) cho lớp trừu tượng với lớp Trong phạm vi nội dung xét, lớp trừu tượng phục vụ truy cập liệu Tùy theo cơng nghệ sử dụng mà ta có lớp chuyên biệt Hibernate Java, hay framework truy cập database (database driver) ADO.NET, JDBC, PDO Các lớp giao tiếp cho phép truy cập liệu an tồn mà khơng làm lộ kiến trúc chi tiết bên ứng dụng Một ví dụ lớp truy cập liệu thiết kế có tính tốn, tất câu lệnh thao tác với database có sử dụng liệu bên ngồi phải thơng qua câu lệnh tham số hóa Đảm bảo điều kiện ứng dụng truy cập tới database thông qua lớp truy cập liệu này, ứng dụng không sử dụng thông tin cung cấp để xây dựng truy vấn SQL động database Một điều kiện đảm bảo kết hợp phương thức truy cập database với việc sử dụng stored procedure Nhóm sinh viên thực hiện: B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân database Những điều kiện giúp cho database an toàn trước công 3.3 Thiết lập đối tượng giả làm mồi nhử Chiến thuật đưa nhằm cảnh báo cho quản trị viên nguy cơng cố tình tìm cách khai thác liệu nhạy cảm password Phương pháp nên phối hợp với việc đặt tên đối tượng khó đốn Để thực phương pháp này, ta sinh bảng chứa cột có tính nhạy cảm mà dễ đốn, ví dụ password, credit_no, liệu bảng liệu giả, thông tin truy cập, có thơng báo gửi cho quản trị viên 3.4 Thiết lập cấu hình an tồn cho hệ quản trị sở liệu Cần có chế kiểm sốt chặt chẽ giới hạn quyền xử lí liệu đến tài khoản người dùng mà ứng dụng web sử dụng Các ứng dụng thông thường nên tránh dùng đến quyền ‘dbo’ hay ‘sa’ Quyền bị hạn chế, thiệt hại Ngồi cần tắt tất thông báo lỗi không cần thiết web server Hacker lợi dụng thông báo lỗi để khai thác thông tin hệ thống, phục vụ cho công SQL Injection Tóm lại để ứng dụng thật tránh công SQL Injection cần triển khai số việc sau: Khơng trả trang lỗi có thơng tin nhạy cảm Cải thiện liệu nhập vào tốt có khả loại bỏ cơng Hạn chế tối đa quyền truy vấn Thường xuyên kiểm tra, quét ứng dụng công cụ Dùng chắn tốt cho lớp tương tác Nhóm sinh viên thực hiện: B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân KẾT LUẬN SQL Injection kiểu hack website phổ biến Bằng cách inject mã SQL query/command vào input trước chuyển cho ứng dụng web xử lý, bạn login mà khơng cần username password Để hệ thống an toàn cần tuân thủ tuyệt đối biện pháp phòng ngừa để tránh việc liệu Nhóm sinh viên thực hiện: B Báo cáo mơn: An tồn Thơng tin Nâng cao Dậu GVHD: TS Hoàng Xuân TÀI LIỆU THAM KHẢO [1] Bài giảng Cơ sở Dữ liệu, Ts Phạm Thế Quế, Học Viện Cơng nghệ Bưu Viễn thơng, 2006 [2] Danh sách website bị lỗi SQL injection: http://www.security.com.vn/ [3] SQL Injection FAQ: http://www.sqlsecurity.com/DesktopDefault.aspx? tabindex=2&tabid=3 [4] Advanced SQL Injection: http://www.nextgenss.com/papers/advanced_sql_injection.pdf Preventing SQL Injection: http://www.owasp.org/asac/input_validation/sql.shtml [5] [6] SQL Injection Attacks - Are You Safe? http://www.sitepoint.com/article/794 [7]: https://vi.wikipedia.org Nhóm sinh viên thực hiện: 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.1Khái niệm 1.1.1 SQL (Structured Query Language ) Là ngơn ngữ truy vấn mang... thực hiện: 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 II: CÁC DẠNG TẤN CƠNG SQL INJECTION 2.1 Dạng công vượt qua kiểm tra đăng nhập Với dạng cơng này, tin tặc dễ dàng... 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