1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án tốt nghiệp: Kỹ thuật tấn công SQL Injection và cách phòng chống - An toàn bảo mật hệ thống thông tin

10 20 0

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

THÔNG TIN TÀI LIỆU

Nội dung

H C VI N CÔNG NGH B U CHÍNH VI N THÔNGỌ Ệ Ệ Ư Ễ KHOA CÔNG NGH THÔNG TINỆ  BÁO CÁO MÔN AN TOÀN B O M T H TH NG THÔNG TINẢ Ậ Ệ Ố Đ TÀI K THU T T N CÔNG SQL INJECTION VÀỀ Ỹ Ậ Ấ CÁCH PHÒNG CH NGỐ Gi ng[.]

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN  BÁO CÁO MÔN: AN TỒN BẢO MẬT HỆ THỐNG THƠNG TIN ĐỀ TÀI: KỸ THUẬT TẤN CƠNG SQL INJECTION VÀ CÁCH PHỊNG CHỐNG Giảng : Đỗ Xuân Chợ viên Thành viên : Lương Hùng Mạnh Khổng Minh Quân Lê Kim Hùng Nguyễn Văn Trung Vũ Văn Tồn Nhóm : 01 B15DCCN344 B15DCCN425 B15DCCN250 B15DCCN575 B15DCCN557 Hà Nội, 5/2018 MỤC LỤC MỞ ĐẦU I Giới thiệu SQL Injection Đặc trưng ứng dụng sử dụng sở liệu 2 Tầm quan trọng lệnh sql hệ thống Khái niệm SQL Injection .2 II SQL Injection cách công phổ biến Dạng công vượt qua kiểm tra đăng nhập .3 Dạng công sử dụng câu lệnh SELECT Dạng công sử dụng câu lệnh INSERT Dạng công sử dụng Stored-procedures III Phòng chống SQL Injection Kiểm soát chặt chẽ liệu đầu vào Thiết lập đối tượng giả làm mồi nhử Thiết lập cấu hình an tồn cho hệ quản trị sơ sở liệu IV DEMO V Tài liệu tham khảo 10 MỞ ĐẦU Tính cấp thiết đề tài 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 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 Các hình th ức cơng đa dạng thay đổi nội dung trang web, công từ chối dịch vụ khiến cho việc truy nhập khơng thể thực khó th ực hi ện, chi ếm quyền điều khiển trang web… Mục tiêu hacker r ất khác nhau, có th ể 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 trang web, lấy cắp liệu nhạy c ảm nh thông tin th ẻ tín d ụng, mua hà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 b ằng k ỹ thu ật SQL injection từ lâu mối quan tâm bảo mật hàng đ ầu c nhà phát tri ển web chủ sở hữu website Giờ đây, cơng ngày tr nên khó phát ngăn chặn Số lượng vụ công nhằm vào c sở d ữ li ệu (CSDL) web lên tới số kỷ lục SQL Injection kiểu cơng có mục tiêu cụ thể th ường m ục tiêu đơn lẻ Chính mà vụ cơng thường không gây ý rộng rãi virus hay sâu máy tính Nếu máy chủ c s liệu b ị tin tặc chiếm quyền kiểm sốt có khối lượng lớn thơng tin cá nhân tài người dùng rơi vào tay chúng Và thành công có th ể nói thơng tin mà tin tặc thu cịn nhiều so với cơng phishing Tin t ặc không ph ải công giả mạo để lừa người sử dụng cung cấp thông tin cá nhân tài Tỉ lệ thành cơng vụ cơng SQL injection thường cao Mục đích nghiên cứu - Giúp hiểu ứng dụng website, mối đe d ọa v ề vấn đề an tồn thơng tin - Xác định nguyên nhân, nhận diện xác đối tượng động cơ, cách thức công xâm nhập vào sở liệu - Hiểu rõ khái niệm sql injection ph ương th ức hoạt đ ộng c hacker thông qua lỗ hổng I Giới thiệu SQL Injection Đặc trưng ứng dụng sử dụng sở liệu Hiện ứng dụng phổ biến chiếm thị phần doanh thu cao ứ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ý này, ứ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 liệu đặt nặng lên tính an tồn bảo mật ứng dụng website kết nối sở liệu Các mô hình phát triển ứng dụng web sử dụng phổ biến 3-tier, ngồi cịn có số cải tiến, mở rộng mơ hình nh ằm m ục đích riêng Tầm quan trọng lệnh sql hệ thống Cơ sở liệu 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 ữ nh ững thông tin nhân, thẻ tín dụng, mật khách hàng, Admin Đ ể l thông tin cần thiết từ sở liệu lệnh SQL đảm nhận 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…đ ều cần s d ụng câu lệnh SQL Khái niệm SQL Injection SQL Injection kỹ thuật điền vào đoạn mã SQL bất hợp pháp cho phép khai thác lỗ hổng bảo mật tồn c s d ữ li ệu ứng d ụng Lỗ hổng xuất ứng dụng khơng có đoạn mã kiểm tra chuỗi ký t ự thoát nhúng câu truy vấn SQL định dạng kiểu đầu vào không rõ ràng hay lỗi cú pháp SQL ý muốn 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 trình duyệt web, có th ể kèm theo m ột ứng dụng proxy server Chính đơn giản có th ể h ọc cách tiến hành công Lỗi bắt nguồn từ mã nguồn ứng dụng web khơng phải từ phía database, thành phần ứng dụng mà người dung tương tác để điều khiển nội dung s dụng để tiến hành chèn truy vấn có hại Như thấy, lỗi SQL injection xảy website khơng lập trình tốt, chất điểm yếu sql injection xu ất hi ện t trình xử lý liệu input người dùng bên mã nguồn II SQL Injection cách công phổ biến Dạng công vượt qua kiểm tra đăng nhập Với dạ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 Xét ví dụ điển hình, 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 kh ẩu có h ợp l ệ không để định cho phép hay từ chối thực tiếp Trong trường hợp này, người ta sử dụng hai trang, tang HTML để hiển thị form nhập liệu trang ASP dùng để xử lý thông tin từ phái người dùng Ví dụ: Login.html Username: Password: Execlogin.asp Thoạt nhìn, đoạn mã trang Execlogin.asp dường không chứa bất c ứ m ột lỗ hổng an toàn Người dùng khơng thể đăng nhập mà khơng có tên đăng nhập mật hợp lệ Tuy nhiên, đoạn mã thực s ự khơng an tồn ti ền đề cho lỗi SQL injection Chỗ sơ hở nằm chỗ nhập liệu vào từ người dùng dùng để xây dựng trực tiếp câu lệnh SQL Ví dụ, người dùng nhập chuỗi sau vào ô nhập liệu trang Login.html là: aaaa' or 1=1 – 123 Lúc câu truy vấn gọi thực hiện: SELECT * FROM T_USERS WHERE USR_NAME=’aaa’ or 1=1 ’ AND USR_PASS=’123’ Câu truy vấn hợp lệ trả với 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ệ 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 Ví dụ, trang tìm ki ếm Các trang cho phép người dùng nhập vào thông tin 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ấm SQL để nhập vào trường tên tác gải chuỗi giá trị: UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, câu truy vấn đầu khơng thành cơng, chương trình s ẽ th ực hi ện ti ếp theo 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 xóa bảng 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 có th ể 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 Ví dụ, 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 SQLi, 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 yêu cầu thực thêm lệnh là: SELECT TOP FieldName FROM TableName Dạng công sử dụng Stored-procedures Stored-procedures sử dụng lập trình web với mục đích nhằm giảm phức tạp ứng dụng tránh công kỹ thuật sql injection Tuy nhiên kẻ cơng có lợi dụng stored procedure để cơng vào hệ thống Việc công 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ụ: stored-procedures sp_login gồm tham số username password, kẻ công nhập: Username: thanhcong Password: ‘ ; shutdown— Lệnh gọi stored procedure sau: Exec sp_login ‘thahcong’,’ ;shutdown—‘ Lệnh shutdown thực dừng sql server III Phòng chống SQL Injection Kiểm soát chặt chẽ liệu đầu 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 đ ược t đ ối t ượng Request Ví dụ, giới hạn chiều dài chuỗi nh ập li ệu, xây d ựng hàm EscapeQuotes để thay dấu nháy đơn dấu nháy đơn Trong trường hợp liệu vào số, lỗi xuất phát từ việc thay giá trị tiên đoán liệu số bảng chuỗi chứa câu lệnh SQL bất hợp pháp Để tránh điều đơn giản kiểm tra liệu có kiểu hay khơng b ằ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 Thiết lập đối tượng giả làm mồi nhử Chiến thuật nhằm cảnh báo cho quản tri viên nguy c m ột cu ộc cơng cố tình tìm cách khai thác liệu Phương pháp nên phối hợp với việc đặt tên đối tượng khó đốn Để thực phương pháp này, ta sinh bảng chứa cột có tính nh ạy cảm mà d ễ đốn, ví d ụ nh password, id, liệu bảng liệu giả thông tin truy cập, có thơng báo gửi cho quản trị viên Thiết lập cấu hình an tồn cho hệ quản trị sơ sở liệu Để ứng dụng tránh công SQL injection cần triển khai số việc sau: - Khơng trả trang lỗi có thơng tin nhạy cảm - Cải thiện liệu nhập vào tốt có khả loại bỏ cơng - Hạn chế tối đa quyền truy vấn - Thường xuyên kiểm tra, quét ứng dụng công cụ - Dùng chắn tốt cho lớp tương tác IV DEMO Cách 1: Công cụ hỗ trợ add-on hackbar 1) Kiểm tra xem trang web co bị lỗi không cách thêm d ấu * vào cu ối đ ường link: http://manh.zent/blog/?mod=post&act=detail&id=19* Ta thấy trang web bị lỗi 2) Kiểm tra xem có cột sở liệu cách sử dụng lệnh order by xx xx số Ta kiểm tra order by 8- - trang web bị lỗi  Như có cột database 3) Tiếp theo ta tìm cột bị lỗi UNION SELECT 1,2,3,4,5,6,7- - Ở cột bị lỗi cột thứ 2, 3, Ta khai thác cột thứ 4) Ta tiến hành thơng tin bảng có database cột thứ lệnh: union select 1,group_concat(table_name),3,4,5,6,7 from information_schema.tables where table_schema=database() Kết lên tên bảng nguoidung tintuc Ta thêm unhex (hex(group_concat)) để tìm thơng tin bảng nguoidung Như câu truy vấn sau: union select 1,unhex(hex(group_concat(column_name))),3,4,5,6,7 from information_schema.columns where table_name=0x6e67756f6964756e67—

Ngày đăng: 20/06/2023, 16:19

w