Nghiên cứu một số vấn đề về bảo mật và ứ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 Stored Procedure 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ệm về 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 . III.2.1. Sử dụng mô hình giao diện dạng Dialog . III.2.2. Sử dụng ActiveX Control (Microsoft Web Browser) . III.2.3. Sử dụng giao diện lập trình Window Socket 2 III.2.4. Một số lớp và hàm chính được cài đặt trong chương trình . III.3. Mô tả chương trình và cách sử dụng III.3.1. Màn hình chương trình III.3.2. Cách sử dụng . IV. ĐÁNH GIÁ CHƯƠNG TRÌNH IV.1. Những vấn đề đạt được IV.2. Những vấn đề hạn chế KẾT LUẬN . I. NHỮNG VẤN ĐỀ ĐẠT ĐƯỢC . II. HƯỚNG PHÁT TRIỂN . PHỤ LỤC

doc169 trang | Chia sẻ: lvcdongnoi | Lượt xem: 10445 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Nghiên cứu một số vấn đề về bảo mật và ứ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
yển đổi ( swap space) để phục vụ cho những yêu cầu từ máy khách. Swap space thuờng dùng cho các tiến trình con có thời gian ngắn nên DoS có thể được dựa trên phương thức làm tràn đầy swap space. • TẤN CÔNG TRÊN BANDWIDTH: Phần băng thông dành cho mỗi hệ thống là giới hạn, vì thế nếu hacker cùng lúc gửi nhiều yêu cầu đến hệ thống thì phần băng thông không đủ đáp ứng cho một khối lượng dữ liệu lớn đó và dẫn đến hệ thống bị phá vỡ. -Trang 109- Chương 9: Từ chối dịch vụ (Dos) • TẤN CÔNG VÀO RAM: Khoa CNTT Tấn công Dos chiếm 1 khoảng lớn của RAM cũng có thể gây ra các vấn đề phá hủy hệ thống. Kiểu tấn công BufferOverflow là một ví dụ cho cách phá hủy này (xem kĩ hơn trong nội dung chương..) • TẤN CÔNG VÀO DISKS: Một kiểu tấn công cổ điển là làm đầy đĩa cứng. Đĩa cứng có thể bị tràn và không thể được sử dụng nữa. III. CÁC KĨ THUẬT TẤN CÔNG: III.1. Khái niệm về Tcp bắt tay ba chiều: Đầu tiên, để tìm hiểu phương pháp tấn công DoS , luận văn sẽ trình bày cơ chế làm việc “tcp bắt tay ba chiều”. Gói dữ liệu TCP chứa flag bits (cờ) để mô tả nội dung và mục đích của gói dữ liệu . Ví dụ 9.III.1-1: • Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối • ACK (acknowledgement) • FIN (finish) dùng để cắt 1 kết nối Cách hoạt động của gói TCP: -Trang 110- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT Hình 9.III.1-1: Cơ chế thiết lập kết nối trước khi truyền số liệu Buớc 1: Máy con gửi gói tin SYN yêu cầu kết nối Bước 2: Nếu máy chủ chấp nhận kết nối, máy chủ sẽ gửi gói tin SYN/ACK Server bắt buộc phải gửi thông báo lại bởi vì TCP là chuẩn tin cậy nên nếu máy con không nhận được thông báo thì sẽ nghĩ rằng packet đã bị lạc và gửi lại một packet mới . Bước 3: Máy con gửi hồi đáp bằng gói tin ACK Báo cho máy chủ biết rằng máy con đã nhận được SYN/ACK packet và lúc này kết nối đã được thiết lập. -Trang 111- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT III.2. Lợi dụng TCP thực hiện phương pháp SYN flood truyền thống: Hình 9.III.2-1: Tấn công DoS truyền thống Như đã đề cập về vấn đề thiết lập kết nối trong phần 1, bất cứ 1 gói tin SYN, máy chủ cũng phải để 1 phần tài nguyên của hệ thống như bộ nhớ đệm để nhận và truyền dữ liệu cho đường truyền đó. Tuy nhiên, tài nguyên của hệ thống là có hạn và hacker sẽ tìm mọi cách để hệ thống tràn qua giới hạn đó. ( Đây còn được gọi là half-open connection vì máy khách mở kết nối giữa chừng) Theo hình 9.III.2-1: Nếu máy chủ sau khi gửi trả một gói tin SYN/ACK để thông báo chấp nhận kết nối cho máy yêu cầu nhưng nếu địa chỉ IP của máy yêu cầu này là giả mạo thì gói tin không thể đến được đích, nên máy chủ vẫn phải dành tài nguyên cho yêu cầu đó. Sau một thời gian không nhận được phản hồi từ máy khách, máy chủ lại tiếp tục gửi một gói tin SYN/ACK để xác nhận lần nữa và cứ như vậy, kết nối vẫn tiếp tục mở. Nếu như hacker gửi nhiều gói tin SYN đến máy chủ đến khi máy chủ không thể tiếp nhận thêm 1 kết nối nào nữa thì lúc này hệ thống đã bị phá vỡ. -Trang 112- Chương 9: Từ chối dịch vụ (Dos) Kết luận: Khoa CNTT Chỉ với một đường truyền băng thông nhỏ, hacker đã có thể phá vỡ một hệ thống. Thêm vào đó, địa chỉ IP của hacker có thể được sửa đổi nên việc xác định thủ phạm là một vấn đề hết sức khó khăn. III.3. Tấn công vào băng thông III.3.1. Kiểu tấn công thứ 1 Hacker hoàn toàn có khả năng làm ngập hệ thống vì băng thông của hacker lớn hơn băng thông của máy đích. Kiểu tấn công này không bị hạn chế bởi tốc độ truyền mạng. Ví dụ 9.III.3.1-1: Hacker có một đường truyền tốc độ cao T1 ( 1.544- Mbps ) hay lớn hơn có thể dễ dàng phá vỡ một hệ thống có đường truyền 56Kbps. III.3.2. Kiểu tấn công thứ 2 Kiểu tấn công này được sử dụng khi đường truyền mạng của hacker là quá thấp so với đường truyền của máy đích. Không giống như kiểu tấn công DoS truyền thống ( phần 2 ), kiểu tấn công vào băng thông lớn hơn sẽ lợi dụng những gói tin từ những hệ thống khác nhau cùng một lúc tiến đến hệ thống đích khiến cho đường truyền của hệ thống đích không còn khả năng đáp ứng, máy chủ không còn khả năng nhận một gói tin nào nữa. -Trang 113- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT Hình 9.III.3.2-1: Kiểu tấn công DoS vào băng thông Theo hình 9.III.3.2-1, tất cả các gói tin đi vào 1 mạng máy tính qua 1 "Big-Pipe" ( ống dẫn lớn ), sau đó được router chia ra những "Small Pipe" ( ống dẫn nhỏ ) cho nhiều máy tính con tùy theo địa chỉ IP của gói tin. Nhưng nếu toàn bộ "Big-Pipe" bị làm ngập bằng những gói tin chỉ hướng đến 1 máy nhất định trong mạng máy tính con này, router đành phải chấp nhận loại bỏ phần lớn các packet để chỉ còn lại số lượng vừa đủ đi qua "Small Pipe" của máy tính đó. Kiểu tấn công này sẽ loại máy đích ra khỏi Internet. Đây là phương pháp tấn công kiểu từ chối dịch vụ nhưng không là DoS mà gọi là DDoS ( kiểu từ chối dịch vụ phân tán ), nghĩa là cùng một lúc nhiều máy sẽ được phát động để gửi gói tin đến máy đích ( mặc dù đường truyền của mỗi máy không cao nhưng nhiều đường truyền lại hợp thành một ống dẫn “ Big Pipe”), làm cho máy đích không còn khả năng tiếp nhận gói tin và bị loại khỏi mạng Internet, như sơ đồ minh họa sau:ợc router chia ra những "Sm -Trang 114- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT computer con tùy Hình 9.III.3.2-2: Tấn công DDoS ƒ DRDoS (Distributed Reflection Denial of Service) - Thế hệ tiếp theo của DDoS: Đây cũng chính là nguyên nhân khiến cho trang grc.com bị phá vỡ. Hình sau sẽ minh họa kiểu tấn công DRDoS này. -Trang 115- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT Hình 9.III.3.2-3. Tấn công kiểu DRDoS Bằng cách giả địa chỉ IP của máy đích, hacker sẽ cùng lúc gửi nhiều gói tin đến các hệ thống máy mạnh trên mạng, các hệ thống này khi nhận gói tin SYN giả này, chấp nhận kết nối và gửi trả một gói tin SYN/ACK để thông báo. Vì địa chỉ IP của gói tin SYN bị hacker sửa đổi thành địa chỉ IP máy đích nên những gói tin SYN/ACK sẽ được gửi về cho máy đích. Cùng một lúc nhận được nhiều gói tin, đường truyền của máy đích không đủ khả năng đáp ứng, hệ thống máy đích từ chối nhận bất kì gói tin nào và lúc này hệ thống máy đích đã bị sụp đổ. -Trang 116- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT III.4. Kiểu tấn công vào tài nguyên hệ thống Đây là kiểu tấn công nhằm vào tài nguyên hệ thống hơn là tài nguyên mạng như CPU, bộ nhớ, file hệ thống, tiến trình…..Hacker là một người dùng hợp lệ của hệ thống, và được một lượng tài nguyên giới hạn trên hệ thống. Tuy nhiên, hacker sẽ lạm dụng quyền truy cập này để yêu cầu thêm tài nguyên. Như vậy, hệ thống hay những người dùng hợp lệ sẽ bị từ chối sử dụng tài nguyên chia sẻ. Kiểu tấn công sẽ khiến cho hệ thống không thể sử dụng được vì tài nguyên đã bị sử dụng hết, không còn tiến trình để thực thi nữa. IV. BIỆN PHÁP PHÒNG CHỐNG Kiểu tấn công từ chối dịch vụ là kiểu tấn công gây nhiều khó khăn trong vấn đề bảo vệ cũng như điều tra tìm ra thủ phạm nhất, bởi vì hầu hết hacker đã thay đổi địa chỉ IP của máy mình nên rất khó xác định ai là thủ phạm. Để phòng chống khả năng khuyếch đại đường truyền, cần: • Huỷ khả năng broadcast tại router biên • Tăng kích thước hàng đợi kết nối -> kết quả: có thể phòng tránh khả năng tràn hàng đợi qua nhiều kết nối, nhưng cách này sử dụng nhiều tài nguyên • Giảm thời gian thiết lập kết nối • Dùng những phần mềm phát hiện và phá hủy kiểu tấn công DoS: Hầu hết những hệ điều hành hiện nay đều hỗ trợ khả năng phát hiện và phòng chống kiểu tấn công lụt SYN. -Trang 117- Chương 9: Từ chối dịch vụ (Dos) Khoa CNTT Tuy nhiên cũng đã có những phần mềm được có khả năng tránh kiểu tấn công này. Ví dụ như với Linux kernels 2.0.30 và về sau cài đặt một tùy chọn gọi là SYN Cookie, kernel có nhiệm vụ truy tìm và lưu vết những khả năng có thể xảy ra kĩ thuật SYN. Sau đó, kernel sẽ sử dụng một giao thức mã hoá như SYN cookie cho phép người dùng hợp lệ của hệ thống tiếp tục kết nối đến hệ thống Với WindowNT 4.0 trở về sau, sử dụng kĩ thuật backlog, mỗi khi hàng đợi kết nối không đủ đáp ứng, hệ thống tự động cung cấp tài nguyên cho hàng đợi, vì thế hàng đợi sẽ không bị phá vỡ. • Ứng dụng chỉ cho phép mỗi một máy con chỉ được thiết lập số kết nối tối đa theo qui định tránh trường hợp hacker gửi cùng lúc nhiều yêu câu gây tắc nghẽn. Nhận xét: Kiểu tấn công từ chối dịch vụ tuy chỉ khiến cho hệ thống bị phá vỡ trong vài phút nhưng hậu quả thì khá to lớn (ảnh hưởng trên phạm vi tiền và uy tín). Đây là kĩ thuật thường được hacker sử dụng trong trường hợp không thể chiếm quyền quản trị trên hệ thống hoặc thông tin, hoặc muốn phá hủy uy tín của cơ quan đó.Thêm vào đó việc giả mạo địa chỉ khiến cho hacker càng dễ dàng thực hiện viêc tấn công mà không sợ bị phát hiện. Thông thường kĩ thuật này được thực hiện kèm theo sự hỗ trợ của vài công cụ như ping of death, teardrop…Những công cụ này được liệt kê thêm trong chương 8 tiếp theo. -Trang 118- Chương 10: Một số kĩ thuật tấn công khác Khoa CNTT Chương 10 MỘT SỐ KĨ THUẬT TẤN CÔNG KHÁC Nội dung : I. Mã hóa URL. II. Kiểu tấn công vượt đường dẫn III. Tấn công dựa vào kí tự rỗng IV. Ngôn ngữ trình chủ -Trang 119- Chương 10: Một số kĩ thuật tấn công khác Khoa CNTT 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 Theo RFC 1738 định nghĩa URL và RFC 2369 cho URIs, những kí tự được giới hạn sử dụng trên URL hoặc URI là một tập các kí tự US-ASCII. Theo RFC 1738, 2369 những kí tự chữ số, kí tự đặc biệt như “ $-_.+!*’() ” và một số kí tự dành riêng là không bị mã hoá trên URL hay URIs. Còn những kí tự đặc biệt khác thì được mã hóa như khoảng trắng, ”…Sau khi trình chủ nhận được dữ liệu này, trình chủ sẽ tự động giải mã để thao tác như bình thường. Vậy hacker có thể lợi dụng được gì trong URL mã hóa này. Những nhà phát triển ứng dụng có thể sẽ thiết kế ứng dụng để kiểm tra dữ liệu nhập vào của người dùng có hợp lệ hay không, những kí tự đặc biệc như trong thẻ script thường được dùng trong những kĩ thuật tấn công như XSS sẽ bị lọai bỏ Vậy để hợp thức hóa nội dung dữ liệu cần nhập, hacker thay vì nhập trực tiếp kí tự đặc biệt vào ô nhập thì họ có thể nhập những kí tự đã được mã hoá theo chuẩn RFC 1738, RFC 2369. Như vậy bằng cách đó, hacker có thể dễ dàng vượt qua kiểm soát này. -Trang 120- Chương 10: Một số kĩ thuật tấn công khác Ví dụ 10.I.1-1: Khoa CNTT p%3a%2f%2fwww.yourserver.com%2fbadscript.js%22%3e%3c%2fscript%3e Biến mydata sẽ mang nội dung: I.2. Một số biện pháp phòng chống • Tránh sử dụng phương thức GET vì nếu dùng GET, dữ liệu dễ dàng được thêm vào URL. Vì thế, sử dụng phương thức POST bất cứ khi nào có thể. • Trong trường hợp URL bắt buộc được sử dụng để chuyển dữ liệu lên trình chủ, cần giới hạn kiểu dữ liệu, nên kiểm tra dữ liệu trong ứng dụng trước khi sử dụng. • Không nên sử dụng ngôn ngữ máy khách để kiểm tra tính đúng đắn của dữ liệu. II. KIỂU TẤN CÔNG VƯỢT ĐƯỜNG DẪN II.1. Khái niệm Nhiều ứng dụng sử dụng tập tin hệ thống của trình chủ trong “lớp trình bày” để hiển thị thông tin lưu trử tạm thời. Những tập tin này bao gồm những tập tin hình ảnh , tập tin HTML, hay những ứng dụng CGI. Thư mục WWW-ROOT là một thư mục gốc ảo bên trong trình chủ, nơi mà được truy xuất bởi trình duyệt. Ứng dụng lưu trữ thông tin bên trong hoặc bên ngòai WWW-ROOT. Nếu ứng dụng không kiểm tra những kí tự đặc biệt, thường được sử dụng trong đường dẫn như “/” thì có thể rằng ứng dụng đã có một lỗ hổng cho kiểu tấn công -Trang 121- Chương 10: Một số kĩ thuật tấn công khác Khoa CNTT vượt đường dẫn. Hacker có thể yêu cầu trình chủ trả về kết quả là nội dung những tập tin vật lí như /etc/password… Tóm lại: Kiểu tấn công này cũng dựa vào sự lỏng lẻo trong quá trình kiểm tra dữ liệu trên URL, cookie, HTTP Header yêu cầu. Lợi dụng quyền truy xuất một tập tin của ứng dụng, nhờ đó hacker có thể xem được file lưu trữ trên hệ thống. Ví dụ 10.II.1-1: “dangnhapthanhcong.asp” nhưng nếu hacker thay đổi tên tập tin cần truy xuất như sau: ../etc/password như vậy hacker có thể xem nội dung file password được lưu trữ trong hệ thống. II.2. Một số biện pháp phòng chống Việc phòng chống kiểu tấn công vượt đường dẫn là một thử thách lớn cho những nhà ứng dụng trong một hệ thống phân tán. Tuy nhiên, cách phòng chống tốt nhất vẫn là Ứng dụng cần kiểm tra việc truy xuất file trước khi xuất kết quả cho trình duyệt. -Trang 122- Chương 10: Một số kĩ thuật tấn công khác Khoa CNTT III. TẤN CÔNG DỰA VÀO KÍ TỰ RỖNG III.1. Khái niệm Nhiều ứng dụng Web thường sử dụng ngôn ngữ lập trình như C, Java để tạo modul xử lý những công việc như thao tác trên những dữ liệu nhập vào từ người dùng. Lợi dụng kí tự kết thúc chuỗi mà hacker sẽ thêm vào một chuỗi nhập để đánh lừa ứng dụng. Ví dụ 10.III.1-1: Giả sử hacker đưa vào một chuỗi “AA\0BB” thì qua chương trình lập trình bằng ngôn ngữ C, chuỗi này có thể bị cắt ngắn thành AAAA vì C xem \0 là dấu hiệu kết thúc chuỗi. Hacker có thể lợi dụng điều này để vượt qua các khâu kiểm tra nội dung chuỗi. III.2. Một số biện pháp phòng chống Cách duy nhất để phòng chống trường hợp này đó là chỉ chấp nhận những dữ liệu hợp lệ. Những kí tự như “\” phải bị lọai bỏ trước khi ứng dụng sử dụng chúng. IV. NGÔN NGỮ PHÍA TRÌNH CHỦ IV.1. Khái niệm SSI là đoạn mã được nhúng vào trong trang Web để yêu cầu trình chủ cung cấp thông tin ở một điểm nào đó trong trang. Ví dụ 10.IV.1-1: -Trang 123- Chương 10: Một số kĩ thuật tấn công khác Khoa CNTT Dòng lệnh trên nhúng nội dung file “test.asp” vào trong trang Web. Tuy nhiên, SSI không phải được hỗ trợ trong hầu hết các trình chủ, Apache và IIS là 2 trình chủ hỗ trợ SSI. Trang Web có sử dụng SSI thường được lưu dưới dạng .shtml hoặc .stm (là phần mở rộng của .html hay .htm) để báo hiệu cho trình chủ biết trang này có sử dụng SSI để tiết kiệm thời gian xử lí cho trình chủ (không mất thời gian tìm kiếm). Quá trình thực hiện xử lí một trang Web yêu cầu: Nếu không có bất kì chỉ thị nào khác, trình chủ chỉ gửi nội dung trang Web cho trình duyệt nhưng với một SSI, thì công việc tuần tự theo những bước như sau: • Trình chủ nhận dữ liệu và phân tích dữ liệu (tìm kiếm và phân loại những câu lệnh đặc biệt) để chỉ thị thực hiện • Dưa trên những câu lệnh mà trình chủ tìm thấy, trình chủ thực thi những câu lệnh đó để trả kết quả cho trình duyệt. • Trả kết quả về cho trình duyệt Có 3 khả năng thực hiện: • Nhận thông tin từ một file và chèn vào trong trang • Gán giá trị cho một số biến • Gọi chương trình CGI Nội dung câu lệnh SSI xem trong phần phụ lục. -Trang 124- Chương 10: Một số kĩ thuật tấn công khác IV.2. Cách tấn công Khoa CNTT Hacker lợi dụng những ô nhập để chèn thêm vào đó nội dung một câu lệnh SSI. Ví dụ 10.IV.2-1: <!--#jdbc select="SELECT * FROM User" name="result" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost:3306/project" --> Thiết lập câu lệnh Select Câu lệnh này di chuyển con trỏ đến dòng đầu tiên trong tập tin. Hiển thị nội dung dòng đầu tiên. IV.3. Biện pháp phòng chống Với người quản trị, cấu hình lại trình chủ sao cho trình chủ không hỗ trợ SSI. Với người lập trình, kiểm tra kĩ nội dung dữ liệu gửi từ người dùng. Loại bỏ những kí tự như # -- !…Tuy nhiên điều này nên được thực hiện tại trình chủ, không nên kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình khách, vì khả năng thay đổi nội dung của trang Web. -Trang 125- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker Chương 11 TỔNG KẾT QUÁ TRÌNH TẤN CÔNG CỦA HACKER Nội dung: 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 -Trang 126- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker CHƯƠNG 11: TỔNG KẾT QUÁ TRÌNH TẤN CÔNG CỦA HACKER ./ Theo tài liệu Hacking Exposed của Stuart McClure, Joel Scambray, George Kurtz thì các kẻ tấn công thường thực hiện các giai đoạn sau khi tấn công I. THU THẬP THÔNG TIN Ở MỨC HẠ TẦNG CỦA MỤC TIÊU • Bước 1: FootPrinting (thu thập thông tin): Đây là cách mà hacker làm khi muốn lấy một lượng thông tin tối đa về máy chủ/doanh nghiệp/người dùng, bao gồm chi tiết về địa chỉ IP, Whois, DNS ..v.v - là những thông tin chính thức có liên quan đến mục tiêu. Công cụ hỗ trợ: UseNet , search engines (công cụ tìm kiếm) , Edgar Any Unix client, nslookup Is -d , Sam spade, dig • Bước 2: Scanning (Quét thăm dò): Phần lớn thông tin quan trọng từ server có được từ bước này , bao gồm quét cổng, xác định hệ điều hành, .v.v.. để biết các port trên server, nghe đường dữ liệu. Các công cụ: fping, icmpenum Ws_ping ProPack, nmap, SuperScan, fscan nmap, queso, siphon. • Bước 3: Enumeration (liệt kê tìm lỗ hổng): -Trang 127- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker Bước thứ ba là tìm kiếm những tài nguyên được bảo vệ kém, hoạch tài khoản người dùng mà có thể sử dụng để xâm nhập, bao gồm các mật khẩu mặc định, các script và dịch vụ mặc định. Rất nhiều người quản trị mạng không biết đến hoặc không sửa đổi lại các giá trị này. Các công cụ phụ trợ: null sessions, DumpACL, sid2user, OnSite Admin showmount, NAT Legion banner grabbing với telnet, netcat, rpcinfo. • Bước 4: Gaining access (Tìm cách xâm nhập): Bây giờ hacker sẽ tìm cách truy cập vào mạng bằng những thông tin có được ở ba bước trên. Phương pháp được sử dụng ở đây có thể là tấn công vào lỗi tràn bộ đệm, lấy và giải mã file password, hay brute force (kiểm tra tất cả các trường hợp) password. Các công cụ: tcpdump, L0phtcrack readsmb, NAT, legion, tftp, pwdump2 (NT) ttdb, bind, IIS, HTR/ISM.DLL. • Bước 5: Escalating privilege (Leo thang đặc quyền): Trong trường hợp hacker xâm nhập đựợc vào mạng với một tài khoản nào đó, thì họ sẽ tìm cách kiểm soát toàn bộ hệ thống. Hacker sẽ tìm cách crack password của admin, hoặc sử dụng lỗ hổng để leo thang đặc quyền. John và Riper là hai chương trình crack password rất hay được sử dụng. Công cụ: L0phtcrack, Ic_messages, getadmin, sechole. • Bước 6: Pilfering (Dùng khi các file chứa pass bị sơ hở): -Trang 128- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker Thêm một lần nữa các máy tìm kiếm lại đựơc sử dụng để tìm các phương pháp truy cập vào mạng. Những file text chứa password hay các cơ chế không an toàn khác có thể là đích cho hacker. Thông tin lấy từ bước trên đủ để ta định vị server và điều khiển server. Nếu bước này không thành công, đến bước . Công cụ hỗ trợ: rhost, LSA Secrets user data, configuration files, Registry. • Bước 7: Covering Tracks (Xoá dấu vết) : Sau khi đã có những thông tin cần thiết, hacker tìm cách xoá dấu vết, xoá các file log của hệ điều hành làm cho người quản lý không nhận ra hệ thống đã bị xâm nhập hoặc có biết cũng không tìm ra kẻ xâm nhập là ai. Xóa log. Công cụ: Zap, Event log GUI, rootkits, file streaming. • Bước 8: Creating Backdoors (Tạo cửa sau chuẩn bị cho lần xâm nhập tiếp theo được dễ dàng hơn): Hacker để lại "Back Doors", tức là một cơ chế cho phép hacker truy nhập trở lại bằng con đường bí mật không phải tốn nhiều công sức, bằng việc cài đặt Trojan hay tạo user mới (đối với tổ chức có nhiều user). Công cụ ở đây là các loại Trojan, keylog, creat rogue user accounts, schedule batch jobs, infect startup files, plant remote control services, install monitoring mechanisms, replace apps with Trojan. -Trang 129- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker Công cụ: members of wheel, administrators cron, At rc, Startup folder, registry keys, netcat, remote.exe, VNC, BO2K, keystroke loggers, add acct to secadmin mail aliases login, fpnwclnt.dll II. KHẢO SÁT ỨNG DỤNG WEB Phương pháp khảo sát khá phổ biến, đó là Xem mã nguồn và lợi dụng các lỗi cho phép xem mã nguồn. Một số ngôn ngữ web thông dụng hiện nay có nhiều lỗi này như Active Server Pages (ASP), Common Gateway Interface (CGI), ColdFusion Server (CFM), Hypertext Preprocessor (PHP). Tìm các site bị lỗi này bằng cách dùng www.google.com, search từ khóa liên quan. Sử dụng allinurl: trước đoạn string đặc biệt cần kiếm, thì những trang Web tìm kiếm được chắc chắn sẽ có chuỗi cần tìm. Ví dụ 11.II-1: "allinurl:/advadmin" (không có ngoặc kép) thì chỉ liệt kê ra những trang có URL có dạng : Tìm các file trên thì thêm chữ type file: trước tên file cần tìm trên các chuyên khu web. Ví dụ 11.II-2: + Muốn tìm file mdb (đây là file chứa mật khẩu của các trang Web, dùng Access để mở) thì vào và đánh type file:mdb -Trang 130- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker + Tìm file SAM (đây là file chứa Password của Windows NT, dùng L0phtCrack để Crack) thì vào và đánh type file:SAM • Tấn công vượt qua các cơ chế kiểm soát (authentication, authorization) Bao gồm các phương pháp như đoán mật khẩu, thay đổi thông tin cookies, các kĩ thuật directory traversal, leo thang đặc quyền, các phương pháp tấn công dựa vào SQL, SQL injection... • Tìm hiểu sâu về các chức năng của ứng dụng web Tìm hiểu cách thực hiện của các phần trong ứng dụng, đặc biệt như các order input, confirmation, order tracking. Ở đây ta có thể áp dụng các phương pháp như SQL Injection, input validation... • Tìm hiểu luồng di chuyển của thông tin Các thông tin tương tác giữa client và server, các thông tin tương tác với database. Hiện nay việc viết mã để thực hiện việc giao tiếp thông tin thường phải đảm bảo được tính hiệu quả (nhanh), và bảo mật (có thể sẽ chậm hơn). Thường thì tính hiệu quả được ưu tiên hơn do đó có thể sẽ phát sinh lỗi trong quá trình đó và giúp hacker có thể lợi dụng các lỗi như SQL input...để đoạt quyền điều khiển hệ thống. III. TẤN CÔNG Sau khi đã thu thập và khảo sát kỹ càng đối tượng, hacker bắt đầu thực hiện tấn công nhằm xâm nhập vào hệ thống lấy thông tin, đưa thông tin xấu vào, dành quyền kiểm soát,… Còn nếu không thành công trong việc xâm nhập, thì Dos là cách thức cuối cùng mà hacker thường lựa chọn để làm cho hệ thống không thể hoạt đông được. -Trang 131- Khoa CNTT Chương 11: Tổng kết quá trình tấn công của Hacker Nhận xét: Việc thu thập thông tin là vô cùng quan trọng cho việc tấn công vào một hệ thống máy đích. Cho dù hacker tấn công theo phương diện phần cứng hay qua ứng dụng thì việc thu thập vẫn là cần thiết. Vấn đề là việc thực hiện sẽ theo từng bước như thế nào. Có thể trong những bước đã nêu hacker không cần phải đi qua theo thứ tự hay qua hết, nhưng việc nắm rõ thông tin của máy đích luôn là điều kiện tiên quyết để dẫn đến thành công trong việc tấn công. Tùy vào nội dung thông tin mà hacker thu thập được mà hacker sẽ quyết định tấn công theo kĩ thuật nào. Do đó, việc bảo mật cho một hệ thống cần đòi hỏi sự kết hợp không chỉ của riêng nhà quản trị hệ thống mà còn của nhà thiết kế ứng dụng và sự hợp tác của cả những khách hàng sử dụng ứng dụng. Nhiệm vụ này sẽ được đề cập rõ hơn trong chương 12. -Trang 132- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống Chương 12 TỔNG KẾT CÁC BIỆN PHÁP PHÒNG CHỐNG Nội dung: Để phòng chống hacker cần vai trò của I. II. Với nhà quản trị mạng Với nhà thiết kế ứng dụng Web III. Với người dùng  -Trang 133- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống CHƯƠNG 12: TỔNG KẾT CÁC BIỆN PHÁP PHÒNG CHỐNG ./ Phòng chống hacker không phải là nhiệm vụ của riêng những người lập trình Web mà cần có sự kết hợp, hỗ trợ của người quản trị và chính bản thân người dùng. Thiếu sót một trong những yếu tố này đều có thể dẫn đến thông tin bị đánh cắp và thậm chí hacker có thể điều khiển được cả hệ thống mạng. Vì thế, để bảo vệ một hệ thống khỏi sự tấn công của hacker, luận văn sẽ trình bày theo 3 vai trò: vai trò người quản trị mạng, vai trò người lập trình ứng dụng và vai trò của người dùng. I. VỚI NHỮNG NHÀ QUẢN TRỊ MẠNG • Người quản trị hệ thống cần xác định rõ những đối tượng nào là quan trọng nhất trong hệ thống cần bảo vệ; xác định rõ mức độ ưu tiên đối với những đối tượng đó. Ví dụ các đối tượng cần bảo vệ trên một hệ thống có thể là: Các máy chủ dịch vụ, các router, các điểm truy nhập hệ thống, các chương trình ứng dụng, hệ quản trị CSDL, các dịch vụ cung cấp ... Cấu hình cho những ứng dụng: Thận trọng trong việc cấu hình trình chủ và một số ứng dụng. Trình chủ nên hay không cho phép thực thi những câu lệnh SSI. Ngoài ra phải thiết lập quyền cho ứng dụng chỉ chạy dưới một số quyền hạn nhất định như trong quản trị cơ sở dữ liệu ( không nên chạy quyền Admin) tránh trường hợp hacker có thể lợi dụng chạy những câu lệnh điều khiển hệ thống. -Trang 134- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống • Xác định nguy cơ đối với hệ thống chính là xác định các lỗ hổng bảo mật của các dịch vụ, ứng dụng trên hệ thống đó. Việc xác định đúng đắn các nguy cơ này giúp người quản trị có thể tránh được những cuộc tấn công mạng, hoặc có biện pháp bảo vệ đúng đắn bằng cách thường xuyên cập nhật tin tức trên các nhóm tin về bảo mật và từ nhà cung cấp phần mềm để phát hiện những lỗi của phần mềm sử dụng. Khi phát hiện lỗi cần cập nhập những phần mềm mới nhất để tránh trường hợp hacker lợi dụng những lỗ hổng có trong những ứng dụng chưa được sửa chữa trong phiên bản cũ. • Nắm được hoạt động của các phần mềm sử dụng, ý nghĩa của các file cấu hình quan trọng (như etc/password), áp dụng các biện pháp bảo vệ cấu hình như sử dụng phương thức mã hóa hashing code (MD5). • Sử dụng một vài công cụ có thể phát hiện ra các hoạt động truy nhập không hợp lệ vào một hệ thống như logfile. • Kiểm soát chặt chẽ các quyền của các tài khoản trên hệ thống; không sử dụng quyền root trong các trường hợp không cần thiết. Đối với các tài khoản không sử dụng trên hệ thống cần đổi mật khẩu hoặc hủy bỏ. • Quản lý mật khẩu một cách chặt chẽ o Buộc người sử dụng thay đổi mật khẩu trong một thời gian nhất định. Hầu hết các hệ thống hiện nay đều hỗ trợ cơ chế này; nếu không thay đổi mật khẩu, tài khoản đó không còn giá trị trên hệ thống. o Trong trường hợp người sử dụng bị mất mật khẩu, để cấp lại mật khẩu mới cần có các thủ tục khác để xác thực người sử dụng ... -Trang 135- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống o Cần giám sát và theo dõi chặt chẽ các chương trình đổi mật khẩu; đây thường là mục tiêu để tấn công. II. VỚI NHỮNG NHÀ THIẾT KẾ ỨNG DỤNG WEB: • Đảm bảo dữ liệu được cung cấp từ người dùng là hợp lệ: Tất cả những dữ liệu được đưa vào ứng dụng phải đảm bảo được kiểm tra kĩ, loại bỏ hoặc từ chối những kí tự đặc biệt như ‘ /… Tuy nhiên, không nên dùng ngôn ngữ trình khách (như JavaScript, VBScript…) để kiểm tra dữ liệu nhập hợp lệ vì hacker vẫn có thể lợi dụng để tấn công như trong kĩ thuật mã hoá URL hay vượt đường dẫn…Cách tốt nhất vẫn là kiểm tra ngay trên ứng dụng. Nếu không thể từ chối cũng như lọai bỏ những kí tự, ứng dụng cần kiểm tra dữ liệu xuất để đảm bảo rằng dữ liệu xuất đến trình duyệt là an toàn. Ví dụ 12.II-1: Với SQL Injection, ứng dụng cần xuất một trang báo lỗi do chính ứng dụng qui định để phòng tránh trường hợp hacker lợi dụng nội dung báo lỗi cú pháp SQL để lấy thông tin. Ngoài ra, ứng dụng cần kết hợp với HTTP Header, đặc biệt là thành phần Referer để đảm bảo trang yêu cầu không xuất phát từ máy hacker như trong kĩ thuật Buffer Overflow, thao tác trên biến ẩn form,… • Chứng thực người dùng: -Trang 136- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống Nhiều ứng dụng hiện nay quản lí một phiên làm việc của người dùng bằng sessionID nhưng sự yếu kém trong cách quản lí một phiên làm việc khiến cho hacker có thể dễ dàng kiểm soát được một phiên làm việc của người dùng như trong kĩ thuật “quản lí phiên làm việc”. Vì thế, đối với một phiên làm việc, ứng dụng cần hủy ngay sau khi trình duyệt đóng kết nối. • Mã hóa dữ liệu quan trọng: Những thông tin quan trong như tên/mật khẩu, credit card,… cần được mã hóa để tránh hacker có thể lấy được nội dung và sử dụng chúng như trong kĩ thuật XSS, SQL Injection...Ngoài ra, trong quá trình truyền, kết hợp phương pháp SSL để tránh trường hợp mất mát thông tin trên đường truyền. Hiện nay trong lĩnh vực mã hóa dữ liệu, có rất nhiều phương pháp mã hóa như mã hóa khóa bí mật, mã hóa khóa công khai,…nên tùy vào mức độ sử dụng cũng như tầm quan trọng mà ứng dụng có thể chọn một trong những phương pháp mã hóa để đảm bảo dữ liệu được bảo mật. Tuy nhiên, hiện nay nhiều nhà ứng dụng lại mã hóa dữ liệu kết hợp với vài thông tin như ngày giờ, địa chỉ IP…khiến cho hacker có thể dễ dàng dự đoán, hoặc nội dung dữ liệu mã hóa quá ngắn khiến cho hacker có thể sử dụng nhưng công cụ sẵn có để vét cạn những khả năng có thể xảy ra như trong kĩ thuật tấn công sessionID. Hoặc phương pháp mã hóa đã quá cũ khiến cho hacker có thể dễ dàng dùng những công cụ giải mã như “John and Ripper”. Do đó, cần chọn thuật toán mã hóa cùng với khóa để mã hóa sao cho dữ liệu không dễ dự đoán và bị vét cạn. -Trang 137- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống Ngoài ra, việc dùng SSL là cần thiết để tránh trường hợp dữ liệu bị đánh cắp trên đường truyền. • Dùng phần mềm có sẵn: Hiện nay trên thị trường xuất hiện những phần mểm như Appshield hoạt động như một proxy, nghĩa là trung gian giữa máy khách và máy chủ, mọi yêu cầu từ máy khách đều đi qua phần mềm này, nếu phát hiện trong yêu cầu có ẩn chứa khả năng tấn công lên hệ thống, nó sẽ từ chối yêu cầu, không gửi lên máy chủ nữa mà sẽ tự động hủy yêu cầu. • Thiết lập quyền: Với những ứng dụng, hệ thống chỉ nên cung cấp những quyền hạn nhất định sao cho ứng dụng đủ thực hiện các chức năng của mình. Không nên đưa quyền cao nhất, như root vì hacker có thể lợi dụng quyền root này để có thể thực thi những câu lệnh của hệ thống, như trong kĩ thuật tấn công SQL Injection, Buffer Overflow… III. VỚI NGƯỜI SỬ DỤNG ỨNG DỤNG WEB: • Đưa ra những lời cảnh báo cho người sử dụng Web rủi ro có thể xảy ra, đặc biệt nên chú ý khi cho phép trình duyệt thực thi ngôn ngữ trình khách trên máy của mình, vì khả năng lợi dụng ngôn ngữ này là rât lớn như trong kĩ thuật XSS, sessionID. • Sau khi sử dụng xong ứng dụng cần thoát ra khỏi hệ thống theo qui định ( như Sigh-out của Yahoo) để những nội dung quan trọng lưu trữ trong cookie bị hủy -Trang 138- Khoa CNTT Chương 12: Tổng kết các biện pháp phòng chống bỏ, tránh khả năng hacker vẫn tiếp tục dùng session ID tồn tại đó để đăng nhập vào hệ thống hợp lệ. • Quản lý tài khoản: Người sử dụng cần nhận thức được vai trò quan trọng trong việc bảo vệ tài khoản của mình. Các hoạt động quản lý tài khoản bao gồm việc bảo vệ mật khẩu, thay đổi mật khẩu định kỳ, đăng ký thời điểm, ... Sử dụng các phần mềm bảo vệ máy trạm của người sử dụng, log out khỏi hệ thống sau một thời gian time-out ... o Phát hiện tài khoản sử dụng trái phép: Người dùng cần được huấn luyện về các cách phát hiện tài khoản của mình sử dụng trái phép như thế nào. Người sử dụng cần thường xuyên kiểm tra các hoạt động của mình để đảm bảo không có người khác lợi dụng tài khoản thực hiện những hành động khác. Nhận xét: Mặc dù việc bảo mật là khó khăn và hệ thống không bao giờ được xem là đạt 100% về an toàn nhưng nếu có sự kết hợp đầy đủ giữa ba nhân tố trên thì sẽ giảm thiểu tối đa những rủi ro có thể xảy ra. Thiếu một trong ba nhân tố đó thì hệ thống luôn nằm trong trạng thái báo động về độ an toàn. -Trang 139- Phần III: Chương trình Web Checker Khoa CNTT PHẦN THỨ BA CHƯƠNG TRÌNH WEB CHECKER -Trang 140- Chương 13: Chương trình Web Checker Khoa CNTT Nội dung: I. II.  Chương 13 CHƯƠNG TRÌNH WEB CHECKER Đặc tả chương trình Web Checker Kiến trúc chương trình Web Checker III. Cài đặt IV. Đánh giá chương trình -Trang 141- Chương 13: Chương trình Web Checker Khoa CNTT CHƯƠNG 13: CHƯƠNG TRÌNH WEB CHECKER ./ I. ĐẶC TẢ CHƯƠNG TRÌNH WEB CHECKER I.1. Tổng quan Chương trình “Web Checker” là một ứng dụng dùng để minh họa cho một số kĩ thuật tấn công đã được trình bày ở phần trên như SQL Injection, Form Field Manipulation và URL Manipulation, mà trọng tâm là SQL Injection. Từ ý tưởng đó, chương trình sẽ có khả năng kiểm tra ứng dụng Web có mắc phải lỗi bảo mật SQL injection, Form Field Manipulation, URL Manipulation hay không. Bằng cách ứng dụng sẽ nhận trang web cần kiểm tra từ người sử dụng, rồi tự động tìm thông tin của trang Web và tạo ra các yêu cầu gửi đến trình chủ. Sau đó nhận, phân tích kết quả trả về để đánh giá, kiểm tra và thông báo cho người sử dụng. I.2. Yêu cầu Từ những ý tưởng trên, ứng dụng có những yêu cầu như sau: I.2.1. Yêu cầu chức năng • Chức năng duyệt Web. • Kiểm tra, phát hiện một số lỗ hổng bảo mật của ứng dụng Web như: o Chèn câu truy vấn SQL (SQL Injection) o Thao tác trên tham số truyền (Parameter Manipulation) • Đánh dấu, thông báo kết quả kiểm tra. • Gợi ý các biện pháp khắc phục đối với lỗ hỗng phát hiện được. -Trang 142- Chương 13: Chương trình Web Checker Khoa CNTT I.2.2. Yêu cầu phi chức năng • Dễ sử dụng: ứng dụng phải cung cấp một giao diện trực quan, rõ ràng, dễ sử dụng. II.KIẾN TRÚC CHƯƠNG TRÌNH WEB CHECKER II.1. Kiến trúc chương trình Web Checker Chương trình được chia làm hai tầng: • Tầng 1 (giao diện) có nhiệm vụ: o Duyệt Web (cung cấp trang cần kiểm tra). o Hiển thị kết quả kiểm tra • Tầng 2 (xử lý) có nhiệm vụ: o Lấy trang Web được yêu cầu kiểm tra o Tạo các mẫu thử (lấy dữ liệu kiểm tra kết hợp với thông tin từ trang Web, đóng gói thành HTTP request) gửi đến trình chủ. o Xử lý thông tin trả lời từ trình chủ đưa ra kết quả. -Trang 143- Chương 13: Chương trình Web Checker Khoa CNTT Hình 13.II.1-1: Kiến trúc phân tầng của ứng dụng Web Checker II.2. Giao tiếp giữa chương trình với trình chủ Web Giao tiếp giữa ứng dụng với trình chủ là giao tiếp giữa client và server. Trong đó trình chủ là server còn ứng dụng là client kết nối đến server theo kiểu stream socket. Hình 13.II.2-1: Giao tiếp giữa ứng dụng và trình chủ -Trang 144- Chương 13: Chương trình Web Checker III. CÀI ĐẶT III.1. Ngôn ngữ cài đặt Khoa CNTT Web Checker là ứng dụng có sử dụng giao thức HTTP để trao đổi thông tin trên mạng. Do đó để công việc lập trình được đơn giản, ứng dụng phải tân dụng các thư viện lập trình mạng và ActiveX Control có sẵn trong các môi trường lập trình. Một phần cũng quan trọng không kém đó là ngôn ngữ được chọn là môi trường cài đặt phải quen thuộc, có thể dễ dàng nhanh chóng vận dụng để xây dựng ứng dụng. Với các lý do trên, luận văn chọn MS Visual C++ làm môi trường phát triển cho ứng dụng. • Yêu cầu hệ thống: o Hệ điều hành:WinXp, WinNT, Win 2000, Win 9x với giao thức TCP/IP o Mạng: Kết nối Internet hoặc trình chủ Web tại máy cục bộ. o Phần cứng: Ổ cứng còn trống 10 MB. III.2. Phương pháp cài đặt III.2.1. Sử dụng mô hình giao diện dạng Dialog Do ứng dụng được xây dựng với tính đơn giản dễ sử dụng chỉ gồm một màn hình. Nên mô hình giao diện được chọn là Dialog. III.2.2. Sử dụng ActiveX Control (Microsoft Web Browser) Ứng dụng có sử dụng ActiveX Control (Microsoft Web Browser) của MS VC++ để cung cấp chức năng trình duyệt Web. Qua trình duyệt người sử dụng cung cấp trang Web cần kiểm tra cho ứng dụng. -Trang 145- Chương 13: Chương trình Web Checker Khoa CNTT III.2.3. Sử dụng giao diện lập trình Window Socket 2 Ứng dụng sử dụng giao diện lập trình Window Socket 2 để lập trình stream socket, kết nối đến trình chủ Web. III.2.4. Một số lớp và hàm chính được cài đặt trong chương trình • Lớp CCheckerDlg class CCheckerDlg : public CDialog { public: void getTestFile(); void markChecked(CString &); //Lấy dữ liệu mẫu kiểm //đánh dấu vi trí kiểm tra CString evaluateRslt(Result *); //phân tích kết quả void scanWeb(); //Kiểm tra trang Web CArray m_result; //Mảng chứa kết quả CArray m_Test; //Mảng chứa dữ liệu mẫu kiểm bool m_IsPost; CString m_sData; CString m_HTTPbody; CString m_HTTPreceive; CString m_HTTPsend; ... protected: // Loại yêu cầu POST/GET //Dữ liệu trong Header yêu cầu //Phần thân của HTTP trả lời //Header trả lời //Header yêu cầu afx_msg void OnBeforeNavigate2Explorer(LPDISPATCH, VARIANT FAR*, VARIANT FAR*, VARIANT FAR*, VARIANT FAR*, VARIANT FAR*, BOOL FAR*); private: //Hàm bắt sự kiện trên trình duyệt Web -Trang 146- Chương 13: Chương trình Web Checker void Browse(); void InsertHTML() }; Khoa CNTT //Gửi/nhận thông với trình chủ //Hiển thị thông tin trả lời thành Web Kế thừa từ lớp CDialog, ngoài nhiệm vụ quản lý dialog, lớp còn có chức năng sau: - Thực hiện các yêu cầu duyệt Web của người dùng thông qua phương thức Browse(). - Hiển thị dữ liệu của biến m_HTTPbody thành trang Web thông qua phương thức InsertHTML(). - Phương thức getTextFile() đọc dữ liệu mẫu kiểm từ tập tin ngay khi chạy chương trình và lưu trữ trong mảng m_Test. - Phương thức scanWeb() là phương thức chính được gọi khi người sử dụng chọn nút kiểm tra. Phương thức có chức gọi các hàm xử lý khác để kiểm tra trang Web, phân tích và đưa ra kết quả. • Lớp Checker class Checker { public: void inject(CString &, int, CString ); //Chèn dữ liệu mẫu kiểm vào CString getForumValue(int ,CString ,CString &,CString &, CString &); //Lấy dữ liệu trong form ... Cstring getLinkValue(int ,CString, CString &,CString &) //Lấy dữ liệu trong liên kết Checker(); virtual ~Checker(); -Trang 147- Chương 13: Chương trình Web Checker }; Định nghĩa các phương thức: Khoa CNTT - Lấy dữ liệu thực của các đối tượng cần kiểm như form/ liên kết trong trang sau đó sẽ được chương trình lần lượt chèn các mẫu kiểm thông qua phương thức inject(…) rồi gửi lên trình chủ. - Chèn giá trị mẫu kiểm vào dữ liệu của form/ liên kết. • Lớp Request class Request { public: Request(); virtual ~Request(); private: void ParseURL(LPCSTR url,LPSTR protocol,int lprotocol, LPSTR host,int lhost,LPSTR request,int lrequest,int *port); //Phân rã chuỗi URL int SendHTTP(LPCSTR url,LPCSTR headers,BYTE *post, DWORD postLength,HTTPRequest *req); //Mở kết nối, gửi HTTP yêu cầu và nhân HTTP trả lời public: void SendRequest(bool IsPost, LPCSTR url, CString &psHeaderSend, CString &psHeaderReceive, CString &psMessage); //Nếu yêu cầu là GET thì dùng cung cấp của ActiveX còn POST thì gọi hàmSend HTTP ... }; Định nghĩa các phương thức ở mức thấp là giao tiếp trực tiếp với trình chủ: -Trang 148- Chương 13: Chương trình Web Checker Khoa CNTT - Phương thức SendHTTP được gọi thông qua các phương thức SendRequest(…) và Browse(). Phương thức này có nhiệm vụ tạo kết nối đến trình chủ, gửi yêu cầu và nhận thông điệp trả lời từ trình chủ . Các thông diệp nhận về sẽ được cập nhật vào biến toàn cục chính là m_HTTPsend,m_HTTPreceive, m_HTTPbody. • Lớp Test class Test { public: Test(); virtual ~Test(); CString m_errType; CString m_errName; CString m_strInject; //Loại lỗ hổng //Tên lỗ hổng //Chuỗi ký tự chèn }; CArray m_strRslt; //Các chuỗi kết quả Định nghĩa kiểu dữ liệu mẫu kiểm. Dữ liệu sẽ được đọc từ tập tin test.txt. Định dạng của tập tin test.txt: Chuỗi kí tự sẽ chèn vào Các mẫu kết quả để phát hiện lỗi Số thứ tự lỗi Tên lỗi %27\1 ... incorrect syntax\1unclosed quotation mark\1 ... 1\2 ... SQL Injection ... Các kí tự “\1”, “\2” dùng để phân cách chuỗi. • Lớp Result -Trang 149- Chương 13: Chương trình Web Checker class Result { public: Result(); virtual ~Result(); CString m_object; int m_ind; CString m_properties; Khoa CNTT  //Đối tượng kiểm tra //vị trí trong trang Web //thuộc tính của đối tượng }; CArray m_err; //Mảng danh sách lỗi nếu có Định nghĩa kiểu dữ liệu kết quả, có nhiệm vụ lưu trữ kết quả kiểm tra của trang Web và được kết xuất ra màn hình chương trình khi kiểm tra xong trang Web thông qua phương thức ShowResult(). -Trang 150- Chương 13: Chương trình Web Checker Khoa CNTT III.3. MÔ TẢ CHƯƠNG TRÌNH VÀ CÁCH SỬ DỤNG III.3.1. Màn hình chương trình Hình 13.III.3.1-1: Thành phần của màn hình chương trình Màn hình ứng dụng gồm có ba phần chính: • Ứng dụng web: như một trình dùng để mở trang web cần kiểm tra và hiển thị kết quả đánh dấu trực tiếp vào vị trí đã kiểm tra trong trang web có an toàn hay không an toàn. -Trang 151- Chương 13: Chương trình Web Checker Khoa CNTT • Kết quả: Liệt kê kết quả sau kiểm tra gồm các vị trí đã kiểm tra an toàn hay không an toàn và những lỗ hổng mà vị trí đó mắc phải. • Lời khuyên: Nếu phát hiện ra lỗi thì sẽ hiển thị cách phòng chống lỗi đó khi chọn tên lỗi bên phần kết quả. III.3.2. Cách sử dụng Người dùng gõ địa chỉ vào hoặc liên kết đến trang web cần kiểm tra. Sau đó chọn nút kiểm tra, chương trình sẽ hiển thị kết quả và lời khuyên cách phòng chống lỗ hổng bị mắc phải Hình 13.III.3.2-1: Màn hình thông báo kết quả -Trang 152- Chương 13: Chương trình Web Checker Khoa CNTT Chương trình sẽ đánh dấu trực tiếp vào trang Web vị trí được kiểm tra (màu xanh là an toàn, màu đỏ là không an toàn). IV. Đánh giá chương trình Những vấn đề đạt được và những vấn đề hạn chế của chương trình sau khi đã thử nghiệm trên mạng ảo và trên Internet: IV.1. Những vấn đề đạt được • Thông phát hiện một số lỗi bảo mật như SQL Injection, Form Field Manipulation, URL Manipulation của một Ứng dụng Web trên Interbet để minh họa cho phần lý thuyết của các kỹ thuật đó. • Thể hiện rõ ràng, trực quan kết quả các vị trí đã kiểm tra. • Đưa ra các gợi ý về biện pháp phòng chống đối với lỗi bảo mật phát hiện được. Ví dụ 13.IV.1-1: Chương trình đã phát hiện được lỗi bảo mật về SQL Injection của ứng dụng Web (www.progenic.com). Cụ thể là các liên kết đến nội dung tin tức không được kiểm tra dữ liệu nhập. ’ ... IV.2. Những vấn đề hạn chế • Do sử dụng cơ chế khá đơn giản là kiểm thử và đánh giá kết quả nhận được, nên chương trình không thể phát hiện các lỗi bảo mật phức tạp. • Hiệu quả đạt được thấp đối với các ứng dụng có cách thiết kế lạ. -Trang 153- Chương 13: Chương trình Web Checker Khoa CNTT Ví dụ 13.IV.2-1: Chương trình đã không phát hiện ra lỗi với ứng dụng Web (www.thanglongmetalwares.com/sanpham.asp) mặc dù ứng dụng có lỗi bảo mật SQL Injection. Nguyên nhân thất bại là do ứng dụng lưu trữ câu truy vấn trong các đối tượng của form nên khi chương trình kiểm tra form sẽ làm thay đổi câu truy vấn nên đã làm thay đổi hoạt động của ứng dụng Web. <input type="hidden" name="strSQL" value="SELECT * FROM Products Where Language = 1 ORDER BY Date DESC"> ... -Trang 154- Kết luận Nội dung: Khoa CNTT KẾT LUẬN I. Những vấn đề đạt được II. Hướng phát triển -Trang 155- Kết luận Khoa CNTT KẾT LUẬN ./ I. NHỮNG VẤN ĐỀ ĐẠT ĐƯỢC Theo yêu cầu đặt ra ban đầu là “Nghiên cứu các kĩ thuật tấn công và bảo mật ứng dụng Web”, cho đến thời điểm hiện tại, luận văn đã đạt được các nội dung sau: • Tìm hiểu các kĩ thuật tấn công ứng dụng Web bao gồm các kĩ thuật o Thao tác trên tham số truyền như URL, biến ẩn form, cookie, HTTP header. o Chèn mã lệnh thực thi trên trình khách Cross-site Scripting. o Chèn câu truy vấn SQL o Đánh chiếm phiên làm việc của người dùng o Tràn bộ đệm o Từ chối dịch vụ o Các kĩ thuật khác như: Mã hóa URL, vượt đường dẫn, kí tự rỗng, ngôn ngữ phía trình chủ,… • Các biện pháp bảo mật từ sự kết hợp giữa nhà quản trị mạng, nhà thiết kế ứng dụng Web và người dùng • Về chương trình “Web Checker” đã đạt một số nội dung cơ bản sau: o Kiểm tra một trang Web có khả năng bị tấn công bằng những kĩ thuật chèn câu lệnh SQL, thay đổi tham số hay không. o Chương trình cho phép người dùng thực hiện giao tiếp với trình chủ giống như một trình duyệt thông thường. -Trang 156- Kết luận II. HƯỚNG PHÁT TRIỂN Khoa CNTT Trong phạm vi một luận văn đại học, luận văn cơ bản đã đạt được các yêu cầu đặt ra. Tuy nhiên, các kết quả còn khá khiêm tốn do hạn chế về tài liệu và thời gian. Trong thời gian tới, nếu có điều kiện, luận văn sẽ cố gắng phát triển thêm những nội dung sau: • Tìm hiểu thêm về các kĩ thuật tấn công để đưa ra phương pháp bảo mật ứng dụng Web ở mức độ sâu hơn. • Tìm hiểu về vấn đề bảo mật sâu hơn, không chỉ dừng ở mức độ một ứng dụng Web mà phát triển hơn vần đề bảo mật ở các hệ thống mạng và dịch vụ. • Khai triển chương trình phát hiện lỗ hổng tốt hơn, trên nhiều phương diện kĩ thuật. • Phát triển chương trình như một Proxy giữa trình chủ với các trình duyệt. Mọi yêu cầu từ trình duyệt hay trả lời từ trình chủ đều phải đi qua chương trình. Bất cứ khi nào chương trình kiểm tra thấy khả năng tấn công từ trình duyệt, chương trình sẽ từ chối yêu cầu đó và đóng kết nối. -Trang 157- Phụ lục Nội dung:  A. HTTP header B. URL Encoding C. Server Side Include Khoa CNTT Phụ lục -Trang 158- Phụ lục Khoa CNTT Phụ lục A: HTTP HEADER • Các tham số thông thường là tham số có thể dùng trong cả HTTP request và HTTP response Tên Cache-Control Connection  max-age=10 Close  Giá trị ví dụ Date Pragma Trailer Transfer-Encoding Upgrade Via Warning Tue, 11 Jul 2000 18:23:51 GMT no-cache Date Chunked SHTTP/1.3 HTTP/1.1 Proxy1, HTTP/1.1 Proxy2 112 Disconnected Operation • Các tham số chỉ có thể dùng trong HTTP Request Accept  Tên  Giá trị ví dụ text/html, image/* Accept-Charset Accept-Encoding Accept-Language Authorization Content-Encoding Expect From iso8859-5 gzip, compress en, fr [credentials] Gzip 100-continue user@microsoft.com -Trang 159- Phụ lục Host If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Max-Forwards Proxy-Authorization Range Referer TE User-Agent Khoa CNTT www.microsoft.com entity_tag001 Tue, 11 Jul 2000 18:23:51 GMT entity_tag001 entity_tag001 hay Tue, 11 Jul 2000 18:23:51 GMT Tue, 11 Jul 2000 18:23:51 GMT 3 [credentials] Bytes=100-599 trailers Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) • Các tham số chỉ có thể dùng trong HTTP Response Tên Accept-Ranges Age  None 2147483648(2^31)  Giá trị ví dụ ETag Last-Modified Location Proxy-Authenticate Retry-After Server Vary WWW-Authenticate b38b9-17dd-367c5dcd Tue, 11 Jul 2000 18:23:51 GMT [challenge] Tue, 11 Jul 2000 18:23:51 GMT hay 60 Microsoft-IIS/5.0 Date [challenge] -Trang 160- Phụ lục Khoa CNTT • Các tham số thực thể có thề dùng trong HTTP request và HTTP response. Các tham số này cho biết thông tin về phần thân, ví dụ như là chuẩn mã hoá được sử dụng. Allow  Tên  GET, HEAD  Giá trị ví dụ Content-Encoding Content-Language Content-Length Content-Location Content-MD5 Content-Range Content-Type Expires Last-Modified Gzip En 8445 [md5-digest] Bytes 2543-4532/7898 text/html Tue, 11 Jul 2000 18:23:51 GMT Tue, 11 Jul 2000 18:23:51 GMT -Trang 161- Phụ lục  Kí tự Mã Hexa æ %00 Khoa CNTT Phụ lục B: URL ENCODING 0 %30 ` %60 %90 À  %c0  ð  %f0 %01 %02 %03 %04 %05 %06 %07 backspace %08 1 2 3 4 5 6 7 8 %31 %32 %33 %34 %35 %36 %37 %38 a b c d e f g h %61 %62 %63 %64 %65 %66 %67 %68 ‘ ’ “ ” • – — ˜ %91 %92 %93 %94 %95 %96 %97 %98 Á Â Ã Ä Å Æ Ç È %c1 %c2 %c3 %c4 %c5 %c6 %c7 %c8 ñ ò ó ô õ ö ÷ ø %f1 %f2 %f3 %f4 %f5 %f6 %f7 %f8 tab linefeed c return %09 %0a %0b %0c %0d %0e %0f %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %1a %1b 9 : ; < = > ? @ A B C D E F G H I J K %39 %3a %3b %3c %3d %3e %3f %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %4a %4b i j k l m n o p q r s t u v w x y z { %69 %6a %6b %6c %6d %6e %6f %70 %71 %72 %73 %74 %75 %76 %77 %78 %79 %7a %7b ™ š › œ ž Ÿ ¡ ¢ £ ¥ | § ¨ © ª « %99 %9a %9b %9c %9d %9e %9f %a0 %a1 %a2 %a3 %a4 %a5 %a6 %a7 %a8 %a9 %aa %ab É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û %c9 %ca %cb %cc %cd %ce %cf %d0 %d1 %d2 %d3 %d4 %d5 %d6 %d7 %d8 %d9 %da %db ù ú û ü ý þ ÿ %f9 %fa %fb %fc %fd %fe %ff -Trang 162- Phụ lục  %1c  L  %4c  | Khoa CNTT %7c ¬ %ac  Ü  %dc space ! " # $ % & ' ( ) * + , - . / %1d %1e %1f %20 %21 %22 %23 %24 %25 %26 %27 %28 %29 %2a %2b %2c %2d %2e %2f M N O P Q R S T U V W X Y Z [ \ ] ^ _ %4d %4e %4f %50 %51 %52 %53 %54 %55 %56 %57 %58 %59 %5a %5b %5c %5d %5e %5f } ~ € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž %7d %7e %7f %80 %81 %82 %83 %84 %85 %86 %87 %88 %89 %8a %8b %8c %8d %8e %8f ¯ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ %ad %ae %af %b0 %b1 %b2 %b3 %b4 %b5 %b6 %b7 %b8 %b9 %ba %bb %bc %bd %be %bf Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï %dd %de %df %e0 %e1 %e2 %e3 %e4 %e5 %e6 %e7 %e8 %e9 %ea %eb %ec %ed %ee %ef -Trang 163- Phụ lục Khoa CNTT Phụ lục C: SERVER SIDE INCLUDE Câu lệnh SSI được chia làm 2 phần: + Câu lệnh + Câu lệnh điều khiển Câu lệnh Ví dụ  Tham số  Giải thích CONFIG  Sizefmt, datefmt điều khiển kích thước file và ngày COOKIE COUNT <!--#cookie if="C1" then="hello" alt="bye"-->, Get, alt, if, then lấy cookie trên trình chủ tổng số kết nối ECHO EXEC <!--#echo reqheader="referer" --> Var, reqstate, reqheader, here Cmd hiển thị header yêu cầu, biến thực thi câu lệnh FLASHMOD FSize INCLUDE JDBC SERVLET  <!--#include file="included.html" --> <!--#jdbc select="SELECT * FROM User" <!--#servlet name="Snoop" param="p1" value="v1" --> Câu lệnh điều khiển -Trang 164-  File, virtual, ifheader, else Select, url, name, column, next, driver, password, user  Chèn một file vào trang hiện hành thực hiện câu truy vấn thực thi servlet với những tham số Phụ lục COUNTER Khoa CNTT ELSE ENDIF  Name Name ENDLOOP  Name EXITLOOP <!--#exitloop name="loop2" command="cpt" var="cpt1" equals="4" --> Name, command, var, equals IF LOOP <!--#if name="if2" command="cpt" var="cpt1" equals="2" --> -Trang 165- Name, command, var, equals Name Tài liệu tham khảo Khoa CNTT TÀI LIỆU THAM KHẢO • Hacking Exposed, Stuart McClure, Joel Scambray, George Kurtz • RFC2617, J.Franks, P. Hallam-Baker, J.Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart – 06/1999 • • • • • • • • • • • -Trang 166-

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

  • docbao_mat_ung_dung_web_tren_internet_7039.doc