1 điểm bởi GN⁺ 2024-03-01 | 1 bình luận | Chia sẻ qua WhatsApp

Phát hiện hơn 100.000 kho lưu trữ bị nhiễm trên GitHub

  • Một nhóm nghiên cứu bảo mật và khoa học dữ liệu đã phát hiện chiến dịch nhầm lẫn kho lưu trữ độc hại bắt đầu từ giữa năm ngoái đang tái xuất hiện trên quy mô lớn.
  • Cuộc tấn công này ảnh hưởng đến hơn 100.000 kho lưu trữ GitHub (và ước tính có thể là hàng triệu), khi các nhà phát triển sử dụng những kho trông giống các kho quen thuộc, đáng tin cậy nhưng thực chất chứa mã độc.

Tấn công nhầm lẫn kho lưu trữ diễn ra như thế nào?

  • Tấn công nhầm lẫn kho lưu trữ tương tự như tấn công nhầm lẫn phụ thuộc, khi kẻ tấn công khiến mục tiêu tải xuống phiên bản độc hại thay vì phiên bản thật.
  • Trong khi tấn công nhầm lẫn phụ thuộc khai thác cách hoạt động của trình quản lý gói, thì tấn công nhầm lẫn kho lưu trữ dựa vào việc con người vô tình chọn phiên bản độc hại thay vì bản thật, đôi khi còn kết hợp cả kỹ thuật social engineering.

Điều gì xảy ra khi kho độc hại được sử dụng

  • Khi các nhà phát triển thiếu cảnh giác sử dụng kho độc hại, payload ẩn sẽ giải lớp 7 tầng làm rối mã rồi tải về mã Python độc hại và sau đó là tệp thực thi nhị phân.
  • Mã độc thu thập thông tin đăng nhập của nhiều ứng dụng, mật khẩu và cookie trình duyệt, cùng nhiều dữ liệu mật khác, sau đó gửi chúng đến máy chủ C&C của kẻ tấn công và tiếp tục thực hiện các hoạt động độc hại khác.

Tác động của tự động hóa trên GitHub

  • Hầu hết các kho bị fork đều bị GitHub gỡ bỏ rất nhanh, nhưng hệ thống phát hiện tự động vẫn bỏ sót nhiều kho, còn các kho được tải lên thủ công thì vẫn tồn tại.
  • Vì toàn bộ chuỗi tấn công phần lớn đã được tự động hóa ở quy mô lớn, nên 1% còn sống sót vẫn tương đương với hàng nghìn kho độc hại.

Thời điểm chiến dịch bắt đầu

  • Tháng 5/2023: Theo báo cáo đầu tiên của Phylum, nhiều gói độc hại chứa phần đầu của payload hiện tại đã được tải lên PyPI.
  • Tháng 7 - 8/2023: Sau khi PyPI gỡ các gói độc hại và cộng đồng bảo mật bắt đầu chú ý nhiều hơn, nhiều kho độc hại đã được tải lên GitHub; lần này chúng trực tiếp phân phối payload thay vì tải gói PyPI về.
  • Tháng 11/2023 - nay: Đã phát hiện hơn 100.000 kho lưu trữ chứa payload độc hại tương tự, và con số này vẫn tiếp tục tăng.

Sự chuyển dịch của phần mềm độc hại từ trình quản lý gói sang quản lý mã nguồn (SCM)

  • Qua nhiều vụ việc được quan sát trên cả trình quản lý gói và nền tảng SCM, có vẻ việc chiến dịch này chuyển từ các gói độc hại trên PyPI sang các kho độc hại trên GitHub phản ánh một xu hướng phổ biến hơn.

Cách tự bảo vệ trước nhầm lẫn kho lưu trữ

  • GitHub đã được thông báo và phần lớn các kho độc hại đã bị xóa, nhưng chiến dịch vẫn tiếp diễn, và các cuộc tấn công nhằm chèn mã độc vào chuỗi cung ứng ngày càng trở nên phổ biến.
  • Apiiro đã xây dựng một hệ thống phát hiện mã độc để giám sát các codebase được kết nối.
  • Hệ thống này dùng nhiều kỹ thuật nâng cao để phát hiện tấn công, bao gồm phân tích mã dựa trên LLM, phân rã mã thành đồ thị luồng thực thi hoàn chỉnh, công cụ heuristic tinh vi, giải mã động, giải mã hóa và gỡ rối mã.

