Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 52 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
52
Dung lượng
2,05 MB
Nội dung
ĐẠ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 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 soá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 Abstract Syntax Tree Hiệp hội Độ tin cậy Phần mềm Công nghiệp Động 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ô quý 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 ln độ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 tồ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 tồ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ụ 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 toá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 ... Đ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... 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ụ. .. 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ụ 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