TÌM HIỂU về SQL INJECTION

18 907 2
TÌM HIỂU về SQL INJECTION

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thế nào là Sql Injection, tấn công Sql Injection là gì, các phương pháp tấn công Sql Injection phổ biến, các công cụ trong tấn công website bằng Sql Injection. Cách phát hiện trang web bị lỗi sql injection và cách khai thác.

TÌM HIỂU INJECTION VỀ TẤN CƠNG SQL TÌM HIỂU VỀ SQL INJECTION 1.1 SQL Injection gì? Khái niệm SQL Injection Việc thiết kế đưa website vào hoạt động ln đòi hỏi nhà phát triển phải quan tâm đến vấn đề an toàn, bảo mật nhằm giảm thiểu tối đa khả bị tin tặc công Thường nhà phát triển tập trung vào vấn đề an toàn hệ điều hành, hệ quản trị CSDL, webserver… Chẳng hạn hổng bảo mật IIS Tuy nhiên, có nguy tiềm ẩn quan tâm đoạn mã ứng dụng Một số cơng SQL Injection SQL Injection cách thức công vào lỗ hổng website nhằm vào sở liệu, cách chèn thêm đoạn query SQL để làm sai lệch câu lệnh truy vấn, từ phá hủy website lấy sở liệu 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ừ điển 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 điều chỉnh trình xây dựng truy vấn SQL Một kẻ cơng 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 cỏ thể 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 duyệt web, cỏ thể kèm theo ứng dụng proxy server Chính vi đơn giản 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, bất cử thảnh phần ứng dụng mà người dùng tương tác để điều khiể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 Hậu tai hại cho phép kẻ cơng thực thao tác xóa, hiệu chỉnh, … có tồn quyền sở liệu ứng dụng, chí server mà ứng dụng chạy Lỗi thường xảy ứng dụng web có liệu quản lí hệ quản trị sở liệu SQL Server, MySQL, Oracle, DB2, Sysbase… Mục đích cơng SQL Injection 1.2 Mục đích SQL injection truy cập vào sở liệu bất hợp pháp khai thác thông tin từ sở liệu Dựa cách sử dụng xử lý liệu người dùng cung cấp, SQL injection sử dụng để thực kiểu cơng sau: • Authentication Bypass: hacker đăng nhập vào ứng dụng mà khơng 1.3 • cần cung cấp username password, chí chiếm quyền quản trị Information Disclosure: người công lấy thông tin nhạy cảm lưu • giữ sở liệu Compromised Data Integrity: thực deface trang web, chèn nội dung độc • hại lên trang web, thay đổi nội dung sở liệu Compromised Availability of Data: người cơng xóa thơng tin sở • liệu, xóa log, thơng tin kiểm chứng sở liệu Remote Code Execution: cho phép người công làm hại hệ thống host SQL Injection vấn đề an ninh sở liệu a Các thống kê an ninh Chúng ta xem xét báo cáo an ninh ứng dụng Web gần Whitehat, tổ chức có uy tín việc nghiên cứu hỗ trợ vấn đề an ninh mạng  Thống kê 10 lỗi bảo mật nghiêm trọng Trích từ nguồn: http://community whitehatsec.com/home/resource/stats html Kết thống kê trình bày tháng 3/2008: 10 điểm yếu phổ biến năm 2008 Kết thống kê trình bày tháng 2/2009:  Thống kê thời gian trung bình cần để khắc phục lỗi bảo mật Kết thống kê trình bày tháng 8/2008: Kết thống kê trình bày tháng 2/2009:  Thống kê tỉ lệ điểm yếu thường xuyên bị khai thác Thống kê trích báo đãng tạp chí computerworld tháng 2/2010 b Đánh giá kết thống kê Dựa vào thống kê cỗ thể rút vài nhận xét sau lỗi SQL Injection: • Là số lỗi bảo mật phổ biến • Xác suất gặp phải lỗ hổng bảo mật loại trang web cao • Được sử dụng nhiều, lý phần tính đơn giản, khơng đòi hỏi nhiều cơng cụ hỗ trợ • Thời gian khắc phục điểm yếu thường lâu, hậu thường nặng nề Trên thực tế, công SQL Injection thường nhắm đến sở liệu mang tính thương mại, ví dụ Trang web thương mại điện tử 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 Bản chất điểm yếu 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ì mã nguồn thường kéo dài nên lỗi SQL Injection chậm khắc phục triệt để Với tính nghiêm trọng cơng, tính dễ thực công khiến cho SQL Injection thờ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 toàn diện hơn, mối nguy hiểm giảm đi, số liệu thống kê cho thấy vấn đề chưa giải triệt để 2.1 Các dạng công SQL Injection phổ biến Dạng công vượt qua kiểm tra lúc đă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 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 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 cách truyền vào input hợp lệ, truy vấn ln trả kết (true) có điều kiện ln đúng, kẻ cơng dễ dàng vượt qua module đăng nhập để truy cập trái phép vào hệ thống thơng tin Ví dụ, trường hợp sử dụng ASP, người ta dùng trang: trang HTML để hiển thị Form nhập liệu trang ASP để xử lý thông tin nhập vào từ phía người dùng sau: - Trang nhập liệu: login.htm Username: Password: - Trang xử lý nhập liệu: execlogin.asp Chỗ sơ hở đoạn mã xử lý nhập liệu 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 tin tặc điều khiển câu truy vấn thực Ví dụ, người dùng nhập chuỗi ngoặc sau vào ô nhập liệu username/password trang login.htm là:(‘’ OR ‘1’=’1’) Lúc này, câu truy vấn gọi thực là: SELECT * FROM T_USERS WHERE USR_NAME =’’ OR ‘1’=’1’ and USR_PASSWORD= ’’ OR ‘1’= ’1’ 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 Ví dụ, trang tìm kiếm Các 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, ngồi 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 Giả sử đoạn mã nhập vào là: ' DROP TABLE T_AUTHORS Câu truy vấn thực việc xóa bảng 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 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 Xét ví dụ sau: mẫu form dùng để đăng kí tài khoản sau: 10 Khi 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, 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 Vậy 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 Rất đơ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ư: 11 ‘UNION SELECT name FROM sysobjects WHERE xtype = ‘U’’ liệt kê tên tất bảng liệu 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 ‘cmdd.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 Nếu cài SQL Server chế độ mặc định SQL Server chạy SYSTEM, tương đương mức truy cập Windows Có thể dùng master xp_cmdshell để thi hành lệnh từ xa: ;exec master xp_cmdshell ‘ping 10.10.1.2’— Thử dùng nháy đôi (“) nháy đơn (‘) không làm việc Dưới số extended stored procedure mà hacker thường sử dụng để thực thi câu lệnh xem nội dung thông tin máy nạn nhân: • Xp_availablemedia: Hiển thị ổ đĩa hành máy • Xp_dirtree: Hiển thị tất thư mục kể thư mục • Xp_loginconfig: Lấy thơng tin chế độ bảo mật Server • Xp_makecad: Cho phép người sử dụng tạo tập tin lưu trữ • Server (hay tập tin mà Server truy xuất) Xp_ntsec_enumdomain: liệt kê domain mà Server truy xuất 3.1 Kỹ thuật cơng SQL Injection Tìm kiếm mục tiêu Hiện việc lập trình website khơng dựa vào việc viết dòng code mà sử dụng framework, thân framework tích hợp bảo mật mức nên SQL Injection khơng đất sống website xây dựng dựa framework 12 Tuy vậy, hàng triệu website ngồi bị lỗi nên việc phải làm tìm website tiềm để thực hành Việc tìm kiếm đơn giản, bạn vào Google gõ dòng lệnh sau: inurl:"product.php?id=" Lệnh trả kết tìm kiếm website bán hàng viết PHP, nhiều khả dính lỗi SQL Injection Hoặc bạn gõ: inurl:"product.php?id=" site:vn Để tìm kiếm trang web có nguồn gốc từ Việt Nam Ví dụ tìm trang sau: http://biohd.com.vn/product_detail.php?id=158 Để biết trang có bị lỗi hay không, thêm dấu nháy đơn vào cuối địa trang web: http://biohd.com.vn/product_detail.php?id=158' Nếu không thấy thông báo lỗi trang web load lại bình thường chứng tỏ miễn nhiễm với SQL Injection, bạn tìm trang khác, giao diện trang web bị lỗi bất thường sau, chứng tỏ tìm "con mồi": 13 3.2 Phát Một cách thông thường, để phát ứng dụng web có dính lỗi SQL Injection hay khơng thêm vào câu truy vấn meta character hệ quản trị sở liệu, chẳng hạn dấu nháy đơn (single quote), dấu nháy kép (double quote), dấu chấm phẩy (semi colon) ký tự comment ( , ##, /**/)… chờ xem ứng dụng web xứ lý câu truy vấn Ví dụ muốn xem item có id =2 ta request tới liên kết http://site/item.php?id=2 Để xem liên kết có dính lỗi SQL Injection hay khơng ta thêm vào cuối liên kết meta character nói trên, chẳng hạn ta thêm vào dấu nháy đơn http://site/item.php?id=2’ Nếu ứng dụng web trả cho nội dung item có id=2 đưa thơng báo việc khơng tìm item đưa tới trang khác (một trang thông báo lỗi mặc định hay trang chủ chẳng hạn), ta kết luận ứng dụng xứ lý tốt tham số đầu vào trước thao tác sở liệu Ngược lại, thấy xuất thông báo lỗi (exception) từ MySQL, MSSQL… ứng dụng - web dính lỗi SQL Injection 3.3 Thu thập liệu quan trọng Xác định số lượng cột mệnh đề select Khi khai thác SQLInjection, thường sử dụng hay nhiều mệnh đề select phụ(subselect), điều thực thơng qua từ khóa union Union từ khóa dùng để gộp kết nhiều mệnh đề select mệnh đề select đòi hỏi số lượng trường phải số lượng trường select mệnh đề select ban đầu Nếu số trường select mệnh đề select sau union không số lượng trường select mệnh đề select đầu tiên, nhận thông báo lỗi Vậy để biết để biết xác mệnh đề select đầu tiền chọn trường Chúng ta thực thử dần cách tăng dần số lượng cột 14 mệnh đề select sau union (bắt đầu từ 1) Khi khơng thấy thơng báo lỗi xuất số lượng cột cần tìm Một cách khác để làm điều này, nhanh chóng sử dụng ‘order by’ Trong hệ quản trị sở liệu từ khóa ‘order by’ sử dụng để xếp thứ tự cho ghi thu mệnh để select Sau order bycó thể tên cột để xác định kết thu xếp theo giá trị cột (có thể tăng dần hay giảm dần) Sau order by số thứ tự vị trí cột Nếu giá trị sau order lớn số cột select thấy thơng báo lỗi - Xác định thông tin Để khai thác SQL Injection, cần biết số thông tin sở liệu tên bảng, tên cột, kiểu liệu cột… Giai đoạn đòi hỏi nhiều thời gian Tên bảng cột Chúng ta có nhiều cách để làm cơng việc này, cách • “đốn” nhanh chóng trường hợp cụ thể, cách hữu ích Ví dụ tên bảng tên quen thuộc : user, users, admin, administrator, staff, account… (chú ý tiền tố tbl_ hay lập trình viên sử dụng để đặt cho tên bảng) • Kiểu liệu Khi khai thác SQL Injection với hệ quản trị Microsoft SQL Server thường gặp phải bó buộc với kiểu liệu trường Trong mệnh đề select trước sau union, kiểu liệu trường tương ứng phải thống với 3.4 Xử lý thông tin thu Sau thu thập liệu quan trọng, tiến hành công thay đổi liệu trang web tuỳ theo mục đích cơng • Khi có tên tất column table, UPDATE INSERT record table 15 • Thực thay đổi password user login trực tiếp thực • thao tác quyền user Thực thay đổi giao diện trang web(deface) theo mục đích có tài khoản admin 4.1 Các biện pháp phòng chống cơng SQL Injection Kiểm sốt chặt chẽ liệu nhập vào Để 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 Trong trường hợp liệu nhập vào số, lỗi xuất phát từ việc thay giá trị tiên đoán liệu số chuỗi chứa câu lệnh SQL bất hợp pháp Để tránh điều này, đơn giản kiểm tra liệu có kiểu hay khơng hàm IsNumeric() Ngồi xây dựng hàm loại bỏ số kí tự từ khóa nguy hiểm như: ;, , select, insert, xp_, … khỏi chuỗi liệu nhập từ phía người dùng để hạn chế cơng dạng 4.2 Thiết lập cấu hình an tồn cho hệ quản trị sở liệu Cần có chế kiểm 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 Ngồi để tránh nguy từ SQL Injection attack, nên ý loại bỏ thơng tin kĩ thuật chứa thông điệp chuyển xuống cho người dùng ứng dụng có lỗi Các thơng báo lỗi thơng thường tiết lộ chi tiết kĩ thuật cho phép kẻ công biết điểm yếu hệ thống 4.3 Chuẩn hóa liệu Chúng ta đề cập đến số thao tác qua mặt lọc, phương thức phổ biến mã hỏa input định dạng đỏ gửi cho ứng dụng mà sau 16 input đỏ giải mã theo định dạng hacker mong muốn Ví dụ, ta có số cách mã hóa dấu nháy đơn sau: Biểu diễn Hình thức mã hóa %27 Mã hóa URL (URL encoding) %2527 Mã hóa kép URL (trường hợp dấu % %27 mã hóa ) %u0027 Biểu diễn dạng ký tự Unicode %u02b9 Biểu diễn dạng ký tự Unicode %ca%b9 Biểu diễn dạng ký tự Unicode ' Thuộc tính HTML ' Thuộc tính HTML dạng hexa ' Thuộc tính HTML dạng decimal Khơng phải tất hình thức biểu diễn thơng dịch thành dấu nháy đơn mong muốn mà tùy thuộc vào điều kiện cụ thể (ví dụ giải mã mức ứng dụng, giải mã WAF hay Web server, ) Nói chung khó dự đốn kết việc thơng dịch dạng mã hóa Chính lý trên, để thuận lợi cho trình kiểm tra liệu đầu vào đầu ra, cần xây dựng mơ hình chuẩn hóa liệu dạng đơn giản Một mơ hình xem xét như, ban đầu giải mã dạng URL, sau giải mã dạng HTML, thực hiên vài lần Tuy nhiên tin cậy thực giải mã theo định dạng phổ biến lần, phát dấu hiệu nghi vấn, từ chối liệu 4.4 Sử dụng giải pháp Database Firewall Database firewall dựa việc phân tích ngữ pháp, cấu trúc xác ngơn ngữ SQL (Highly accurate SQL grammar), giúp giám sát ngăn chặn luồng SQL nguy hại, trước kết nối tới CSDL (SQL injection 17 loại bỏ) Việc triển khai mơ hình database firewall khơng ảnh hưởng tới cấu trúc mơ hình 4.5 Một số phương pháp khác • Rewrite URL: nhằm mục đích che giấu biến GET URL, khiến cho kẻ cơng khó xác định phương hướng cơng • Thơng báo lỗi: không đưa thông báo lỗi rõ rang trang web người dùng nhập sai liệu Tránh bị hacker phán đoán cấu trúc câu lệnh 18 ... 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… Mục đích cơng SQL Injection 1.2 Mục đích SQL injection truy cập vào sở liệu bất hợp pháp khai thác... nhiễm với SQL Injection, bạn tìm trang khác, giao diện trang web bị lỗi bất thường sau, chứng tỏ tìm "con mồi": 13 3.2 Phát Một cách thơng thường, để phát ứng dụng web có dính lỗi SQL Injection. .. thơng báo lỗi (exception) từ MySQL, MSSQL… ứng dụng - web dính lỗi SQL Injection 3.3 Thu thập liệu quan trọng Xác định số lượng cột mệnh đề select Khi khai thác SQLInjection, thường sử dụng hay