Ý kiến của GN⁺

  • Bài viết này cung cấp thông tin quan trọng nhằm cảnh báo các nhà phát triển về những mối đe dọa bảo mật cần lưu ý khi sử dụng kho lưu trữ trên GitHub.
  • Bằng cách hiểu cách mã độc xâm nhập vào chuỗi cung ứng phần mềm, các nhà phát triển và chuyên gia bảo mật có thể xây dựng cơ chế phòng thủ vững chắc hơn.
  • Những cuộc tấn công như vậy nhấn mạnh không chỉ khả năng lựa chọn kho đáng tin cậy của nhà phát triển, mà còn cả mức độ phụ thuộc vào tính chính xác của cấu hình CI/CD và độ an toàn của mã bên thứ ba.
  • Ở góc nhìn phản biện, các cuộc tấn công này cho thấy hệ thống tự động trên các nền tảng như GitHub cùng sự tồn tại của số lượng lớn kho lưu trữ có thể là con dao hai lưỡi.
  • Các công cụ bảo mật có chức năng tương tự gồm SonarQube, Snyk, WhiteSource... có thể hỗ trợ phát hiện lỗ hổng trong mã và tăng cường bảo mật.
  • Trước khi áp dụng công nghệ này, cần cân nhắc chính sách bảo mật của tổ chức, tính tương thích, chi phí triển khai và năng lực kỹ thuật của đội ngũ.
  • Lợi ích có thể đạt được khi lựa chọn công nghệ này là tăng cường bảo mật và giảm rủi ro, nhưng nhược điểm tiềm ẩn là đường cong học tập với hệ thống mới và sự phức tạp trong quản lý.

1 bình luận

 
GN⁺ 2024-03-01
Ý kiến trên Hacker News
  • Cần thận trọng khi lấy mã từ các kho lưu trữ công khai, và việc kiểm chứng cây phụ thuộc là rất quan trọng. Điều này đặt ra câu hỏi về việc mã độc trong kho công khai có thể ảnh hưởng thế nào đến các công cụ tự động như mô hình ngôn ngữ lớn (Large Language Models, LLMs). Ví dụ, các công cụ như GitHub Copilot có thể vô tình đưa mã độc vào câu trả lời cho các câu hỏi lập trình.
  • Có ý kiến cho rằng GitHub đang thất bại theo cách tương tự như Usenet đã từng thất bại. Bất kỳ ai cũng có thể tạo kho lưu trữ trên GitHub, và không có cách nào để phân biệt kho chính thức với kho của spammer. Khi Amazon nhắm tới mục tiêu là "cửa hàng bán mọi thứ", họ đã phải đối mặt với vấn đề là phần lớn hàng hóa đều là rác. GitHub cần xác lập bản sắc là "kho lưu trữ cho mọi người" hay là nơi trả lời câu hỏi "có thể tin cậy đoạn mã này hay không".
  • Có người than phiền rằng vấn đề chuỗi cung ứng là rất nghiêm trọng. Dù không nhắm vào các bản phát hành npm, họ đang dùng socket.dev để giám sát dự án. Dự án BrowserBox sử dụng khoảng 800 phụ thuộc, trong đó có 19 phụ thuộc cấp cao nhất. Họ đang cân nhắc chụp snapshot toàn bộ phụ thuộc vào namespace @browserbox của npm để theo dõi và vá lỗ hổng.
  • Có ý kiến nhấn mạnh rằng lập trình viên nên tách riêng ít nhất ba môi trường cho công việc, sở thích và mục đích cá nhân. Ngay cả với kho lưu trữ và chủ sở hữu đáng tin cậy, vẫn là khôn ngoan khi chạy mã trong máy ảo sandbox.
  • Nếu đang phát triển một SDK có nhiều lượt tải hàng tuần trong một nhóm nhỏ, có người cho biết họ đang đánh giá các giải pháp dựa trên snyk, aikido.dev và renovate. Chưa rõ các công cụ này có thực sự giúp giải quyết vấn đề hay không, và việc xử lý quá nhiều cảnh báo sai như từng gặp với snyk là điều khó khăn.
  • Có người bày tỏ thắc mắc liệu cách cài đặt bằng shell script dùng curlsudo có sớm chấm dứt hay không. Cách làm này có liên hệ chặt chẽ với phần mềm bị nhiễm được nhắc đến trong bài viết.
  • Trên npm, có thể dùng tùy chọn --ignore-scripts để ngăn mã độc thực thi.
  • Có nhắc đến việc đã từng có một kho lưu trữ chứa virus Trojan trong vòng chưa đầy 1 năm trở lại đây.
  • Có ý kiến chỉ trích việc một bài đăng mới nhất về vấn đề bảo mật lại dẫn tới quảng cáo kêu gọi tài trợ cho startup LLM. Những startup này chỉ có thể giải quyết một phần nhỏ của khoảng trống bảo mật, và việc ký hợp đồng với nhiều startup có thể gây ra vấn đề về chi phí và tích hợp.
  • Có người cho biết họ đang dần cải thiện bảo mật của môi trường phát triển dựa trên các báo cáo bảo mật liên tục. Họ đang thử VSCode development containers, GitHub Codespaces, đọc hướng dẫn của OWASP, và dùng socket.dev để rà soát các gói npm/Python.