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
Ví dụ:
<!--#jdbc seỉect=" SELECT * FROM User"
name="result" driver="org.gjt.mm.mysql.Driver"
urỉ="jdbc:mysql://localhost:3306/project" -->
//Thiết lập câu lệnh Select
<!--#jdbc name="result" next="true" -->
//Câu lệnh này di chuyển con trỏ đến dòng đầu tiên trong tập tin.
<!--#jdbc name="result" coỉumn="7" -->
//Hiển thị nội dung dòng đầu tiên.
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 đoi nội dung của trang Web.
2.7. TẤN CÔNG “TRÀN BỘ ĐỆM” (Buffer overflow)Khái niệm: Khái niệm:
Buffer overflow từng là lỗ hổng trong hệ thống bảo mật của UNIX nhiều năm nay, nhưng chỉ được công bố sau buổi thảo luận của Dr.Mudge trong tài liệu 1995 “Bằng cách nào viết một chương trình khai thác lỗ hổng Buffer Overflow”
Kĩ thuật Buffer Overflow, cho phép một số lượng lớn dữ liệu được cung cấp bởi người dùng mà vượt quá lượng bộ nhớ cấp phát ban đầu bởi ứng dụng do đó gây cho hệ thống lâm vào tình trạng tràn bộ nhớ, thậm chí có thể bị chèn thêm một đoạn mã bất kì. Nếu ứng dụng được cấu hình để được thực thi như root thì người tấn cơng có thể thao tác như một nhà quản trị hệ thống của web server. Hầu hết những vấn đề đều phát sinh từ khả năng lập trình yếu kém của những nhà lập trình. Đơn cử là sự cẩu thả trong kiểm tra kích thước dữ liệu nhập vào.
Ví dụ: Buffer chỉ được cấp phát 256 byte, nếu buffer nhận 257 kí tự do
người dùng nhập vào, thì xảy ra lỗi tràn bộ đệm, vì máy tính cần khơng gian lưu trữ những byte dư ra, nó sẽ chứa lên những vùng nhớ kế cạnh và ghi đè lên những dữ liệu có sẵn tại đó.
Cịn có một bộ nhớ đệm khác trên bộ nhớ máy tính, dùng để lưu trữ địa chỉ cho lệnh máy kế tiếp sẽ thực thi khi gọi hàm. Vùng nhớ này được cấp phát trên stack, được gọi là con trỏ lệnh (instruction pointer).
Ớ ví dụ trên, sau khi đọc dữ liệu nhập vào từ người dùng, chương trình thực hiện lệnh in ra nội dung, con trỏ lệnh khi đó sẽ mang giá trị là địa chỉ vùng nhớ của lệnh in. Máy tính sẽ thực hiện các thao tác tuần tự: đọc dữ liệu nhập vào, lưu nó vào bộ đệm, kiểm tra con trỏ lệnh để biết lệnh thực thi kế tiếp, tìm địa chỉ vùng nhớ của lệnh in, đọc nội dung bộ đệm và in nó ra màn hình. Nếu lệnh tiếp theo là đoạn mã hacker chèn vào, thì sau khi chương trình thực hiện tràn bộ đệm, nó sẽ tìm đến địa chỉ đoạn mã của hacker để thực thi tiếp.
Cách gây tràn bộ đệm qua ứng dụng web
Các bước cơ bản của kỹ thuật tràn bộ đệm là: chuẩn bị bộ đệm dùng để làm tràn, xác định địa chỉ trả về, xác định địa chỉ của bộ đệm chứa shellcode, cuối cùng gọi thực thi chương trình bị tràn bộ đệm.
Thơng qua những ơ nhập dữ liệu hacker có thể sử dụng một chuỗi string nhị phân có khả năng thực thi đoạn lệnh trên máy đích hoặc phá vỡ hệ thống do phải xử lí dữ liệu quá dài, vượt khả năng cho phép của hệ thống
Biện pháp phòng chống:
Người thiết kế Web cần phải kiểm tra kĩ kích thước dữ liệu trước khi dùng. Dùng Referer trong HTTP Header để kiểm tra yêu cầu có phải xuất phát từ máy người dùng.
Xem xét tính bảo mật của mã nguồn các phần mềm mở. Sử dụng các vùng nhớ được cấp phát động.
Can thận khi sử dụng các vòng lặp để sao chép dữ liệu từ giữa các biến, cần đảm bảo giới hạn đã được kiểm tra.
Cài đặt các bản sửa lỗi.
Sử dụng các công cụ và hướng dẫn để đánh giá mức độ an tồn của chương trình, như Slint, rát, flawfinder.
Chương 3: