Cuộc tấn công Gói Ảo: Slopsquatting
Hãy tưởng tượng một thế giới, khi bạn đang lập trình, trợ lý AI hữu ích của bạn bảo bạn nhập một gói có tên securehashlib
. Nghe có vẻ thật. Trông có vẻ thật. Bạn tin vào phi công silicon của mình. Bạn chạy pip install securehashlib
.
Xin chúc mừng. Bạn vừa mở một cửa hậu vào ngăn xếp phần mềm của mình—và có thể là cơ sở hạ tầng của công ty bạn. Gói này không tồn tại cho đến ngày hôm qua, khi một kẻ tấn công đăng ký nó dựa trên một ảo giác mà AI đã tạo ra vào tuần trước.
Chào mừng đến với slopsquatting. Chuỗi cung ứng phần mềm giờ đây có những người bạn tưởng tượng và họ muốn quyền truy cập root của bạn.
1. Giấc mơ về nhà tiên tri mã hóa thân thiện
Trong nhiều năm, chúng ta đã mơ về lập trình viên cặp AI: một chuyên gia kiên nhẫn, luôn sẵn sàng, người biết mọi API, mọi cú pháp regex và mọi cách để viết bộ giới hạn tốc độ trong Flask. Bây giờ chúng ta đã có nó. Các công cụ như GPT-4 Turbo, Copilot và Cursor đang thay đổi cách viết mã. “Mã hóa rung cảm”, như Andrej Karpathy đã gọi một cách nổi tiếng, cho phép các nhà phát triển mô tả ý định của họ và để AI thực hiện phần còn lại.
Nhưng mọi giấc mơ đều có một cái bóng. Trong trường hợp này, không chỉ là AI đôi khi làm sai. Đó là nó làm sai một cách cụ thể, có hệ thống và có thể vũ khí hóa.
LLM không chỉ ảo giác các sự kiện. Chúng ảo giác các phụ thuộc—tên gói, thư viện, mô-đun không tồn tại nhưng nghe có vẻ như chúng nên tồn tại. Và những kẻ tấn công đang theo dõi.
2. Sự nổi lên của slopsquatting
Typosquatting là tin cũ: người dùng gõ sai react-router
thành react-ruter
và một số hacker tháo vát đã chiếm tên bị viết sai với tải trọng phần mềm độc hại. Slopsquatting thì khác. Đó không phải là lỗi của người dùng. Đó là một ảo giác AI.
Thuật ngữ này, do Seth Larson đặt ra và được Andrew Nesbitt khuếch đại, đề cập đến việc đăng ký có chủ ý các tên gói không tồn tại được LLM đề cập lặp đi lặp lại. Các tên ảo giác này xuất hiện trong mã, tài liệu và hướng dẫn do AI tạo ra. Nếu bạn sao chép-dán mã hoặc tin tưởng quá nhiều vào trình quản lý phụ thuộc, bạn sẽ cài đặt tải trọng của kẻ tấn công.
Đây không chỉ là lý thuyết. Một thử nghiệm cho thấy một gói ảo giác “huggingface-cli”—được tải lên mà không có mã, không có README, không có SEO—đã được tải xuống hơn 30.000 lần trong ba tháng.
3. Nghiên cứu: Một cuộc khủng hoảng được định lượng
Trong bài báo “Chúng tôi có một gói cho bạn!”, các nhà nghiên cứu đã thử nghiệm 16 LLM khác nhau trên hơn nửa triệu lời nhắc. Họ phát hiện ra rằng:
- 19,7% của tất cả các gói được đề xuất không tồn tại.
- Các mô hình nguồn mở ảo giác nhiều hơn (21,7%) so với các mô hình thương mại (5,2%).
- GPT-4 Turbo có tỷ lệ ảo giác thấp nhất (3,59%).
- Các mô hình CodeLlama ảo giác hơn 33% thời gian.
- Hơn 205.000 tên ảo giác duy nhất đã được quan sát.
- Trong các thử nghiệm theo dõi, 43% gói ảo giác được lặp lại mọi lúc và 58% gói ảo giác được lặp lại nhiều lần trong mười lần chạy.
- 8,7% gói Python ảo giác thực sự là gói npm (JavaScript) hợp lệ.
- Về mặt tích cực, GPT-4 Turbo và DeepSeek đã có thể xác định chính xác tên gói ảo giác mà chúng vừa tạo ra trong 75% trường hợp.
Trong một nghiên cứu khác có tựa đề “Nhập bóng ma”, các nhà nghiên cứu đã kiểm tra sự khác biệt về mức độ phổ biến của các gói ảo giác trên các mô hình và ngôn ngữ lập trình khác nhau.
Họ phát hiện ra rằng:
- Tất cả các mô hình được thử nghiệm đều ảo giác các gói, với tỷ lệ từ 0,22% đến 46,15%.
- Lựa chọn ngôn ngữ lập trình ảnh hưởng đáng kể đến ảo giác: JavaScript cho thấy tỷ lệ ảo giác gói trung bình thấp nhất (14,73%), trong khi Python (23,14%) và Rust (24,74%) cho thấy tỷ lệ lớn hơn.
- Lựa chọn mô hình có thể khiến tỷ lệ ảo giác khác nhau theo một bậc độ lớn trong cùng một ngôn ngữ.
- Các mô hình lớn hơn thường ảo giác ít hơn, nhưng các mô hình dành riêng cho mã hóa có thể dễ bị ảo giác gói hơn.
4. Tại sao slopsquatting lại quan trọng
Đây không chỉ là một mối quan tâm học thuật thích hợp. Slopsquatting đại diện cho một bề mặt tấn công có thể mở rộng, chi phí thấp, khai thác một điểm mù quan trọng trong quy trình phát triển hiện đại. Kẻ tấn công không cần phải hack tường lửa của bạn. Họ chỉ cần dự đoán bước đi sai lầm sáng tạo tiếp theo của trợ lý AI của bạn.
Vấn đề được khuếch đại bởi:
- Tin tưởng vào các công cụ AI: Nhiều nhà phát triển cho rằng mã do AI tạo ra là chính xác và không xác minh tên gói.
- Sự trỗi dậy của mã hóa rung cảm: Các nhà phát triển giờ đây mô tả những gì họ muốn và để AI triển khai nó. Điều đó có nghĩa là họ thậm chí có thể không bao giờ tự nhập hoặc xác minh tên gói đang được sử dụng. Một số công cụ thậm chí tự động cài đặt các gói, mà không cần nhà phát triển xác nhận.
- Dễ khai thác: Bất kỳ ai cũng có thể đăng ký một gói ảo giác trên các nền tảng như PyPI hoặc npm—không cần hack.
5. Có thể làm gì?
Nghiên cứu cho thấy hy vọng: GPT-4 Turbo và DeepSeek có thể tự phát hiện các gói ảo giác với độ chính xác ~75%. Điều đó thật hứa hẹn. Nhưng hy vọng không phải là một chiến lược.
A. Bước đầu tiên thiết thực: Tự động hóa việc kiểm tra phụ thuộc
Các công cụ như Mend SCA và Renovate giải quyết chính xác vấn đề này.
Mend SCA quét mọi phụ thuộc nguồn mở trong ngăn xếp của bạn, gắn cờ các lỗ hổng đã biết và cảnh báo bạn về các gói đáng ngờ hoặc độc hại trước khi chúng xâm nhập vào sản xuất.
Renovate giữ cho các phụ thuộc của bạn được cập nhật một cách an toàn bằng cách tự động hóa việc nâng cấp phiên bản, thực thi các tệp khóa và xác minh các hàm băm—ngăn chặn kẻ tấn công lẻn vào các bản cập nhật bị nhiễm độc hoặc các gói giả mạo.
B. Các biện pháp giảm thiểu khác cần áp dụng:
- Thiết kế lời nhắc: Khuyến khích các nhà phát triển chỉ định rõ ràng các thư viện an toàn đã biết.
- Điều chỉnh mô hình: Giảm nhiệt độ sẽ giảm ảo giác. Kiểm soát mức độ chi tiết cũng vậy.
- Một hướng đi đầy hứa hẹn là nhúng các công cụ bảo mật ứng dụng trực tiếp vào trợ lý mã AI, bắt các gói ảo giác và các lỗ hổng khác trước khi chúng tiếp cận dự án của bạn. Đây chính xác là những gì Mend đang tích cực khám phá và phát triển — biến mã hóa AI an toàn theo thiết kế thành hiện thực.
6. Kết luận và những suy nghĩ cuối cùng
Có một RubyGem lành tính có tên là arangodb
có mô tả như sau: “Không sử dụng cái này! Đây có thể là một gem độc hại vì bạn đã không kiểm tra xem mã ChatGPT đã viết cho bạn có tham chiếu đến một gem thực hay không.” Tại thời điểm viết bài này, nó đã được cài đặt hơn 2000 lần. Mô tả nghe giống như một lời cảnh báo và một điếu văn.
Slopsquatting là một ví dụ điển hình cho một sự thật rộng lớn hơn: khi chúng ta ủy thác nhiều hơn công việc nhận thức của mình cho máy móc, chúng ta không chỉ thừa hưởng năng suất của chúng mà còn cả tính dễ mắc lỗi của chúng. Đây là một dấu hiệu cảnh báo sớm rằng phần mềm do AI tạo ra không chỉ giới thiệu những cải tiến về năng suất mà còn cả các bề mặt tấn công mới.
Thách thức không phải là kiềm chế trí tưởng tượng của máy móc, mà là đảm bảo rằng những giấc mơ của chúng không trở thành cơn ác mộng của chúng ta.
Tin tưởng, nhưng pip freeze
.
Lưu ý của biên tập viên: Bài viết này là một phần trong loạt bài đang diễn ra của chúng tôi về các tác động bảo mật của mã hóa có sự hỗ trợ của AI. Đăng ký nhận bản tin của chúng tôi để được thông báo khi chúng tôi xuất bản các bài viết tiếp theo trong loạt bài này.
Giải thích thuật ngữ:
- Ảo giác (Hallucination): Hiện tượng AI tạo ra thông tin sai lệch hoặc không tồn tại, nhưng lại trình bày nó như thật.
- Typosquatting: Lợi dụng việc người dùng gõ sai tên trang web hoặc phần mềm để dẫn họ đến trang web độc hại.
- Slopsquatting: Đăng ký các tên gói phần mềm không tồn tại nhưng được AI gợi ý, để lừa người dùng cài đặt phần mềm độc hại.
- Mã hóa rung cảm (Vibe coding): Cách lập trình mà lập trình viên mô tả ý tưởng và để AI tự động tạo mã.
- LLM (Large Language Model): Mô hình ngôn ngữ lớn, một loại AI có khả năng hiểu và tạo ra văn bản giống con người.
- Mend SCA: Một công cụ giúp quét và kiểm tra các thành phần nguồn mở trong dự án phần mềm để tìm lỗ hổng bảo mật.
- Renovate: Một công cụ tự động cập nhật các thư viện và phần phụ thuộc trong dự án phần mềm để giảm thiểu rủi ro bảo mật.
- API (Application Programming Interface): Giao diện lập trình ứng dụng, cho phép các phần mềm khác nhau giao tiếp và trao đổi dữ liệu với nhau.
- Regex (Regular Expression): Biểu thức chính quy, một chuỗi ký tự đặc biệt dùng để tìm kiếm và so khớp các mẫu văn bản.
- Root access: Quyền truy cập cao nhất vào hệ thống, cho phép thực hiện mọi thao tác.
- PyPI (Python Package Index): Kho lưu trữ chính thức của các gói phần mềm Python.
- npm (Node Package Manager): Trình quản lý gói mặc định cho môi trường JavaScript Node.js.