Nghiên cứu tổng hợp công cụ phát hiện lỗi phần mềm để giảm cảnh báo sai

52 12 0
Nghiên cứu tổng hợp công cụ phát hiện lỗi phần mềm để giảm cảnh báo sai

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ LÊ THẾ HUY NGHIÊN CỨU TỔNG HỢP CÁC CÔNG CỤ PHÁT HIỆN LỖI PHẦN MỀM ĐỂ GIẢM CẢNH BÁO SAI Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 8480103.01 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS TRƯƠNG ANH HOÀNG Hà Nội - 2020 MỤC LỤC DANH MỤC HÌNH ẢNH .3 DANH MỤC BẢNG BIỂU DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT LỜI CẢM ƠN LỜI CAM ĐOAN Chương GIỚI THIỆU ĐỀ TÀI VÀ CÁC CƠNG CỤ SỬ DỤNG PHÂN TÍCH MÃ NGUỒN 1.1 Giới thiệu đề tài 1.2 Các công cụ sử dụng nghiên cứu 1.2.1 Cơng cụ phân tích SonarQube .8 1.2.2 Cơng cụ phân tích HuntBugs .12 1.2.3 Công cụ phân tích PMD [6] 12 1.2.4 Cơng cụ phân tích IntelliJ IDE 14 1.2.5 Công cụ phân tích VCG [11] 18 1.2.6 Cơng cụ phân tích SpotBugs [8] 19 1.2.7 Cơng cụ phân tích Infer .19 1.3 Đánh giá hiệu suất 21 1.4 Bộ thử nghiệm (Test Suite) 21 1.5 Các lớp yếu điểm(CWE) 22 Chương PHƯƠNG PHÁP VÀ TIẾN HÀNH THỰC NGHIỆM 23 2.1 Phương pháp nghiên cứu 23 2.1.1 Chiến lược nghiên cứu 23 2.1.2 Phương pháp tạo liệu 23 2.1.3 Phân tích liệu 24 2.2 Tiến hành thử nghiệm 24 2.2.1 Bộ liệu kiểm thử Juliet phiên 1.3 24 2.2.2 Q trình chạy cơng cụ 28 2.2.3 Tổng hợp liệu 31 2.2.4 Viết cơng cụ phân tích liệu .32 2.2.5 Thực phân tích liệu 33 Chương KẾT QUẢ VÀ ĐÁNH GIÁ 43 3.1 Kết 43 3.1.1 Phân tích không theo tiêu chuẩn CWE .43 3.1.2 Phân tích theo danh mục chuẩn CWE .43 3.1.3 Phân tích tổ hợp công cụ không theo chuẩn CWE .45 3.1.4 Phân tích tổ hợp theo chuẩn CWE 45 3.2 Đánh giá 48 3.2.1 Phân tích khơng theo chuẩn CWE 48 3.2.2 Phân tích theo chuẩn CWE 49 Chương 4: KẾT LUẬN .50 Tài liệu tham khảo .51 DANH MỤC HÌNH ẢNH Hình 1.1: thành phần SonarQube [1] Hình 1.2: Các ngơn ngữ SonarQube hỗ trợ 10 Hình 1.3: Cách thức hoạt động SonarQube 11 Hình 1.4: Lỗi NullPointer trước sửa 15 Hình 1.5: Lỗi NullPointer sau sửa 15 Hình 1.6: Mã nguồn khơng sử dụng (mã “chết”) 16 Hình 1.7: Mã nguồn trước xử lý chuỗi 16 Hình 1.8: Mã nguồn sau xử lý chuỗi .16 Hình 1.9: Lỗi đặt vi pham quy tắc đặt tên biến .17 Hình 1.10: Vi phạm đặc điểm kỹ thuật EJB 17 Hình 1.11: Sau sửa vi phạm kỹ thuật EJB 18 Hình 2.1: Cấu trúc mã nguồn 25 Hình 2.2: Phương thức bad() 26 Hình 2.3: Lỗi SQL Ịnjection 26 Hình 2.4: Phương thức goodG2B() .27 Hình 2.5: Phương thức goodB2G() .27 Hình 2.6: Các tiêu chí SonarQube 28 Hình 2.7: Các tiêu chí HuntBugs 29 Hình 2.8: Các tiêu chí PMD 29 Hình 2.9: Các tiêu chí IntelliJ IDE 30 Hình 2.10: Các tiêu chí VCG 30 Hình 2.11: Các tiêu chí SpotBugs 31 Hình 2.12: Các tiêu chí Infer 31 Hình 2.13: Chuẩn hóa liệu đầu vào 32 Hình 2.14: Cú pháp lệnh Java 32 Hình 2.15: Tệp liệu đầu vào công cụ SonarQube 33 Hình 2.16: Ví dụ xác thực kiểm sốt truy cập 34 Hình 2.17: Ví dụ chất lượng mã nguồn 35 Hình 2.18: Ví dụ quản lý luồng kiểm sốt 35 Hình 2.19: Ví dụ mã nguồn có lỗi khơng mã hóa thơng tin mật 36 Hình 2.20: Ví dụ mã hóa tính ngẫu nhiên 36 Hình 2.21: Ví dụ xử lý lỗi 37 Hình 2.22: Ví dụ xử lý tệp tin 37 Hình 2.23: Ví dụ lỗi rị rỉ thông tin 38 Hình 2.24: Ví dụ khởi tạo đóng tài nguyên 38 Hình 2.25: Ví dụ Injection .39 Hình 2.26: Ví dụ phần mềm độc hại 40 Hình 2.27: Ví dụ phần mềm độc hại 40 Hình 2.28: Mã nguồn gây lỗi NullPointer 41 Hình 2.29: Ví dụ xử lý trỏ tham chiếu .41 Hình 2.30: Ví dụ trùng ghi SonarQube 42 Hình 2.31: Ví dụ trùng ghi HuntBugs 42 DANH MỤC BẢNG BIỂU Bảng 2.1: Bảng mẫu liệu chuẩn hóa 23 Bảng 3.1: Bảng liệu phân tích đơn cơng cụ .43 Bảng 3.2: Bảng phân tích đơn công cụ theo chuẩn CWE .43 Bảng 3.3: So sánh phân tích đơn cơng cụ phân tích tổ hợp cơng cụ 49 Biểu đồ 3.1: Biểu đồ tính hiệu suất công cụ 43 Từ viết tắt DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Thuật ngữ tiếng anh Thuật ngữ tiếng việt API Application Programming Interface Giao diện lập trình ứng dụng DFA Data Flow Analysis Phân tích luồng liệu CWE Common Weakness Enumeration Liệt kê điểm yếu chung OWASP Open Web Application Security Project Là tổ chức phi lợi nhuận đưa chuẩn OWASP phục vụ cho công việc pentest hiệu chi tiết MISRA Motor Industry Software Reliability Association Hiệp hội Độ tin cậy Phần mềm Công nghiệp Động Abstract Syntax Tree Cây cú pháp trừu tượng AST LỜI CẢM ƠN Trước tiên học viên xin dành lời cảm ơn chân thành sâu sắc đến thầy giáo, PGS TS Trương Anh Hoàng PGS TS Nguyễn Đức Anh – Hai thầy hướng dẫn, bảo nhiệt tình tạo điều kiện tốt từ bắt đầu thực đến kết thúc cơng việc Học viên xin dành lời cảm ơn chân thành đến thầy cô khoa công nghệ thông tin, trường Đại học Công Nghệ, ĐHQGHN tận tình đào tạo, cung cấp cho kiến thức vơ q bổ ích suốt thời gian hai năm học trường Các thầy cô đồng hành tạo điều kiện cho tất học viên nghiên cứu học hỏi theo nguyên vọng thân Đồng thời học viên dành lời cảm ơn chân thành đến gia đình, bạn bè, đồng nghiệp động viên bên cạnh suốt thời gian qua LỜI CAM ĐOAN Học viên xin cam đoan luận văn thạc sĩ công nghệ thông tin “Nghiên cứu tổng hợp công cụ phát lỗi phần mềm để giảm cảnh báo sai” cơng trình nghiên cứu riêng thân không chép người khác Trong toàn nội dung luận văn, điều trình bày cá nhân học viên tổng hợp từ nhiều nguồn tài liệu Tất nguồn tài liệu tham khảo có xuất xứ rõ ràng hợp pháp Học viên xin chịu trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan Hà Nội, ngày ……tháng… năm 2020 Học viên thực Lê Thế Huy Chương GIỚI THIỆU ĐỀ TÀI VÀ CÁC CƠNG CỤ SỬ DỤNG PHÂN TÍCH MÃ NGUỒN 1.1 Giới thiệu đề tài Hiện nay, chất lượng sản phẩm công nghệ ngày yêu cầu cao nhà phát triển người sử dụng Đối với người sử dụng họ muốn sản phẩm trơn tru hạn chế lỗi hết mức đặc biệt phải thật bảo mật để đảm bảo an toàn thơng tin người sử dụng Cịn nhà phát triển, họ quan tâm đến sản phẩm làm thực tốt chưa, kiểm soát vấn đề phát sinh bảo mật, hiệu suất,… Bên cạnh sản phẩm dàng bảo trì phát triển thêm module dàng khơng? Để trả lời cho vấn đề nhà phát triển đưa vào phân tích mã nguồn tĩnh giai đoạn để nắm phát sinh Vậy họ phân tích mã nguồn tĩnh để biết mã nguồn có sơ hở bảo mật, mã nguồn đảm bảo tăng hiệu suất xử lý chưa, mã nguồn đạt chuẩn theo quy ước để dễ dàng bảo trì cho sau chưa? Hiện có nhiều cơng cụ hỗ trợ phân tích mã nguồn tĩnh để giúp nhà phát triển có câu trả lời cho vấn đề Trong phạm vi nghiên cứu luận văn có đề cập đến số công cụ phổ biến sau: SonarQube, SpotBugs, PMD, IntelliJ IDE, VCG, HuntBugs, Infer Trong luận văn phân tích kết cơng cụ đưa số tiêu chí từ đưa đánh giá công cụ đáp ứng tốt để giải vấn đề nêu nhà phát triển Khi sử dụng cơng cụ độc lập đưa kết kết hợp công cụ lại chất lượng kiểm tra có cải thiện nhiều không? Trong phạm vi nghiên cứu câu hỏi trả lời đưa gợi ý cho người phát triển xây dựng phần mềm 1.2 Các công cụ sử dụng nghiên cứu Trong nghiên cứu công cụ sau lựa chọn: SonarQube, HuntBugs, PMD, IntelliJ IDE, VCG, Spotbugs, Infer công cụ mã nguồn mở dùng để phân tích mã nguồn tĩnh – Tức phân tích mã nguồn trạng thái khơng hoạt động để từ đưa lỗi để khắc phục trước đưa ứng dụng vào chạy thực tế Các cơng cụ ngồi việc sử dụng chức cung cấp người dùng tích hợp plugin phát triển để cải thiện hiệu suất phát lỗi phù hợp với dự án thực tế Các công cụ sử dụng doanh nghiệp công cụ đã có thành tích định phát triển phần mềm doanh nghiệp từ năm trước Sau luận văn giới thiệu vào chi tiết công cụ 1.2.1 Cơng cụ phân tích SonarQube SonarQube (trước Sonar) tảng nguồn mở phát triển SonarSource để kiểm tra chất lượng mã nguồn thực đánh giá cách tự động SonarQube sử dụng phương pháp phân tích tĩnh (static analysis of code) để phát lỗi, mã nguồn thừa khơng có tác dụng lỗ hổng bảo mật 20 ngôn ngữ lập trình Là tảng mã nguồn mở giúp nhà phát triển kiểm tra chất lượng mã nguồn dự án SonarQube viết java hỗ trợ ngôn ngữ khác nhau: PHP, Ruby, Java (bao gồm Android), C#, JavaScript, TypeScript, C/C++, Kotlin, Go, COBOL, PL/SQL, PL/I, ABAP, VB.NET, VB6, Python, RPG, Flex, Objective-C, Swift, CSS, HTML, XML hỗ trợ sở liệu để lưu trữ kết quả: MySql, Postgresql SonarQube hỗ trợ dự án việc đánh giá mã nguồn theo tiêu chuẩn ngôn ngữ có dự án Bên cạnh thực việc sau: • Phát lỗi: phát mã nguồn không dùng đến, mã nguồn bị trùng lặp • Tính tốn độ bao phủ mã nguồn theo kiểm thử đơn vị (Unit test - Unittest coverage) – Đó cách tính tốn kiểm thử hộp trắng đảm bảo tất trường hợp mã nguồn đảm bảo chạy qua chạy thực tế • Tính tốn việc mã nguồn sử dụng mang tính tạm thời khơng tối ưu để sử dụng lại dễ bảo trì mã nguồn hệ thống (Technical Debt) – Nghĩa giải vấn đề cách nhanh chóng khơng theo quy chuẩn quan tâm đến kết Giả sử giá trị phải khai báo số để sử dụng chung cho trường hợp khác sử dụng lại dùng giá trị không khai báo biến số Ví dụ đoạn mã nguồn sau: if (message == “Nhập thiếu thông tin”) {} thay vào khai báo biến số lớp java Constant.java: public static final String MESSAGE = “Nhập thiếu thông tin”; Như đâu cần sử dụng biến MESSAGE sử dụng thay đổi giá trị cần thay đổi chỗ thay phải vào nhiều đoạn mã để thay đổi • So sánh chất lượng mã nguồn so với lần kiểm tra trước • Phát lỗ hổng bảo mật • Kiểm tra độ phức tạp mã nguồn Sonar gồm thành phần [1]: Hình 1.1: thành phần SonarQube [1] ➢ Một máy chủ SonarQube bắt đầu với tiến trình chính: • Máy chủ web cung cấp giao diện người dùng sử dụng quản lý phiên phân tích mã nguồn 37 Hình 2.21: Ví dụ xử lý lỗi Quét tệp tin đầu vào hình 2.21 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ đường dẫn tệp tin java chứa lỗi CWE396_Catch_Generic_Exception/CWE396_Catch_Generic_Exception Exception _01.java có chứa thơng tin lớp CWE396 Như lấy tất thư mục có chứa CWE396 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ không theo chuẩn CWE 2.2.5.1 Xử lý tệp tin (File Handing): Xử lý tệp liên quan đến việc đọc ghi vào tệp Một ví dụ đọc từ tệp người dùng cung cấp đĩa cứng Thật khơng may, đối thủ đơi cung cấp đường dẫn tương đối có chứa dấu chấm dấu gạch chéo Kẻ cơng sử dụng phương pháp để đọc ghi vào tệp vị trí khác đĩa cứng so với dự kiến nhà phát triển Một số lớp CWE sử dụng nghiên cứu: CWE-23, CWE-36, CWE-377, CWE-378, CWE-379, CWE675 Ví dụ: Hình 2.22: Ví dụ xử lý tệp tin Qt tệp tin đầu vào hình 2.22 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ đường dẫn tệp tin java chứa lỗi CWE23_Relative_Path_Traversal/CWE23_Relative_Path_Traversal connect_tcp_01 java có chứa thông tin lớp CWE23 Như lấy tất thư mục có chứa CWE23 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ khơng theo chuẩn CWE 2.2.5.1 Lỗi rị rỉ thơng tin (Information Leaks): Lỗi rị rỉ thơng tin khiến người dùng cung cấp liệu ý muốn Sự cố xảy hệ thống quên xóa 38 khối nhớ trước sử dụng để xây dựng thơng báo gửi đến bên khơng đáng tin cậy Ví dụ, nhà phát triển thường sử dụng thông báo lỗi để thông báo cho người dùng xảy lỗi Thật không may, thông tin nhạy cảm cung cấp thơng báo lỗi, kẻ thù sử dụng để khởi động công tương lai vào hệ thống Một số lớp CWE sử dụng nghiên cứu: CWE-209, CWE-226, CWE-244, CWE-499, CWE-526, CWE-533, CWE-534, CWE535, CWE-539, CWE-591, CWE-598, CWE-614, CWE-615 Ví dụ: Hình 2.23: Ví dụ lỗi rị rỉ thơng tin Qt tệp tin đầu vào hình 2.23 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ đường dẫn tệp tin java chứa lỗi CWE534_Info_Exposure_Debug_Log/CWE534_Info_Exposure_Debug_Log Servle t_01.java có chứa thông tin lớp CWE534 Như lấy tất thư mục có chứa CWE534 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ khơng theo chuẩn CWE 2.2.5.1 Khởi tạo đóng tài nguyên (Initialization and Shutdown): Việc khởi tạo đóng tài nguyên thường xảy mã nguồn Ví dụ, C/C++ nhớ cấp phát heap phải phân bổ sau sử dụng Nếu nhớ không phân bổ, gây rị rỉ nhớ ảnh hưởng đến hiệu suất hệ thống Ví dụ java thực đọc ghi tệp tin có đoạn mã nguồn sau: BufferedReader readerBuffered = null; Sau thực đọc ghi xong readerBuffered != null phải thực đóng khối lệnh finally Như tài ngun sử dụng ln ln đóng sử dụng xong tránh bị tranh chấp tài nguyên với tác vụ khác Một số lớp CWE sử dụng nghiên cứu: CWE-400, CWE-401, CWE404, CWE-415, CWE-416, CWE-457, CWE-459, CWE-568, CWE-580, CWE-586, CWE-590, CWE-665, CWE-672, CWE-761, CWE-762, CWE-772, CWE-773, CWE775, CWE-789 Ví dụ: Hình 2.24: Ví dụ khởi tạo đóng tài nguyên 39 Quét tệp tin đầu vào hình 2.24 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ đường dẫn tệp tin java chứa lỗi CWE404_Improper_Resource_Shutdown/CWE404_Improper_Resource_Shutdown console_InputStreamReader_01.java có chứa thơng tin lớp CWE404 Như lấy tất thư mục có chứa CWE404 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ không theo chuẩn CWE 2.2.5.1 Injection: Là cách cơng khai thác lỗ hổng từ mã nguồn dựa án Việc chèn mã xảy người dùng nhập không xác thực cách Một loại lỗi tiêm phổ biến tập lệnh chéo trang (XSS) Kẻ cơng đặt chuỗi truy vấn vào trường đầu vào khiến liệu không mong muốn hiển thị Điều thường ngăn chặn cách sử dụng xác thực đầu vào thích hợp mã hóa liệu Hay ví dụ khác SQL Injection lỗi câu lệnh truy vấn thao tác với sở liệu bị khai thác ví dụ phần 1.5 Một số lớp CWE sử dụng nghiên cứu: CWE-78, CWE-80, CWE-81, CWE-83, CWE-89, CWE-90, CWE-113, CWE-129, CWE-134, CWE-426, CWE-427, CWE-470, CWE-601, CWE-643 Ví dụ: Hình 2.25: Ví dụ Injection Qt tệp tin đầu vào hình 2.25 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay không Ví dụ đường dẫn tệp tin java chứa lỗi CWE89_SQL_Injection/s01/CWE89_SQL_Injection connect_tcp_executeBatch_01 java có chứa thơng tin lớp CWE89 Như lấy tất thư mục có chứa CWE89 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ khơng theo chuẩn CWE 2.2.5.1 Phần mềm độc hại (Malicious Logic): Phần mềm độc hại phát triển có chủ đích để công hệ thống Đây lỗi an tồn bảo mật thơng tin Một số kiểu phần mềm độc hại: • Trojan Horse: kiểu công giả mạo tệp tin hợp pháp chương trình hữu ích, lại có số chức khơng mong muốn Ví dụ mã nguồn giả mạo (fake codec): Việc tải xuống từ trang web thông báo cho người dùng cho phép bạn xem video hay miễn phí trực tuyến, người dùng chọn video xem bị công từ phần mềm độc hại gài vào hệ thống qua mã nguồn giả mạo 40 • Rabbit/Bacterium: Là kiểu công tự tái tạo liên tục để làm cạn kiệt tài nguyên hệ thống • Logic bomb: Là kiểu cơng có chủ đích, người công sử dụng đoạn mã cố ý chèn vào hệ thống phần mềm thiết lập chức độc hại đáp ứng điều kiện cụ thể Ví dụ: lập trình viên ẩn đoạn mã bắt đầu xóa tệp (chẳng hạn trình kích hoạt sở liệu lương), họ bị chấm dứt hợp đồng với công ty • Trapdoor/Backdoor: Là kiểu công cho phép truy cập hệ thống trái phép thông qua số phần mềm, phương tiện, chức không cấp phép Một số lớp CWE sử dụng nghiên cứu: CWE-111, CWE-114, CWE321, CWE-325, CWE-506, CWE-510, CWE-511, CWE-546 Ví dụ: Hình 2.26: Ví dụ phần mềm độc hại Quét tệp tin đầu vào hình 2.26 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ đường dẫn tệp tin java chứa lỗi CWE114_Process_Control/CWE114_Process_Control basic_01.java có chứa thơng tin lớp CWE114 Như lấy tất thư mục có chứa CWE114 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ không theo chuẩn CWE 2.2.5.1 Xử lý số (Number Handling): Xử lý số lỗi xoay quanh vấn đề xử lý số bao gồm tính tốn khơng xác lưu trữ chuyển đổi số Một ví dụ tràn số nguyên Trên hệ thống 32 bit, giá trị lớn số nguyên có dấu 2.147.483.647 Nếu giá trị tăng lên một, giá trị số âm 2.147.483.648 mong đợi giới hạn số lượng bit sử dụng để lưu trữ số Một số lớp CWE sử dụng nghiên cứu: CWE-190, CWE-191, CWE-193, CWE-194, CWE-195, CWE-196, CWE-197, CWE-369, CWE681 Ví dụ: Hình 2.27: Ví dụ phần mềm độc hại 41 Quét tệp tin đầu vào hình 2.27 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ đường dẫn tệp tin java chứa lỗi CWE190_Integer_Overflow/s01/CWE190_Integer_Overflow byte_console_readLin e_add_01.java có chứa thơng tin lớp CWE190 Như lấy tất thư mục có chứa CWE190 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ khơng theo chuẩn CWE 2.2.5.1 Xử lý trỏ tham chiếu (Pointer and Reference Handling): Con trỏ thường sử dụng mã nguồn để tham chiếu đến khối nhớ mà không cần phải tham chiếu trực tiếp đến khối nhớ Một lỗi trỏ phổ biến tham chiếu đến trỏ NULL Điều xảy trỏ mong đợi để trỏ đến khối nhớ, thay vào trỏ đến giá trị NULL Điều gây ngoại lệ dẫn đến cố hệ thống Ví dụ trỏ NULL gây lỗi hệ thống: Hình 2.28: Mã nguồn gây lỗi NullPointer Mã nguồn hình 2.28 thực gây lỗi NullPoiter làm cho hệ thống không tiếp tục hoạt động để sửa lỗi thay dùng dấu & dùng hai dấu && để câu lệnh trở thành điều kiện đồng thời điều kiện không thỏa mãn không kiểm tra điều kiện Một số lớp CWE sử dụng nghiên cứu: CWE-395, CWE-467, CWE-468, CWE-469, CWE-475, CWE-476, CWE-562, CWE-587, CWE-588, CWE-690, CWE-843 Ví dụ: Hình 2.29: Ví dụ xử lý trỏ tham chiếu Quét tệp tin đầu vào hình 2.29 có lớp tương ứng nằm liệu đường dẫn tệp java bị lỗi hay khơng Ví dụ lớp đường dẫn tệp tin java chứa lỗi CWE476_NULL_Pointer_Dereference/CWE476_NULL_Pointer_Dereference binar y_if_01.java có chứa thơng tin lớp CWE476 Như lấy tất thư mục có chứa CWE476 phân tích tệp java để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ khơng theo chuẩn CWE 2.2.5.1 42 2.2.5.3 Phân tích tổ hợp cơng cụ khơng theo chuẩn CWE Tính tổ hợp chập 2, chập 3, chập tệp liệu cơng cụ lại với để tính TP, FP, Recall, Precision, Discrimination, Discrimination Rate từ đưa kết thực phân tích lỗi cơng cụ so với kết hợp nhiều công cụ cải thiện Giả sử tổ hợp chập tệp liệu cơng cụ: SonarQube HuntBugs hai tệp liệu hai công cụ kết hợp lại với thành tệp liệu từ phân tích tệp liệu tổng hợp để tính số Khi tổng hợp nhiều tệp tin xảy trường hợp ghi có đường dẫn đến tệp tin lỗi, lỗi từ dòng, lỗi đến dòng Chuyển đổi ghi vào thành đối tượng java có ba thuộc tính sau: path, fromLine, toLine sau đưa đối tượng vào cấu trúc liệu giải thuật Set từ lọc ghi trùng theo ba tiêu chí chuẩn hóa Sau đưa danh sách Set phân tích duyệt phần tử so sánh với liệu kiểm thử để tính số TP, FP, Recall, Precision, Discrimination, Discrimination Rate – Thực phần tích đơn cơng cụ khơng theo chuẩn CWE 2.2.5.1 Ví dụ tổ hợp tệp tin kết từ công cụ SonarQube HuntBugs: Hình 2.30: Ví dụ trùng ghi SonarQube Hình 2.31: Ví dụ trùng ghi HuntBugs Theo hình 2.30 hình 2.31 kết hợp kết cơng cụ có ghi trùng ghi số 45416 8257 kết hợp tệp tin kết loại bỏ ghi để tính số xác 2.2.5.4 Phân tích tổ hợp cơng cụ theo chuẩn CWE Tính tổ hợp theo danh mục tiêu chuẩn CWE thực phần 2.2.5.1 Phân tích đơn cơng cụ khơng theo chuẩn CWE, 2.2.5.2 Phân tích đơn cơng cụ theo chuẩn CWE, 2.2.5.3 Phân tích tổ hợp cơng cụ khơng theo chuẩn CWE 43 Chương KẾT QUẢ VÀ ĐÁNH GIÁ 3.1 Kết Từ thực nghiệm chương 2, học viên tổng hợp đưa số kết sau: 3.1.1 Phân tích khơng theo tiêu chuẩn CWE Bảng 3.1: Bảng liệu phân tích đơn cơng cụ Biểu đồ 3.1: Biểu đồ tính hiệu suất công cụ Dựa vào bảng tổng hợp số liệu bảng 3.1 biểu đồ 3.1 cơng cụ có độ xác cao SonarQube với 60% cơng cụ có độ xác thấp HuntBugs 47% Về độ bao phủ mã nguồn công cụ IntelliJ IDE chiếm 86% thấp SpotBugs 1% Bước đầu đánh giá SonarQube IntelliJ IDE khẳng định độ xác độ bao phủ mã nguồn vượt trội so với công cụ khác 3.1.2 Phân tích theo danh mục chuẩn CWE Bảng 3.2: Bảng phân tích đơn cơng cụ theo chuẩn CWE Từ bảng 3.2 kết đo hiệu suất công cụ phân theo lớp yếu điểm CWE chi tiết sau: Xác thực kiểm soát truy cập (Authentication and Access Control): • Độ bao phủ: IntelliJ IDE cao với 53% thấp SpotBugs 0% • Độ xác: Infer cao với 100% thấp SpotBugs 0% 44 Chất lượng mã nguồn (Code quality): • Độ bao phủ: IntelliJ IDE cao với 99% thấp Infer, SpotBugs, VCG, HuntBugs 0% • Độ xác: IntelliJ IDE cao với 72% thấp Infer, SpotBug, VCG, HuntBugs 0% Quản lý luồng kiểm soát (Control Flow Management): • Độ bao phủ: IntelliJ IDE cao với 99% thấp Infer, SpotBugs, HuntBugs 0% • Độ xác: IntelliJ IDE cao với 53% thấp Infer, SpotBugs, HuntBugs 0% Mã hóa tính ngẫu nhiên (Encryption and Randomness): • Độ bao phủ: IntelliJ IDE cao với 99% thấp Infer, SpotBugs, HuntBugs 0% • Độ xác: VCG cao với 83% thấp Infer, SpotBugs, HuntBugs 0% Xử lý lỗi (Error Handling): • Độ bao phủ: PMD, IntelliJ IDE cao với 100% thấp Infer, SpotBugs, VCG, HuntBugs 0% • Độ xác: PMD cao với 72% thấp Infer, SpotBugs, VCG, HuntBugs 0% Xử lý tệp tin (File Handling): • Độ bao phủ: IntelliJ IDE cao với 94% thấp Infer, SpotBugs 0% • Độ xác: VCG cao với 61% thấp Infer, SpotBugs 0% Lỗi rị rỉ thơng tin (Information Leaks): • Độ bao phủ: IntelliJ IDE cao với 93% thấp Infer, SpotBugs, HuntBugs 0% • Độ xác: SonarQube cao với 56% thấp Infer, SpotBugs, HuntBugs 0% Khởi tạo đóng tài nguyên (Initialization and Shutdown): • Độ bao phủ: IntelliJ IDE cao với 95% thấp Infer, SpotBugs, HuntBugs 0% • Độ xác: SonarQube cao với 89% thấp Infer, SpotBugs, HuntBugs 0% Injection: • Độ bao phủ: IntelliJ IDE cao với 95% thấp Infer 0% • Độ xác: SonarQube cao với 66% thấp Infer 0% Phần mềm độc hại (Malicious Logic): • Độ bao phủ: IntelliJ IDE cao với 100% thấp Infer, SpotBugs 0% 45 • Độ xác: HuntBugs cao với 100% thấp Infer, SpotBugs 0% Xử lý số (Number Handling): • Độ bao phủ: IntelliJ IDE cao với 60% thấp SpotBugs, HuntBugs 0% • Độ xác: SonarQube cao với 54% thấp SpotBugs, HuntBugs 0% Xử lý trỏ tham chiếu (Pointer and Reference Handling): • Độ bao phủ: IntelliJ IDE cao với 100% thấp Infer, SpotBugs, HuntBugs 0% • Độ xác: PMD cao với 60% thấp Infer, SpotBugs, HuntBugs 0% Kết luận 1: Độ bảo phủ mã nguồn tốt qua phân tích theo lớp yếu điểm CWE IntelliJ IDE, độ đo hiệu suất phát lỗi xác với tần số xuất nhiều yếu điểm CWE SonarQube 3.1.3 Phân tích tổ hợp cơng cụ khơng theo chuẩn CWE Độ bao phủ cao 97% với tổ hợp công cụ sau: SonarQube, IntelliJ IDE Độ bao phủ thấp 4% với tổ hợp cơng cụ SpotBugs + Infer Độ xác cao 60% với tổ hợp công cụ SonarQube + SpotBugs Độ xác thấp 34% với tổ hợp cơng cụ SpotBugs + Infer 3.1.4 Phân tích tổ hợp theo chuẩn CWE Xác thực kiểm soát truy cập (Authentication and Access Control): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp cơng cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ có hiệu suất thấp với 4% HuntBugs + SpotBugs • Độ xác có hiệu suất cao với 100% SpotBugs + Infer • Độ xác có hiệu suất thấp với 54% HuntBugs + PMD Chất lượng mã nguồn (Code quality): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp công cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ có hiệu suất thấp với 0% tổ hợp công cụ sau: VCG, SpotBugs, Infer • Độ xác có hiệu suất cao đạt 84% HuntBugs + PMD + SpotBugs • Độ xác có hiệu suất thấp đạt 0% tổ hợp công cụ sau: Huntbugs, VCG, SpotBug, Infer Quản lý luồng kiểm soát (Control Flow Management): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp công cụ sau: SonarQube, IntelliJ IDE 46 • Độ bao phủ có hiệu suất thấp với 0% tổ hợp cơng cụ sau: HunBugs, SpotBugs, Infer • Độ xác có hiệu suất cao đạt 53% tổ hơp công cụ sau: SonarQube + IntelliJ IDE, PMD + IntelliJ IDE • Độ xác có hiệu suất thấp đạt 0% tổ hợp công cụ sau: HunBugs, SpotBugs, Infer Mã hóa tính ngẫu nhiên (Encryption and Randomness): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp cơng cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ có hiệu suất thấp với 0% tổ hợp cơng cụ sau: HunBugs, SpotBugs, Infer • Độ xác có hiệu suất cao đạt 53% tổ hợp công cụ sau: HuntBugs + PMD, HuntBugs + IntelliJ IDE, HuntBugs + VCG, PMD + VCG, PMD + SpotBugs, PMD + Infer, IntelliJ IDE + VCG, IntelliJ IDE + SpotBugs, IntelliJ IDE + Infer, VCG + SpotBugs, VCG + Infer • Độ xác có hiệu suất thấp đạt 0% tổ hợp công cụ sau: HunBugs, SpotBugs, Infer Xử lý lỗi (Error Handling): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp công cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ có hiệu suất thấp với 0% tổ hợp công cụ sau: HuntBugs + VCG + Infer, HuntBugs + SpotBugs + Infer, HuntBugs + VCG + SpotBugs • Độ xác có hiệu suất cao đạt 72% tôt hợp sau: HuntBugs + PMD, PMD + VCG, PMD + SpotBugs, PMD + Infer, IntelliJ IDE + VCG, IntelliJ IDE + SpotBugs, IntelliJ IDE + Infer • Độ xác có hiệu suất thấp đạt 0% tổ hợp sau: HuntBugs + VCG + SpotBugs, HuntBugs + VCG + Infer, HuntBugs + SpotBugs + Infer, IntelliJ IDE + VCG +SpotBugs, VCG + SpotBugs + Infer Xử lý tệp tin (File Handling): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp cơng cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ thấp 0% với tổ hợp công cụ SpotBugs + Infer • Độ xác cao 61% với tổ hợp công cụ sau: IntelliJ IDE + VCG +SpotBugs, VCG + SpotBugs + Infer • Độ xác thấp 0% với tổ hợp cơng cụ SpotBugs + Infer Lỗi rị rỉ thơng tin (Information Leaks): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp công cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ thấp 0% với tổ hợp công cụ sau: HuntBugs + SpotBugs + Infer 47 • Độ xác cao 65% với tổ hợp công cụ HuntBugs + PMD + IntelliJ IDE + Infer • Độ xác thấp 0% với tổ hợp công cụ sau: HuntBugs + SpotBugs + Infer Khởi tạo đóng tài ngun (Initialization and Shutdown): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp cơng cụ sau: SonarQube, IntelliJ IDE , PMD • Độ bao phủ thấp 0% với tổ hợp công cụ sau: HuntBugs + SpotBugs + Infer • Độ xác cao 88% với tổ hợp công cụ sau: SonarQube + HuntBugs, SonarQube + SpotBugs, SonarQube + Infer • Độ xác thấp 0% với tổ hợp công cụ sau: HuntBugs + SpotBugs, HuntBugs + Infer, SpotBugs + Infer Injection: • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp cơng cụ sau: SonarQube, IntelliJ IDE, PMD • Độ bao phủ thấp 2% với tổ hợp công cụ SpotBugs + Infer • Độ xác cao 66% với tổ hợp cơng cụ SonarQube + Infer • Độ xác thấp 1% với tổ hợp công cụ SonarQube +Huntbugs + IntelliJ IDE + VCG Phần mềm độc hại (Malicious Logic): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp sau: SonarQube + IntelliJ IDE, HuntBugs + IntelliJ IDE, PMD + IntelliJ IDE, IntelliJ IDE + VCG, IntelliJ IDE + Infer • Độ bao phủ thấp 0% với tổ hợp cơng cụ HuntBugs + SpotBugs • Độ xác cao 71% với tổ hợp công cụ SonarQube + HuntBugs • Độ xác thấp 1% với tổ hợp công cụ SonarQube +Huntbugs + VCG + SpotBugs Xử lý số (Number Handling): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp sau: SonarQube + IntelliJ IDE, HuntBugs + IntelliJ IDE, PMD + IntelliJ IDE, IntelliJ IDE + VCG, IntelliJ IDE + Infer • Độ bao phủ thấp 0% với tổ hợp cơng cụ HuntBugs + SpotBugs • Độ xác cao 54% với tổ hợp cơng cụ sau: SonarQube + HuntBugs, SonarQube + SpotBugs • Độ xác thấp 0% với tổ hợp công cụ HuntBugs + SpotBugs Xử lý trỏ tham chiếu (Pointer and Reference Handling): • Độ bao phủ có hiệu suất cao đạt 100% tổ hợp công cụ sau: SonarQube, IntelliJ IDE, PMD 48 • Độ bao phủ thấp 0% với tổ hợp công cụ sau: HuntBugs + SpotBugs + Infer • Độ xác cao 63% với tổ hợp công cụ sau: HuntBugs + PMD, PMD + SpotBugs, PMD + Infer • Độ xác thấp 0% với tổ hợp công cụ sau: HuntBugs + SpotBugs + Infer Kết luận 2: Từ kết thí nghiệm tổ hợp cơng cụ để phân tích cho thấy kết hợp SonarQube + PMD, PMD + IntelliJ IDE, SonarQube + IntelliJ IDE mang lại kết phân tích hiệu suất cao Trong nhiều kết hợp mang lại hiệu lại kết hợp nhiều cơng cụ Do học viên tìm kiếm kết hợp cơng cụ đạt hiệu tổ hợp hai công cụ đề cập 3.2 Đánh giá 3.2.1 Phân tích khơng theo chuẩn CWE Khi thực phân tích đơn cơng cụ cho kết quả: • Độ bao phủ cao 86% thuộc IntelliJ IDE • Độ xác cao 60% thuộc SonarQube Khi thực phân tích tổ hợp từ cơng cụ cho kết quả: • Độ bao phủ cao 97% thuộc IntelliJ IDE SonarQube • Độ xác cao 60% thuộc SonarQube SpotBugs Kết luận: Sự kết hợp hai công cụ IntelliJ IDE SonarQube cho kết khả quan nhiều độ bao phủ mã nguồn 49 3.2.2 Phân tích theo chuẩn CWE Danh mục Xác thực kiểm soát truy cập Đơn: độ xác Tổ hợp: độ xác Đơn: độ bao phủ Tổ hợp: độ bao phủ 100% 100% 53% 97% Chất lượng mã nguồn 72% 84% 99% 100% Quản lý luồng kiểm sốt 53% 53% 99% 100% Mã hóa tính ngẫu nhiên 83% 53% 99% 100% Xử lý lỗi 72% 72% 100% 100% Xử lý tệp tin 61% 61% 94% 100% Lỗi rị rỉ thơng tin 56% 65% 93% 100% Khởi tạo đóng tài nguyên 89% 88% 95% 100% Injection 66% 66% 95% 100% 100% 71% 100% 100% Xử lý số 54% 54% 60% 100% Xử lý trỏ tham chiếu 60% 63% 100% 100% Phần mềm độc hại Bảng 3.3: So sánh phân tích đơn cơng cụ phân tích tổ hợp cơng cụ Các giá trị bảng tính hiệu suất đạt cao hai tiêu chí độ bao phủ mã nguồn độ xác việc phân tích lỗi Từ bảng kết bảng 3.3 cho thấy kết phát lỗi đo theo hai tiêu chí độ bao phủ mã nguồn độ xác phát lỗi tăng lên đáng kể thực phương pháp tổ hợp cơng cụ để thực phân tích kiểm thử chất lượng sản phẩm Như việc kết hợp cơng cụ để phân tích mã nguồn hồn toàn khả thi nên áp dụng 50 Chương 4: KẾT LUẬN Học viên nhận thấy việc sử dụng cơng cụ phân tích khơng đủ để phát lỗi phần mềm, bao gồm toàn điểm yếu bảo mật giai đoạn triển khai Rõ ràng nhà phát triển phải đánh đổi số yêu cầu họ Ví dụ: hỗ trợ ngơn ngữ đầy đủ khơng bao gồm công cụ công cụ bao gồm nhiều ngơn ngữ có hiệu suất thấp nhiều ngơn ngữ Việc tích hợp vào dự án nâng cấp lên phiên tương ứng yêu cầu dự án khơng dễ dàng hay phần bị lỗi địi hỏi phải cần người có kinh nghiệm để tích hợp lại triển khai để phù hợp với dự án Cũng cần cảnh báo có khoản chi phí cho việc triển khai cơng cụ khơng hiệu Nếu khơng có lợi ích từ công cụ, nhà phát triển không sử dụng điều ảnh hưởng đến khả áp dụng công cụ tương lai Điều quan trọng phải cho nhà phát triển nhận thức sớm điểm mạnh điểm yếu cơng cụ để họ có kỳ vọng thực tế Rõ ràng công cụ phân tích mã nguồn tĩnh ngày cần nhiều cải tiến để trở nên tốt với việc bắt lỗi triển khai Tuy nhiên, hữu ích nhà phát triển phần việc định để họ biết khả công cụ Việc sử dụng công cụ cho dự án không thực hiệu nhiều lỗ hổng, lỗi không bị phát Nhưng kết hợp hai nhiều cơng cụ với sản phẩm thương mại tốn khoản chi phí để mua quyền dùng toàn chức cơng cụ Nhưng có đủ tài để mua sản phẩm phải bỏ lượng chi phí để thuê nghiên cứu triển khai tích hợp dự án Thật không dễ dàng tốn để có sản phẩm đạt chất lượng Qua nghiên cứu học viên thấy công cụ có điểm mạnh riêng phát lỗi bảo mật dự án Nhưng chưa có cơng cụ tìm tất lỗi mà cơng cụ khác tìm Các lỗi tìm tổng hợp để phát lỗi nhiều Vì khơng thể cơng cụ sử dụng cho dự án đòi hỏi mức độ phát lỗi cực cao nên cần phải đánh giá mức độ dự án để có tổng hợp cơng cụ Hay nghiên cứu tạo công cụ khác tổng hợp tất công cụ Từ kết nghiên cứu cơng cụ đứng độc lập SonarQube ln khẳng định cơng cụ mạnh đến tính tốn tổ hợp cơng cụ để hạn chế hết mức lỗi xảy SonarQube kết hợp với IntelliJ IDE cho kết tốt so với tích hợp khác cơng cụ Qua nghiên cứu học viên tích lũy thêm cho kiến thức phân tích mã nguồn dự án Từ biết mạnh điểm hạn chế cơng cụ để áp dụng vào dự án thân hạn chế tối đa xâm nhập tin tặc người có ý đồ xấu Thêm cách để bảo vệ sản phẩm 51 Tài liệu tham khảo Tiếng Anh [1] "Architecture and Integration", available at: https://docs.sonarqube.org/latest/architecture/architecture-integration/ [2] Calcagno Cristiano, Dino Distefano, Peter O’Hearn, Hongseok Yang, "Compositional Shape Analysis by means of Bi-Abduction", available at: http://www0.cs.ucl.ac.uk/staff/p.ohearn/papers/popl09.pdf [3] Center for Assured Software National Secur Agency, "CAS 2012 Static Analysis Tool Study Methodology", 9800 Savage Road on Fort George G Meade, MD 207556738, 2012 [4] G Diaz and J R Bermejo, "Static analysis of source code security: Assessment of tools against SAMATE tests, Information and Software Technology", 2013, Vol 55 [5] "Plugin Library", available at: https://docs.sonarqube.org/display/PLUG [6] "PMD Documentation", available at: https://pmd.github.io/ [7] "Separation logic and bi-abduction", available at: https://fbinfer.com/docs/separation-logic-and-bi-abduction [8] "SpotBugs Documentation Release 4.2.0", available at: https://readthedocs.org/projects/spotbugs/downloads/pdf/latest/ [9] "Static Code Analysis", available at: https://www.jetbrains.com/idea/docs/StaticCodeAnalysis.pdf (2000 – 2007) [10] Tosin D aniel O ye toyan 1(B), Bisera Milosheska2, Mari Grini2, and Daniela Soares Cruzes, "Myths and Facts About Static Application Security Testing Tools: An Action Research at Telenor Digital", Department of Software Engineering, Safety and Security, SINTEF Digital, Trondheim, Norway, in 17 May 2018 [11] "VCG", available at: https://github.com/nccgroup/VCG [12] L M R Velicheti [et al.], "Towards modeling the behavior of static code analysis tools", in: Proceedings of the 9th Annual Cyber and Information Security Research Conference, 2014 ... Từ để thấy khả phát lỗi công cụ, nhược điểm công cụ để cải thiện chất lượng sản phẩm dùng cơng cụ để thực phân tích lỗi phần mềm trước đưa vào sử dụng Để cải thiện việc phát lỗi kết hợp cơng cụ. .. ĐOAN Học viên xin cam đoan luận văn thạc sĩ công nghệ thông tin ? ?Nghiên cứu tổng hợp công cụ phát lỗi phần mềm để giảm cảnh báo sai? ?? công trình nghiên cứu riêng thân khơng chép người khác Trong... hiệu suất phát lỗi công cụ ông dừng lại việc đánh giá khả phát lỗi công cụ Nhưng luận văn học viên sử dụng công cụ khác để thực đánh giá phát lỗi công cụ qua số ông Tosin dùng nghiên cứu thông

Ngày đăng: 27/02/2021, 15:08

Tài liệu cùng người dùng

Tài liệu liên quan