0
0
Lập trình
Admin Team
Admin Teamtechmely

Những Mối Nguy Hiểm Tiềm Ẩn Khi Sử Dụng AI Trong Lập Trình

Đăng vào 2 tuần trước

• 4 phút đọc

I. Giới thiệu

Trong thời gian gần đây, trí tuệ nhân tạo (AI) đã trở thành một xu hướng phát triển mạnh mẽ và ngày càng được áp dụng rộng rãi, đặc biệt trong lĩnh vực phát triển phần mềm. Các cụm từ như "AI thay thế lập trình viên" hay "Tương lai lập trình viên với AI" trở nên phổ biến hơn bao giờ hết.

Liệu AI có thực sự có khả năng thay thế con người trong lập trình? Và liệu việc sử dụng AI có thực sự an toàn? Trong bài viết này, chúng ta sẽ cùng nhau khám phá những khía cạnh này!

Các mô hình AI hiện nay thường được huấn luyện để tạo ra các đoạn mã bằng cách sử dụng các cơ sở dữ liệu lớn, với khả năng tạo ra mã hoạt động hiệu quả. Nhiều lập trình viên đã và đang sử dụng AI để tạo ra các đoạn mã cho những module hoặc tính năng cụ thể. Một số công cụ phổ biến bao gồm: ChatGPT, GitHub Copilot, Google Cloud Code - Duet AI, và Amazon CodeWhisperer. Lợi ích của những công cụ này là mang lại kết quả nhanh chóng và tạo ra các đoạn mã đáp ứng đúng yêu cầu. Bên cạnh đó, nhiều vấn đề bảo mật cũng được cải thiện nhờ AI, khi nó có thể sử dụng các đoạn mã an toàn mà không ảnh hưởng đến hiệu suất hoạt động, chẳng hạn như việc tránh lỗi SQL Injection.

Tuy nhiên, không thể bỏ qua những vấn đề bảo mật tiềm ẩn, vì nhiều vấn đề phụ thuộc vào ngữ cảnh. Một đoạn mã có thể an toàn trong một tình huống nhưng lại trở thành lỗ hổng khi xử lý dữ liệu đầu vào từ bên ngoài. Những trường hợp này thường khó được nhận diện qua các tập dữ liệu mà AI đã được huấn luyện.

II. Phân Tích Một Số Trường Hợp Thiếu An Toàn

1. Lấy Tệp Từ Dữ Liệu Đầu Vào - Đọc Tệp Tùy Ý

Nhiều ứng dụng cho phép lấy tệp từ tên tệp của người dùng. Nếu đoạn mã không xử lý dữ liệu đầu vào một cách an toàn, có thể dẫn đến lỗ hổng "directory traversal" - cho phép đọc tệp một cách trái phép trên máy chủ. Việc kiểm tra dữ liệu đầu vào là rất quan trọng trong phát triển tính năng liên quan đến việc upload hoặc đọc tệp, nhưng AI có thể gặp khó khăn trong việc xử lý tính trạng này.

Ví dụ Gợi Ý Từ AI (Google Cloud Code - Duet AI):

AI gợi ý sử dụng hàm send_file của Flask, nhưng tài liệu của Flask đã cảnh báo rằng "Không bao giờ truyền trực tiếp đường dẫn tệp do người dùng cung cấp."

Khuyến nghị: Sử dụng hàm send_from_directory của Flask để hạn chế rủi ro, ngăn ngừa lỗ hổng "directory traversal".

2. So Sánh Mã Bí Mật - Lỗi Nhào Lộn Kiểu Dữ Liệu

Trong các ngôn ngữ như PHP và NodeJS, việc so sánh giữa các kiểu dữ liệu khác nhau có thể tạo ra lỗ hổng bảo mật nếu không xử lý cẩn thận. Ví dụ, lỗ hổng PHP Type Juggling cho phép kẻ tấn công thực hiện tấn công bằng cách sử dụng giá trị không mong muốn.

Ví dụ Gợi Ý Từ AI (Amazon CodeWhisperer):

Gợi ý sử dụng so sánh (==) để kiểm tra, điều này có thể dẫn đến lỗi "type juggling" nếu người dùng truyền vào dữ liệu không hợp lệ.

Khuyến nghị: Sử dụng so sánh an toàn và chặt chẽ (===) để ngăn ngừa lỗ hổng này.

3. Cơ Chế Quên Mật Khẩu - Va Chạm Ánh Xạ Unicode

Một số trường hợp chuyển đổi đầu vào của người dùng sang chữ thường hoặc chữ hoa có thể gây ra lỗi ánh xạ Unicode. Lỗ hổng này thường gặp trong các ứng dụng SaaS.

4. Tạo Tệp Cấu Hình - Thực Hành Bảo Mật Kém

Việc viết các tệp cấu hình cho hạ tầng cloud có thể gây nhầm lẫn cho AI, khi không phải ai cũng tuân thủ tốt các hướng dẫn bảo mật. Kết quả là, gợi ý từ AI có thể không tuân thủ các nguyên tắc bảo mật.

5. Đối Tượng Cấu Hình - Không Đồng Nhất Dẫn Đến Deserialization Không An Toàn

Nhiều lỗ hổng yêu cầu định nghĩa một đối tượng cấu hình, việc sử dụng không đồng nhất có thể dẫn đến lỗ hổng security.

Khuyến nghị: Sử dụng giá trị mặc định "None" cho thuộc tính TypeNameHandling.

6. Mẫu Yêu Cầu Mã An Toàn - Đọc Tệp

Cần có những gợi ý an toàn hơn trong việc tiêu diệt lỗ hổng "directory traversal". Những phương pháp này cần được tối ưu hóa để đảm bảo an toàn cao hơn.

7. Tải Tệp Lên - Danh Sách Phần Mở Rộng Bị Giới Hạn

Đối với các yêu cầu chỉ chấp nhận một số loại tệp nhất định, AI có thể tạo ra những đoạn mã không an toàn dẫn đến việc bỏ qua các tệp độc hại.

III. Kết Luận

AI, mặc dù mang lại nhiều lợi ích trong việc phát triển mã nguồn, nhưng nếu không được giám sát cẩn thận thì có thể tạo ra nhiều lỗ hổng nghiêm trọng. Các lập trình viên cần phải đảm bảo rằng mã AI tạo ra được kiểm tra kỹ lưỡng và tuân thủ các tiêu chuẩn bảo mật, đặc biệt là trước khi triển khai. Những khuyến nghị chính bao gồm:

  1. Thực hiện kiểm tra thủ công: Đảm bảo mọi mã AI tạo ra đều được xem xét và kiểm tra lại.
  2. Sử dụng công cụ quét lỗ hổng bảo mật để phát hiện các giải pháp mã có nguy cơ.

IV. Tài Liệu Tham Khảo

https://jfrog.com/blog/analyzing-common-vulnerabilities-introduced-by-code-generative-ai/
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào