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
316 KB
Nội dung
Báo cáo môn: An toà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 toà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 toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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 toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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ế 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 toà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 toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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 toà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 toà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 hoàn toà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 toà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ó toà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 toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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 toàn Thông tin Nâng cao Dậu GVHD: TS Hoà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ự thoá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 toàn Thông tin Nâng cao Dậu GVHD: TS Hoà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 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 toà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 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ỳ) hoàn toà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 toàn 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 11 Lớp M14CQTE02- Báo cáo môn: An toà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 Nhóm sinh viên thực hiện: B 12 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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 đăng nhập mà tên đăng nhập mật hợp lệ Tuy nhiên, đoạn mã thực không an toà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 14 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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 nguy hiểm, thử tưởng tượng kẻ công xóa toà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 thiếu sau đăng kí thành công, người dùng Nhóm sinh viên thực hiện: B 16 Lớp M14CQTE02- Báo cáo môn: An toà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 17 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân CHƯƠNG III: PHÒNG CHỐNG SQL INJECTION 3.1 Kiểm soá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() Ngoà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 18 Lớp M14CQTE02- Báo cáo môn: An toà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 toà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 toán, tất câu lệnh thao tác với database có sử dụng liệu bên 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 19 Lớp M14CQTE02- Báo cáo môn: An toà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ó đoá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ễ đoá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 toàn cho hệ quản trị sở liệu Cần có chế kiểm soá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 Ngoà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 20 Lớp M14CQTE02- Báo cáo môn: An toà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 21 Lớp M14CQTE02- Báo cáo môn: An toà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 [5] Preventing SQL Injection: http://www.owasp.org/asac/input_validation/sql.shtml [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 22 Lớp M14CQTE02- [...]... thành công một pha tấn công SQLI nho nhỏ với mục đích chính là xóa toàn bộ bảng dữ liệu Users 1.3 Kết luận Trong chương này chúng ta được giới thiệu khái quát về SQL, SQL Injection các lỗi thường gặp và mức độ thiệt hại trong tấn công SQL Injection Nhóm sinh viên thực hiện: 1 B 12 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân CHƯƠNG II: CÁC DẠNG TẤN CÔNG SQL INJECTION. .. sẽ trả về tất cả các bản ghi của T_USERS và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ 2.2 Dạng tấn công sử dụng câu lệnh SELECT Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công Xét một ví... biết được các dạng tấn công SQL Injection Nhóm sinh viên thực hiện: 1 B 17 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân CHƯƠNG III: PHÒNG CHỐNG SQL INJECTION 3.1 Kiểm soát chặt chẽ dữ liệu đầu vào Điểm yếu sql injection bắt nguồn từ việc xử lý dữ 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 là cốt lõi của việc phòng chống sql injection. .. cả các thông báo lỗi không cần thiết của web server Hacker có thể lợi dụng chính các thông báo lỗi này để khai thác thông tin của hệ thống, phục vụ cho một cuộc tấn công SQL Injection Tóm lại để ứng dụng thật sự tránh được tấn công SQL Injection cần triển khai một số việc sau: • Không trả về những trang lỗi có thông tin nhạy cảm • Cải thiện dữ liệu nhập vào càng tốt càng có khả năng loại bỏ tấn công. .. được an toàn hơn trước những cuộc tấn công 3.3 Thiết lập các đối tượng giả làm mồi nhử Chiến thuật này được đưa ra nhằm cảnh báo cho quản trị viên nguy cơ một cuộc tấn công khi một ai đó cố tình tìm cách khai thác những dữ liệu nhạy cảm như password Phương pháp này nên phối hợp với việc đặt tên các đối tượng khó đoán Để thực hiện phương pháp này, ta sinh các bảng chứa các cột có tính nhạy cảm mà dễ đoán,... GVHD: TS Hoàng Xuân CHƯƠNG II: CÁC DẠNG TẤN CÔNG SQL INJECTION 2.1 Dạng tấn công vượt qua kiểm tra đăng nhập Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, hệ thống thường xây dựng trang đăng... tuyệt đối các biện pháp phòng ngừa để tránh việc mất dữ liệu Nhóm sinh viên thực hiện: 1 B 21 Lớp M14CQTE02- Báo cáo môn: An toà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 chính Viễn thông, 2006 [2] Danh sách các website bị lỗi SQL injection: http://www.security.com.vn/ [3] SQL Injection FAQ: http://www.sqlsecurity.com/DesktopDefault.aspx?... 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 [5] Preventing SQL Injection: http://www.owasp.org/asac/input_validation /sql. shtml [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... truy vấn • Thường xuyên kiểm tra, quét ứng dụng bằng những công cụ mới nhất • Dùng lá chắn tốt nhất có thể cho từng lớp tương tác Nhóm sinh viên thực hiện: 1 B 20 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân KẾT LUẬN SQL Injection là một trong những kiểu hack website phổ biến hiện nay Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng... cả các bảng dữ liệu 2.3 Dạng tấn công sử dụng câu lệnh INSERT Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để tham gia Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể Nhóm sinh viên thực hiện: 1 B 16 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân xem và hiệu chỉnh thông tin của mình SQL injection có thể được dùng khi ... 12 Lớp M14CQTE02- Báo cáo môn: An toàn Thông tin Nâng cao Dậu GVHD: TS Hoàng Xuân 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... 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. .. 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 toàn Thông