Đừng chỉ sử dụng mã! Bài báo dài 14 trang của nhà nghiên cứu Trung Quốc cảnh báo: 35,8% mã do Copilot tạo ra có lỗ hổng và C++ đã trở thành “khu vực bị ảnh hưởng nặng nề nhất”

Nguồn gốc: CSDN

Nguồn hình ảnh: Được tạo bởi AI không giới hạn

GitHub Copilot là một công cụ tạo mã tự động dựa trên các ngôn ngữ mô hình lớn, kể từ khi ra mắt đã được vô số lập trình viên hoan nghênh, họ đều nói rằng cuối cùng họ cũng có được một tạo phẩm mã không cần phải làm thêm giờ!

Theo dữ liệu được thu thập giữa kỳ của "Bảng câu hỏi khảo sát hệ sinh thái nhà phát triển AI năm 2023" do CSDN đưa ra gần đây, 90% số người được hỏi cho biết họ đã sử dụng các công cụ tạo mã trong các tình huống khác nhau như sản xuất, thử nghiệm, giải trí, v.v. ., trong đó 35% Người dân cho biết họ sử dụng hàng ngày.

Tuy nhiên, cần lưu ý rằng mặc dù những công cụ mã hóa này cải thiện hiệu quả công việc nhưng bạn đã bao giờ nghĩ xem nó mang lại điều may mắn hay tai họa chưa? Mã được tạo có thực sự an toàn trên cơ sở "sẵn sàng sử dụng" không?

Gần đây, để nghiên cứu tính bảo mật của mã do Copilot tạo ra, sáu nhà nghiên cứu đại học từ Đại học Vũ Hán, Đại học Sư phạm Trung ương Trung Quốc, Đại học Massey ở New Zealand và Viện Công nghệ Hoàng gia Melbourne đã tiến hành một nghiên cứu thực nghiệm về các lỗ hổng bảo mật của mã do Copilot tạo ra. mã trên GitHub và một bài báo học thuật có tiêu đề "Điểm yếu về bảo mật của mã được tạo bởi phi công phụ trong GitHub" đã được xuất bản, gần đây đã tiết lộ tính bảo mật của các tạo phẩm lập trình AI trong tương lai có thể "hoàn thành mã hóa chỉ bằng cách di chuyển miệng của bạn".

Địa chỉ giấy:

Mẫu: 435 đoạn mã trong môi trường sản xuất, bao gồm 6 ngôn ngữ lập trình chính thống

Trong quá trình thử nghiệm, các nhà nghiên cứu đã chọn 435 đoạn mã do GitHub Copilot tạo ra từ các dự án công khai của GitHub, bao gồm nhiều ngôn ngữ lập trình chính thống như Python, Java, Java, C++, Go và C#.

