• Đư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
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 tồ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 ln nằm trong trạng thái báo động về độ an tồn.
Phần III: Chương trình Web Checker
PHẦN THỨ BA
CHƯƠNG TRÌNH WEB CHECKER
Chương 13: Chương trình Web Checker
Nội dung:
Chương 13
CHƯƠNG TRÌNH WEB CHECKER
I. Đặc tả chương trình Web CheckerII. Kiến trúc chương trình Web Checker II. Kiến trúc chương trình Web Checker III. Cài đặt
Chương 13: 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
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 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.
Chương 13: Chương trình Web Checker
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ủ.
Chương 13: Chương trình Web Checker
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.
Chương 13: Chương trình Web Checker
III. CÀI ĐẶT
III.1. Ngơn ngữ cài đặt
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ạngDialog 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
Chương 13: Chương trình Web Checker
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(); //Lấy dữ liệu mẫu kiểm
void markChecked(CString &); //đá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 < Result *, Result *> m_result; //Mảng chứa kết quả
CArray < Test *, Test *> m_Test; //Mảng chứa dữ liệu mẫu kiểm
bool m_IsPost; // Loại yêu cầu POST/GET
CString m_sData; //Dữ liệu trong Header yêu cầu
CString m_HTTPbody; //Phần thân của HTTP trả lời
CString m_HTTPreceive; //Header trả lời
CString m_HTTPsend; //Header yêu cầu
... protected:
afx_msg void OnBeforeNavigate2Explorer(LPDISPATCH, VARIANT FAR*, VARIANT FAR*, VARIANT FAR*, VARIANT FAR*, VARIANT FAR*,
BOOL FAR*); //Hàm bắt sự kiện trên trình duyệt Web
Chương 13: Chương trình Web Checker
void Browse(); //Gửi/nhận thơng với trình chủ
void InsertHTML() //Hiển thị thông tin trả lời thành Web
};
Kế thừa từ lớp CDialog, ngồ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();
Chương 13: Chương trình Web Checker
};
Định nghĩa các phương thức:
- 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
... };
Chương 13: Chương trình Web Checker
- 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; //Loại lỗ hổng
CString m_errName; //Tên lỗ hổng
CString m_strInject; //Chuỗi ký tự chèn
CArray <CString,CString> 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
Chương 13: Chương trình Web Checker class Result { public: Result(); virtual ~Result();
CString m_object; //Đối tượng kiểm tra
int m_ind; //vị trí trong trang Web
CString m_properties; //thuộc tính của đối tượng
CArray <CString,CString> 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().
Chương 13: Chương trình Web Checker
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 tồn hay khơng an tồn.
Chương 13: Chương trình Web Checker
• Kết quả: Liệt kê kết quả sau kiểm tra gồm các vị trí đã kiểm tra an tồn hay khơng an tồn và những lỗ hổng mà vị trí đó mắc phải.
• Lời khun: 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
Chương 13: Chương trình Web Checker
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 tồ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.
http://www.progenic.com/out/?id=5’ ...
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.
Chương 13: Chương trình Web Checker
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.
<form method="post" action="Sanpham.asp" name="Sanpham">
<input type="hidden" name="strSQL" value="SELECT * FROM Products Where Language = 1 ORDER BY Date DESC">
<input type="hidden" name="Page" value="1"> ...
Kết luận
KẾT LUẬN
Nội dung:
I. Những vấn đề đạt đượcII. Hướng phát triển II. Hướng phát triển
Kết luận
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.
Kết luận
II. HƯỚNG PHÁT TRIỂN
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.
Phụ lục
Phụ lục
Nội dung:
A. HTTP header B. URL Encoding C. Server Side Include
Phụ lục
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 Giá trị ví dụ
Cache-Control max-age=10
Connection Close
Date Tue, 11 Jul 2000 18:23:51 GMT
Pragma no-cache
Trailer Date
Transfer-Encoding Chunked
Upgrade SHTTP/1.3
Via HTTP/1.1 Proxy1, HTTP/1.1 Proxy2
Warning 112 Disconnected Operation
• Các tham số chỉ có thể dùng trong HTTP Request
Tên Giá trị ví dụ
Accept text/html, image/*
Accept-Charset iso8859-5
Accept-Encoding gzip, compress
Accept-Language en, fr
Authorization [credentials]
Content-Encoding Gzip
Expect 100-continue
Phụ lục
Host www.microsoft.com
If-Match entity_tag001
If-Modified-Since Tue, 11 Jul 2000 18:23:51 GMT
If-None-Match entity_tag001
If-Range entity_tag001 hay Tue, 11 Jul 2000 18:23:51
GMT
If-Unmodified-Since Tue, 11 Jul 2000 18:23:51 GMT