MỞ ĐẦU Trong thời đại bùng nổ công nghệ thông tin hiện nay, phần mềm đã đi vào mọi ngõ ngách của cuộc sống và đã có những ảnh hƣởng to lớn đến đời sống của con ngƣời. Bởi vậy mà hơn bao giờ hết, việc kiểm thử và đảm bảo chất lƣợng phần mềm càng trở lên quan trọng. Giờ đây, việc kiểm thử phần mềm cũng không chỉ đơn thuần là kiểm thử cho các chức năng hoạt động tốt, mà còn phải đảm bảo bảo mật phần mềm. Bởi những nỗ hổng về bảo mật là những nguy cơ rất nguy hiểm có thể dẫn đến những hậu quả nghiêm trọng.
Các loại tội phạm công nghệ cao, an ninh mạng là những vấn đề thuộc an ninh phi truyền thống đang ngày càng phổ biến và tác động, ảnh hƣởng đến an ninh quốc gia. Theo tờ USA Today, năm 2012, tội phạm công nghệ cao gây thiệt hại cho nƣớc Mỹ khoảng 67,2 tỷ USD, trên toàn cầu khoảng 400 tỷ USD, chỉ đứng sau tội phạm ma túy (460 tỷ USD) [1]. Thực trạng an toàn thông tin tại Việt Nam đang tiềm ẩn nhiều nguy cơ. An ninh mạng vẫn chƣa thực sự đƣợc quan tâm tại các cơ quan, doanh nghiệp.
Theo nhận định của các chuyên gia Công ty Bkav [2], hầu hết cơ quan doanh nghiệp của Việt Nam chƣa bố trí đƣợc nhân sự phụ trách an ninh mạng hoặc năng lực và nhận thức của đội ngũ này chƣa tƣơng xứng với tình hình thực tế. Vấn đề an ninh mang đang trở lên hiện hữu, ảnh hƣởng sâu rộng, tác động đến các vấn đề chính trị, kinh tế và an ninh quốc gia. Việc đảm bảo bảo mật phần mềm đã trở thành yêu cầu cấp thiết và bắt buộc đối với bất kỳ phần mềm nào. Vì vậy, việc kiểm thử bảo mật cũng trở thành 1 yêu cầu bắt buộc trong quy trình kiểm thử phần mềm của rất nhiều công ty.
Xuất phát từ nhu cầu thực tế này, chúng tôi đã nghiên cứu và tìm hiểu về an toàn thông tin đối với các ứng dụng web và các phƣơng pháp kiểm thử để tìm ra các nỗ hổng về bảo mật của ứng dụng web. Sau một quá trình nghiên cứu dƣới sự hƣớng dẫn của TS. Đặng Đức Hạnh, tôi đã hoàn thành luận văn “XÂY DỰNG CÁC CA KIỂM THỬ AN TOÀN THÔNG TIN CHO ỨNG DỤNG WEB”. Luận văn đƣợc cấu trúc thành 3 chƣơng nhƣ sau: - Chƣơng 1: Khái niệm cơ bản - Chƣơng 2: Thiết kế các ca kiểm thử ATTT cho ứng dụng web - Chƣơng 3: Vận dụng và công cụ hỗ trợ 1 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 1.
KHÁI NIỆM CƠ BẢN Trong Chƣơng 1 chúng tôi trình bày về những khái niệm cơ bản trong kiểm thử phần mềm và kiểm thử an toàn thông tin. Các khái niệm cơ bản trong kiểm thử phần mềm Chúng tôi xin tóm lƣợc lại những khái niệm cơ bản về kiểm thử phần mềm, các phƣơng pháp và chiến lƣợc kiểm thử. Khái niệm về kiểm thử phần mềm Kiểm thử phần mềm [5] là quá trình khảo sát một hệ thống hay thành phần dƣới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá một khía cạnh nào đó của hệ thống hay thành phần đó. 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 điều kiện khác nhau.
Có thể định nghĩa một cách dễ hiểu nhƣ sau: Kiểm thử phần mềm [6] là một tiến trình hay một tập hợp các tiến trình đƣợc thiết kế để đảm bảo mã máy tính thực hiện theo cái mà chúng đã đƣợc thiết kế để làm, và không thực hiện bất cứ thứ gì không mong muốn. Đây là một pha quan trọng trong quá trình phát triển hệ thống, giúp cho ngƣời xây dựng hệ thống và khách hàng thấy đƣợc hệ thống mới đã đáp ứng yêu cầu đặt ra hay chƣa. Các phương pháp kiểm thử Trong thực tế, có 2 phƣơng pháp kiểm thử phần mềm [6] thƣờng đƣợc sử dụng là phƣơng pháp kiểm thử tĩnh (static testing) và kiểm thử động (dynamic testing). Kiểm thử tĩnh (static testing): Là phƣơng pháp kiểm thử phần mềm đòi hỏi phải duyệt lại các yêu cầu và các đặc tả bằng tay, thông qua việc sử dụng giấy, bút để kiểm tra logic, lần từng chi tiết mà không cần chạy chƣơng trình.
Phƣơng pháp này chủ yếu dùng để kiểm tra tính đúng đắn của mã lệnh, thuật toán và các tài liệu đặc tả. Ngoài ra, phƣơng pháp này có thể dùng để xem xét các yêu cầu và thông số kỹ thuật. Kiểm thử tĩnh cũng có thể đƣợc thực hiện một cách tự động. Trong các môi trƣờng lập trình, thƣờng có sẵn một trình thông dịch hay biên dịch kiểm tra tính đúng đắn của cú pháp chƣơng trình, đó cũng là một cách kiểm thử tĩnh nhƣng đƣợc thực hiện tự động.
2 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Kiểm thử động (dynamic testing): Là phƣơng pháp kiểm thử thông qua việc dùng máy chạy chƣơng trình để điều tra trạng thái tác động của chƣơng trình. Đó là kiểm thử dựa trên các ca kiểm thử xác định bằng sự thực hiện của đối tƣợng kiểm thử hay chạy chƣơng trình. Kiểm thử động là kiểm tra cách thức hoạt động của mã lệnh, tức là kiểm tra sự phản ứng vật lý từ hệ thống tới các biến luôn thay đổi theo thời gian. Trong kiểm thử động, phần mềm phải thực sự đƣợc biên dịch và chạy.
Kiểm thử động bao gồm làm việc với phần mềm, nhập các giá trị đầu vào và kiểm tra xem liệu đầu ra có nhƣ mong muốn hay không. Các chiến lược kiểm thử Trong chiến lƣợc kiểm thử, chúng ta có ba chiến lược kiểm thử [6] hay dùng nhất là: kiểm thử hộp đen, kiểm thử hộp trắng, và kiểm thử hộp xám. Chi tiết các phƣơng pháp này nhƣ mô tả phần dƣới. Kiểm thử hộp đen – Black box Một trong những chiến lƣợc kiểm thử quan trọng là kiểm thử hộp đen, hƣớng dữ liệu, hay hƣớng vào ra.
Kiểm thử hộp đen xem chƣơng trình nhƣ là một “hộp đen”. Mục đích của bạn là hoàn toàn không quan tâm về cách cƣ xử và cấu trúc bên trong của chƣơng trình. Thay vào đó, tập trung vào tìm các trƣờng hợp mà chƣơng trình không thực hiện theo các đặc tả của nó. Ở mức kiểm thử này, kiểm thử viên chỉ xem xét dữ liệu đầu vào và giá trị đầu ra có giống với mong muốn không, mà không cần phải quan tâm hệ thống làm thế nào để đƣa đƣợc giá trị đầu ra nhƣ mong muốn.
Kiểm thử dựa trên đặc tả là cần thiết, nhƣng không đủ để ngăn chặn những rủi ro chắc chắn. Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh và kiểm thử viên chỉ rất đơn giản tâm niệm là: một mã lệnh phải có lỗi. Sử dụng nguyên tắc “Hãy đòi hỏi và bạn sẽ đƣợc nhận”, những kiểm thử viên hộp đen tìm ra lỗi mà những lập trình viên không tìm ra. Nhƣng, ngƣời ta nói kiểm thử hộp đen “giống nhƣ là đi trong bóng tối mà không có đèn vậy”, bởi vì kiểm thử viên không biết các phần mềm đƣợc kiểm tra thực sự đƣợc xây dựng nhƣ thế nào.
Đó là lý do mà có nhiều trƣờng hợp mà một kiểm thử viên hộp đen viết rất nhiều ca kiểm thử để kiểm tra một thứ gì đó mà đáng lẽ có thể chỉ cần kiểm tra bằng 1 ca kiểm thử duy nhất. Trong khi đó, một số phần của chƣơng trình lại không đƣợc kiểm tra chút nào. Do vậy, kiểm thử hộp đen có ƣu điểm là đánh giá khách quan, nhƣng lại có nhƣợc điểm là một kiểu thăm dò mù. Kiểm thử hộp trắng – White box Là một chiến lƣợc kiểm thử khác, trái ngƣợc hoàn toàn với kiểm thử hộp đen, kiểm thử hộp trắng hay kiểm thử hƣớng logic cho phép bạn khảo sát cấu trúc bên trong của chƣơng trình.
Chiến lƣợc này xuất phát từ dữ liệu kiểm thử bằng sự kiểm thử tính 3 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com logic của chƣơng trình. Kiểm thử viên sẽ truy cập vào cấu trúc dữ liệu và giải thuật bên trong chƣơng trình (và cả mã lệnh thực hiện chúng). Phƣơng pháp kiểm thử hộp trắng cũng có thể đƣợc kết hợp với phƣơng pháp kiểm thử hộp đen để tạo ra bộ các ca kiểm thử đầy đủ nhằm giảm thiểu rủi ro. Kiểm thử hộp xám – Gray box testing Kiểm thử hộp xám đòi hỏi phải có sự truy cập tới cấu trúc dữ liệu và giải thuật bên trong cho những mục đích thiết kế các ca kiểm thử, nhƣng là kiểm thử ở mức ngƣời sử dụng hay mức hộp đen.
Việc thao tác tới dữ liệu đầu vào và định dạng dữ liệu đầu ra là không rõ ràng, giống nhƣ một chiếc “hộp xám”, bởi vì đầu vào và đầu ra rõ ràng là ở bên ngoài “hộp đen” mà chúng ta vẫn gọi về hệ thống đƣợc kiểm tra. Sự khác biệt này đặc biệt quan trọng khi quản lý kiểm thử tích hợp – Intergartion testing giữa 2 modun mã lệnh đƣợc viết bởi hai chuyên viên thiết kế khác nhau, trong đó chỉ giao diện là đƣợc đƣa ra để kiểm thử. Kiểm thử hộp xám có thể cũng bao gồm cả thiết kế đối chiếu để quyết định, ví dụ, giá trị biên hay thông báo lỗi. Kiểm thử an toàn thông tin cho ứng dụng web Bên cạnh kiểm thử chức năng cho phần mềm, việc kiểm thử an toàn thông tin cho mỗi ứng dụng cũng là một vấn đề rất quan trọng.
Đặc biệt là với các ứng dụng web, loại ứng dụng có đối tƣợng ngƣời dùng rất đa dạng và phức tạp. Ứng dụng web hiện cũng là mục tiêu tấn công của nhiều hacker. Bởi vậy, việc đảm bảo an toàn thông tin cho các ứng dụng web là một yêu cầu cấp thiết. Để nghiên cứu kỹ hơn về vấn đề này, chúng ta sẽ đi tìm hiểu từng khái niệm để hiểu rõ hơn thế nào là kiểm thử an toàn thông tin cho ứng dụng web.
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 Firefox. 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.
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.