tác giả:
(1) Anna-Katharina Wickert, Đại học Technische Darmstadt, Darmstadt, Đức ([email protected]);
(2) Lars Baumgärtner, Đại học Technische Darmstadt, Darmstadt, Đức ([email protected]);
(3) Florian Breitfelder, Đại học Technische Darmstadt, Darmstadt, Đức ([email protected]);
(4) Mira Mezini, Đại học Technische Darmstadt, Darmstadt, Đức ([email protected]).
3 Thiết kế và triển khai Licma và 3.1 Thiết kế
4 Phương pháp và 4.1 Tìm kiếm và tải xuống ứng dụng Python
4.2 So sánh với các nghiên cứu trước đây
5 Đánh giá và 5.1 Dự án Python GitHub
6 So sánh với các nghiên cứu trước đây
9 Kết luận, Lời cảm ơn và Tài liệu tham khảo
Thông tin cơ bản : Các nghiên cứu trước đây đã chỉ ra rằng có tới 99,59% ứng dụng Java sử dụng API tiền điện tử sử dụng sai API ít nhất một lần. Tuy nhiên, những nghiên cứu này đã được thực hiện trên Java và C, trong khi vẫn còn thiếu các nghiên cứu thực nghiệm cho các ngôn ngữ khác. Ví dụ: một nghiên cứu người dùng có kiểm soát với các tác vụ mật mã trong Python đã chỉ ra rằng 68,5% nhà phát triển chuyên nghiệp viết giải pháp an toàn cho tác vụ mật mã.
Mục đích : Để hiểu liệu quan sát này có đúng với mã trong thế giới thực hay không, chúng tôi đã tiến hành một nghiên cứu về việc sử dụng sai mục đích tiền điện tử trong Python.
Phương pháp : Chúng tôi đã phát triển một công cụ phân tích tĩnh bao gồm các trường hợp sử dụng sai phổ biến đối với 5 API mật mã Python khác nhau. Với phân tích này, chúng tôi đã phân tích 895 dự án Python phổ biến từ GitHub và 51 dự án MicroPython cho các thiết bị nhúng. Hơn nữa, chúng tôi so sánh kết quả của chúng tôi với những phát hiện của các nghiên cứu trước đó.
Kết quả : Phân tích của chúng tôi cho thấy rằng 52,26% dự án Python có ít nhất một lần sử dụng sai. Hơn nữa, thiết kế API của một số thư viện mật mã Python giúp các nhà phát triển tránh lạm dụng các chức năng mật mã, vốn phổ biến hơn nhiều trong các nghiên cứu được thực hiện với mã Java và C. Kết luận : Chúng tôi kết luận rằng chúng tôi có thể thấy tác động tích cực của thiết kế API tốt đối với việc lạm dụng tiền điện tử đối với các ứng dụng Python. Hơn nữa, phân tích của chúng tôi về các dự án MicroPython cho thấy tầm quan trọng của các phân tích kết hợp.
Mật mã, hay còn gọi là tiền điện tử, ngày nay được sử dụng rộng rãi để bảo vệ dữ liệu của chúng ta và đảm bảo tính bảo mật. Ví dụ: nếu không có tiền điện tử, chúng ta sẽ không thể sử dụng ngân hàng trực tuyến hoặc mua sắm trực tuyến một cách an toàn. Thật không may, kết quả nghiên cứu trước đây cho thấy tiền điện tử thường được sử dụng theo cách không an toàn [3, 4, 7, 9, 11]. Một vấn đề như vậy là việc lựa chọn một tham số không an toàn, như chế độ khối không an toàn, cho các nguyên tắc mã hóa như mã hóa. Nhiều công cụ phân tích tĩnh tồn tại để xác định những hành vi lạm dụng này như CryptoREX [13], CryptoLint [4], CogniCryptSAST [8] và Cryptoguard [12].
Trong khi các công cụ này và các nghiên cứu thực tế tương ứng tập trung vào Java và C, các nghiên cứu về người dùng cho thấy rằng các API Python hiện tại làm giảm số lượng lạm dụng tiền điện tử. Acar và cộng sự. [2] đã tiến hành một thử nghiệm với 307 người dùng GitHub để giải quyết 3 nhiệm vụ phát triển liên quan đến tiền điện tử. Họ quan sát thấy rằng 68,5% nhà phát triển chuyên nghiệp đã viết giải pháp an toàn bằng Python cho nhiệm vụ nhất định. Trong một thử nghiệm có kiểm soát với 256 nhà phát triển Python đã cố gắng giải quyết các tác vụ tiền điện tử đơn giản, Acar et al. [1] đã xác định rằng một thiết kế API đơn giản, như mật mã thư viện Python, hỗ trợ các nhà phát triển viết mã bảo mật. Tuy nhiên, chưa có nghiên cứu thực nghiệm nào xác nhận rằng việc lạm dụng tiền điện tử trong Python xảy ra ít thường xuyên hơn so với Java hoặc C.
Để đánh giá thực nghiệm việc sử dụng sai mục đích tiền điện tử trong Python, chúng tôi giới thiệu LICMA , một khung phân tích đa ngôn ngữ hỗ trợ 5 API tiền điện tử Python khác nhau và API JCA của Java. Chúng tôi cung cấp 5 quy tắc khác nhau [4] cho tất cả các API Python và 6 quy tắc khác nhau [4] cho JCA để phát hiện các hành vi lạm dụng tiền điện tử phổ biến nhất. Với LICMA, chúng tôi đã phân tích 895 ứng dụng Python phổ biến từ GitHub và 51 dự án MicroPython để hiểu rõ hơn về việc sử dụng sai mục đích trong Python. Chúng tôi đã xác định rằng 52,26% ứng dụng Python GitHub sử dụng tiền điện tử có ít nhất một lần sử dụng sai gây ra 1.501 lần sử dụng sai. Tổng cộng, chỉ có 7% các trường hợp sử dụng sai nằm trong chính mã ứng dụng, trong khi các trường hợp sử dụng sai còn lại là do các phần phụ thuộc gây ra. Hơn nữa, nghiên cứu của chúng tôi về các dự án MicroPython cho thấy rằng các nhà phát triển trong miền nhúng có xu hướng sử dụng tiền điện tử thông qua mã C. Do đó, cho thấy tầm quan trọng của phân tích tĩnh lai, có thể theo dõi thông tin chương trình, ví dụ: biểu đồ cuộc gọi, trên nhiều ngôn ngữ [5, 10].
Để nâng cao hơn nữa sự hiểu biết của chúng tôi về việc liệu API Python có ít bị lạm dụng tiền điện tử hay không, chúng tôi thực hiện những đóng góp sau:
• Một công cụ phân tích đa ngôn ngữ mới để phát hiện các hành vi lạm dụng tiền điện tử trong Python và Java. Đối với Python, chúng tôi đề cập đến việc sử dụng sai mục đích mật mã đối với 5 API mật mã phổ biến của Python và đối với Java là API tiêu chuẩn JCA.
• Một nghiên cứu thực nghiệm về việc sử dụng sai mục đích tiền điện tử trong 895 ứng dụng Python phổ biến nhất trên GitHub cho thấy 1.501 trường hợp sử dụng sai mục đích.
• So sánh những phát hiện của chúng tôi trong các ứng dụng Python với các nghiên cứu trước đây về việc lạm dụng tiền điện tử một cách phổ biến đối với Ứng dụng Android và hình ảnh chương trình cơ sở trong C. Chúng tôi nhận thấy rằng hầu hết các ứng dụng Python đều an toàn hơn và sự phân bổ giữa các loại lạm dụng cụ thể khác nhau rất nhiều .
• Một nghiên cứu thực nghiệm về việc lạm dụng tiền điện tử trong các dự án MicroPython cho thấy tầm quan trọng của các phân tích tĩnh kết hợp.
• Gói sao chép bao gồm cả bộ dữ liệu được sử dụng cho nghiên cứu của chúng tôi, kết quả phân tích của chúng tôi và mã LICMA[1].
Bài viết này có sẵn trên arxiv theo giấy phép CC BY 4.0 DEED.
[1] dx.doi.org/10.6084/m9.figshare.16499085