Công nghệ

Cách mã độc len vào phần mềm bạn tin tưởng thông qua chuỗi cung ứng

Susan Hill

Một cuộc tấn công chuỗi cung ứng không phá cửa xông vào phần mềm bạn dùng. Nó đầu độc một trong những mảnh tạo nên phần mềm đó, rồi chờ tiến trình cập nhật bình thường mang nó đến máy của bạn. Ứng dụng vẫn cài đặt trơn tru, chữ ký vẫn hợp lệ và bản cập nhật vẫn đến qua kênh chính thức. Mã độc đi theo cùng nó. Chính sự đảo ngược này khiến kỹ thuật đó hiệu quả đến vậy: nó biến chính niềm tin giúp phần mềm hoạt động thành điểm bị khai thác.

Gần như không có thứ gì bạn chạy hôm nay được viết trọn vẹn bởi công ty có tên hiện trên màn hình. Một ứng dụng duy nhất có thể kéo theo hàng trăm hoặc hàng nghìn gói mã nguồn mở, mỗi gói do người lạ bảo trì và mỗi gói lại kéo thêm những gói khác phía sau. Lập trình viên hiếm khi đọc mã đó; họ tin vào kho lưu trữ nơi nó đến và con số phiên bản đi kèm. Kẻ luồn được vào bất kỳ mắt xích nào của chuỗi sẽ chạm tới mọi bên ở phía dưới cùng một lúc, và đó là lý do một mảnh bị đầu độc có thể ảnh hưởng đến hàng chục nghìn dự án trước khi có ai nhận ra.

Các lối vào gom lại thành vài khuôn mẫu. Typosquatting đặt một gói độc với cái tên chỉ cách tên phổ biến một phím gõ và chờ cú gõ nhầm. Nhầm lẫn phụ thuộc lợi dụng cách các công cụ dựng phần mềm phân giải tên, đánh lừa chúng lấy một gói công khai thay vì gói riêng của công ty. Chiếm tài khoản đoạt lấy thông tin đăng nhập của một người bảo trì thật và phát tán mã độc như một bản cập nhật thường lệ; đầu năm 2026, gói axios được dùng rất rộng rãi đã có một thời gian ngắn phát hành phiên bản bị xâm phạm sau khi máy của người bảo trì chính bị bẻ khóa bằng tấn công phi kỹ thuật. Còn việc đầu độc dây chuyền dựng nhắm vào các hệ thống tự động lắp ráp và phát hành phần mềm, nơi một bước hỏng duy nhất chạm tới mọi dự án phụ thuộc vào nó.

Dây chuyền dựng đã trở thành mục tiêu được thèm muốn nhất chính vì nó nằm ở thượng nguồn của mọi thứ khác. Khi thành phần GitHub Actions phổ biến tj-actions/changed-files bị xâm phạm vào năm 2025, kẻ tấn công viết lại các nhãn phiên bản của nó để trỏ tới mã độc và rút bí mật từ nhật ký dựng của hơn hai mươi nghìn kho mã: khóa truy cập, token và khóa riêng, tất cả đều ở dạng văn bản thuần. Một chiến dịch về sau, được các nhà nghiên cứu đặt tên Megalodon, đã biến GitHub Actions thành một cửa hậu tự lan truyền, chạm tới 5.561 kho mã trong khoảng sáu giờ. Cỗ máy dựng phần mềm của bạn có thể bị lật đổ dễ dàng như chính phần mềm.

