Tổng quan về lỗ hổng SQL Injection và cách thức nhận diện lỗ hổng SQL injection, các phương pháp hiện lỗi SQL injection. Tìm hiểu phương pháp phát hiện lỗ hổng SQL Injection dựa trên thuật toán băm, trên cơ sở đó xây dựng được ứng dụng thử nghiệm có khả năng phát hiện lỗi SQL Injection theo thuật toán đã được nghiên cứu.
MỤC LỤC DANH MỤC KÍ HIỆU VÀ VIẾT TẮT II DANH MỤC HÌNH VẼ III DANH MỤC BẢNG .V LỜI CẢM ƠN VI LỜI NÓI ĐẦU VII CHƯƠNG TỔNG QUAN VỀ LỖ HỔNG SQL INJECTION .1 1.1 Đặc trưng ứng dụng sử dụng sở liệu .1 1.2 SQL Injection tính nghiêm trọng vấn đề an ninh sở liệu 1.2.1 Khái niệm SQL Injection .2 1.2.2 Các lỗi SQL Injection 1.2.3 SQL Injection vấn đề an ninh sở liệu 1.3 KẾT LUẬN .8 CHƯƠNG MỘT SỐ PHƯƠNG PHÁT PHÁT HIỆN LỖ HỔNG SQL INJECTION 2.1 Nhận diện điểm yếu SQL injection ứng dụng Web .9 2.1.1 Thăm dò dựa phản hồi 2.1.2 Cơ chế sinh truy vấn SQL bên ứng dụng phương pháp chèn truy vấn SQL .12 2.2 Các phương pháp công phổ biến .15 2.2.1 Tấn cơng khai thác liệu thơng qua tốn tử UNION .15 2.2.2 Truy vấn lồng tương quan 20 2.2.3 Khai thác thông qua câu lệnh điều kiện 25 2.2.4 Blind SQL Injection – phương thức công nâng cao 27 2.2.5 Vấn đề qua mặt lọc tham số đầu vào .39 2.3 Một số phương pháp phát lỗ hổng SQL Injection 43 2.3.1 Sử dụng machine learning 44 2.3.2 Phát lỗ hổng SQL Injection dựa thuật toán băm 45 2.4 KẾT LUẬN 48 CHƯƠNG ĐỀ XUẤT ỨNG DỤNG PHƯƠNG PHÁP PHÁT HIỆN LỖ HỔNG SQL INJECTION DỰA TRÊN THUẬT TOÁN BĂM 49 3.1 Giới thiệu chung 49 3.2 Phân tích thiết kế công cụ phát lỗ hổng SQL injection dựa thuật toán băm 50 3.2.1 Phân tích chức cơng cụ 50 3.2.2 Nguyên lý hoạt động công cụ 58 3.2.3 Thử nghiệm công cụ 59 3.3 KẾT LUẬN 64 KẾT LUẬN 65 TÀI LIỆU THAM KHẢO 66 Danh mục kí hiệu viết tắt SQL Structured Query Language DB2 RDBMS: Relational Database Management System HTTP HyperText Transfer Protocol OWASP Open Web Application Security Project J2EE Java Platform, Enterprise Edition DBMS Database Management System IDS Intrusion Prevention System ASCII American Standard Code for Information Interchange URL Uniform Resource Locator DANH MỤC HÌNH Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Y 1.1 Mơ hình ứng dụng 3-tier 1.2 Mơ hình ứng dụng 4-tier 1.3 Minh họa cho truy vấn thông thường tới website 1.4 Minh họa cho hệ thống tồn lỗ hổng SQL Injection 1.5 Minh họa cho hệ thống không tồn lỗ hổng SQL Injection 1.6 10 lỗ hổng bảo mật phổ biến xuất website 1.7 Lỗ hổng ứng dụng web 2.1 Tham số chèn vào truy vấn 14 2.2.Trang nạn nhân ban đầu 16 2.3.Trang nạn nhân, order by 17 2.4.Trang nạn nhân order by 20 17 2.5.Trang web nạn nhân, kiểm tra cột 18 2.6.Tìm cột “mang” liệu 19 2.7 “Nhúng” thông tin khai thác vào cột “mang’ liệu 19 2.8 Kết khai thác thành công lỗi SQL injection 20 2.9 trang web chứa lỗ hổng SQL injection 21 2.10 Khai thác lỗi SQL injection với union 22 2.11 Trang web nạn nhân với id = -1 22 2.12 Thông tin sở liệu .23 2.13 Khai thác lỗ hỏng SQL injection sử dụng information_schema 24 2.14 bảng ‘user’ sở liệu 24 2.15 truy vấn trích xuất thơng tin câu lệnh union 25 2.16 Trang web có lỗi Blind SQL injection 28 2.17 Chỉnh sửa liệu gửi lên máy chủ web .30 2.18 Kết trả lỗi Blind SQL injection .31 2.19 Khai thác lỗi SQL injection sử dụng substring 31 2.20 Kết khai thác lỗi Blind SQL injection 32 2.21 Truy vấn ban đầu 34 2.22 Truy vấn khai thác sinh độ trễ 35 2.23 Truy vấn Information_schema 36 2.24 Truy vấn ban đầu 36 2.25 Mệnh đề suy luận có giá trị sai 37 Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 2.26 Mệnh đề suy luận có giá trị .38 2.27 Phát SQL injection sử dụng machine learning 44 3.1 Mơ hình cơng cụ phát lỗ hổng SQL Injection 50 3.3 Dữ liệu thẻ .51 3.4 Sơ đồ hoạt động chức thu thập thông tin 51 3.5 Kết tìm kiếm URL có website cơng cụ 53 3.6 Payload SQL injection 57 3.7 Payload chia theo loại sở liệu 57 3.8 Lưu đồ hoạt động chương trình .58 3.9 Giao diện web mutilidae .59 3.10 Kết thu thập thông tin công cụ 60 3.11 Công cụ cảnh báo phát lỗ hổng 60 3.12 Giao diện đăng nhập 61 3.13 Lỗi SQL injection chương trình phát 61 3.14 Giao diện website bán hàng 62 3.15 Lỗi SQL Injection website 62 3.16 Kết thu thập thông tin từ website 63 3.17 Công cụ phát lỗ hổng SQL Injection 63 DANH MỤC BẢNG Bảng 2.1.Các ký tự comment thường gặp .15 Bảng 2.2 Các thông điêp cảnh bảo lỗi 46 Bảng 2.3 Ví dụ Payload .47 Bảng 3.1 Kết so sánh công cụ phát 64 LỜI NÓI ĐẦU Sự phát triển vượt bậc công nghệ web đem lại nhiều thuận lợi cho người sử dụng nhà phát triển Nhưng với phát triển ứng dụng web trở thành mục tiêu ưu thích kẻ công Mục tiêu hacker khác nhau, cơng xuất phát từ thiện chí, nhằm tìm điểm yếu thơng báo cho nhà quản trị hệ thống Nghiêm trọng cơng để phục vụ cho mục đích xấu tống tiền, lấy cắp thông tin nhạy cảm thẻ tín dụng, mua hàng thơng qua tài khoản người khác… Trong hình thức cơng công cách chèn mã lệnh (injection) phổ biến Tấn công website kỹ thuật SQL Injection từ lâu mối quan tâm bảo mật hàng đầu nhà phát triển web chủ sở hữu website Xuất phát từ lý trên, em chọn đề tài “ phát lỗ hổng SQL Injection đựa thuật toán băm “ làm đề tài nghiên cứu Mục tiêu đặt thực đồ án: Tìm hiểu phương pháp phát lỗ hổng SQL Injection dựa thuật tốn băm, sở xây dựng ứng dụng thử nghiệm có khả phát lỗi SQL Injection theo thuật toán nghiên cứu Nội dung đồ án chia thành chương sau: Chương : Tổng quan lỗ hổng SQL Injection Chương trình bày đặc điểm ứng dụng sử dụng sở liệu, lỗ hổng SQL injection nguyên nhân xảy lỗ hổng SQL injection Chương : Một số phương phát phát lỗ hổng SQL Injection Chương trình bày cách thức nhận diện lỗ hổng SQL injection, phương pháp lỗi SQL injection Ngồi ra, Chương trình bày phương pháp phát lỗi SQL injection Chương : Đề xuất ứng dụng phương pháp phát lỗ hổng SQL Injection dựa thuật toán băm Chương trình bày đươc cách thức ứng dụng phương pháp phát lỗ hổng SQL injection dựa thuật toán băm đưa kết thử nghiệm Sau thời gian khoảng thời gian thực đồ án, mục tiêu đạt Tuy nhiên thời gian thực đồ án tương đối ngắn nên chắn khơng tránh khỏi thiếu sót Rất mong góp ý thầy cô để đồ án hoàn thiện TỔNG QUAN VỀ LỖ HỔNG SQL INJECTION Đặc trưng ứng dụng sử dụng sở liệu Khơng khó để nhận tại, ứng dụng ph ổ biến chiếm thị phần doanh thu cao nh ững ứng d ụng h ỗ tr ợ tính quản lý Dữ liệu thứ sống hoạt động nghiệp v ụ Chính lý đó, ứng dụng nghiệp vụ đ ều xây d ựng mơ hình phát triển gắn liền với sở liệu An toàn d ữ li ệu đặt nặng lên tính an toàn bảo mật ứng dụng Web kết n ối t ới c sở liệu Các mô hình phát triển ứng dụng Web sử d ụng ph ổ bi ến 3-tier, có số c ải tiến, m r ộng mơ hình nhằm mục đích riêng Hình 1.1 Mơ hình ứng dụng 3-tier Hình 1.2 Mơ hình ứng dụng 4-tier Các mơ hình ln có số điểm chung, database server ch ỉ làm nhiệm vụ lưu trữ liệu, database hồi đáp truy vấn liệu đ ược xây dựng theo chuẩn (ví dụ SQL) Mọi thao tác xử lý liệu input, output database server ứng dụng web tầng Logic xử lý Các vấn đề an ninh phát sinh đa phần nằm tầng SQL Injection tính nghiêm trọng vấn đề an ninh sở liệu Cơ sở liệu(database) coi "trái tim" hầu hết website Nó chứa đựng liệu cần thiết để website chạy lưu trữ thơng tin phát sinh q trình chạy Nó lưu trữ thơng tin cá nhân , thẻ tín dụng , mật khách hàng , user chí Administrator Để lấy thơng tin cần thiết từ sở liệu câu lệnh SQL đảm đương trách nhiệm thực yêu cầu truy vấn đưa từ phía người sử dụng: người dùng đăng nhập vào hệ thống, lấy thơng tin web… cần sử dụng câu lệnh SQL, hay nói cách khác, câu lệnh SQL đóng vai trò quan trọng hệ thống web 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 [3] Hình thái SQL Injection bao gồm việc chèn trực tiếp mã vào tham số mà ghép vào câu lệnh SQL (quá trình g ọi sinh truy vấn SQL động) để tạo thành truy vấn ứng dụng gửi tới máy ch ủ database Một cách cơng khác trực tiếp hơn, chèn mã độc vào xâu mà đích đến việc lưu trữ bảng t ển d ữ li ệu (metadata) Khi chuỗi ghép vào câu lệnh SQL đo ạn mã chạy Khi ứng dụng Web thất bại việc lọc tham số đầu vào (được dùng làm nguyên liệu cho trình sinh SQL động), dùng hình thức tham số hóa (parameterize) kẻ cơng dễ dàng ều ch ỉnh trình xây dựng truy vấn SQL Một kẻ cơng có th ể s ửa câu truy v ấn SQL, truy vấn SQL muốn thực thi với quy ền người sở hữu ứng dụng, thiệt hại gây tùy theo quy ền hạn cấp SQL Injection dạng công dễ thực hiện, hầu hết thao tác người cơng cần thực với trình ệt web, có th ể kèm theo ứng dụng proxy server Chính đơn giản bất c ứ học cách tiến hành công Lỗi bắt nguồn t mã nguồn ứng dụng web từ phía database, th ế bất c ứ thành phần ứng dụng mà người dùng tương tác để điều ển nội dung (ví dụ : form, tham số URL, cookie, tham số referrer, user-agent, …) sử dụng để tiến hành chèn truy vấn có hại Để hiểu rõ SQL Injection, xem m ột ví d ụ minh h ọa sau Khi người sử dụng truy cập vào website tin t ức bấm vào m ột tin có mã số đường dẫn gửi tới máy ch ủ web có n ội dung nh sau: Khi đó, để cung cấp nội dung tin số trả cho người sử d ụng, website truy vấn tới sở liệu để lấy tin Câu truy vấn SQL người l ập trình viết có cấu trúc sau: SELECT * FROM News WHERE NewsId = " + N_ID + " Trong trường hợp với yêu cầu lấy tin số biến N_ID = Kết qu ả câu truy vấn SQL thật tới CSDL là: SELECT * FROM News WHERE NewsId = Do sơ xuất lập trình viên lập trình, khơng ki ểm tra tính hợp lệ N_ID trước thực thi câu truy vấn SQL, hacker có th ể l ợi d ụng để chèn câu truy vấn nguy hiểm tới CSDL Chúng ta thấy phần bội đậm hình minh họa m ột câu truy vấn độc hại hacker chèn vào Câu truy vấn đ ược th ực thi với câu truy vấn người lập trình viết khiến thơng tin CSDL bị xóa SELECT * FROM News WHERE NewsId = 1; DELETE FROM NEWS WHERE NewsId=2 Dưới sơ đồ kết nối ví dụ trên: Hình 1.3 Minh họa cho truy vấn thơng thường tới website Hình 1.4 Minh họa cho hệ thống tồn lỗ hổng SQL Injection Hình 1.5 Minh họa cho hệ thống không tồn lỗ hổng SQL Injection Như thấy, lỗi SQL Injection xảy website khơng lập trình tốt cấu hình máy chủ tốt Vì vậy, hệ thống khơng kiểm soát chặt chẽ tham số đầu vào cho câu truy vấn SQL, dẫn đến bị hacker lợi dụng để chèn vào câu truy vấn nguy hiểm CSDL Tấn công SQL Injection vào website hình thức cơng phổ biến giới Các lỗi SQL Injection a Không kiểm tra ký tự thoái 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 [5]: 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'; Sử dụng machine learning Phát truy vấn bất thường Hình 2.34 Phát SQL injection sử dụng machine learning Hệ thống tự động phát truy vấn bất thường dựa vào nhiều dấu hiệu định sẵn Hệ thống cần phải thực Training phase để học tập dấu hiệu cho việc phát công SQL injection Training phase chia làm hai phần Phần đâu tiên, liệu cung cấp nhằm xây dựng cấu hình liên quan đến tham số Nó liệu truy vấn bình thường Do trình hệ thống tìm hiểu cách truy vấn thông thường Phần tiếp theo, phần đào tạo Trong phần này, tham số cấu hình khơng cập nhật Thay vào việc phân tích, đánh giá việc xây dựng tính xem phù hợp với mơ hình đào tạo chưa Tiếp theo, với mơ hình, dị thường truy vấn tính điểm vào lưu lại thành mức độ Trong giai đoạn phát hiện, truy vấn tính điểm Nếu điểm truy vấn lớn mức lưu trữ, đưa cảnh báo [16] Phân phối kiện Phân phối kiện có trách nhiệm cung cấp hệ thống phát xâm nhập với dòng truy vấn SQL Điều quan trọng với câu lệnh SQL ứng dụ bị theo dõi sinh báo thực Vì ta khơng có biết chất lượng ứng dụng, nên ta không dựa vào chế ứng dụng cụ thể để thực báo cáo Việc phân phối kiện hoạt động máy chủ ứng dụng, mơi trường máy chủ có quyền truy cập thơng tin q trình thực truy vấn có thơng tin bảo mật liên quan, chẳng hạn tên tập tin kịch thực Việc sinh log thực cách sử dụng 44 phiên sửa đổi thư viện hệ thống cung cấp kết nối ứng dụng sở liệu Tập hợp loại liệu có sẵn người dùng mở rộng IDS cung cấp giao diện dễ dàng để xác định kiểu liệu nên xử lý hệ thống phát xâm nhập [16] Trình phân tích cú pháp Trình phân tích cú pháp xử lý truy vấn SQL đến tạo truy vấn cấp cao Đầu trình phân tích cú pháp có định giạng chuỗi token Mỗi token có cờ cho biết liệu mã thông báo số hay không Hằng số phần tử truy vấn SQL nên chứa liệu đầu vào người dùng cung cấp Tokens đại diện cho tên trường sở liệu sinh thuộc tính datatype Kiểu liệu tìm thấy cách tra cứu tên trường tên bảng tương ứng sở liệu Kiểu suy luận thực số chứa truy vấn sử dụng quy tắc sau: - Hằng số so sánh với trường sử dụng tốn tử SQL có loại liệu đặt cho kiểu liệu trường mà so sánh - Hằng số chèn vào bảng có kiểu liệu đặt cho kiểu liệu trường chèn vào [16] d) Ưu nhược điểm phương pháp Mặc dù phương pháp phát SQL injection sử dụng machinelearning phát lỗ hổng SQL injction việc triển khai phương pháp đòi hỏi lượng tài nguyên lớn việc triển khai phương pháp vô phức tạp Độ xác phương pháp phụ thuộc vào độ đa dạng tập mẫu dùng để luyện tập cho máy học Phát lỗ hổng SQL Injection dựa thuật toán băm Phương pháp phát lỗ hổng SQL Injection dựa thuật toán băm việc sử dụng băm liệu trả từ máy chủ web so sánh kết nối hợp lệ so với kết nối chứa payload từ xác định lỗ hổng SQL injection [1] Sơ lược phương pháp Sau request chưa payload, hệ thống kiểm tra requset đưa phản hồi HTTP mã trạng thái cung cấp thông tin trạng thái request Nếu mã trạng thái 5xx, có thơng điệp báo lỗi Nếu mã trạng thái 4xx, tức mục reqest không tồn Nếu mã trạng thái 3xx, cần phải làm thêm số việc để chuyển hướng 45 Nếu mã trạng thái 1xx, ta cần phải đợi Còn trả mã trạng thái có dạng 2xx nhận nội dung HTML sau qua điểm input để tìm lỗ hổng Nếu thơng điệp trả trùng khớp với thông điệp báo lỗi bảng sau, tức phát lỗ hổng Bời request khơng kiểm tra ứng dụng Và điểm mà hacker công vào cấu trúc logic truy vấn ban đầu Tuy nhiên cần phải hiểu rõ để thực Injection cách xác "supplied argument is not a valid MySQL",//MySQL "mysql_fetch_array\\(\\)", "on MySQL result index" "You have on error in your SQL syntax;", Bảng 2.2 Các thông điêp cảnh bảo lỗi Các cách tiếp cận khác để phát SQL đọc lập gửi request độc hại đến ứng dụng web so sánh giống khác phản hồi, để xem trang bị cơng hay khơng Vấn đề phương pháp phát SQL Injection khơng thể phát lỗi chưa định nghĩa, không hoạt động tốt với tất ngơn ngữ, ví dụ tiếng Pháp, tiếng Ả rập ( ngôn ngữ cho phép sử dụng dấu kí tự đặc biệt) dùng để viết vào trang web Vì phải xác định tất phản hồi đáp ứng loại ngôn ngữ cho sở liệu khác Ví dụ dùng payload (‘1’ or ‘1’=1 ) kiểm tra phản hồi có (logout, ngắt kết nối, có nghĩa thời gian để tìm kiếm tất liệu sở liệu) Với phản hồi nhiều thời gian khó khăn q trình kiểm tra tìm lỗi Vì cần đưa phương pháp tốt tiết kiệm thời gian Vì phương pháp chia làm chức bao gồm crawler, parser scanner Mơ hình crawler Mơ hình nhện, mơ hình dùng chức để tương tác hệ thống phát lỗi ứng dụng web Nó sinh có request từ URL Khi máy chủ web nhận request này, trả phản hồi tới người dùng Trong phản hồi này, chủ yếu nhận thông tin sau: Mã trạng thái( status-code), cookies, thông điệp với nội dung HTML Đây 46 phần crawler, để lấy thông tin quan trọng URL input vào Mơ hình Injector Mơ hình việc chúng tagửi payload lỗi đến tham số bị ảnh hưởng HTTP request, mơ hình gửi khối payload công gửi payload đơn lẻ nhằm tiết kiệm tối đa thời gian dành cho trình kiểm tra Các payload chia vào tập độ dài tập định nghĩa độ dài tối đa mà input nhận được, input khơng có độ dài tối đa, ta áp dụng tối đa số tệp payload mà ta có Sau kiểm tra tất payload khơng có lỗi phát hiện, tệp payload tách thành tệp nhỏ tiến hành thử lại với việc thay vài kí tự payload Với mơ hình Injector ta thấy lỗi gửi payload mà phải gửi payload nhiều lần phát sinh lỗi Đơn lẻ Tệp payload 'OR'1 'OR'1'OR1 - "OR""=""OR 1=1 - '=' 'OR - 'OR '1' OR - "OR""=" "OR""=" "OR = - '=' "OR = - "OR = Bảng 2.3 Ví dụ Payload Mơ hình phân tích Phương pháp phát lỗ hổng SQL injection thử dùng giá trị hash để kiểm tra xem có lỗ hổng hay khơng, request gửi request bình thường ví dụ http://localhost/index.php?id=1 sau tính tốn giá trị hash cho phản hồi trang web coi giá trị Signature Sau tất request độc hại gửi phản hồi nhận tính tốn hash cho đem so sánh với giá trị Signature Bất kì thay đổi ứng dụng web phương pháp lỗi phát sinh payload hacker có ảnh hưởng tới giá trị Hash, thay đổi nhỏ phản hồi lỗi chưa phát Ưu nhược điểm Phương pháp phát lỗ hổng SQL injection dễ dàng triển khai, tiêu tốn tài nguyên Tuy nhiên phát lỗ hổng SQL injection dạng 47 KẾT LUẬN 48 Đề xuất ứng dụng phương pháp phát lỗ hổng SQL Injection dựa thuật toán băm Qua chương trước hiểu rõ phương pháp phát khai thác lỗi SQL injection Trong chương này, em trình bày mơ hình hoạt động cách thức xây dựng công cụ giúp xác định lỗ hổng SQL injection dựa thuật toán băm Giới thiệu chung Phương pháp phát lỗ hổng SQL injectin dựa thuật toán băm ứng dụng để xây dựng cơng cụ có khả phát lỗ hổng SQL injection ứng dụng web có sử dụng hệ quản trị sở liệu như: MySQL, SQL server, MSSQL Với trang web cần kiềm tra,Công cụ xây dựng tự động thu thập tồn địa liên kết có website Với đường dẫn, địa liên kết công cụ tìm kiểm form đăng nhập, địa gửi liệu, phương thức gửi liệu tham số Từ cơng cụ thực tiêm payload có sẵn để phân tích, kiểm tra xem điểm trao đổi liệu có xảy lỗi SQL injection hay không Công cụ phát lỗ hổng SQL injection dựa thuật toán băm cho phép tự động phát lỗi SQL injection cách nhanh chóng, xác, đa dạng 49 Phân tích thiết kế cơng cụ phát lỗ hổng SQL injection dựa thuật toán băm Phân tích chức cơng cụ Hình 3.35 Mơ hình cơng cụ phát lỗ hổng SQL Injection Từ sơ đồ trên, ta thấy cơng cụ gồm chức chính: Thu thập thơng tin: có nhiệm vụ thu thập tồn liệu địa chỉ, đường link liên kết có website Với địa chỉ, đường link liên kết thu thập công cụ tiếp tục thực kết nối tới tìm kiếm thơng tin thẻ form có địa chỉ, đường link liên kết Tiếp tục với thẻ form, cơng cụ trích xuất thơng tin action (địa gửi liệu), method (phương pháp gửi liệu), tham số thẻ input Xử lý thông tin: Thành phần phân tích đưa nhận định: có nhiệm vụ gửi liệu từ payload có sẵn lên máy chủ ứng dụng web sử dụng thuật tốn băm nhằm phân tích xác định xem điểm nhập liệu có lỗi SQL injection hay không đưa cảnh báo 50 Chức thu thập thơng tin Trong chương trình phát lỗ hổng SQL injection dựa thuật toán băm chức thu thập thơng tin đảm nhiệm vai trò tìm kiếm tồn URL có website Với URL tìm kiếm tồn thẻ trích xuất thơng tin tham số, phương thức gửi liệ tên tham số thẻ Hình 3.36 Sơ đồ hoạt động chức thu thập thông tin Để thực tìm kiếm tồn URL có website Từ input đầu vào địa website, chương trình thực tìm kiếm tồn tham thẻ < href> có đường dẫn Ngồi chương trình có khả tìm kiếm theo chiều sâu Hình 3.37 Kết tìm kiếm URL có website cơng cụ Mã nguồn chương trình thực trích xuất thông tin từ thẻ ### Chức xử lý thông tin Chức xử lý thông tin đảm nhận nhiệm vụ thực gửi liệu, băm liệu kiểm tra kết băm nhằm đưa kết luận lỗ hổng SQL injection Tùy phương thức POST GET theo thẻ chương trình thực gửi liệu với phương thức tương ứng Mã nguồn chức gửi liệu 51 Trong trình thực băm liệu, chương trình sử dụng thuật tốn băm SHA1 nhằm đảm bảo khả xác cao Mã nguồn chức băm kiểm tra kết băm Để thực kiểm tra lỗi SQL injection da đạng phụ thuộc hoàn toàn vào payload sử dụng chương trình Tồn payload chương trình thiết kế lưu tập tin để dễ dàng theo dõi, quản lý cập nhật Với loại sở liệu khác lỗi SQL injection khác cần loại payload khác Hình 3.38 Payload SQL injection Hình 3.39 Payload chia theo loại sở liệu 52 Ngun lý hoạt động cơng cụ Hình 3.40 Lưu đồ hoạt động chương trình 53 Bước 1: Chương trình nhận liệu đầu vào địa website muốn kiểm tra lỗi SQL injection Bước 2: Thực tìm kiểm tồn URL có trọng website Bước 3: Với URL tìm thực kết nối tới địa URL tìm kiểm thẻ FORM trích xuất tham số Bước 4: Từ tham số trích xuất từ thẻ form thực gửi liệu với giá trị bình thường tới máy chủ web tính tốn giá trị hash dựa liệu trả Bước 5: Từ tham số trích xuất từ thẻ form gửi liệu với giá trị payload SQL injection tới máy chủ web tính tốn giá trị hash dựa liệu trả Bước 6: Thực kiểm so sánh hai giá trị băm Bước Bước Nếu hai giá trị khác đưa thơng báo phát lỗi SQL injection Nếu tiếp tục thực Bước với URL hết Thử nghiệm công cụ Để thử nghiệm công cụ, em sử dụng ứng dụng web mutilidae OWASP làm môi trường thử nghiệm Mutilidae ứng dụng web có chứa nhiều lỗ hổng có lỗ hổng SQL injection nhằm tạo môi trường luyện tập, kiểm thử cho chuyên gia an ninh mạng hàng đầu giới Địa website sau cài đặt http://localhost:8080 Hình 3.41 Giao diện web mutilidae Kiểm tra chức thu thập thơng tin cơng cụ: Hình 3.42 Kết thu thập thông tin công cụ Kiểm tra chức xử lý thơng tin Hình 3.43 Cơng cụ cảnh báo phát lỗ hổng Truy cập đường link localhost://index.php?page=login.php thử payload công cụ thông báo xác định website địa có chứa lỗi SQL injection 54 Hình 3.44 Giao diện đăng nhập Hình 3.45 Lỗi SQL injection chương trình phát Kết thử nghiệm website khác Hình 3.46 Giao diện website bán hàng Hình 3.47 Lỗi SQL Injection website Hình 3.48 Kết thu thập thơng tin từ website Hình 3.49 Cơng cụ phát lỗ hổng SQL Injection Đánh giá kết quả: Hiện nay, có nhiều cơng cụ phương pháp dò quét lỗ hổng SQL injection avaf phát triển, điển Acunetix, Sqlmap, W3af, Wapiti, T-sqli Đây cơng cụ tiêu biểu có khả phát lỗ hổng SQL injection xác mức cao Vì để đánh giá mức độ xác phương pháp chúng ta, việc cần làm so sánh kết dò qt với công cụ nêu trên mơi trường Có nhiều mơi trường dựng sẵn chứa lỗ hổng nhằm thử nghiệm công cụ, phần em sử dụng môi trường Owasp Multillidae Công cụ Sql map Acunetix W3af Công cụ phát theo thuật toán băm Owasp Multillidae X X X X Bảng 3.4 Kết so sánh công cụ phát Sau thử nghiệm với tất tảng trên, phương pháp sử dụng thuật tốn hash tỏ khơng thua việc phát lỗ hổng SQL injection Và 55 với phương pháp này, khắc phục vài điểm yếu phương pháp khác Ví dụ T-sqli: cơng cụ có chức có khả phát lỗi phát thay đổi thông báo lỗi content Nhưng cơng cụ viết tảng php 5.2.1 nên khơng tương thích với vài trang web sử dụng tảng khác Hướng phát triển: Có thể cải thiện giao diện phát triển thành công cụ riêng, nghiên cứu ứng dụng thuật toán vào việc phát dạng lỗ hổng khác Hoặc tích hợp thuật toán nghiên cứu vào số cơng cụ mã nguồn mở có 56 TÀI LIỆU THAM KHẢO [1] http://www.ijrcar.com/Volume_4_Issue_1/v4i106.pdf [2] https://www.rroij.com/open-access/hashing-technique sql-injectionattackdetection prevention.pdf [3] Chris Anley “(more) Advanced SQL Injection” NGSSoftware Insight Security Research Publication 2002 http://www.ngssoftware.com/papers/more_advanced_sql_injection.pdf [4] Luca Carettoni “HTTP Parameter Pollution” The OWASP Foundation http://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf [5] Justin Clarke “SQL Injection Attack and Defense” Syngress Publishing, Inc 2009 [6] Bernardo Damele A.G “SQL Injection: Not Only AND 1=1” http://www.slideshare.net/inquis/sql-injection-not-only-and-11-updated [7] Dmitri Evteev “Methods to Bypass a Web Application Firewall” Positive Technology research http://www.ptsecurity.com/download/PT-devteev-CC-WAF-ENG.pdf [8] Dmitri Evteev “Methods of quick exploitation of Blind SQL Injection” Positive Technology research http://www.ptsecurity.com/download/PT-devteev-FAST-blind-SQLInjection.pdf [9] OWASP Foundation “Securing WebGoat Using ModSecurity” http://www.owasp.org/index.php/Category:OWASP_Securing_WebGoat_using_M odSecurity_Project [10] OWASP Foundation “OWASP WebGoat and WebScarab Project” http://www.owasp.org/index.php/Category:OWASP_Projec [11] Cameron HotchKies “Blind SQL Injection Automation Techniques” Blackhat Briefings USA 2004 https://www.blackhat.com/presentations/bh-usa04/bh-us-04-hotchkies/bh-us-04-hotchkies.pdf [12] Stephen Kost “An Introduction to SQL Injection Attacks for Oracle Developers - Jan 2004” http://www.integrigy.com/securityresources/whitepapers/Integrigy_Oracle_SQL_Injection_Attacks.pdf [13] Alexander KornBrust “Bypassing Oracle dbms_assert” Red Database Security 57 http://www.red-database-security.com/wp/bypass_dbms_assert.pdf [14] David Litchfield “Bypassing Oracle DBMS_ASSERT (in certain situation) July 2008” http://www.databasesecurity.com/oracle/Bypassing-DBMS_ASSERT.pdf t [15]https://iseclab.org/media/uploads/zotero/A_Learningbased_Approach_to_the_Detection_of_SQL_Attacks_Valeur_et_al_2005.pdf 58 ... lỗ hổng SQL injection nguyên nhân xảy lỗ hổng SQL injection Chương trình bày cách thức nhận diễn lỗ hổng SQL injection số phương pháp khai thác lỗ hổng SQL injection Một số phương phát phát lỗ. .. injection nguyên nhân xảy lỗ hổng SQL injection Chương : Một số phương phát phát lỗ hổng SQL Injection Chương trình bày cách thức nhận diện lỗ hổng SQL injection, phương pháp lỗi SQL injection Ngồi ra,... phát lỗi SQL injection Chương : Đề xuất ứng dụng phương pháp phát lỗ hổng SQL Injection dựa thuật tốn băm Chương trình bày đươc cách thức ứng dụng phương pháp phát lỗ hổng SQL injection dựa thuật