Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)Nghiên cứu kiểm thử bảo mật website (LV thạc sĩ)
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-
TRẦN THỊ HẠNH
NGHIÊN CỨU KIỂM THỬ BẢO MẬT WEBSITE
LUẬN VĂN THẠC SĨ KỸ THUẬT
Theo nh hướng ứng dụng
HÀ NỘI - 2017
Trang 2HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-
TRẦN THỊ HẠNH
NGHIÊN CỨU KIỂM THỬ BẢO MẬT WEBSITE
CHUYÊN NGÀNH : HỆ THỐNG THÔNG TIN
MÃ SỐ : 60.48.01.04
`
LUẬN VĂN THẠC SĨ KỸ THUẬT
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS LÊ HỮU LẬP
HÀ NỘI - 2017
Trang 3LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi trong đó có sự giúp
Trang 4LỜI CẢM ƠN
Trước tiên, tôi xin chân thành cảm ơn PGS.TS Lê Hữu Lập đã dành thời
gian quý báu, tận tình hướng dẫn chỉ bảo, góp ý cho tôi trong suốt quá trình thực hiện luận văn tốt nghiệp
Tôi xin được cảm ơn sự giúp đỡ nhiệt tình của các Thầy giáo, Cô giáo khoa Quốc tế và Đào tạo sau đại học - Học viện Công nghệ Bưu chính Viễn thông Đặc biệt, tôi xin được bày tỏ lòng biết ơn sâu sắc tới các Thầy giáo, Cô giáo đã tham gia giảng dạy tôi trong quá trình học tập tại Học viện Các thầy đã tận tình giảng dạy, truyền đạt kiến thức, tạo tiền đề cho tôi hoàn thành luận văn
Cuối cùng, tôi xin chân thành cảm ơn các bạn bè, đồng nghiệp và nhất là gia đình tôi đã quan tâm và tạo mọi điều kiện tốt nhất, động viên, cổ vũ tôi trong suốt quá trình học tập và nghiên cứu để hoàn thành tốt luận văn tốt nghiệp này
Xin trân trọng cảm ơn!
Hà Nội, ngày 30 tháng 5 năm 2017
Tác giả
Trần Th Hạnh
Trang 5MỤC LỤC
LỜI CAM ĐOAN i
LỜI CẢM ƠN ii
MỤC LỤC iii
DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT v
DANH MỤC CÁC BẢNG vi
DANH MỤC CÁC HÌNH vii
MỞ ĐẦU 1
1.Mục đích nghiên cứu 2
2.Đối tượng và phạm vi nghiên cứu 2
CHƯƠNG 1 - TỔNG QUAN VỀ BẢO MẬT WEBSITE 4
1.1.Tổng quan về bảo mật 4
1.2.Mục đích của bảo mật 4
1.3.Thống kê tình trạng bảo mật hiện nay của các trang web 4
1.4 Một số phương pháp tấn công phổ biến hiện nay 5
1.4.1.Tấn công SqlInjection [4][6][15] 5
1.4.2.Tấn công Cross Site Scripting [15] 8
1.4.3 Lỗ hổng Directory Listing [14] 10
Kết luận chương 11
2.1 Giới thiệu về kiểm thử phần mềm 12
2.2 Kiểm thử bảo mật 12
2.2.1 Nhiệm vụ của kiểm thử bảo mật 12
2.2.2.Trách nhiệm của kiểm thử bảo mật 12
2.2.3 Mục đích kiểm thử bảo mật 13
2.3 Các loại kiểm thử bảo mật 13
2.3.1 Kiểm thử yêu cầu và thiết kế 13
2.3.2 Kiểm thử mã nguồn 13
2.3.3 Kiểm thử các thiết lập của trình duyệt 13
2.3.4 Kiểm thử bức tường lửa 14
2.4 Quy trình kiểm thử bảo mật website [10][11] 14
2.4.1.Kiểm thử bảo mật thủ công (manually) [11][12] 15
2.4.2.Kiểm thử bảo mật tự động (Automation) [11][12] 16
Trang 62.5 Các phương pháp kiểm thử bảo mật [14][23] 17
2.5.1 Phương pháp kiểm tra hộp trắng 17
a, Kiểm thử đường diễn tiến của chương trình 19
b, Kiểm thử cấu trúc điều khiển 23
2.5.2 Phương pháp kiểm thử hộp đen [1][2][23] 28
2.5.3 Phương pháp kiểm thử mờ (Fuzzed testing) [3][5][10] 37
2.6 Đánh giá về các phương pháp và công cụ kiểm thử bảo mật website 49
Kết luận chương 2 51
CHƯƠNG 3 – SỬ DỤNG CÔNG CỤ “ACUNETIX WEB VULNERABILITY” ĐỂ KIỂM THỬ BẢO MẬT WEBSITE 52
3.1 Giới thiệu về công cụ “Acunetix Web Vulnerability”[13] 52
3.2 Acunetix Web Vulnerability làm việc như thế nào? 52
3.3 Những tính năng cũng như ưu điểm chính của công cụ Acunetix Web Vulnerability 53
3.4 Thực nghiệm để kiểm thử bảo mật website 54
3.4.1 Download 54
3.4.2 Yêu cầu về cấu hình cài đặt tool Acunetix 54
3.4.3 Sử dụng Acunetix Web Vulnerability 54
3.4.4 Kết quả thực nghiệm 61
3.5 Đánh giá kết quả thực nghiệm 61
Kết luận chương 3 62
KẾT LUẬN 64
1.Những đóng góp của luận văn 64
2.Hướng phát triển 64
IV DANH MỤC CÁC TÀI LIỆU THAM KHẢO 65
Trang 7DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT
AWV Acunetix Web Vulnerability Công cụ kiểm thử Acunetix
DFT Data Follow Testing Kiểm thử luồng dữ liệu
HTML HyperText Markup Ngôn ngữ Đánh dấu Siêu văn
Trang 8DANH MỤC CÁC BẢNG
Bảng 2.1- Các trường hợp kiểm định: 21
Bảng 2.2: Bảng phân đoạn tương đương 29
Bảng 2.3: Bảng phân đoạn tương đương dùng cho giá trị biên 30
Bảng 2.4: Bảng quyết định 32
Bảng 3.1: Bảng so sánh kết quả kiểm thử 2 website bằng công cụ Acunetix 62
Trang 9DANH MỤC CÁC HÌNH
Hình 1.1: Minh họa lỗi Cross Site Script 9
Hình 1.2: Minh họa lỗi Directory Listing 11
Hình 2.1: Mô tả phương pháp kiểm thử hộp trắng 17
Hình 2.2: Đường diễn tiến 18
Hình 2.3: Code của hàm average 20
Hình 2.4: Flow Graph của thủ tục Average 21
Hình 2.5: Cấu trúc lặp 25
Hình 2.6: Giao diện của AppCodeScan 27
Hình 2.7: Minh họa phương pháp kiểm thử hộp đen 28
Hình 2.8: Đồ thị nguyên nhân - kết quả 31
Hình 2.9: Một số loại quan hệ giữa các nút trong đồ thị nguyên nhân – kết quả 32
Hình 2.10: Đồ thị nguyên nhân - kết quả 33
Hình 2.11: Giao diện Wa3f 35
Hình 2.12: Giao diện WebScarab 36
Hình 2.13: Giao diện BurpSuite 37
Hình 2.14: Quy trình kiểm thử Fuzzing 41
Hình 2.15: Kiểm thử website dựa trên kỹ thuật Fuzzing 46
Hình 2.16: Hình ảnh của Nikto 47
Hình 2.17: Giao diện của công cụ Appscan 48
Hình 3.1: Giao diện chính của công cụ Acunetix (AWV) 55
Hình 3.2: Cửa sổ lựa chọn “Scan Type” 56
Hình 3.3: Cửa sổ tùy chọn “Options” 57
Hình 3.4: Cửa sổ Customize Setting 58
Hình 3.5: Cửa sổ Target 1 59
Hình 3.6: Cửa sổ thiết lập login 59
Hình 3.7: Cửa sổ Finish 60
Hình 3.8: Cửa sổ hiển thị màn hình đang quét 60
Hình 3.9: Màn hình kết quả sau khi quét Web1 61
Hình 3.10: Màn hình kết quả sau khi quét Web2 61
Trang 10cố do tấn công DdoS Gần đây vào ngày 29/7/2016, trang mạng chính thức của Vietnam Airlines đã bị hacker tấn công chiếm quyền kiểm soát và chuyển sang trang mạng xấu ở nước ngoài Dữ liệu của một số hội viên khách hàng thường xuyên của Vietnam Airlines đã bị công bố, [9]
Khả năng có thể truy nhập 24/7 từ bất cứ nơi nào trên thế giới hay các ứng dụng web không an toàn thường cung cấp truy nhập dễ dàng đến cơ sở dữ liệu
là một sơ hở lớn cho phép tin tặc có thể thực hiện các hoạt động bất hợp pháp bằng cách sử dụng các trang web đã tấn công Hầu hết nguyên nhân của các vụ tấn công này là do website tồn tại nhiều lỗ hổng bảo mật
Một điều đáng lo ngại nữa là đối với các cá nhân, tổ chức và doanh nghiệp, CNTT nói chung và các ứng dụng web nói riêng đang trở thành một trong các nhân tố, công cụ đắc lực hỗ trợ tăng hiệu suất làm việc và lợi nhuận, hiệu quả kinh tế cao cho họ, nhưng sự quan tâm, và chi phí bỏ ra cho lĩnh vực bảo trì, bảo mật lại không đáng kể Đồng thời các mối nguy hiểm đe dọa ngày càng mới
và phát triển phức tạp hơn, khả năng tấn công và khai thác của các kẻ xấu đã tăng lên rõ rệt, các mã độc, phần mềm độc hại, virut trở nên khó phát hiện và tiêu diệt hơn
Vì vậy vấn đề an ninh mạng nói chung và bảo mật Web Application nói riêng đang là một vấn đề quan trọng và cấp bách cần phải được nghiên cứu, tìm hiểu và đưa ra các giải pháp và kỹ thuật mới để phòng tránh, đồng thời cá nhân,
tổ chức và doanh nghiệp cũng cần dành nhiều thời gian, kinh phí, nhân lực kỹ thuật để đảm bảo cho hệ thống mạng cũng như Web Application của mình hoạt
Trang 11động tốt, có khả năng chống chọi và ngăn chặn trước các mối nguy hiểm và các cuộc tấn công
Đó là lý do em đã chọn đề tài: “Nghiên cứu kiểm thử bảo mật website” để làm luận văn tốt nghiệp với mục đích hiểu được việc kiểm thử website từ đó áp dụng vào công việc thực tế
1 Mục ích nghiên cứu
Tìm hiểu các vấn đề về bảo mật, các phương pháp và các công cụ kiểm thử bảo mật website lựa chọn công cụ kiểm thử và thực hiện thử nghiệm kiểm thử bảo
mật website qua đó đánh giá kết quả
- Tìm hiểu tổng quan về bảo mật
- Nghiên cứu các loại kiểm thử bảo mật, quy trình kiểm thử bảo mật
- Nghiên cứu các phương pháp và các công cụ tương ứng trong kiểm thử bảo mật website
o Phương pháp kiểm thử hộp đen
o Phương pháp kiểm thử hộp trắng
o Phương pháp kiểm thử Fuzzing
- Phân tích đánh giá, lựa chọn công cụ và thực hiện kiểm thử bảo mật website
- Đánh giá kết quả đạt được
2 Đối tượng và phạm vi nghiên cứu
Trong khuôn khổ luận văn thuộc loại nghiên cứu và ứng dụng, em chỉ giới hạn nghiên cứu các vấn đề sau:
- Nghiên cứu các phương pháp và các công cụ tương ứng trong kiểm thử bảo mật website
- Phân tích đánh giá, lựa chọn công cụ và thực hiện kiểm thử bảo mật website
Trang 12Nội dung luận văn: Được trình bày làm 3 chương chính
Chương 1: Tổng quan về bảo mật website
Chương này trình bày tổng quan, mục đích của bảo mật, thống kê tình trạng bảo mật website và các phương pháp tấn công website phổ biến
Chương 2: Nghiên cứu kiểm thử bảo mật website
Trình bày các vấn đề liên quan đến kiểm thử bảo mật: Mục đích của kiểm thử bảo mật, các loại kiểm thử bảo mật, quy trình kiểm thử bảo mật, các phương pháp kiểm thử bảo mật và các công cụ kiểm thử bảo mật từ đó đánh giá lựa chọn đề xuất sử dụng công cụ kiểm thử bảo mật
Chương 3: Sử dụng công cụ “Acunetix Web Vulnerability” ể kiểm thử bảo mật website
Trình bày tổng quan các tính năng chính của công cụ “Acunetix Web Vulnerability”, cách sử dụng và đánh giá kết quả
Cuối cùng là kết luận về những đóng góp của luận văn và hướng phát triển Mặc dù có nhiều cố gắng để hoàn thành luận văn nhưng do thời gian và khả năng có hạn, nên không tránh khỏi những hạn chế, nhược điểm Kính mong các thầy cô và đồng nghiệp đóng góp ý kiến
Xin trân trọng cảm ơn
Trang 13CHƯƠNG 1 - TỔNG QUAN VỀ BẢO MẬT WEBSITE 1.1 Tổng quan về bảo mật
Bảo mật cần sự thỏa hiệp giữa v i ệ c đảm bảo an ninh và chức năng hay khả năng sử dụng của hệ thống Nếu bảo mật quá chặt chẽ, hệ thống sẽ trở nên rất khó sử dụng hoặc khó hoạt động một cách hiệu quả Nếu bảo mật quá đơn giản, hệ thống dễ bị tấn công và xâm nhập
Kiểm thử bảo mật Web, theo nghĩa truyền thống, là đánh giá hiệu quả sự bảo vệ toàn bộ hệ thống Web Nó yêu cầu kết hợp nhiều kiến thức về các công nghệ bảo mật, công nghệ mạng, lập trình, và kinh nghiệm thực tế về thâm nhập các hệ thống mạng Hầu hết các kiểm thử viên phần mềm không có đầy đủ kiến thức này Do đó chúng ta cần nghiên cứu, tìm hiểu các kiến thức về bảo mật cho website từ đó có thể đưa ra cách thức thực hiện cũng như đánh giá về khả năng bảo mật của website
1.2 Mục ích của bảo mật
Tùy thuộc vào các yêu cầu của mỗi hệ thống, mỗi hệ thống có những mục đích khác nhau, nhưng yêu cầu bảo mật đều có điểm chung là: Đảm bảo sự an toàn dữ liệu cho hệ thống và bảo vệ các tài nguyên trên mạng trước sự tấn công nhằm phá vỡ hệ thống hoặc sử dụng trái phép các tài nguyên của một số người có chủ ý xấu
1.3 Thống kê tình trạng bảo mật hiện nay của các trang web
Theo thống kê của trang web bảo mật Security Daily [7], có đến 1039 website
của Việt Nam bị tấn công trong vòng nửa đầu tháng 9 năm 2015 Trong số này, có
69 website giáo dục và hơn 30 website của các cơ quan thuộc Chính phủ Việt Nam Hơn 1000 website các lỗ hổng bị tấn công đều là các lỗ hổng cơ bản và đã tồn tại cách đây hơn chục năm và các hacker có thể dễ dàng tấn công các website này Số lượng các website bị tin tặc tấn công sẽ còn tiếp tục tăng trong thời gian tới
Theo thống kê khác [8] của Bkav, tại Việt Nam, trung bình mỗi tháng lại có hơn 300 website của các doanh nghiệp, tổ chức trong nước bị tấn công Tỷ lệ
Trang 14website tồn tại lỗ hổng ở khu vực Châu Á là 36%, Châu Âu 15%, Châu Mỹ 5% và Châu Phi 33% thì tại Việt Nam tỷ lệ này là 40% Như vậy, mức độ bảo mật của hệ thống các webstie Việt Nam chỉ ở mức trung bình so với các nước trong khu vực và thấp so với trên thế giới Trong đó đáng chú ý là 30% các website ngân hàng tại Việt Nam tồn tại lỗ hổng Và có tới 2/3 trong số này ở mức độ nguy hiểm trung bình và cao
Lỗ hổng nguy hiểm nhất mà các website ngân hàng đang gặp phải là SQL Injection mở đường cho tin tặc tấn công trực tiếp vào dữ liệu của website Các lỗ hổng XSS (Cross Site Scripting) và Open Redirection gây nguy cơ chiếm quyền điều khiển của quản trị hoặc chuyển hướng website đến trang lừa đảo
1.4 Một số phương pháp tấn công phổ biến hiện nay
1.4.1 Tấn công SqlInjection [4][6][15]
1.4.1.1 Khái quát
Lỗ hổng injection là loại lỗ hổng liên quan tới việc thao tác với CSDL, bao gồm các hệ quản trị CSDL quan hệ (Mysql, MSSQL, Oracle…), các dữ liệu XML… Nguyên nhân chủ yếu là do người lập trình không kiểm duyệt hoặc có kiểm duyệt chưa tốt dữ liệu nhập vào, tin tặc dễ dàng có thể vượt qua để chèn các câu lệnh truy vấn như SQL, XQuery…, khi chèn thành công tin tặc có thể đọc, thêm sửa, xóa thông tin trong CSDL của hệ thống
Về mặt lý thuyết, lỗ hổng injection tưởng chừng rất đơn giản nhưng đây là một trong những loại tấn công phổ biến và nguy hiểm nhất hiện nay Dựa vào các lỗi Injection, tin tặc có thể thao tác trực tiếp CSDL của hệ thống, đọc tệp tin, ghi tệp tin nhằm tạo backdoor và chiếm quyền điều khiển hệ thống
1.4.1.2 Minh họa
Nếu lập trình viên không kiểm soát tốt các giá trị biến nhập vào từ người dùng, tin tặc có thể lợi dụng để chèn các đoạn mã độc nhằm thay đổi cấu trúc câu truy vấn và lộ các thông tin về hệ thống Chẳng hạn, một kịch bản quen thuộc để lấy thông tin của hệ thống như sau:
URL: https://test.com/ injection/user.php?id=1
Trang 15Với một giá trị ID chính xác được nhập vào là 1 hệ thống sẽ trả về người dùng có
ID bằng 1
Quá trình xử lý của hệ thống
PHP Code
$id = $_REQUEST[“id”];
$query = “SELECT * FROM users where userID=”.$id;
Hệ thống không có quá trình kiểm duyệt dữ liệu ID từ người dùng
Trong trường hợp này ta thấy, nếu người dùng gửi đường dẫn có giá trị id = x thì
kết quả trả về của hệ thống sẽ hoàn toàn bình thường
Nhìn kỹ đoạn mã PHP xử lý ta thấy biến $id được đưa ngay vào câu truy vấn mà
không được kiểm duyệt trước, tin tặc hoàn toàn có thể chèn một số mã độc để lấy
thông tin về hệ thống Chẳng hạn, thay vì gửi giá trị id = 1 tin tặc sẽ gửi giá trị id = -1 or 1=1
URL: https://test.com/ injection/user.php?id= -1 or 1=1 -
Khi đó câu truy vấn của chúng ta sẽ trở thành
SELECT * FROM users WHERE userID=-1 or 1=1 -
Rõ ràng với điều kiện WHERE userID = -1 thì CSDL sẽ không trả về bản ghi nào trả về Tuy nhiên, do đoạn mã or 1=1 - đã được tin tặc chèn vào Nên điều kiện
sau WHERE sẽ trở nên luôn đúng và kết quả là CSDL sẽ trả về tất cả các bản ghi có
trong bảng users
Bằng những cách thức nâng cao khác, tin tặc hoàn toàn có thể chèn các đoạn mã nguy hiểm hơn để lấy toàn bộ thông tin về hệ thống, đọc ghi tệp tin bằng các hàm trong CSDL như: outfile, load_file (MySQL), execute (MSSQL) lên hệ thống từ đó hình thành những cửa sau (backdoor) và sau cùng là chiếm quyền điều khiển toàn
bộ hệ thống
Với kiểu tấn công Xpath Injection ta cũng có thể khai thác hoàn toàn tương tự Mức độ nguy hiểm của SQL/Xpath Injection là rất cao bởi vì nó tác động trực tiếp đến CSDL: ăn cắp thông tin người dùng, thay đổi làm sai lệch các thông tin quan trọng, thêm sửa xóa CSDL… Rõ ràng, với một hệ thống website đặc biệt là các hệ thống có liên quan đến tài chính như ngân hàng, thì việc thông tin bị đánh cắp hay thay đổi sẽ gây những thiệt hại vô cùng lớn
Trang 161.4.1.3 Cơ chế phát hiện
Tương tự như quá trình khai thác một lỗi SQL chúng ta cũng có thể phát hiện
tự động các hệ thống có ẩn chứa những mối nguy hiểm như vậy Có thể phát hiện các lỗi SQL/Xpath Injection bằng 4 phương pháp chính:
- Dựa trên các thông báo lỗi từ hệ thống, từ CSDL của hệ thống
- Dựa trên kỹ thuật Boolean based (kiểm tra kết quả khác nhau của các câu
truy vấn khác nhau, ví dụ như khi chèn or 1=1 và or 1=2)
- Dựa trên kỹ thuật nối câu truy vấn (UNION query)
- Dựa trên kỹ thuật timebased: sử dụng các hàm thao tác với thời gian trong hệ quản trị CSDL và kiểm tra timeout của kết quả trả về
1.4.1.4 Các thức phòng tránh
Lỗ hổng SQL Injection/Xpath Injection xảy ra do các biến được nhập vào từ người dùng không được kiểm soát chặt chẽ trước khi xây dựng câu truy vấn tới CSDL Đó chính là nguyên nhân chung nhất của các lỗ hổng dạng Injection
Lỗ hổng SQL Injection/Xpath Injection xảy ra khi có kết hợp cả 2 điều kiện:
- Có sự truy vấn tới CSDL
- Câu truy vấn chưa được kiểm soát sự an toàn
Có thể khẳng định chắc chắn rằng, một biến được nhập vào từ người dùng, qua nhiều bước xử lý trung gian xây dựng câu truy vấn tới CSDL mà không có bất cứ bước kiểm tra sự an toàn nào thì chắc chắn sẽ mắc các lỗ hổng Injection Đây cũng chính là điểm mấu chốt để nhận diện và phòng chống các lỗ hổng Injection Phương pháp hữu hiệu nhất để chống tấn công SQL/Xpath Injection là kiểm soát thật chặt chẽ các giá trị nhập được nhập vào từ người dùng
Trang 171.4.2 Tấn công Cross Site Scripting [15]
1.4.2.1 Khái quát
Cross-site Scripting (XSS) là lỗ hổng cho phép tin tặc có thể chèn những đoạn mã client-script (thường là Javascript, JScript, DHTML và cũng có thể là cả các thẻ HTML) vào trang web, khi người dùng vào những trên web này, mã độc sẽ được thực thi trên máy của người dùng và thực hiện các mục đích mà kẻ tin tặc mong muốn
Khác với SQL Injection tấn công vào CSDL của website, XSS tấn công trực tiếp vào người dùng Lợi dụng lỗi XSS này, tin tặc có thể:
- Lừa đảo người quản trị của website, lấy cắp cookie, chiếm session… từ đó có thể đăng nhập chiếm quyền điều khiển website
- Thực thi các mã độc javascript tùy ý nhằm tấn công vào người dùng
- Phát tán các thông tin xấu lên hệ thống
Hiện nay, kĩ thuật tấn công XSS đã nhanh chóng trở thành một trong những lỗ hổng phổ biến nhất của các ứng dụng web Mối đe doạ của chúng đối với người sử dụng ngày càng lớn
Trang 18Khi đó đó hay vì hiện dữ liệu như bình thường hệ thống xuất hiện một popup hiển thị cookie của người dùng:
Hình 1.1: Minh họa lỗi Cross Site Script
Nếu như thay vì chỉ hiển thị cookie của hệ thống, tin tặc có thể sử dụng một hàm gửi mail hay một hàm trong javascript để gửi thông tin về cookie của người dùng về cho tin tặc thì tin tặc hoàn toàn có thể đăng nhập vào tài khoản của người dùng bằng cách set giá trị cookie nhận được vào trình duyệt của tin tặc Tin tặc sẽ có đủ các quyền như người dùng khi đăng nhập vào hệ thống Cũng với lỗi này tin tặc cũng có thể chèn các đoạn virus javascript, cài đặt add-on, download mã độc, … vào trình duyệt và máy của của người dùng
Trang 19- Hàm htmlentities() – trong ngôn ngữ PHP
- Hàm htmlEncode() – trong ngôn ngữ C#
Trong jsp cung cấp cú pháp: ${specialCharString} để thực hiện encode html tag
1.4.3 Lỗ hổng Directory Listing [14]
1.4.3.1 Khái quát
Trong các webserver, khi chúng ta thực hiện truy nhập vào một thư mục web, nếu tồn tại các tệp tin mặc định của hệ thống thì hệ thống sẽ gọi đến ngay các tệp tin mặc định như: index.html, index.jsp, index.php, default.asp… Tuy nhiên nếu trong thư mục không tồn tại các tệp tin mặc định hoặc cơ chế cấu hình riêng của website thì khi truy nhập tới các thư mục web này hệ thống sẽ hiển thị danh sách tất cả các tệp tin và thư mục con hiện có trong thư mục Với lỗ hổng này, tin tặc có thể biết được các danh sách các tệp tin có trên hệ thống và thực hiện việc đọc, truy nhập trái phép vào các tệp tin trong hệ thống
1.4.3.2 Minh họa
Dưới đây là một ví dụ về lỗi Directory Listing
Trang 20Hình 1.2: Minh họa lỗi Directory Listing
1.4.3.3 Phát hiện
Để phát hiện lỗi trên hệ thống ta thực hiện việc truy nhập vào các thư mục của hệ thống, cụ thể truy nhập vào các URL kết thúc bằng dấu “/” Và kiểm tra sự xuất hiện của một số lỗi trả về từ hệ thống Trong mã html trả có chứa từ “index of” hoặc
“parent directory”… thì đồng nghĩa với việc hệ thống tồn tại lỗi Directory Listing
1.4.3.4 Phòng chống
Để phòng chống lỗi Directory Listing cũng hết sức đơn giản, chúng ta có thể thực hiện bằng một trong các phương pháp sau
- Thêm tệp tin mặc định vào các thư mục (index, default…)
- Thêm một số tệp tin cấu hình như htaccess trong Apache để hạn chế
- Cấu hình từ các WebServer (IIS, Apache…)
- Cấu hình phân quyền cấp người dùng khi truy nhập vào các thư mục đó
Kết luận chương
Trong chương này đã nêu lên các khái niệm cơ bản về bảo mật, mục đích của bảo mật, thống kê tình trạng bảo mật của website Đồng thời giới thiệu một số lỗ hổng phổ biến hiện nay Để đảm bảo an toàn cho website cần thực hiện kiểm thử bảo mật cho chúng Việc áp dụng các phương pháp kiểm thử bảo mật website sẽ được giới thiệu ở chương 2 kiểm thử bảo mật website
Trang 21CHƯƠNG 2 – KIỂM THỬ BẢO MẬT WEBSITE
2.1 Giới thiệu về kiểm thử phần mềm
Kiểm thử phần mềm được định nghĩa theo nhiều nguồn khác nhau, dưới đây một số định nghĩa phổ biến hiện nay
Kiểm thử phần mềm (kiểm tra, thử nghiệm) là một cuộc kiểm tra được tiến hành để cung cấp cho các bên liên quan thông tin về chất lượng của sản phẩm hoặc dịch vụ được kiểm thử Kiểm thử có thể cung cấp cho doanh nghiệp một quan điểm, một cách nhìn độc lập về phần mềm để từ đó cho phép đánh giá
và thấu hiểu được những rủi ro trong quá trình triển khai phần mềm Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm lỗi [22]
Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm cung cấp cho người có lợi ích liên quan những thông tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy Mục đích của kiểm thử phần mềm là tìm ra các lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau
2.2 Kiểm thử bảo mật
2.2.1 Nhiệm vụ của kiểm thử bảo mật
Với tư cách là kiểm thử viên, là tập trung kiểm thử bảo mật của Website và ứng dụng Web Điều đó có nghĩa là chúng ta tìm kiếm các lỗ hổng và rò rỉ thông tin gây nên chủ yếu do lập trình và do cấu hình sai các trình chủ Web và các trình chủ ứng dụng khác
2.2.2 Trách nhiệm của kiểm thử bảo mật
Kiểm thử bảo mật liên quan đến trách nhiệm của nhiều người khác nhau sau đây:
- Nhà định nghĩa chính sách (policymaker), định nghĩa các yêu cầu bảo mật nhằm tăng độ tin cậy của người sử dụng và nhà sản xuất về bảo mật hệ thống
- Người quản trị mạng, thiết kế và cài đặt các biện pháp bảo mật nhằm cung cấp bảo mật ở mức hoạt động
Trang 22- Lập trình viên phần mềm, chịu trách nhiệm kiểm thử hệ thống nhằm phát hiện các lỗi chức năng, tương tác cấu hình và khả năng tương thích khi họ liên quan đến cài đặt bảo mật (chủ yếu ở mức ứng dụng và có thể ở mức hoạt động), phát hiện các vấn đề do lỗi thiết kế bảo mật
- Các chuyên gia và nhà tư vấn bảo mật, giúp kiểm thử và duy trì các chương trình bảo mật cũng như xử lý các lỗ hổng bảo mật
2.2.3 Mục đích kiểm thử bảo mật
Kiểm thử bảo mật cho website nhằm mục đích tìm ra các lỗi về bảo mật của website
nó là cơ sở để xác định các lỗ hổng bảo mật
2.3 Các loại kiểm thử bảo mật
2.3.1 Kiểm thử yêu cầu và thiết kế
Bất kỳ hệ thống nào cũng được xây dựng từ một tập hợp các yêu cầu Đôi khi những yêu cầu này được viết một cách rõ ràng, nhưng thường chúng là những phát biểu mập mờ không được định nghĩa rõ ràng về tính bảo mật Ví dụ, có thể
có phát biểu “Ứng dụng phải an toàn” Nhưng “an toàn” nghĩa là gì và nên phải dành bao nhiêu công sức và thời gian để làm cho sản phẩm an toàn Kiểm thử bảo mật ở giai đoạn yêu cầu thiết kế cho ứng dụng web chính là việc xem xét các yêu cần thiết có đã mô tả rõ các tiêu chí cụ thể về yêu cầu bảo mật cho ứng dụng web hay chưa
2.3.2 Kiểm thử mã nguồn
Kiểm tra độ bảo mật của ứng dụng thông qua mã nguồn của ứng dụng Loại kiểm thử này chủ yếu dùng để xác định sự an toàn của thuật toán được dùng trong ứng dụng, xác độ nguy cơ rỏ rỉ thông tin, nguy cơ bị tấn công chiếm quyền kiểm soát thông qua mã nguồn Loại kiểm thử này này thường ứng dụng kỹ thuật kiểm thử hộp trắng
2.3.3 Kiểm thử các thiết lập của trình duyệt
Các thiết lập của trình duyệt có thể được cài đặt trong các trình duyệt như Mozilla FireFox và Microsoft Internet Explorer cho phép giới hạn truy nhập đến các nội dung internet có thể gây hại Người sử dụng sẽ thường có các
Trang 23chỉnh sửa các thiết lập này Hơn nữa, có một sự thay đổi lớn phía người sử dụng
về khả năng làm chủ các thiết lập này Những người sử dụng Web ngày càng được đào tạo nhiều hơn cách sử dụng các thiết lập để bảo vệ chính họ Với tư cách là một đội phát triển Website hay ứng dụng Web, chúng ta không thể bắt buộc người sử dụng chấp nhận các thiết lập mặc định Vì vậy, chúng ta cần phải kiểm thử nhiều sự kết hợp của các thiết lập
2.3.4 Kiểm thử bức tường lửa
Cần nhắc lại rằng nhóm kiểm thử phần mềm không chịu trách nhiệm kiểm thử sự hiệu quả của các tường lửa và sự cấu hình chúng Kiểm thử tường lửa nhằm nhận biết các hiệu ứng về chức năng được tạo ra bởi sự chuyển dữ liệu qua các mạng khác nhau Một số mạng riêng và một số khác công cộng
2.4 Quy trình kiểm thử bảo mật website [10][11]
Bước đầu tiên là phải hiểu được nghiệp vụ hệ thống, mục tiêu bảo mật và tuân thủ bảo mật của tổ chức Việc lập kế hoạch kiểm tra nên xem xét tất cả các yếu tố bảo mật
Thu thập tất cả các thông tin thiết lập hệ thống được sử dụng để phát triển phần mềm và mạng giống như hệ điều hành, công nghệ, phần cứng
Check list các lỗ hổng và rủi ro bảo mật, chuẩn bị kế hoạch kiểm tra để giải quyết những vấn đề này
Đối với mỗi mối đe dọa được xác định, lỗ hổng và rủi ro bảo mật chuẩn bị
ma trận lưu vết (traceability matrix)
Tất cả các thử nghiệm bảo mật có thể không thể thực hiện bằng tay, do đó xác định các công cụ để thực hiện tất cả các trường hợp kiểm tra bảo mật nhanh hơn và đáng tin cậy hơn
Chuẩn bị các testcase kiểm tra bảo mật
Thực hiện test các testcase đó và retest các bug đã được sửa
Thực hiện test tích hợp
Chuẩn bị báo cáo chi tiết về kiểm tra bảo mật, trong đó có lỗ hổng bảo mật
và các mối đe dọa, rủi ro chi tiết, và các vấn đề bảo mật khác
Trang 242.4.1 Kiểm thử bảo mật thủ công (manually) [11][12]
a, Kiểm thử thủ công
Kiểm thử thủ công là quá trình kiểm thử mà người kiểm thử phải xác định vị trí
dữ liệu cần được gửi đến ứng dụng bằng cách sử dụng các intercepting proxy (là một ứng dụng nằm giữa ứng dụng và trình duyệt, cho phép người kiểm thử thay đổi giá trị một cách tùy biến trước khi gửi đến đến ứng dụng) và tập dữ liệu cần gửi đến ứng dụng tương ứng với các vị trí gửi đã xác định trước đó Kiểm thử thủ công bao gồm design, business logic cũng như xác minh mã nguồn Quá trình kiểm thử thâm nhập:
Xác định các lỗ hổng có trong hệ thống là bước quan trọng đầu tiên trong quá trình
Hoạt động sửa chữa được thực hiện trên những lỗ hổng này
Kiểm thử thâm nhập tương tự sẽ được lặp lại cho đến khi hệ thống từ chối tất cả các cuộc kiểm tra
b, Các bước kiểm thử bảo mật thủ công
Thu thập dữ liệu: Các phương pháp khác nhau bao gồm tìm kiếm Google được
sử dụng để có được dữ liệu hệ thống Một trong các phương pháp này cũng có thể sử dụng kỹ thuật phân tích trang mã nguồn web để có thêm thông tin về hệ thống, phiên bản phần mềm và plugin Có rất nhiều công cụ miễn phí và dịch vụ
có sẵn trên thị trường mà có thể cung cấp các thông tin như cơ sở dữ liệu hoặc bảng tên, phiên bản DB, các phiên bản phần mềm, phần cứng và sử dụng plugin của bên thứ 3 trong hệ thống mục tiêu
Đánh giá tính chất dễ bị tổn thương của hệ thống: Dựa trên các dữ liệu thu thập được trong thước đầu tiên người ta có thể tìm thấy những điểm yếu bảo mật trong các hệ thống mục tiêu Điều này giúp nhân viên kiểm thử bảo mật khởi động các cuộc tấn bằng việc sử dụng các đường xâm nhập đã được xác định vào
hệ thống
Khai thác thực tế: Đây là một bước cực kỳ quan trọng Nó đòi hỏi kỹ năng và kỹ thuật đặc biệt để khởi động cuộc tấn công và hệ thống mục tiêu Những kinh
Trang 25nghiệm về bảo mật của nhân viên kiểm thử có thể sử dụng kỹ năng của họ để khởi động cuộc tấn công vào hệ thống
Phân tích kết quả và chuẩn bị báo cáo: Sau khi hoàn thành kiểm thử thâm nhập báo cáo chi tiết được chuẩn bị cho những hoạt động khắc phục lỗi Tất cả các lỗ hổng được xác định và các phương pháp khắc phục được liệt kê trong bản báo cáo Bạn có thể tùy chỉnh định dạng báo cáo lỗ hổng (HTML, XML, MS Word hoặc PDF) theo như yêu cầu của tổ chức
Quá trình tìm kiếm lỗi bảo mật trong mã nguồn của ứng dụng bằng phương pháp thủ công thì phải đòi hỏi người kiểm thử phải có một phương pháp kiểm thử và ra soát hợp lý Bởi vì khối lượng tập tin cũng như nội dung trong các ứng dụng web là rất lớn, nếu như không có một phương pháp rà soát và đánh giá hợp lý thì sẽ tiêu tốn rất nhiều thời gian để phát hiện lỗi
2.4.2 Kiểm thử bảo mật tự động (Automation) [11][12]
Phương pháp kiểm thử lỗi tự động là quá trình các công cụ sẽ thực hiện tự động
quét thư mục, tập tin của ứng dụng web và tự động xác định các điểm mà cần đệ trình dữ liệu Trên cơ sở đã xác định các điểm cần gửi tự động đến công cụ sẽ thực hiện gửi các tập dữ liệu được định nghĩa sẵn và chờ sự phản hồi từ phía ứng dụng web để kiểm tra xem liệu ứng dụng đó có bị các lỗi bảo mật hay không?
Công cụ tự động có thể được sử dụng để xác định một số lỗ hổng tiêu chuẩn hiện tại trong một ứng dụng Công cụ kiểm thử bảo mật quét mã hiện nay dùng để kiểm tra xem có mã độc hay không có thể dẫn đến vi phạm an ninh tiềm tàng Công cụ kiểm thử bảo mật không thể xác minh lỗ hổng bảo mật hiện tại trong hệ thống như các kỹ thuật mã hóa dữ liệu và các giá trị mã cứng giống như username và password
Các tiêu chí để chọn công cụ kiểm thử bảo mật tốt nhất:
Nó sẽ dễ dàng được triển khai, cấu hình và sử dụng
Trang 26 Nó sẽ tạo ra các báo cáo và các bản ghi chi tiết về lỗ hổng
2.5 Các phương pháp kiểm thử bảo mật [14][23]
2.5.1 Phương pháp kiểm tra hộp trắng
2.5.1.1 Nội dung phương pháp [1][2][23]
Phương pháp kiểm tra hộp trắng các lỗi bảo mật trên ứng dụng web là quá trình kiểm tra trực tiếp mã nguồn của ứng dụng web để tìm ra các lỗi bảo mật Quá trình quan sát và kiểm tra mã nguồn có thể thực hiện thủ công hoặc thực hiện bằng công
cụ Quá trình thực hiện bằng công cụ tức là quá trình mà công cụ sẽ thực hiện quét toàn bộ mã nguồn của ứng dụng và dựa trên tập nhận biết các hàm, các chỉ dẫn có khả năng gây ra lỗi bởi ngôn ngữ lập trình phát triển ứng dụng web
Hình 2.1: Mô tả phương pháp kiểm thử hộp trắng
Trước tiên ta thảo luận một số khái niệm cần thiết cho các phần trình bày sau: Khái niệm một đường diễn tiến của chương trình là một tập hợp lệnh được thực thi
có thứ tự trong chương trình Để đơn giản hơn có thể hiểu một đoạn chương trình hay một chương trình chứa rất nhiều các đường diễn tiến tại một lệnh điều kiện rẽ nhánh tạo ra một tập đường mới
Hộp Trắng
Ứng dụng
Trang 27Hình 2.2: Đường diễn tiến
Trong ví dụ trên ta sẽ có 2 đường một đường khi điều kiện A nhận giá trị đúng
và một đường khi điều kiện A mang giá trị sai
Trong kiểm thử hộp trắng, các trường hợp kiểm thử được thiết kế để xem xét trên cấu trúc nội bộ của module và cấu trúc logic và cấu trúc điều khiển Các trường hợp kiểm thử sẽ duyệt qua tất cả các lệnh trong chương trình Tuy nhiên điều này cũng gặp các khó khăn như trình bày ở trên bởi số lượng công việc phải làm Vậy tại sao ta không tập trung vào chỉ thiết kế các trường hợp kiểm thử dựa trên kỹ thuật kiểm thử hộp đen Câu trả lời nằm trong nhưng yếu điểm tự nhiên của phần mềm
Những lỗi về lý luận và những giả sử không chính xác có xác xuất xảy ra tương đương với những trường hợp đúng Những lỗi có khuynh hướng xuất hiện khi chúng ta thiết kế và cài đặt chương trình, các biểu thức điều kiện, hoặc các biểu thức điều khiển, và các lỗi thường có khuynh hướng xuất hiện
ở các trường hợp đặc biệt
Chúng ta thường tin rằng một đường diễn tiến nào đó sẽ không được thực thi Tuy nhiên thực tế thì nó có thể được thực thi Luồng diễn tiến của chương trình đôi khi chỉ là mang tính trực giác, có thể hiểu là một giả định tưởng tượng của người lập trình về luồng điều khiển và dữ liệu đã làm cho chúng ta tạo ra lỗi Lỗi loại này có thể được phát hiện bằng một trường hợp kiểm thử trên một đường diễn tiến
Điều Kiện A
Lệnh thực hiện
False
True
Trang 28 Những lỗi về cài đặt sai do lỗi gõ phím là ngẫu nhiên và có thể xuất hiện tại bất kỳ đâu trong chương trình Khi một chương trình được chuyển đổi từ ý tưởng thiết kế sang thành mã chương trình Một số lỗi do dánh sai hiểu sai xuất hiện Phần lớn có thể được phát hiện bỏi những hệ thống kiểm tra cú pháp của ngôn ngữ, nhưng một số khác sẽ không được phát hiện cho đến khi chạy kiểm thử
Mỗi một lý do giải thích tại sao phải tạo ra các trường hợp kiểm thử dựa trên
kỹ thuật hộp trắng Hộp đen cũng được nhưng có thể một số loại lỗi ở trên sẽ không được phát hiện bởi các trường hợp sử dụng phương pháp này
Vậy cho nên thiết kế các trường hợp kiểm thử này cần phải xem xét đến sự cân bằng giữa mức độ kiểm định và khả năng hiện thực của thiết kế Phần sau là những cấp độ kiểm định dựa trên kỹ thuật kiểm thử hộp trắng
a, Kiểm thử ường diễn tiến của chương trình
Đây là khái niệm chỉ đến việc thiết kế các trường hợp kiểm thử trên từng lệnh trong chương trình sẽ thực hiện ít nhất một lần Kỹ thuật này không quan tâm đến
ảnh hưởng lên các đường quyết định (decisions path)
Việc xây dựng tập hợp kiểm thử có thể thực hiện theo những bước sau đây:
1) Dùng tài liệu thiết kế hay source code để vẽ ra một đồ thị mô tả flow chart của chương trình hay hàm
Trang 29Hình 2.3: Code của hàm average 1) Phân tích thủ tục average Mã lệnh của thủ tục được phân tích và biểu diễn
thành flow chart tương ứng
2) Tạo một đồ thị flow graph biểu diễn tương ứng với flow chart của hàm
average
Trang 30Hình 2.4: Flow Graph của thủ tục Average
3) Trong trường hợp này ta có thể xác định có 6 trường hợp kiểm thử như sau :
1 value[k] = là một giá trị hợp lệ, với k < i
value[i] = -999 vơi một giá trị 2<=i <=100
Giá trị mong đợi
Giá trị trung bình mong đợi là giá trị trung bình đúng của tât cả giá trị k
Trang 31TT Mô Tả
2 value[1] = -999
Giá trị mong đợi :
Giá trị trung bình mong đợi là giá trị trung bình -999, những biền chứa giá trị tổng cộng khác đều bằng 0
3 Cố gắng thực hiện tiến trình cho 101 giá trị hoặc hơn, 100 giá trị đầu trong value là những giá trị hợp lệ
Giá trị mong đợi :
giống như trường hợp 1
4 value[i] = giá trị hợp lệ khi i< 100
value[k]< minimum khi k < i
Giá trị mong đợi :
Giá trị trung bình mong đợi là giá trị trung bình đúng trên k giá trị và tổng nhận giá trị đúng
5 value[i] = là một giá trị hợp lệ khi i <100
value[k] > maximum khi k<=i
Giá trị mong đợi :
Giá trị trung bình mong đợi là giá trị trung bình đúng trên n giá trị và tổng nhận giá trị đúng
6 value[i] = là một giá trị hợp lệ khi i <100
Giá trị mong đợi :
Giá trị trung bình mong đợi là giá trị trung bình đúng trên n giá trị và tổng nhận giá trị đúng
Trang 32Mỗi trường hợp được chạy và so sánh với kết quả mong đợi Nếu tất cả các trường hợp kiểm định đều cho kết quả như mong muốn thì có thể khẳng định rằng tất cả các dòng lệnh trong thủ tục average đều được kiểm thử ít nhất một lần
b, Kiểm thử cấu trúc iều khiển
Kiểm thử các biểu thức iều kiện
Kiểm thử biểu thức điều kiện là phương pháp kiểm thử trên những điều kiện logic của hàm hay module Một điều kiện đơn giản là một biến boolean hoặc là một biểu thức quan hệ:
- X hay Not X một điều kiện logic đơn giản
- Biểu thức quan hệ thường có dạng : E1 <phép toán quan hệ> E2
E1, E2 là các biểu thức số học và phép toán quan hệ là một trong các phép toán sau : <, <=, ==,! = , > hay >= Một điều kiện kết hợp của 2 hay nhiều điều kiện đơn giản, các phép toán boolean: OR (| |, AND (&) and NOT (!)
Các loại lỗi của điều kiện bao gồm:
- Lỗi trong các thao tác luận lý (lỗi tồn tại một biểu thức không đúng, thiếu hoặc thừa các thao tác luận lý):
- Lỗi do giá trị của biến luận lý
- Lỗi do dấu ngoặc
- Lỗi do phép toán quan hệ
- Lỗi trong biểu thức toán học
Mục đích của kiểm thử cấu trúc điều khiển là phát hiện không chỉ lỗi trong điều kiện mà còn những lỗi khác trong chương trình Nếu một tập kiểm thử cho một chương trình P là hiệu quả cho việc phát hiện lỗi trong điều kiện của P, thì bộ kiểm thử đò cũng có thể phát hiện các lỗi khác trong P
E1 <phép toán quan hệ> E2
Ba trường hợp kiểm thử được yêu cầu để kiểm tra là giá trị E1 lớn hơn, nhỏ hơn và bằng giá trị của E2 Nếu <phép toán quan hệ> là không đúng và E1, E2 là đúng thì 3 loại kiểm thử trên có đảm bảo có thể xác định được lỗi trong phép toán
Trang 33quan hệ Để phát hiện lỗi trong E1và E2 thì các trường hợp kiểm thử E1 lớn hơn, nhỏ hơn E2 có thể phát hiện ra được lỗi
Một biểu thức có n biến, thì có 2n khả năng kiểm thử xảy ra khi (n>0)
c, Kiểm thử luồng dữ liệu DFT
Phương pháp kiểm thử luồng dữ liệu chọn lựa một số đường diễn tiến của chương trình dựa vào việc cấp phát, định nghĩa, và sử dụng những biến trong chương trình
Phương pháp kiểm thử luồng dữ liệu yêu cầu rằng tất cả các chuỗi DU đều được kiểm thử ít nhất một lần Có thể thấy rằng bộ kiểm thử cho luồng dữ liệu có thể không bao trùm tất cả các nhánh của chương trình Tuy nhiên nếu môt nhánh đảm bảo được sẽ được phát hiện bởi phương pháp kiểm thử này Trong một số hiếm trường hợp như là cấu trúc lệnh if-then trong phần then không có định nghĩa thêm một biến nào và phần else không tồn tại Trong tình huống này thì nhánh else của câu lênh if trên không cần thiết phải bảo hộ bởi phương pháp này
DFT rất hữu ích cho các loại kiểm thử một chương trình có nhiều lệnh if và lệnh lặp lồng nhau nhiều cấp
d, Kiểm thử vòng lặp
Vòng lặp là một trong những nền tảng cho rất nhiều các thuật toán được cài đặt trong các phần mềm Tuy nhiên, cho đến lúc này chúng ta vẫn còn ít chú ý đến việc xây dựng các trường hợp để kiểm thử
Kiểm thử vòng lặp tập trung vào tính chất của cấu trúc vòng lặp Có 4 cấu trúc vòng lặp như sau: vòng lặp đơn giản, vòng lặp móc nối, vòng lặp tạo thành tổ,
và vòng lặp không cầu trúc
Hình 2.5 mô tả các cấu trúc lặp:
Trang 34 Chỉ cần một lần duyệt xuyên qua cả vòng lặp
Hai lần duyệt xuyên qua cả vòng lặp
m lần duyệt xuyên qua cả vòng lặp
n-1, n, n+1 lần duyệt xuyên qua cả vòng lặp
2 Vòng lặp tạo tổ
Nếu như chúng ta mở rộng phương pháp kiểm thử cho vòng lặp đơn thì số lượng trường hợp kiểm thử sẽ tăng rất nhiều Sau đây là một cách là giảm sồ lượng trường hợp kiểm thử:
Bắt đầu tại vòng lặp con trong cùng Thiết lập tất cả các vòng lặp khác là giá trị minimum
vòng lặp đơn
giản
vòng lặp tạo thành tổ vòng lặp móc nối
vòng lặp không cầu trúc
Trang 35 Kiểm soát vòng lặp ở trong cùng trong khi giữ các vòng lặp bên ngoài lặp lại với giá trị là minimum thông số ảnh hưởng nhau (thông số đó có thể là biến lặp) Thêm môt số trường hợp ngoài phạm vi của biến lặp và một số giá trị đặc biệt
Thực hiên như bước trên và tiến ra ngoài dần
Thực hiện tiếp cho đến khi tất cả các vòng lặp được kiểm thử hết
(3) Vòng lặp móc nối
Đối với kiểu này có thể kiểm thử bằng cách như với vòng lặp đơn ở trên nếu các biền lặp độc lập với nhau Tuy nhiên nếu 2 vòng lặp là móc nối và biến lặp của vòng lặp thứ nhất được sử dụng như là biến khởi tạo cho vòng lặp 2 thì 2 vòng lặp này không còn độc lặp nữa Phương pháp dùng cho vòng lặp tạo tổ sẽ được sử dụng
ở đây
(4) Vòng lặp không có cấu trúc
Khi nào gặp các cấu trúc lặp như vậy thì nên thiết kế lại Việc kiểm thử rất phức tạp
2.5.1.2 Một số công cụ tiêu biểu
Một số công cụ giúp kiểm thử bảo mật website áp dụng phương pháp kiểm thử hộp trắng sau:
a, AppCodeScan [19]
Là công cụ hỗ trợ việc quét mã nguồn là AppCodeScan do Blueinfy Solutions Pvt Ltd phát triển
Việc thực hiện quét mã nguồn bằng công cụ rất đơn giản Chỉ cần lựa chọn thư mục
có chứa mã nguồn ứng dụng Web cần scan và thực hiện lựa chọn rule (lựa chọn các kiểu cần áp dụng cho quá trình scan)
Trang 36Công cụ này có một tiện ích nhỏ giúp kiểm tra các biến hàm, nó chỉ thực hiện scan
mã nguồn dựa trên các tập điểm yếu xây dựng sẵn để nhận biết các điểm có thể gây
ra lỗi bảo mật trong ứng dụng Web
Hình 2.6: Giao diện của AppCodeScan [19]
b, Công cụ RATS (Rough Auditing Tool for Security) [20][21]
Công cụ RATS cũng là một trong những công cụ thực hiện rà soát mã nguồn đối với một
số ứng dụng được viết bằng các ngôn ngữ như C, C++, Perl, PHP, Python và Ruby do Secure Software Inc phát triển Công cụ này cũng chỉ dựa trên tập các hàm mà có nguy cơ gây ra lỗi bảo mật đối với dụng và nó thực hiện scan với tốc độ khá tốt Sau khi thực hiện chạy thì công cụ sẽ đưa ra một danh sách các hàm và vị trí trong mã nguồn, giúp người kiểm tra có thể nhanh chóng tập trung ra soát lại các hàm mà RATS đưa ra, kiểm tra liệu khi sử dụng các hàm đó đã an toàn hay chưa
Trang 372.5.2 Phương pháp kiểm thử hộp đen [1][2][23]
2.5.2.1 Nội dung phương pháp
Phương pháp kiểm tra hộp đen các lỗi bảo mật trên ứng dụng web đề cập đến việc kiểm tra các ứng dụng từ bên ngoài, tức là quan sát các dữ liệu được đệ trình đến ứng dụng và các dữ liệu từ ứng dụng xuất ra mà không cần hiểu đến hoạt động bên trong của nó Quá trình đệ trình dữ liệu từ bên ngoài đến ứng dụng có thể thực hiện bằng thủ công hoặc sử dụng công cụ tự động gửi đến ứng dụng
Hình 2.7: Minh họa phương pháp kiểm thử hộp en
2.5.2.2 Khái quát một số phương pháp kiểm thử hộp đen
a) Phân đoạn tương đương
Phân đoạn tương đương là phương pháp chia dữ liệu vào thành các đoạn, mỗi đoạn đại diện cho một số dữ liệu Và việc kiểm thử chỉ thực hiện trên đại diện đó Mục đích của phương pháp này là giảm số lượng test bằng cách chọn các tập dữ liệu đại diện
Phương pháp dựa trên một số ý tưởng sau:
Hộp đen
Ứng dụng