Phương pháp kiểm thử tự động bảo mật ứng dụng web

MỤC LỤC

NGHIÊN CỨU CÁC PHƯƠNG PHÁP KIỂM THỬ TỰ ĐỘNG TÍNH BẢO MẬT ỨNG DỤNG WEB

  • Phân tích tĩnh .1 Phân tích từ vựng
    • Phân tích động
      • Kiểm thử thâm nhập

        Phương pháp này thực hiện nhanh chóng, tuy nhiên đối với các lỗ hổng cần hiểu sâu về hoạt động của chương trình và xuất hiện ở nhiều phần mã của chương trình thì phương pháp này không thực hiện được. Tiêm lỗi (fault injection testing) là một kỹ thuật kiểm thử, được sử dụng để cải thiện mã bao phủ của một thử nghiệm bằng cách đưa vào các lỗi để kiểm tra tất cả các đường dẫn mã, đặc biệt là đường dẫn mã lỗi xử lý mà có thể không được thực hiện trong kiểm thử chức năng. Một môi trường tiêm lỗi thường bao gồm các hệ thống mục tiêu cộng với một dụng cụ tiêm lỗi, thư viện lỗi, bộ tạo khối lượng công việc, thư viện khối lượng công việc, điều khiển, giám sát, thu thập dữ liệu và phân tích dữ liệu.

        Thay vì tiêm lỗi vào phần cứng của hệ thống mục tiêu, phương pháp này đưa lỗi vào mã nguồn hoặc lắp ráp mã của chương trình mục tiêu nhằm cạnh tranh với các ảnh hưởng của phần cứng, phần mềm, và lỗi tạm thời. Kiểm thử Fuzzing là một kỹ thuật hiệu quả cho việc tìm kiếm các lỗ hổng bảo mật trong phần mềm bằng cách kiểm thử các ứng dụng với giá trị biên, các giá trị không hợp lệ hoặc giá trị ít khi được sử dụng. Công cụ kiểm thử Fuzzing tạo ra dữ liệu kiểm thử bởi việc áp dụng các biến đổi ngẫu nhiên đến đầu vào dạng đúng của một chương trình hoặc bằng cách tạo ra các dữ liệu kiểm thử mới dựa trên các mô hình của đầu vào.

        • Kiểm thử tập trung vào việc sử dụng các giá trị đặc biệt như là đầu vào cho chương trình được kiểm thử và do đó giúp nó trong việc phát hiện, khai thác các lỗi quan trọng mà có lẽ sẽ không được phát hiện bằng phương pháp tiếp cận dựa trên mô hình. Trong quá trình tìm hiểu, có hai luồng ý kiến như sau: một số tài liệu cho rằng kiểm thử thâm nhập là một phương pháp kiểm thử bảo mật, và số còn lại cho rằng đây không phải là phương pháp kiểm thử, mà kiểm thử thâm nhập là một phần của công tác đánh giá hệ thống, hay chính xác là đánh giá độ an toàn bằng cách tấn công. Kiểm thử thâm nhập chứa trong các ứng dụng nhấn mạnh từ điểm nhìn của một kẻ tấn công (phương pháp tiếp cận "hộp đen”) sử dụng những đầu vào độc hại riêng biệt, và không yêu cầu quyền truy cập vào mã nguồn (hoặc bytecode).

        Kiểm thử thâm nhập dựa trên việc thực thi mã hiệu quả (tức là cung cấp một cái nhìn về thời gian chạy của các hành vi dịch vụ web), việc phát hiện các lỗ hổng cơ bản dựa trên các phân tích của các phản hồi dịch vụ web, hạn chế khả năng hiển thị trên các hành vi nội bộ của mã. Từ quan điểm hoạt động, kiểm thử thâm nhập giúp tạo hình chiến lược bảo mật thông tin thông qua việc xác định nhanh chóng và chính xác các lỗ hổng; chủ động loại bỏ các rủi ro được xác định; thực hiện các biện pháp khắc phục; và nâng cao kiến thức về công nghệ thông tin. Bằng cách cung cấp các thông tin cần thiết để có hiệu quả, hiệu quả phân lập và ưu tiên các lỗ hổng, kiểm thử thâm nhập có thể hỗ trợ các tổ chức tinh chỉnh và cấu hình kiểm thử thay đổi hoặc vá lỗi để chủ động loại bỏ các rủi ro đã được xác định.

        Bảng 2.1 Bảng phân tích từ vựng
        Bảng 2.1 Bảng phân tích từ vựng

        NGHIÊN CỨU VÀ THỰC NGHIỆM CÔNG CỤ KIỂM THỬ TỰ ĐỘNG TÍNH BẢO MẬT ỨNG DỤNG WEB

        Công cụ kiểm thử tự động

          Acunetix WVS là một công cụ quét lỗi cho ứng dụng Web dựa trên một cơ sở dữ liệu rộng lớn được cập nhật thường xuyên, với các thuật toán heuristic đáp ứng được các cơ chế họat động phức tạp của môi trường Web. Acunetix WVS có thể tự động kiểm tra các lổ hỗng thông dụng như cross site scripting, sql injection và các mối nhạy cảm khác của những web site có thể truy cập bằng trình duyệt, hay những ứng dụng được xây dụng trên các kỹ thuật tiên tiến như AJAX…. - Sau tiến trình cwarling và khám phá tình trạng của ứng dụng web, Acunetix WVS tự động phát động các đợt tấn công đã được lập trình sẳn dựa trên các lổ hổng, giống như khi web site bị 1 hacker tấn công thực sự, phân tích các trang và những vị trí có thể nhập liệu cùng với các sự kết hợp khác nhau của dữ liệu đầu vào có thể làm cho website hiển thị những thông tin nhạy cảm.

          “Alerts Node”, mỗi alert gồm các thông tin về lỗi cũng như các mối nguy hiểm có thể gặp phải và “dĩ nhiên” là kèm theo các khuyến nghị về cách thức khắc phục. - Sau khi tiến trình kiểm tra hoàn tất, chúng ta có thể lưu lại thành một tập tin để phân tích sau này, với công cụ báo cáo chuyên nghiệp sẽ giúp cho các web master dễ dàng tổng hợp các kết quả kiểm tra khác nhau trên ứng dụng Web của mình. Sau khi quét, Acunetix WVS sẽ liệt kê cấu trúc của site, phiên bản webserver đang sử dụng, URL không tồn tại, các lỗi phát hiện được cũng như mức độ Security của site đang quét như Hình 3.9.

          Trong thời gian thực tập và làm việc tại Công ty cổ phần phát triển công nghệ Trí Nam, em đã sử dụng công cụ Acunetix để kiểm thử bảo mật cho hệ thống quản lý cơ sở dữ liệu đối tượng tại các trung tâm trợ giúp xã hội (http://trungtambtxh.btxh.gov.vn). Với nguyên mẫu ban đầu, SecuBat cung cấp bốn thành phần tấn công khác nhau: SQL Injection, Simple Reflected XSS Attack, Encoded Reflected XSS Attack và Form – Redirecting XSS Attack. Ngoài ra, SecuBat cung cấp một API – giao diện lập trình ứng dụng (Application Programming Interface) cho phép các nhà phát triển thực hiện các module riêng của họ để khởi động các cuộc tấn công mong muốn khác.

          Khi hoàn thành quá trình thu thập dữ liệu và tấn công, để xem các báo cáo về thu thập dữ liệu, chọn Crawling Report; để xem các báo cáo về các lỗ hổng có thể khai thác, chọn Attack Report (kết quả hiển thị như Hình 3.13).

          Hình 3.8 hiển thị giao diện công cụ Acunetix, cửa sổ bên trái cung cấp cho   ta   một   dãy   các   công   cụ:   Web   Scanner,   Site   Crawer,   Target   Finder,
          Hình 3.8 hiển thị giao diện công cụ Acunetix, cửa sổ bên trái cung cấp cho ta một dãy các công cụ: Web Scanner, Site Crawer, Target Finder,

          Thực nghiệm

            Tương tự với thành phần thu thập dữ liệu, một trình điều khiển hàng đợi sẽ xử lý các công việc trong hàng đợi và thông qua chúng để vào luồng thực hiện có sẵn thông qua trình điều khiển luồng phổ biến. Sau khi thành phần tấn công và thành phần phân tích hoàn thành công việc, các kết quả đã được phát hiện sẽ được lưu vào cơ sở dữ liệu cho các báo cáo tiếp theo và để khai thác dữ liệu. Tiếp theo, phương thức AnalyzeWebPageTask tại file AnalyzeWebPageTask.cs được khởi chạy, với nhiệm vụ phân tích trang web, và gọi phương thức ParseParameter tại file WebForm.cs để tìm tất cả các input nhằm chuẩn bị cho việc tấn công.

            Phương thức này để lắng nghe các luồng đang hoạt động, nếu không còn luồng nào đang hoạt động thì sẽ gọi phương thức StopCrawling để kết thúc thu thập dữ liệu và khởi chạy phương thức StartAttacking để bắt đầu tấn công. Như Hình 3.20, thành phần cuộc tấn công đầu tiên xây dựng một trang web yêu cầu và gửi nó vào ứng dụng mục tiêu, bằng cách sử dụng các kịch bản đơn giản như là đầu vào cho mỗi trường mẫu.Các tiến trình máy chủ yêu cầu và trả về một trang phản hồi. Hầu hết các ứng dụng web sử dụng một số loại kiểm duyệt đầu vào, điều này có thể là do thói quen lọc mà các nhà phát triển áp dụng, hoặc do lọc tự động được thực hiện bởi môi trường PHP với các thiết lập cấu hình thích hợp….

            Trong cuộc tấn công dạng chuyển hướng XSS, vấn đề này có thể giải quyết bằng cách nhắm vào mục tiêu, cụ thể là các trang web mà có thể tiết lộ một số loại thông tin nhạy cảm từ người dùng. Tùy thuộc vào vị trí của nó trong trang, mỗi form có thể được xác định duy nhất và tham chiếu của chỉ số hình thức (ví dụ: nếu trang chỉ chứa một hình thức duy nhất, hình thức của nó chỉ số sẽ là 0). Dựa trên vào lỗ hổng này, một URL khai thác được tạo ra mà tiêm JavaScript vào một tham số của các hình thức tìm kiếm để chuyển hướng các mục tiêu của các form đăng nhập vào một trang web bất kỳ.

            Giả sử rằng các trang web dễ bị tấn công có thể truy cập tới http://www.vulnerable-page.com/search.pl, Hình 3.24 thể hiện một phiên bản đơn giản của việc khai thác URL (URL thực tế được mã hoá và khó khăn hơn để đọc).

            Hình 3.17 Thành phần phân tích
            Hình 3.17 Thành phần phân tích