-
09/04/2020
-
110
-
1.048 bài viết
Chiếm quyền tài khoản nhà phát triển npm, kẻ tấn công phát tán mã độc toàn cầu
Một chiến dịch tấn công phishing tinh vi vừa gây chấn động cộng đồng phát triển phần mềm toàn cầu khi nhắm vào eslint-config-prettier (gói npm cực kỳ phổ biến) với hơn 3,5 tỷ lượt tải về. Chỉ trong vòng vài giờ ngắn ngủi, mã độc đã được cài cắm vào hàng nghìn dự án trên khắp thế giới, trong đó có cả những dự án thuộc các tập đoàn công nghệ lớn.
Sự việc bắt đầu khi kẻ tấn công gửi một email giả mạo đội ngũ hỗ trợ chính thức của npm, được thiết kế tinh vi đến mức khó phân biệt thật/giả. Email này dẫn lập trình viên quản lý gói eslint-config-prettier tới một trang web giả mạo y hệt trang chính thức của npm.
Chỉ một khoảnh khắc sơ suất, người quản lý đã cung cấp thông tin đăng nhập. Ngay lập tức, kẻ tấn công có trong tay quyền xuất bản các phiên bản mới của những gói phần mềm nổi tiếng, bao gồm eslint-config-prettier, eslint-plugin-prettier, synckit…
Trong vòng vài giờ, các phiên bản chứa mã độc hại đã xuất hiện trên npm, được phân phối rộng rãi cho cộng đồng.
Các phiên bản bị cài cắm chứa postinstall script - đoạn mã được kích hoạt tự động sau khi gói được cài đặt. Script này triển khai Scavenger RAT (Remote Access Trojan), một loại mã độc cho phép kẻ tấn công kiểm soát từ xa thiết bị chạy Windows.
Hệ quả là, bất kỳ lập trình viên hay tổ chức nào vô tình tải về phiên bản nhiễm độc đều có nguy cơ bị rò rỉ token GitHub, thông tin đăng nhập và dữ liệu nhạy cảm.
Dù các gói nhiễm độc đã được gỡ bỏ trong khoảng 2 giờ sau khi phát hiện, nhưng với mức trung bình 36 triệu lượt tải mỗi tuần, hậu quả là không hề nhỏ.
Điều khiến sự cố trở nên nghiêm trọng hơn chính là các công cụ tự động cập nhật thư viện, điển hình là Dependabot của GitHub. Dependabot và các công cụ tương tự có nhiệm vụ tạo pull request tự động để cập nhật phiên bản mới nhất của các gói. Nhưng trong trường hợp này, cơ chế ấy lại vô tình giúp mã độc lan nhanh, khi nhiều dự án chấp nhận bản cập nhật mà không có sự kiểm tra thủ công.
Thậm chí, nghiên cứu cho thấy có hơn 14.000 gói khai báo sai eslint-config-prettier từ gói phát triển (dev dependency) thành gói sản xuất (production dependency). Điều này dẫn đến việc chúng được cài đặt ngay cả trong môi trường vận hành chính thức, mở ra cửa ngõ trực tiếp cho mã độc.
Một ví dụ điển hình là công ty quản lý xe đạp Dott, khi hệ thống tự động của họ đã phát hiện, phê duyệt và hợp nhất bản cập nhật chứa mã độc mà không có bất kỳ kiểm duyệt thủ công nào.
Theo thống kê của các chuyên gia, ít nhất 46 dự án mã nguồn mở đã bị ghi nhận có tệp package-lock.json chứa mã băm của phiên bản nhiễm độc. Đáng chú ý, trong số đó có cả một dự án do Microsoft sở hữu.
Đối với các tổ chức sử dụng runner tự lưu trữ (self-hosted runners) trong quy trình CI/CD, rủi ro còn cao hơn nhiều, bởi khi RAT xâm nhập, nó có thể duy trì sự hiện diện lâu dài, thay vì chỉ tạm thời như với các runner ảo của GitHub.
Dù chưa có công bố hay thông tin ảnh hưởng trực tiếp đến Việt Nam nhưng có khả năng ảnh hưởng lớn vì chỉ cần một vài tài khoản developer bị chiếm quyền cũng đủ để lan mã độc đến hàng triệu dự án.
Các chuyên gia WhiteHat khuyến cáo chung người dùng:
Sự việc bắt đầu khi kẻ tấn công gửi một email giả mạo đội ngũ hỗ trợ chính thức của npm, được thiết kế tinh vi đến mức khó phân biệt thật/giả. Email này dẫn lập trình viên quản lý gói eslint-config-prettier tới một trang web giả mạo y hệt trang chính thức của npm.
Chỉ một khoảnh khắc sơ suất, người quản lý đã cung cấp thông tin đăng nhập. Ngay lập tức, kẻ tấn công có trong tay quyền xuất bản các phiên bản mới của những gói phần mềm nổi tiếng, bao gồm eslint-config-prettier, eslint-plugin-prettier, synckit…
Trong vòng vài giờ, các phiên bản chứa mã độc hại đã xuất hiện trên npm, được phân phối rộng rãi cho cộng đồng.
Các phiên bản bị cài cắm chứa postinstall script - đoạn mã được kích hoạt tự động sau khi gói được cài đặt. Script này triển khai Scavenger RAT (Remote Access Trojan), một loại mã độc cho phép kẻ tấn công kiểm soát từ xa thiết bị chạy Windows.
Hệ quả là, bất kỳ lập trình viên hay tổ chức nào vô tình tải về phiên bản nhiễm độc đều có nguy cơ bị rò rỉ token GitHub, thông tin đăng nhập và dữ liệu nhạy cảm.
Dù các gói nhiễm độc đã được gỡ bỏ trong khoảng 2 giờ sau khi phát hiện, nhưng với mức trung bình 36 triệu lượt tải mỗi tuần, hậu quả là không hề nhỏ.
Điều khiến sự cố trở nên nghiêm trọng hơn chính là các công cụ tự động cập nhật thư viện, điển hình là Dependabot của GitHub. Dependabot và các công cụ tương tự có nhiệm vụ tạo pull request tự động để cập nhật phiên bản mới nhất của các gói. Nhưng trong trường hợp này, cơ chế ấy lại vô tình giúp mã độc lan nhanh, khi nhiều dự án chấp nhận bản cập nhật mà không có sự kiểm tra thủ công.
Thậm chí, nghiên cứu cho thấy có hơn 14.000 gói khai báo sai eslint-config-prettier từ gói phát triển (dev dependency) thành gói sản xuất (production dependency). Điều này dẫn đến việc chúng được cài đặt ngay cả trong môi trường vận hành chính thức, mở ra cửa ngõ trực tiếp cho mã độc.
Một ví dụ điển hình là công ty quản lý xe đạp Dott, khi hệ thống tự động của họ đã phát hiện, phê duyệt và hợp nhất bản cập nhật chứa mã độc mà không có bất kỳ kiểm duyệt thủ công nào.
Theo thống kê của các chuyên gia, ít nhất 46 dự án mã nguồn mở đã bị ghi nhận có tệp package-lock.json chứa mã băm của phiên bản nhiễm độc. Đáng chú ý, trong số đó có cả một dự án do Microsoft sở hữu.
Đối với các tổ chức sử dụng runner tự lưu trữ (self-hosted runners) trong quy trình CI/CD, rủi ro còn cao hơn nhiều, bởi khi RAT xâm nhập, nó có thể duy trì sự hiện diện lâu dài, thay vì chỉ tạm thời như với các runner ảo của GitHub.
Dù chưa có công bố hay thông tin ảnh hưởng trực tiếp đến Việt Nam nhưng có khả năng ảnh hưởng lớn vì chỉ cần một vài tài khoản developer bị chiếm quyền cũng đủ để lan mã độc đến hàng triệu dự án.
Các chuyên gia WhiteHat khuyến cáo chung người dùng:
- Chỉ cài đặt gói từ nguồn chính thức, tránh tải hoặc sử dụng các thư viện đến từ những kho lưu trữ không xác thực, nhằm đảm bảo rằng mã nguồn được phát hành là minh bạch và đáng tin cậy.
- Đối chiếu bản phát hành trên npm với GitHub, kiểm tra sự trùng khớp giữa phiên bản được công bố trên npm và mã nguồn, lịch sử commit hoặc tag chính thức trên GitHub để phát hiện kịp thời những dấu hiệu bất thường.
- Thường xuyên cập nhật và quét bảo mật, sử dụng các công cụ chuyên dụng để rà soát, phát hiện lỗ hổng hoặc mã độc tiềm ẩn trong thư viện, đồng thời áp dụng bản vá kịp thời để giảm thiểu nguy cơ bị khai thác.
- Đào tạo nhận thức an toàn thông tin, trang bị cho lập trình viên và nhân viên kỹ năng nhận diện email giả mạo, website lừa đảo cũng như thói quen kiểm tra cẩn thận trước khi cung cấp thông tin đăng nhập hoặc cấp quyền quan trọng.
WhiteHat