ĐÁNH GIÁ CHƯƠNG TRÌNH

Một phần của tài liệu Nghiên cứu một số vấn đề về bảo mật ứng dụng web (Trang 144 - 158)

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

CHƯƠNG 13: CHƯƠNG TRÌNH WEB CHECKER

DE

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

I.1. Tng 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 cu

Từ những ý tưởng trên,ứng dụng có những yêu cầu như sau:

I.2.1. Yêu cu chc 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 cu phi chc 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ụ: (adsbygoogle = window.adsbygoogle || []).push({});

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 dng mô hình giao din dng 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 dng 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.

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

III.2.3. S dng giao din lp 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. Mt s lp và hàm chính được cài đặt trong chương trình

• Lớp CCheckerDlg

class CCheckerDlg : public CDialog { (adsbygoogle = window.adsbygoogle || []).push({});

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, 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 (adsbygoogle = window.adsbygoogle || []).push({});

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(); ...

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: (adsbygoogle = window.adsbygoogle || []).push({});

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

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 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 dng

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 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: (adsbygoogle = window.adsbygoogle || []).push({});

IV.1. Nhng vn đề đạ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. Nhng vn đềhn 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

KT LUN

Nội dung:

Một phần của tài liệu Nghiên cứu một số vấn đề về bảo mật ứng dụng web (Trang 144 - 158)