Những công cụ lập trình viên dùng hằng ngày cũng nằm trong vùng ảnh hưởng. GlassWorm, được phát hiện lần đầu vào cuối năm 2025, lan qua các tiện ích mở rộng cho Visual Studio Code trên các chợ OpenVSX và Microsoft. Nó giấu phần tải bằng các ký tự Unicode vô hình, nên những dòng mã độc gần như không đọc được trong trình soạn thảo và lọt qua khâu xét duyệt của con người. Sau khi cài đặt, nó đánh cắp thông tin đăng nhập npm, GitHub và Git, rồi dùng chúng để tự động lây nhiễm thêm gói và tiện ích, đặc điểm định nghĩa một con sâu. Vì các trình soạn thảo cập nhật tiện ích âm thầm ở chế độ nền, nạn nhân nhận các phiên bản bị đầu độc mà không bấm vào bất cứ thứ gì. Một tiện ích VS Code bị đầu độc khác đã được dùng để đánh cắp khoảng 3.800 kho mã nội bộ của chính GitHub.

Điều khiến các cuộc tấn công này khó bắt đến vậy là từng bước riêng lẻ đều trông hợp lệ. Gói được ký. Bản cập nhật đến từ kho lưu trữ thật. Tài khoản người bảo trì là thật. Phòng thủ truyền thống dò tìm những tệp đã biết là độc hại và mã độc lộ liễu, nhưng tấn công chuỗi cung ứng ẩn mình trong đoạn mã đáng tin, được chờ đợi và thường vô hình, đến đúng lúc và đúng cách mà phần mềm lẽ ra phải đến. Tệ hơn nữa: lời khuyên an ninh muôn thuở, hãy cập nhật ngay, lại chính là cơ chế mà kẻ tấn công trông cậy. Lần đầu tiên, cài đặt phiên bản mới nhất không còn là lựa chọn an toàn một cách dứt khoát.

Những người phòng thủ đã hội tụ về một nhúm cách làm thực sự hiệu quả. Tệp khóa ghim mỗi phụ thuộc vào một phiên bản chính xác, đã được xác minh, nên trình cài đặt chỉ lấy thứ đã được rà soát thay vì lấy bừa thứ mới nhất. Tắt các kịch bản cài đặt tự động chặn con đường phổ biến nhất để một gói độc chạy mã ngay khi vừa đáp xuống. Ghim GitHub Actions vào một mã băm commit cụ thể, thay vì một nhãn có thể di chuyển, vô hiệu hóa mẹo viết lại nhãn. Một bảng kê thành phần phần mềm, danh sách chi tiết mọi thành phần bên trong một bản dựng, giúp một đội biết trong vài phút liệu mình có bị phơi nhiễm hay không khi sự cố tiếp theo được công bố. Nhiều tổ chức thoát khỏi các cuộc tấn công gần đây chẳng làm gì cao siêu: họ dựng từ một tệp khóa đã được lưu vào kho và làm việc sau một proxy kho lưu trữ giúp cách ly các gói vừa mới phát hành.

Với những người không viết mã, sự bảo vệ phần lớn là gián tiếp, nhưng bài học thì không. Chuỗi cung ứng phần mềm giờ đây là một chiến tuyến hàng đầu, và chính các công ty làm ra ứng dụng trên điện thoại và laptop của bạn mới là bên phải bảo vệ nó. Phản ứng hợp lý không phải hoảng loạn, cũng không phải phản xạ cũ là cập nhật mọi thứ ngay khi một thông báo hiện ra. Đó là ưu tiên phần mềm từ những đội công khai họ giao gì và dựng nó ra sao, và xem nguồn đáng tin như một điều phải giành được ở từng mắt xích, chứ không phải một thuộc tính tự trôi xuống dọc theo chuỗi.

Lời đáp của ngành đang định hình quanh nguồn gốc: bằng chứng mật mã về việc một đoạn mã đến từ đâu và được dựng ra sao, được kiểm tra tự động trước khi cài bất cứ thứ gì. Đó cũng chính là ý tưởng đã bảo vệ lưu lượng web một thế hệ trước, nay áp dụng cho dây chuyền lắp ráp của chính phần mềm. Cho đến khi bằng chứng ấy trở nên phổ biến, mỗi lần cài đặt vẫn là một hành động tin tưởng vào những con người bạn sẽ không bao giờ gặp.

Thảo luận

Có 0 bình luận.