Đồng thời, nó sử dụng CodeQL, một công cụ phân tích tĩnh mã nguồn mở hỗ trợ nhiều ngôn ngữ (bao gồm Java, Java, C++, C# và Python), để tiến hành quét bảo mật và phân tích các đoạn mã và sử dụng Bảng liệt kê lỗ hổng bảo mật chung ( CWE) để phân loại các lỗ hổng bảo mật mã trong phân khúc.

Hơn nữa, dựa trên quy trình nghiên cứu sau đây, các nhà nghiên cứu đã đặt ra những câu hỏi cần được nghiên cứu và xác minh từ ba chiều.

RQ1: Mã do Copilot tạo trong các dự án GitHub có an toàn không?

Lý do hỏi: Copilot có thể tạo ra các đề xuất mã có chứa lỗ hổng bảo mật và các nhà phát triển có thể chấp nhận những đề xuất này, có khả năng khiến chương trình dễ bị tổn thương. Các câu trả lời cho RQ1 giúp hiểu tần suất các nhà phát triển gặp phải lỗ hổng bảo mật khi sử dụng Copilot trong sản xuất.

RQ2: Lỗ hổng bảo mật nào tồn tại trong đoạn mã do Copilot tạo ra?

Lý do đặt ra câu hỏi này: Mã do Copilot tạo ra có thể chứa các lỗ hổng bảo mật và các nhà phát triển nên tiến hành đánh giá bảo mật nghiêm ngặt trước khi chấp nhận mã do Copilot tạo ra. Vì tài liệu về GitHub Copilot nêu rõ "Người dùng Copilot có trách nhiệm đảm bảo tính bảo mật và chất lượng mã của họ". Câu trả lời cho RQ2 có thể giúp các nhà phát triển hiểu rõ hơn về các lỗ hổng bảo mật có thể xảy ra trong mã do Copilot tạo ra để họ có thể ngăn chặn và khắc phục các lỗ hổng này hiệu quả hơn.

RQ3: Có bao nhiêu lỗ hổng bảo mật thuộc về MITER CWE Top-25?

Lý do hỏi: Danh sách này chứa 25 lỗ hổng bảo mật nguy hiểm nhất. Câu trả lời cho RQ3 có thể giúp các nhà phát triển hiểu liệu mã do Copilot tạo ra có chứa các loại lỗ hổng bảo mật được công nhận rộng rãi hay không và khả năng xử lý các lỗ hổng phổ biến nhất này của Copilot hay không.

Bước 1: Xác định mã do AI tạo “thật” trên GitHub

Lý do muốn sử dụng GitHub làm nguồn dữ liệu chính để trả lời các câu hỏi nghiên cứu là vì theo ý kiến của các nhà nghiên cứu, GitHub chứa hàng triệu kho mã công khai và có quyền truy cập vào một số lượng lớn tài nguyên mã, cho phép nó bao quát nhiều loại tài nguyên mã. ngôn ngữ lập trình và dự án thuộc loại nghiên cứu.

Tuy nhiên, để có được trực tiếp mã do Copilot tạo ra trong GitHub không phải là điều dễ dàng, bởi ngay cả khi có sự hỗ trợ của nhiều công cụ, rất khó để phân biệt mã đó được viết bởi AI hay kỹ sư con người.

Đối mặt với vấn đề nan giải này, sáu nhà nghiên cứu đã chọn cách xác định nhiều đoạn mã bằng cách tìm kiếm mô tả kho lưu trữ và nhận xét được cung cấp trong mã, chẳng hạn như "của GitHub Copilot", "sử dụng GitHub Copilot" và "với GitHub Copilot". có được kết quả sau:

Số lượng kết quả tìm kiếm bằng các ngôn ngữ khác nhau thu được từ thẻ mã:

Tiếp theo, bước vào giai đoạn lọc. Ở đây, các nhà nghiên cứu đã chỉ ra trong bài báo rằng họ chủ yếu tuân theo ba quy tắc:

  1. Đối với kết quả tìm kiếm trong thẻ Kho lưu trữ, các nhà nghiên cứu đã xác định dự án nào hoàn toàn do Copilot tạo ra dựa trên các tuyên bố trong mô tả dự án hoặc các tệp readme liên quan. Hơn nữa, nó giữ lại các tệp mã cho các ngôn ngữ chính được Copilot hỗ trợ như Python, Java, Java, C++, C# và Go.

2 Đối với các kết quả tìm kiếm dưới thẻ mã, nó giữ lại các nhận xét tệp hiển thị mã do Copilot tạo ra.

  1. Đối tượng của nghiên cứu này chủ yếu là các đoạn mã được sử dụng trong các dự án thực tế, vì lý do này, các tệp mã được sử dụng để giải các bài toán thuật toán đơn giản trên nền tảng LeetCode sẽ bị loại trừ.

Sau khi hoàn thành việc chú thích dữ liệu thí điểm, tác giả đầu tiên của bài báo đã kiểm tra các kết quả tìm kiếm còn lại và thu được tổng cộng 465 đoạn mã. Sau khi loại bỏ các kết quả trùng lặp, chúng tôi thu được 435 đoạn mã khác nhau. 249 trong số này là từ thẻ kho lưu trữ và 186 là từ thẻ mã, như chi tiết bên dưới:

Bước 2: Phân tích dữ liệu

Trong quá trình thử nghiệm, nhằm nâng cao độ bao phủ và độ chính xác của kết quả, các nhà nghiên cứu đã sử dụng hai công cụ phân tích tĩnh để thực hiện kiểm tra bảo mật trên từng đoạn mã (tức là CodeQL cộng với các công cụ chuyên dụng cho các ngôn ngữ cụ thể).

Trong nghiên cứu này, lần đầu tiên các nhà nghiên cứu sử dụng CodeQL để phân tích mã trong tập dữ liệu. Bộ truy vấn mặc định trong gói truy vấn tiêu chuẩn CodeQL là codeql-suites/-code-scanning.qls. Mỗi gói chứa một số bộ truy vấn hữu ích trong thư mục codeql-suite.

Đồng thời, nó sử dụng bộ kiểm tra -security-and-quality.qls để quét các đoạn mã liên quan đến lỗ hổng bảo mật. Các bộ thử nghiệm này có thể kiểm tra nhiều thuộc tính bảo mật, bao gồm nhiều CWE. Ví dụ: Bộ kiểm tra Python cung cấp 168 kiểm tra bảo mật; Bộ kiểm tra Java cung cấp 203 kiểm tra bảo mật; Bộ kiểm tra C++ cung cấp 163 kiểm tra bảo mật.

Ngoài ra, các nhà nghiên cứu đã chọn các công cụ phân tích bảo mật tĩnh phổ biến khác cho từng ngôn ngữ lập trình để quét tệp. Ví dụ: Python sử dụng Bandit, Java sử dụng ESLint, C++ sử dụng Cppcheck, Java sử dụng Findbugs, C# sử dụng Roslyn và Go sử dụng Gosec. Nếu ID CWE liên quan đến vấn đề bảo mật không thể lấy được trực tiếp từ kết quả quét, các nhà nghiên cứu cũng sẽ ánh xạ thủ công các thuộc tính bảo mật do kết quả quét cung cấp tới CWE tương ứng.

35,8% đoạn mã có lỗ hổng bảo mật, mã C++ có nhiều lỗ hổng nhất, bao gồm 42 loại CWE

Sau khi phân tích, các nhà nghiên cứu đã đưa ra kết luận cuối cùng dựa trên 3 câu hỏi nêu trên.

RQ1: Mã do Copilot tạo trong các dự án GitHub có an toàn không?

Trong số 435 đoạn mã do Copilot tạo ra, 35,8% chứa lỗ hổng bảo mật, tạo ra các vấn đề bảo mật bất kể ngôn ngữ lập trình được sử dụng.

Có tỷ lệ lỗ hổng bảo mật cao hơn một chút trong mã Python và Java, đây là những ngôn ngữ mà các nhà phát triển thường sử dụng Copilot nhất. Trong số 251 đoạn mã Python được thu thập, 39,4% có rủi ro bảo mật. Trong số 79 đoạn mã Java, 27,8% có rủi ro bảo mật. Trong số tất cả các ngôn ngữ lập trình, **C++ có tỷ lệ lỗ hổng bảo mật trong các đoạn mã cao nhất, đạt 46,1%. **Go cũng có tỷ lệ rủi ro bảo mật tương đối cao là 45,0%. Trong khi đó, tỷ lệ tệp vấn đề bảo mật trong mã C# và Java thấp hơn, lần lượt là 25% và 23,2%.

RQ2: Lỗ hổng bảo mật nào tồn tại trong đoạn mã do Copilot tạo ra?

Để trả lời RQ2, các nhà nghiên cứu đã xử lý kết quả quét do RQ1 thực hiện và loại bỏ các vấn đề bảo mật trùng lặp được phát hiện tại cùng một vị trí đoạn mã. Tổng cộng, 600 lỗ hổng bảo mật đã được xác định trong 435 đoạn mã.

Các loại lỗ hổng bảo mật được phát hiện rất đa dạng và liên quan đến 42 CWE khác nhau, bao gồm CWE-78 (lệnh tiêm vào hệ điều hành), CWE-330 (sử dụng lỗ hổng giá trị ngẫu nhiên không an toàn) và CWE-703 (kiểm tra các điều kiện bất thường hoặc lỗi không chính xác). xử lý) xảy ra thường xuyên nhất.

RQ3: Có bao nhiêu lỗ hổng bảo mật thuộc về MITER CWE Top-25?

Trong số 42 CWE được xác định, 11 lỗ hổng hiện được công nhận là lỗ hổng thuộc Top 25 CWE 2022.

Viết ở cuối

Về vấn đề này, một số cư dân mạng còn nói đùa rằng khả năng viết lỗi của họ có thể cao hơn GitHub Copilot.

Tất nhiên, nghiên cứu này không nhằm mục đích thuyết phục các nhà phát triển không sử dụng các công cụ mã hóa được hỗ trợ bởi AI trong công việc hàng ngày mà để chứng minh rằng việc sử dụng Copilot để tạo mã trong quá trình phát triển thực tế có thể cải thiện hiệu quả phát triển và nhắc nhở mọi người tiến hành đánh giá bảo mật của riêng mình. .

Đồng thời, tiến hành kiểm tra bảo mật phù hợp khi chấp nhận đề xuất mã của Copilot để tránh một số rủi ro tiềm ẩn và giảm tổn thất một cách hiệu quả.

Để biết thêm chi tiết, xem bài báo:

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)