Xây dựng các ca kiểm thử an toàn thông tin cho ứng dụng web

  • Số trang: 114 |
  • Loại file: PDF |
  • Lượt xem: 35 |
  • Lượt tải: 0
nhattuvisu

Đã đăng 26946 tài liệu

Mô tả:

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ ----------  ---------- NGUYỄN THỊ THU HIỀ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 THẠC SỸ CÔNG NGHỆ THÔNG TIN Hà Nội - 2014 i ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ ----------  ---------- NGUYỄN THỊ THU HIỀN XÂY DỰNG CÁC CA KIỂM THỬ AN TOÀN THÔNG TIN CHO ỨNG DỤNG WEB Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. ĐẶNG ĐỨC HẠNH Hà Nội - 2014 ii LỜI CẢM ƠN Trƣớc hết, tôi xin gửi lời cảm ơn đặc biệt đến TS. Đặng Đức Hạnh, Bộ môn Công nghệ phần mềm, Khoa Công nghệ Thông tin, Trƣờng Đại học Công nghệ, Đại học Quốc Gia Hà Nội, ngƣời đã định hƣớng đề tài, cung cấp tài liệu và tận tình hƣớng dẫn chỉ bảo tôi trong suốt quá trình thực hiện luận văn cao học này. Tôi xin đƣợc gửi lời cảm ơn sâu sắc tới các thầy cô giáo trong khoa Công nghệ Thông tin, Trƣờng Đại học Công nghệ, Đại học Quốc Gia Hà Nội đã tận tình giảng dạy và truyền đạt những kiến thức, những kinh nghiệm quý báu cũng nhƣ những tình cảm tốt đẹp cho tôi trong suốt thời gian tôi học Cao học. Cuối cùng, tôi xin dành tình cảm biết ơn chân thành đến gia đình, bạn bè và đồng nghiệp, những ngƣời đã luôn ở bên cạnh tôi, động viên, chia sẻ cùng tôi trong suốt thời gian học Cao học cũng nhƣ quá trình thực hiện luận văn Cao học. Hà Nội, tháng 05 năm 2014 Nguyễn Thị Thu Hiền i LỜI CAM ĐOAN Tôi xin cam đoan: bản 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” là do chính tôi viết dƣới sự hƣớng dẫn khoa học của TS. Đặng Đức Hạnh. Nội dung của luận văn có tham khảo nhƣng không sao chép từ bất kỳ tài liệu nào đã đƣợc công bố. Hà Nội, tháng 05 năm 2014 Học viên Nguyễn Thị Thu Hiền ii MỤC LỤC LỜI CẢM ƠN ...................................................................................................................i LỜI CAM ĐOAN ........................................................................................................... ii MỤC LỤC ..................................................................................................................... iii DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT .......................................................................vi DANH MỤC BẢNG .................................................................................................... vii DANH MỤC HÌNH VẼ .............................................................................................. viii MỞ ĐẦU ......................................................................................................................... 1 CHƢƠNG 1. KHÁI NIỆM CƠ BẢN..............................................................................2 1.1. Các khái niệm cơ bản trong kiểm thử phần mềm ..............................................2 1.1.1. Khái niệm về kiểm thử phần mềm .............................................................. 2 1.1.2. Các phƣơng pháp kiểm thử .........................................................................2 1.1.3. Các chiến lƣợc kiểm thử .............................................................................3 1.2. Kiểm thử an toàn thông tin cho ứng dụng web ..................................................4 1.2.1. Khái niệm ứng dụng web ............................................................................4 1.2.2. Hoạt động của một ứng dụng Web ............................................................. 6 1.2.3. Kiểm thử ATTT cho ứng dụng web ............................................................ 7 1.2.4. Quy trình kiểm thử an toàn thông tin .......................................................... 7 CHƢƠNG 2. THIẾT KẾ CA KIỂM THỬ ATTT CHO ỨNG DỤNG WEB ................8 2.1. Phƣơng pháp thiết kế ca kiểm thử ATTT .......................................................... 9 2.2. Tổng hợp nguy cơ về ATTT cho ứng dụng web .............................................10 R1. Tƣơng tác với cơ sở dữ liệu tránh lỗ hổng SQL Injection ............................... 10 R2. Xử lý dữ liệu đầu vào tránh lỗ hổng XSS ........................................................ 10 iii R3. Sử dụng Token trong phƣơng thức GET và POST tránh lỗ hổng CSRF.........11 R4. Kiểm tra quyền truy cập của ngƣời dùng ......................................................... 12 R5. Session Hijacking ............................................................................................. 12 R6. Session fixation ................................................................................................ 12 R7. Kiểm soát các thao tác với file .........................................................................13 R8. Mã hóa dữ liệu nhạy cảm .................................................................................14 R9. User enumeration ............................................................................................. 15 R10. HTTP Only cookie ......................................................................................... 15 R11. Chuyển hƣớng và chuyển tiếp thiếu thẩm tra ................................................15 R12. Thất thoát thông tin và xử lý lỗi không đúng cách ........................................16 R13. Sử dụng captcha an toàn ................................................................................16 R14. Mật khẩu mạnh............................................................................................... 16 2.3. Các ca kiểm thử ATTT .................................................................................... 17 F1. Ca kiểm thử mức chung.................................................................................... 19 F2. Ca kiểm thử cho chức năng Đăng nhập – Đăng xuất .......................................24 F3. Ca kiểm thử cho chức năng Tìm kiếm ............................................................. 28 F4. Ca kiểm thử cho chức năng Thêm mới ............................................................ 35 F5. Ca kiểm thử cho chức năng Sửa .......................................................................44 F6. Ca kiểm thử cho chức năng Xóa ......................................................................60 F7. Ca kiểm thử cho chức năng Xem thông tin ...................................................... 66 F8. Ca kiểm thử cho chức năng Download ............................................................ 71 F9. Ca kiểm thử cho chức năng Upload .................................................................78 F10. Ca kiểm thử cho chức năng Import ................................................................ 84 F11. Ca kiểm thử cho chức năng Trang có chuyển hƣớng .....................................93 iv F12. Ca kiểm thử liên quan đến dữ liệu nhạy cảm .................................................94 F13. Ca kiểm thử cho chức năng liên quan đến mật khẩu ......................................96 CHƢƠNG 3. VẬN DỤNG VÀ CÔNG CỤ HỖ TRỢ ..................................................98 3.1. Minh họa phƣơng pháp kiểm thử .....................................................................98 3.2. Công cụ hỗ trợ................................................................................................100 3.2.1. Quản lý các ca kiểm thử an toàn thông tin ..............................................100 3.2.2. Sinh các ca kiểm thử với từng chức năng của hệ thống website ............101 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ..................................................................102 TÀI LIỆU THAM KHẢO ...........................................................................................103 v DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT Từ viết tắt XSS CSRF URL ATTT HTTP HTTPS HTML DB SQL Tiếng Anh Cross-site script Cross-site request forgery Uniform Resource Locator Information security HyperText Transfer Protocol Hypertext Transfer Protocol Secure HyperText Markup Language Database Structured Query Language HQL Hibernate Query Language IP ID MAC VD DL Internet Protocol identification Media Access Control Example Data vi Tiếng Việt Lỗ hổng XSS Lỗ hổng CSRF Định vị Tài nguyên thống nhất An toàn thông tin Giao thức truyền tải siêu văn bản Giao thức truyền tải siêu văn bản an toàn Ngôn ngữ Đánh dấu Siêu văn bản Cơ sở dữ liệu ngôn ngữ truy vấn mang tính cấu trúc Ngôn ngữ truy vấn hƣớng đối tƣợng Giao thức liên mạng Định danh Điều khiển truy nhập môi trƣờng Ví dụ Dữ liệu DANH MỤC BẢNG Bảng 2.1. Các ký tự đặc biệt có nguy cơ gây lỗ hổng XSS ...................................................... 11 Bảng 2.2. Bảng tổng hợp các nguy cơ mất ATTT tƣơng ứng với từng chức năng của một ứng dụng web .................................................................................................................................. 18 Bảng 2.3. Các ca kiểm thử chỉ cần kiểm tra một lần trên toàn bộ hệ thống ............................. 19 Bảng 2.4. Các ca kiểm thử với màn hình có chức năng Đăng nhập – Đăng xuất .................... 24 Bảng 2.5. Các ca kiểm thử với màn hình có chức năng Tìm kiếm........................................... 28 Bảng 2.6. Các ca kiểm thử với màn hình có chức năng Thêm mới.......................................... 35 Bảng 2.7. Các ca kiểm thử với màn hình có chức năng Sửa .................................................... 44 Bảng 2.8. Các ca kiểm thử với màn hình có chức năng Xóa.................................................... 60 Bảng 2.9. Các ca kiểm thử với màn hình có chức năng Xem thông tin chi tiết 1 bản ghi ....... 66 Bảng 2.10. Các ca kiểm thử với màn hình có chức năng Download........................................ 71 Bảng 2.11. Các ca kiểm thử với màn hình có chức năng Upload ............................................ 78 Bảng 2.12. Các ca kiểm thử với màn hình có chức năng Import ............................................. 84 Bảng 2.13. Các ca kiểm thử với màn hình có chức năng Chuyển hƣớng ................................ 93 Bảng 2.14. Các ca kiểm thử với chức năng có dữ liệu nhạy cảm............................................. 94 Bảng 2.15. Các ca kiểm thử với màn hình có chức năng liên quan đến mật khẩu ................... 96 vii DANH MỤC HÌNH VẼ Hình 1.1. : Kiến trúc ứng dụng Web và Database ...................................................................... 5 Hình 1.2. : Mô hình hoạt động của một ứng dụng Web ............................................................. 5 Hình 1.3. Quy trình kiểm thử ATTT .......................................................................................... 8 Hình 3.1. Chức năng quản lý sự kiện ....................................................................................... 98 Hình 3.2. Chức năng quản lý các ca kiểm thử ATTT trên ứng dụng web ............................. 100 Hình 3.3. Chức năng sinh tập các ca kiểm thử cho từng chức năng trên ứng dụng web ....... 101 viii 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 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. 1.1. 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ử. 1.1.1. 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. 1.1.2. 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 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. 1.1.3. 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. 1.1.3.1. 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ù. 1.1.3.2. 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 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. 1.1.3.3. 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. 1.2. 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. 1.2.1. 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. 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. 4 Một ứng dụng web thƣờng có kiến trúc gồm: Hình 1.1. : Kiến trúc ứng dụng Web và Database - - 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 gồm trình khách, trình chủ, hệ quản trị cơ sở dữ liệu: Hình 1.2. : Mô hình hoạt động của một ứng dụng Web Trình khách (hay còn gọi là trình duyệt) thƣờng đƣợc sử dụng là Internet 5 Explorer, Netscap Navigator, Firefox… Trình chủ thƣờng đƣợc dùng nhƣ Apache, IIS… Hệ quản trị cơ sở dữ liệu phổ biến nhƣ SQL Server, MySQL, DB2, Access … 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 (firewall), 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 - 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 Trong kỹ thuật phần mềm, một Ứng dụng web [7] là một trình ứng dụng mà có thể tiếp cận qua web thông qua mạng nhƣ Internet hay intranet. Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chƣơng trình. Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho sự phổ biến của nó. Ứng dụng web đƣợc dùng để hiện thực webmail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, weblog, MMORPG, hệ quản trị nội dung, phần mềm quản lý nguồn nhân lực và nhiều chức năng khác. Các ứng dụng web có thể đƣợc viết bởi 1 ngôn ngữ bất kỳ, chạy trên rất nhiều loại hệ điều hành, nhiều loại trình duyệt khác nhau, và ngƣời dùng cuối có thể hành xử theo mọi cách mà bạn có thể tƣởng tƣợng. Cốt lõi của một ứng dụng web là sử dụng các giao thức HTTP để truyền dữ liệu. Dữ liệu từ server gửi về client thƣờng định dạng HTML và javascript. Dữ liệu đầu vào thƣờng sử dụng phƣơng thức GET, POST và các phƣơng thức tƣơng tự. 1.2.2. 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 6 - 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ì 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 kẻ tấn công 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 kẻ tấn công 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, kẻ tấn công cũng có thể 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. 1.2.3. Kiểm thử ATTT cho ứng dụng web Kiểm thử bảo mật web [3] là kiểm tra sự đảm bảo an toàn dữ liệu và bảo vệ tài nguyên của hệ thố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ố đối tƣợng có mục đích xấu. Để làm đƣợc điều này cần có kiến thức về công nghệ bảo mật, kinh nghiệm thực tế về cách thức thâm nhập các phần không đƣợc phép trên hệ thống website. Việc thiết lập bảo mật cho một hệ thống website phụ thuộc vào nhiều yếu tố: bảo mật về thiết kế, bảo mật về xây dựng mã nguồn, bảo mật về các thiết lập của trình duyệt, bảo mật tƣờng lửa. Tuy nhiên, trong khuôn khổ luận văn này, chúng tôi chỉ để cập đến vấn đề bảo mật khi xây dựng mã nguồn. Phƣơng pháp kiểm tra độ bảo mật của ứng dụng thông qua mã nguồn 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. Dựa trên các đặc trƣng của ứng dụng web, việc kiểm thử có thể xác định nguy cơ rò rỉ thông tin hoặc bị tấn công chiếm quyền kiểm soát hệ thống. Phƣơng pháp này thƣờng ứng dụng kỹ thuật kiểm thử hộp trắng. 1.2.4. Quy trình kiểm thử an toàn thông tin Quy trình kiểm thử chức năng có đầu vào là tài liệu mô tả yêu cầu hệ thống và tài liệu thiết kế hệ thống. Cũng tƣơng tự nhƣ vậy, nhƣng quy trình kiểm thử an toàn thông tin còn cần thêm tài liệu phân tích các nguy cơ mất an toàn thông tin đối với hệ thống. Từ đó, đƣa ra các ca kiểm thử trên hệ thống và thực hiện kiểm thử để tìm ra lỗi. 7 Quy trình kiểm thử an toàn thông tin đƣợc mô tả nhƣ hình 1.3 [3]: Bắt đầu Tài liệu giải pháp Phân tích các nguy cơ mất ATTT đối với hệ thống Xây dựng các ca kiểm thử ATTT Thực hiện kiểm thử ATTT Đúng Nếu có lỗi Sai Kết thúc Hình 1.3. Quy trình kiểm thử ATTT 8 CHƢƠNG 2. THIẾT KẾ CA KIỂM THỬ ATTT CHO ỨNG DỤNG WEB Các ứng dụng web đứng trƣớc rất nhiều nguy cơ về việc mất an toàn thông tin. Để giảm thiểu những nguy cơ này, quy trình sản xuất phần mềm cần tuân thủ những nguyên tắc về lập trình an toàn. Cũng giống nhƣ việc đảm bảo các chức năng hoạt động đúng, các quy trình phát triển phần mềm đều phải qua 2 bƣớc: lập trình và kiểm thử. Việc đảm bảo các chức năng không bị lỗ hổng về an toàn thông tin cũng cần trải qua 2 bƣớc nhƣ vậy. Để đảm bảo thực hiện đƣợc điều này, chúng ta sẽ cùng tìm hiểu cách thức kiểm tra mức độ ATTT của một hệ thống web. 2.1. Phƣơng pháp thiết kế ca kiểm thử ATTT Để thiết kế các ca kiểm thử ATTT cho các ứng dụng Web, chúng tôi thực hiện theo các bƣớc sau. Bước 1: Chƣơng này xác định các nguy cơ về lỗi ATTT. Dƣ̣a trên công bố của thế giới về các lỗ hổ ng bảo mâ ̣t của mô ̣t ƣ́ng du ̣ng web , chƣơng 2 tâ ̣p hơ ̣p nhƣ̃ng mô tả cu ̣ thể về tƣ̀ng lỗ hổ ng bảo mâ ̣t , phân tích tƣ̀ng lỗ hổ ng có thể dẫn đế n nhƣ̃ng nguy về mấ t ATTT của hê ̣ thố ng. Mô ̣t ví du ̣ điể n hình là l ỗi "SQL Injection". Lỗi này xuấ t hiê ̣n khi lâ ̣p trình viên sƣ̉ du ̣ng phƣơng pháp cô ̣ng xâu đố i với các dƣ̃ liê ̣u đầ u vào . Nhƣ̃ng kẻ tấ n công có thể lơ ̣i du ̣ng đă ̣c điể m này để truyề n vào nhƣ̃ng đoa ̣n mã làm sai lê ̣ch mu ̣c đích truy v ấn. Bước 2: Mỗi l ỗ hổng bảo mật này có thể xuất hiện ở nhiề u ph ần khác nhau của một hệ thống. Bởi vậy, chúng tôi sẽ phân một ứng dụng web thành các chức năng và phân tích từng chức năng và các nguy cơ về mấ t ATTT mà ch ức năng đó có khả năng mắc phải. Ví dụ, qua phân tić h đă ̣c điể m dƣ̃ liê ̣u đầ u vào của tƣ̀ng chƣ́c năng , chúng tôi nhâ ̣n thấ y , lỗi "SQL Injection" có nguy cơ mắc phải tại các chức năng : Đăng nhâ ̣p , Tìm kiếm, Thêm mới, Sƣ̉a, Xoá, Xem thông tin, Import Bước 3: Bƣớc này mô tả chi ti ết cách thiế t kế các ca ki ểm thử tƣơng ứng với cặp "nguy cơ ATTT" và "chức năng". Ví dụ, với lỗi “SQL injection” và chƣ́c năng “Đăng nhâ ̣p” . Chƣ́c năng Đăng nhâ ̣p bi ̣lỗi SQL injection khi lâ ̣p trình không tham số hoá dƣ̃ liê ̣u truyề n vào Tên đăng nhâ ̣p và Mâ ̣t khẩ u , mà sử dụng phƣơng pháp cộng xâu . Kẻ tấn công có thể lợi dụng đă ̣c điể m này để truyề n vào các xâu dƣ̃ liê ̣u nhằ m phá vỡ cấ u trúc câu SQL kiể m tra 9 tính hợp của Tên đăng nhập và Mật khẩu . Cụ thể câu truy vấ n kiể m tra tính hơ ̣p lê ̣ của Tên đăng nhâ ̣p và Mâ ̣t khẩ u là select * from user where user = „Tên đăng nhập người dùng nhập‟ and pass = „Mật khẩu người dùng nhập‟ . Trƣờng hơ ̣p ngƣời dùng nhâ ̣p Tên đăng nhập = abc‟ or „a‟=‟a có thể dẫn đến việc phá vỡ cấu trúc ban đầu của câu truy vấ n . Câu truy vấ n mới là select * from user where user = „abc‟ or „a‟ =‟a‟ and pass = „Mật khẩu người dùng nhập‟ , lúc này biểu thức điều kiện luôn đúng . Bởi vâ ̣y, dù ngƣời dùng không biết Tên đăng nhập và Mật khẩu vào hệ thống vẫn có thể truy câ ̣p đƣơ ̣c . Dƣ̣a vào nhƣ̃ng phân tích trên , chúng tôi thiết kế ca kiểm thử tƣơng ứng nhằ m mu ̣c đić h kiể m tra hê ̣ thố ng có mắ c lỗi SQL injection ở chƣ́c n ăng đăng nhâ ̣p không. Phƣơng pháp đƣơ ̣c áp du ̣ng để xây dƣ̣ng lên ca kiể m thƣ trên là phƣơng pháp kiể m thƣ̉ hô ̣p trắ ng. Tính đúng đắn của ca kiểm thử đƣợc phân tích và đảm bảo ở bƣớc 3. Trong phạm vi luận văn, chúng tôi không đi sâu chứng minh tính đúng đắn của các ca sử kiểm thử. Điểm nhấn mạnh ở đây là phƣơng pháp đề xuất cho viê ̣c thiế t kế các ca kiểm thử ATTT cho ứng dụng Web. Trong phần tiếp theo của chƣơng, mục 2.2. sẽ tổng hợp các nguy cơ về lỗi ATTT, mục 2.3 trình bày các ca kiểm thử đƣợc xây dựng theo phƣơng pháp này. 2.2. Tổng hợp nguy cơ về ATTT cho ứng dụng web Phần này tổng hợp những vấn đề có thể dẫn đến mất ATTT đối với ứng dụng web. Mỗi vấn đề đƣợc trình bày gồm 3 phần: mô tả vấn đề, nguy cơ mất ATTT của vấn đề và cách phòng chống. R1. Tương tác với cơ sở dữ liệu tránh lỗ hổng SQL Injection Mô tả: Dữ liệu đầu vào từ ngƣời dùng phải đƣợc truyền dƣới dạng tham số, không đƣợc sử dụng cách cộng xâu trong các truy vấn tới cơ sở dữ liệu. Nguy cơ: Khi truy vấn tới cơ sở dữ liệu, lập trình viên thƣờng sử dụng cách cộng xâu dữ liệu đầu vào từ ngƣời dùng, các câu truy vấn này có thể bị mắc lỗi SQL Injection hoặc HQL Injection (nếu sử dụng Hibernate). Bằng việc lợi dụng các lỗi này, kẻ tấn công có thể xem, thêm, sửa, xóa dữ liệu trong database từ đó chiếm đƣợc tài khoản admin, lấy cắp thông tin ngƣời dùng... Phòng chống: Để phòng chống các nguy cơ này, truy vấn SQL phải dùng PrepareStatement, tất cả tham số phải đƣợc add bằng hàm (setParam), không đƣợc xử dụng cách cộng xâu trong truy vấn. Với truy vấn HQL, tất cả tham số phải đƣợc add bằng hàm (setParam), không đƣợc xử dụng cách cộng xâu trong truy vấn [8]. R2. Xử lý dữ liệu đầu vào tránh lỗ hổng XSS 10
- Xem thêm -