Ngày đăng: 05/12/2017, 09:18

Từ khóa liên quan

Mục lục

  • 1. SQL Injection là gì?

    • 1.1. Khái niệm SQL Injection

    • 1.2. Mục đích của tấn công SQL Injection

    • 1.3. SQL Injection và vấn đề an ninh cơ sở dữ liệu

    • a. Các thống kê về an ninh

    • b. Đánh giá các kết quả thống kê

    • 2. Các dạng tấn công SQL Injection phổ biến

      • 2.1. Dạng tấn công vượt qua kiểm tra lúc đăng nhập

      • 2.2. Dạng tấn công sử dụng câu lệnh SELECT

      • 2.3. Dạng tấn công sử dụng câu lệnh INSERT

      • 2.4. Dạng tấn công sử dụng stored-procedures

      • 3. Kỹ thuật tấn công SQL Injection

        • 3.1. Tìm kiếm mục tiêu

        • Hiện nay thì hầu như việc lập trình website không dựa vào việc viết từng dòng code mà đều sử dụng các framework, bản thân các framework này đều đã tích hợp bảo mật ở mức cơ bản nên SQL Injection hầu như không còn đất sống nếu website được xây dựng dựa trên các framework này.

        • 3.2. Phát hiện

        • 3.3. Thu thập các dữ liệu quan trọng

        • 3.4. Xử lý thông tin thu được

        • Sau khi thu thập được các dữ liệu quan trọng, chúng ta tiến hành tấn công thay đổi dữ liệu của trang web tuỳ theo mục đích tấn công.

        • Khi có tên của tất cả các column trong table, có thể UPDATE hoặc INSERT một record mới trong table đó.

        • Thực hiện thay đổi password của user hoặc login trực tiếp và thực hiện các thao tác dưới quyền user đó.

        • Thực hiện thay đổi giao diện trang web(deface) theo mục đích khi có được tài khoản admin.

        • 4. Các biện pháp phòng chống tấn công SQL Injection

          • 4.1. Kiểm soát chặt chẽ dữ liệu nhập vào

          • 4.2. Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu

Tài liệu cùng người dùng

Tài liệu liên quan