Chúng ta thực sự đã tránh được một mối đe dọa lớn
(xeiaso.net)- Một vụ tấn công chuỗi cung ứng gần đây trong hệ sinh thái gói NPM trên thực tế đã có thể gây ra thiệt hại lớn hơn nhiều
- Kẻ tấn công đã lợi dụng các thư viện phổ biến nhưng chỉ dùng mã độc theo hướng thay đổi địa chỉ ví tiền mã hóa
- Vụ tấn công này được thực hiện bằng cách đánh cắp thông tin xác thực 2FA của nhà phát triển thông qua email phishing tinh vi
- Nếu nó bị sử dụng theo cách nguy hiểm hơn (ví dụ: đánh cắp API key), đã có khả năng gây ra thiệt hại cực lớn
- Bài viết nhấn mạnh nhận thức rằng mọi dependency đều có thể tiềm ẩn rủi ro và tầm quan trọng của việc hiểu toàn bộ cây phụ thuộc
Tổng quan về vụ tấn công và những lo ngại
- Gần đây, các gói phổ biến trong NPM, một trong những hệ sinh thái package lớn nhất, đã bị lộ trước tấn công
- Ví dụ về chức năng: xử lý màu trong terminal, ánh xạ tên màu-RGB, decorator debug cho hàm, utility xác định giá trị giống mảng, v.v.
- Những dependency phổ biến này được sử dụng rất rộng rãi, và khi mã đã lọt vào thì khả năng cao sẽ được triển khai ngay vào môi trường production
- Nếu nó chứa proxy độc hại, đánh cắp API key hoặc các kiểu tấn công nghiêm trọng khác, hậu quả có thể đã tồi tệ hơn rất nhiều
- Trên thực tế, mã độc này chỉ hoạt động theo cách chỉnh sửa địa chỉ thanh toán tiền mã hóa trong ví online (ví dụ: MetaMask)
Mức độ tinh vi của cuộc tấn công phishing
- Điểm khởi đầu của vụ tấn công là một email phishing được dựng rất khéo
- Tạo cảm giác cá nhân hóa bằng cách sử dụng username NPM
- Dẫn người dùng tin tưởng bằng thông điệp "vì lý do bảo mật, hãy thay đổi mật khẩu và thông tin xác thực 2FA"
- Nội dung được xây dựng sao cho người dùng bình thường rất dễ mắc bẫy, kết hợp với cách vận hành khá đặc thù của NPM
- Nêu rõ thời hạn cụ thể để tạo cảm giác khẩn cấp, khiến người dùng bận rộn dễ mất cảnh giác và bấm vào liên kết phishing
- Sử dụng domain
.helptương tự domain chính thức của NPM
- Điểm nổi bật nhất chỉ là việc dùng "npmjs.help" thay vì domain chính thức
- Ngày nay nhiều gTLD (Generic Top Level Domain) mới được dùng rộng rãi cho blog hay tài liệu, nên điều này cũng có thể trông rất tự nhiên
Thiệt hại tiềm tàng của vụ tấn công
- Email phishing đã có thể đánh cắp thông tin 2FA của người dùng, sau đó chèn mã tấn công để phát hành package mới
- Các thư viện tiêu biểu bị nhắm tới gồm is-arrayish, color-string, color-name vốn được dùng cực kỳ rộng rãi
- Nếu mã độc được mở rộng không chỉ để chặn tiền mã hóa mà còn để đánh cắp API key, nó có thể gây ra hậu quả mang tính hủy diệt
- Ví dụ như làm lộ hàng loạt API key của OpenAI, AWS, dẫn tới thiệt hại dài hạn và trên quy mô lớn
- Trên thực tế, phần lớn các thư viện bị nhiễm chủ yếu được dùng trong công cụ dòng lệnh, nên mục tiêu đánh cắp tiền mã hóa bị giới hạn ở mức đó
Nhắm vào hệ sinh thái Web3 và chiến lược của kẻ tấn công
- Có vẻ vụ tấn công lần này chủ yếu nhắm vào người dùng Web3 (những người thanh toán qua trình duyệt, v.v.)
- Bằng cách chọn các thư viện phổ thông không liên quan trực tiếp tới Web3 làm mục tiêu, kẻ tấn công tránh được khả năng bị hệ sinh thái Web3 nhanh chóng phát hiện và chặn lại
- Ví dụ: ngay cả khi kiểm tra kỹ các thư viện tích hợp với MetaMask, vẫn rất khó dự đoán rằng cuộc tấn công lại xuất phát từ utility liên quan đến màu chữ
Bài học cho hệ sinh thái phát triển
- Trường hợp này nhấn mạnh rằng mọi package dependency đều có thể thực sự là mã độc
- Trên thực tế tồn tại giới hạn trong việc luôn kiểm soát hoặc giám sát toàn bộ cây phụ thuộc
- Điều này cho thấy trong luồng triển khai production nhanh và dưới áp lực thời gian, việc rà soát bảo mật rất dễ bị đẩy xuống hàng sau
- Về sau, tầm quan trọng của việc nắm được toàn bộ cấu trúc dependency của dự án và quản lý cẩn trọng sẽ còn tăng lên
Kết luận và lưu ý
- Nội dung này không nhằm chỉ trích hay quy trách nhiệm cho bất kỳ ai; điều quan trọng là nhận thức rằng ai cũng có thể trở thành mục tiêu của phishing
- Tình hình có thể đã thay đổi sau khi bài viết này được đăng, nên nếu có điểm chưa rõ hoặc nghi ngờ sai sót, cần tự xác minh trực tiếp
Tags:
1 bình luận
Ý kiến trên Hacker News
Vụ tấn công chuỗi cung ứng npm của nx là viên đạn mà rất nhiều công ty đã không tránh được; chỉ cần cài plugin nx cho VS Code là nó tự động kiểm tra phiên bản nx mới nhất trên npm, và nếu có phiên GitHub (ví dụ đăng nhập tài khoản công ty qua GH CLI) hoặc thông tin xác thực quan trọng trong file
.envthì tất cả đều có thể bị rò rỉ; đây là chuyện không thể tránh chỉ bằng cách khóa dependency hay quản lý tốt cập nhật bảo mật; hệ sinh thái này cần một thay đổi sâu sắc hơn ở cấp độ nền tảng; xem chi tiết tại thông báo bảo mật chính thứcgit pushChúng ta thật sự chỉ vừa kịp thoát khỏi một tình huống cận kề thảm họa; tôi không thể tin nổi kẻ tấn công có quyền truy cập vào các package như vậy lại chỉ tung lên một công cụ trộm tiền mã hóa đơn giản; nếu là cơ hội trời cho như thế, có vẻ đáng để đầu tư thêm khoảng một tuần nhằm cài một exploit tinh vi hơn: khóa API, thêm SSH public key, làm lộ IP máy chủ, profile trình duyệt hoặc session token trên máy của lập trình viên, thậm chí cả thông tin thẻ Amazon trên desktop của tôi; có quá nhiều thứ có thể đánh cắp; kể cả không tự dùng thì cũng rất dễ bán trên các diễn đàn dark web; đôi lúc tôi tự hỏi phải chăng các tội phạm mạng giỏi nhất đã có việc ổn định, thu nhập cao ở các công ty công nghệ nên chỉ còn lại các vụ tấn công đơn giản kiểu này
Thói quen trì hoãn của tôi là một kỹ năng sinh tồn; vì tôi luôn đợi người khác beta test trước, nên trước đây công ty tôi đã dùng Microsoft Office 2000 suốt 12 năm, và nhờ vậy có 10 năm yên bình không phải xử lý sự cố nâng cấp hay đào tạo lại; tôi cũng có thói quen tuyệt đối không bấm vào link trong email
Với startup nhỏ thì khó, nhưng với các tay chơi lớn như npm, tôi nghĩ họ nên giữ chỗ trước tất cả phiên bản TLD của domain npm như "npm.io", "npm.sh", "npm.help"; việc kẻ tấn công chiếm được domain "npm.help" đã khiến vụ tấn công này hiệu quả hơn nhiều
no-reply-aws@amazon.comsangno-reply@tax-and-invoicing.us-east-1.amazonaws.com; vì là địa chỉ chưa từng thấy nên trông gần như một email phishing, nhưng lại là chính thức nên rất dễ gây rối; thậm chí email báo trước cũng trông rất đáng ngờ, đến mức tôi không mở file PDF đính kèm cho tới khi thật sự nhận được hóa đơn; các công ty đang tự tạo ra sự nhầm lẫn không cần thiết trong khi lại dặn khách hàng cẩn thận với phishingNếu ai đó kết hợp sự cực kỳ bài bản kiểu Jia Tan với các lỗ hổng bảo mật lỏng lẻo của chúng ta như plugin editor, shell userland các thứ thì sao? Các công cụ dành cho lập trình viên chạy với quyền siêu người dùng nhưng lại là thứ ít được kiểm chứng nhất; bản thân tôi cũng không thể tự mình kiểm định từng thứ như elisp, neovim, vscode, hay các công cụ userland đơn giản; trường hợp tốt nhất cũng chỉ là lấy từ nixpkgs; chỉ cần tung ra một plugin VSCode tốt hơn rồi chờ 1~2 năm là xong, GG
Dù các ví như MetaMask là mục tiêu, tôi nghe nói MetaMask được bảo vệ khá tốt trước kiểu tấn công này nhờ module cô lập LavaMoat; nếu có bài phân tích chi tiết về mức độ bảo vệ thực tế thì tôi rất muốn đọc; cá nhân tôi không liên quan đến MetaMask, nhưng tôi rất tò mò những biện pháp ứng phó bảo mật như vậy hiệu quả đến đâu trong thực tế tấn công thật (vốn thường triển khai chậm hơn); tiện thể thêm bài liên quan
Trước câu nói rằng "sự thật là cuối cùng bạn cũng sẽ dính loại tấn công phishing này", bản thân tôi nghĩ có lẽ mình thì không; tôi có thói quen tuyệt đối không nhập thông tin xác thực vào link trong email nếu đó không phải thứ tôi trực tiếp yêu cầu trước đó, ví dụ như reset mật khẩu; tôi nghĩ đây là kỹ năng bảo mật mà ai cũng buộc phải học trong năm 2025
Trái với mô tả trong bài rằng "mọi malware chỉ đơn giản thay thế địa chỉ ví tiền mã hóa", lý do MetaMask không bị ảnh hưởng là vì:
Các kho package mở lớn cần giải pháp bảo mật mạnh hơn rất nhiều, hoặc ít nhất là phải có một tập package cốt lõi được thẩm định, đáng tin cậy; hệ sinh thái Python, Rust và các hệ khác cũng tương tự, đều đang vận hành dựa trên niềm tin
Lập luận rằng "chuyện này không thể ngăn được" chỉ xuất hiện ở những hệ sinh thái bị xâm phạm thường xuyên nhất