Các công cụ hỗ trợ AI như ChatGPT đã thu hút được sự quan tâm đáng kể trong cộng đồng phát triển phần mềm. Những công cụ này có nhiều ứng dụng, bao gồm bảo mật nền tảng Web3 và hợp đồng thông minh. Chúng tôi đã thảo luận về tiềm năng của chúng trong việc cải thiện quy trình kiểm tra bằng cách tóm tắt các chức năng của chương trình và giúp tìm ra các lỗ hổng mã.
ChatGPT và các mô hình tương tự sử dụng công nghệ học sâu, một tập hợp con của máy học, làm công nghệ cơ bản. Học sâu đã được nghiên cứu rộng rãi như một phương tiện cải thiện bảo mật phần mềm trong thập kỷ qua. Mặc dù sử dụng một chatbot như ChatGPT để đặt câu hỏi về mã là một cách tiếp cận để tăng cường bảo mật phần mềm, nhưng có nhiều cách thú vị khác để áp dụng deep learning. Nghiên cứu cải thiện bảo mật phần mềm thông qua deep learning mới chỉ ở giai đoạn sơ khai và các ý tưởng mới chỉ bắt đầu đạt đến giai đoạn triển khai và thử nghiệm. Trong bài viết này, chúng tôi trình bày đánh giá về công nghệ tiên tiến nhất hiện nay trong việc áp dụng học sâu vào bảo mật phần mềm.
Học kĩ càng
Học sâu là một loại máy học liên quan đến việc đào tạo một hệ thống để nhận dạng các mẫu trong dữ liệu. Hệ thống được cung cấp một tập hợp các đầu vào và phân loại tương ứng của chúng, đồng thời hệ thống học cách xác định các mẫu phân biệt đầu vào này với đầu vào khác. Sau khi được đào tạo, hệ thống có thể được sử dụng để phân loại dữ liệu đầu vào mà nó chưa từng thấy trước đây. Điều này cho phép tạo ra các mô hình mạnh mẽ có thể nhận ra các mẫu phức tạp trong dữ liệu, chẳng hạn như định vị lỗi hoặc hiểu chương trình.
Kỹ thuật bảo mật phần mềm truyền thống
Mã dễ bị tổn thương có thể được xác định bằng cách sử dụng kinh nghiệm, phân tích tĩnh, xác minh chính thức và làm mờ, trong số những phương pháp khác, là một số phương pháp hiện tại được sử dụng để giúp bảo mật các chương trình.
Heuristics là các phương pháp để xác định các mẫu mã hóa không an toàn dựa trên các quy tắc kinh nghiệm hoặc các kỹ thuật dựa trên kinh nghiệm. Các phương pháp phỏng đoán phổ biến bao gồm tránh sử dụng các chức năng không an toàn, xử lý thông tin đầu vào của người dùng đúng cách, tránh sử dụng mật khẩu được mã hóa cứng và xác thực tất cả thông tin đầu vào trước khi xử lý chúng.
Lỗi mã cũng có thể được phát hiện bằng cách sử dụng các công cụ tiến hành phân tích mã tĩnh ở cả cấp mã nguồn và mã byte. Những công cụ này có khả năng xác định các mẫu mã dễ bị tấn công và tạo ra các biểu diễn trực quan để hỗ trợ việc hiểu các hợp đồng thông minh. Theo thời gian, độ chính xác và hiệu quả của các công cụ sẽ tăng lên khi cơ sở dữ liệu về các sự cố được phát hiện tăng lên.
Ngoài phân tích tĩnh, CertiK còn thực hiện xác minh mã chính thức để đảm bảo mã đáp ứng các yêu cầu của nó. Xác minh chính thức là một quy trình toán học được sử dụng để chứng minh rằng một chương trình hoạt động như mong đợi bằng cách biểu thị các thuộc tính của chương trình và hành vi dự kiến dưới dạng các công thức toán học và sử dụng các công cụ tự động để xác minh chúng.
Làm mờ, còn được gọi là thử nghiệm mờ, là một kỹ thuật được sử dụng để kiểm tra phần mềm liên quan đến việc đưa dữ liệu không hợp lệ, không phổ biến hoặc tùy ý vào chương trình. Sau đó, phần mềm được quan sát để phát hiện bất kỳ sự cố, lỗi nào trong các xác nhận tích hợp hoặc các lỗ hổng tiềm ẩn có thể phát sinh do đầu vào này.
Học sâu có thể tăng cường bảo mật phần mềm truyền thống như thế nào
Bất chấp những điểm mạnh của chúng, các kỹ thuật xác định lỗ hổng hiện tại thường gặp phải những thách thức ngoài tự nhiên, đặc biệt là khi thực hiện kiểm toán hợp đồng thông minh quy mô lớn. Ví dụ: việc sử dụng kiểm tra thủ công để phân loại lỗi trong cơ sở dữ liệu của CertiK gồm các báo cáo kiểm tra thủ công với hơn 60.000 phát hiện là không khả thi. Bên cạnh số lượng lỗi khổng lồ, sự đa dạng của ngôn ngữ tự nhiên được sử dụng để mô tả chúng khiến tính năng khớp cụm từ truyền thống không hiệu quả.
Là một trường hợp khác của thách thức mở rộng quy mô, các công cụ tĩnh tạo ra các phát hiện phải được các kỹ sư bảo mật xác minh thủ công để loại bỏ các kết quả dương tính giả và cải thiện chất lượng kết quả. Kết quả dương tính giả xảy ra khi một công cụ tĩnh xác định một vấn đề lành tính hoặc không nghiêm trọng là một lỗi. Thông thường, thông báo sai khiến các nhà phát triển lãng phí thời gian và công sức để điều tra và khắc phục các sự cố không tồn tại. Trong một số trường hợp, thông tin xác thực sai cũng có thể dẫn đến các lỗi chính đáng bị bỏ qua, vì các nhà phát triển có thể trở nên không nhạy cảm với số lượng lớn thông tin xác thực sai do công cụ tạo ra.
Các dự án lớn cũng đặt ra những thách thức đối với việc xác minh chính thức. Thường có sách trắng và tài liệu thiết kế bằng tiếng Anh mô tả những gì hợp đồng thông minh phải làm. Trích xuất các quy tắc toán học từ sách trắng, tài liệu thiết kế và chương trình là một quá trình khó khăn và tốn thời gian. Ngoài ra, sự phức tạp của hợp đồng thông minh cũng có thể dẫn đến một số lượng lớn các đường dẫn thực hiện có thể. Với các hệ thống lớn hơn, việc làm mờ tất cả các đường dẫn có thể trở nên không thể.
Do những thách thức của các kỹ thuật hiện tại, điều cần thiết là phải tìm ra những cách mới và hiệu quả hơn để cải thiện hợp đồng thông minh và bảo mật chương trình. Học sâu có thể giảm bớt những thách thức liên quan đến các kỹ thuật phát hiện lỗ hổng hiện có. Học sâu đã được áp dụng để phân loại lỗ hổng, suy luận đặc điểm kỹ thuật, giải thích lỗi tự động, dự đoán các thuộc tính của chương trình, giảm số lượng thông báo sai được báo cáo bởi các công cụ truyền thống và tăng cường khả năng làm mờ. Bây giờ chúng ta sẽ xem xét cách học sâu có thể được sử dụng để cải thiện một số kỹ thuật hiện có.
Phân loại mã
Phân loại mã nhằm mục đích phân loại các đoạn mã (có hoặc không có tài liệu của chúng) thành nhiều lớp khác nhau. Phân loại này có thể là phân loại nhiều lớp đối với loại lỗi có trong một đoạn mã (ví dụ: kiểu viết mã, vấn đề logic, vấn đề toán học, v.v.) hoặc chức năng của nó (ví dụ: thuật toán sắp xếp, gửi tiền, vân vân.). Có rất nhiều nghiên cứu trong lĩnh vực phân loại mã bằng cách sử dụng học sâu, điều này có thể giúp ích rất nhiều cho việc điều hướng và phân tích cơ sở dữ liệu lớn về các phát hiện lỗi.
Phát hiện bản sao
Trong phát hiện bản sao mã, các đoạn mã nguồn hoặc mã byte giống hệt hoặc tương tự, được gọi là bản sao, được tìm thấy trong hoặc giữa các dự án phần mềm. Các kết quả sao chép trùng khớp có thể giúp các kỹ sư bảo mật tránh bỏ sót những phát hiện trước đó khi kiểm tra các dự án và chức năng tương tự. Để đạt được khả năng như vậy, đối với một cặp đoạn mã, điểm tương tự được đo; nếu điểm số vượt quá một ngưỡng nhất định, cặp này được coi là tương tự nhau. Đường cú pháp và sự đa dạng của phong cách mã hóa có thể tạo ra vấn đề đối với các phương pháp tiếp cận truyền thống (hoặc dựa trên quy tắc) để tính điểm tương đồng. Tuy nhiên, một mô hình học sâu có thể xem xét ngữ nghĩa phức tạp của các đoạn mã hoặc mã nhị phân để tính điểm. Thậm chí còn có khả năng phát hiện mã trùng khớp giữa các ngôn ngữ lập trình khác nhau.
Phát hiện lỗ hổng
Một cách tiếp cận thay thế hoặc bổ sung để phát hiện lỗi bằng cách sử dụng phân tích tĩnh là phát hiện lỗi thần kinh: tìm lỗi bằng kỹ thuật học sâu. Nói chung, phát hiện lỗi có thể được coi là một vấn đề phân loại có thể được giải quyết bằng các mạng thần kinh sâu được đào tạo dựa trên các ví dụ về mã lỗi và không lỗi. Các nhà nghiên cứu đã đề xuất nhiều phiên bản khác nhau của công nghệ như vậy, bao gồm các khuôn khổ như CodeTrek. CodeTrek sử dụng kết hợp phân tích tĩnh truyền thống và cơ sở dữ liệu quan hệ được tích hợp vào học sâu để xác định lỗi trong các dự án lớn trong thế giới thực. Thật thú vị khi lưu ý rằng có một số lỗi mà các máy phân tích dựa trên logic truyền thống về cơ bản không thể phát hiện ra. Chẳng hạn, lỗi lạm dụng biến không thể được xác định bằng các quy tắc logic. Do đó, ngay cả khung phân tích tĩnh mạnh nhất cũng không thể tìm thấy chúng trong khi các kiến trúc thần kinh khác nhau đã cho thấy nhiều hứa hẹn trong việc phát hiện ra những lỗi như vậy. Nó đặc biệt hữu ích vì các kiểu tấn công mới xuất hiện thường xuyên và các phương pháp dựa trên quy tắc truyền thống có thể không theo kịp.
Một thách thức đáng kể trong việc phát hiện lỗ hổng bằng cách sử dụng học sâu là thiếu dữ liệu thế giới thực chất lượng cao do các chuyên gia con người tạo ra. Trên thực tế, một số mô hình phát hiện lỗ hổng được đào tạo bằng cách sử dụng bộ dữ liệu không nhất thiết mô tả trạng thái thực của các lỗ hổng. Cơ sở dữ liệu lớn về các lỗi đã được xác định trước đó của CertiK cung cấp một bộ dữ liệu đầy hứa hẹn để phát triển công cụ phát hiện lỗ hổng dựa trên học tập.
Ưu tiên lỗi
Trong quá trình phát triển phần mềm, việc sắp xếp thứ tự ưu tiên cho các lỗi giúp chủ sở hữu mã nguồn tập trung nguồn lực của họ vào việc sửa các lỗi nghiêm trọng nhất trước tiên. Học sâu có thể được sử dụng để hỗ trợ ưu tiên các lỗi bằng cách phân tích các báo cáo lỗi và xác định các mẫu cho biết mức độ nghiêm trọng của vấn đề. Một mô hình như vậy có thể được đào tạo trên tập dữ liệu gồm các báo cáo lỗi đã được xếp hạng và nó có thể học cách nhận dạng các mẫu trong dữ liệu có liên quan đến các lỗi có mức độ ưu tiên cao. Để đảm bảo rằng mô hình chính xác và hiệu quả, bắt buộc phải sử dụng dữ liệu chất lượng cao để đào tạo và thử nghiệm. Điều này bao gồm việc đảm bảo rằng các báo cáo lỗi được dán nhãn chính xác và tập dữ liệu bao gồm một mẫu lỗi đại diện ở nhiều mức độ nghiêm trọng. Tại CertiK, các kỹ sư bảo mật chỉ định điểm nghiêm trọng cho các phát hiện lỗi sau khi kiểm tra thủ công. Những điểm số này hoạt động như một sơ đồ xếp hạng. Việc thu thập dữ liệu chất lượng cao như vậy là vô giá để đào tạo một mô hình hiệu quả.
Giải thích lỗi
Học sâu có thể được sử dụng để giải thích các lỗi trong phần mềm bằng cách phân tích các tệp nhật ký và xác định các mẫu cho biết nguyên nhân cốt lõi của vấn đề. Cách tiếp cận này có thể giúp các nhà phát triển chẩn đoán và sửa lỗi nhanh chóng và chính xác hơn, tiết kiệm thời gian và cải thiện chất lượng phần mềm. Một mô hình dựa trên học sâu có thể tạo ra các giải thích bằng ngôn ngữ tự nhiên cho các lỗi phần mềm bằng cách học hỏi từ một kho lớn các bản sửa lỗi. Để tạo ra lời giải thích bằng ngôn ngữ tự nhiên cho một lỗi, một mô hình phải tận dụng thông tin cấu trúc và ngữ nghĩa về chương trình và các mẫu lỗi. Điều này có thể đặc biệt hữu ích trong các hệ thống phần mềm lớn và phức tạp, nơi mà việc chẩn đoán và sửa mọi lỗi theo cách thủ công có thể khó khăn và tốn thời gian. Ngoài ra, một mô hình tìm lỗi cung cấp các giải thích lỗi hợp lý mang lại sự minh bạch cần thiết để xây dựng lòng tin trong cộng đồng các kỹ sư bảo mật và chuyên gia bảo mật để họ dựa vào trong các điều kiện thực tế và rủi ro cao.
Giảm dương tính giả
Kết quả dương tính giả là một thách thức chung đối với các công cụ tìm lỗi. Như chúng tôi đã đề cập trước đó, thông báo sai xảy ra khi một công cụ tĩnh xác định một vấn đề lành tính hoặc không nghiêm trọng là lỗi. Học sâu có thể được sử dụng để giúp giảm tỷ lệ dương tính giả trong các công cụ này. Để xác định xem một báo cáo lỗi mới cũng sẽ là báo động sai hay không, một mô hình dựa trên học sâu có thể được sử dụng để khám phá các cấu trúc chương trình cung cấp cảnh báo sai trong một công cụ tĩnh. Các kỹ thuật học sâu có thể được áp dụng để khám phá các mối tương quan như vậy và xây dựng bộ phân loại dương tính thật với dương tính giả.
Thông số kỹ thuật suy luận
Bước thử thách trong việc áp dụng xác minh chính thức là trích xuất hành vi dự định của phần mềm dưới dạng công thức logic/toán học bằng cách sử dụng mã nguồn và/hoặc tài liệu của nó. Tự động suy luận hành vi này, được gọi là suy luận đặc điểm kỹ thuật, có thể khắc phục thách thức này. Các nhà nghiên cứu đã đề xuất nhiều cách tiếp cận khác nhau để suy luận đặc điểm kỹ thuật, chẳng hạn như suy luận bất biến vòng lặp. Trong một nghiên cứu, các tác giả đã trình bày một phương pháp tự động xác định các xác nhận cho các điểm chương trình cụ thể bằng cách sử dụng dấu vết thực thi chương trình. Phương pháp này dựa trên việc sử dụng các mạng thần kinh sâu và đã cho thấy kết quả đầy hứa hẹn trong việc phát hiện các lỗi phần mềm trong thế giới thực. Một nghiên cứu khác của Giáo sư Ronghui Gui, người đồng sáng lập CertiK và các nhà nghiên cứu khác tại Đại học Columbia đề xuất một cách tiếp cận mạng thần kinh sâu để suy ra các bất biến vòng lặp, một lần nữa, mô hình hóa hành vi vòng lặp từ các dấu vết thực thi chương trình. Các tác giả đã chỉ ra rằng phương pháp của họ vượt trội so với các kỹ thuật hiện đại về độ chính xác và hiệu quả. Ngoài ra, một số nghiên cứu đã tập trung vào việc tìm hiểu các bất biến vòng lặp phi tuyến tính, điều này có thể gây khó khăn cho việc suy luận bằng các phương pháp truyền thống.
Cải thiện Fuzzing
Học sâu có thể được sử dụng để cải thiện khả năng làm mờ chương trình bằng cách tận dụng khả năng học các mẫu và trích xuất các tính năng từ lượng lớn dữ liệu. Học sâu có thể nâng cao khả năng làm mờ bằng cách hướng dẫn việc tạo đầu vào hướng tới các trường hợp thú vị hơn có nhiều khả năng gây ra sự cố hơn. Các mô hình có thể được đào tạo để tìm hiểu tham số đầu vào hoặc trình tự đầu vào nào có nhiều khả năng gây ra sự cố hoặc kích hoạt lỗi tràn bộ đệm. Điều này có khả năng cải thiện phạm vi bao phủ của bộ lọc mờ bằng cách thực hiện các phần khác nhau của chương trình. Điều này có thể giúp phát hiện ra các lỗi hoặc lỗ hổng bảo mật có thể đã bị bỏ qua bởi các kỹ thuật làm mờ truyền thống.
Phần kết luận
Việc áp dụng học sâu để cải thiện bảo mật phần mềm có tiềm năng rất lớn. Công nghệ này đã chứng minh tính hiệu quả của nó trong một số lĩnh vực, bao gồm phát hiện lỗ hổng, phân loại mã, phát hiện bản sao, v.v. Các kỹ thuật bảo mật phần mềm truyền thống, chẳng hạn như phỏng đoán, phân tích tĩnh, xác minh chính thức và làm mờ, có điểm mạnh nhưng cũng phải đối mặt với những thách thức về quy mô. Học sâu có thể cung cấp những cách hiệu quả và hiệu quả hơn để giải quyết những thách thức này và tăng cường tính bảo mật của các chương trình và hợp đồng thông minh. Mặc dù nghiên cứu về ứng dụng của học sâu đối với bảo mật phần mềm vẫn còn ở giai đoạn sơ khai, nhưng vẫn có những cơ hội thú vị để tiếp tục đổi mới và phát triển trong lĩnh vực này. Khi ngành tiếp tục phát triển và mở rộng, việc tích hợp bảo mật phần mềm và công nghệ học sâu sẽ đóng vai trò ngày càng quan trọng. Điều này sẽ cho phép chúng tôi cải thiện tính bảo mật và độ tin cậy của các hệ thống phần mềm.
Tất cả bình luận