Các cuộc tấn công chuỗi cung ứng phần mềm năm 2025 - các gói phần mềm độc hại - các gói Python độc hại - các gói npm độc hại

Cái nhìn sâu hơn về các cuộc tấn công chuỗi cung ứng phần mềm năm 2025: So sánh các chiến dịch của PyPI và npm

Gần đây, Xygeni đã quan sát thấy một xu hướng đáng lo ngại trong bối cảnh các cuộc tấn công chuỗi cung ứng phần mềm vào năm 2025., xuất hiện trên hai trình quản lý gói phổ biến: PyPINPMLà một phần trong nỗ lực thu thập thông tin tình báo về các mối đe dọa đang diễn ra của chúng tôi,Hệ thống cảnh báo sớm phần mềm độc hại (MEW) của Xygeni Công cụ này đã xác định được một trường hợp riêng biệt nhưng có phương pháp tương tự về gói phần mềm độc hại đã được tải lên một registry khác trước đó. Trường hợp này cho thấy các tác nhân đe dọa đang phát triển và tái sử dụng các kỹ thuật tấn công trên nhiều hệ sinh thái, đặc biệt là thông qua gói Python độc hạigói npm độc hạiĐiều này làm tăng nguy cơ các gói phần mềm độc hại xâm nhập vào chuỗi cung ứng mã nguồn mở.

MEW của Xygeni: Nhận diện những điểm tương đồng

Công cụ MEW của Xygeni được xây dựng để phát hiện và gắn cờ các gói phần mềm độc hại, đặc biệt là những gói liên quan đến các cuộc tấn công chuỗi cung ứng phần mềm vào năm 2025, ngay khi chúng được công bố lên các kho lưu trữ mã nguồn mở. Nó hoạt động bằng cách phân tích các gói phần mềm mới để tìm kiếm hành vi đáng ngờ.

Trong trường hợp này, nó đã xác định được hai gói Python độc hại (graphalgo trên PyPI) và gói npm độc hại (express-cookie-parser (trên npm).

Các gói Python và npm độc hại trong các cuộc tấn công chuỗi cung ứng phần mềm (2025)

Hãy cùng khám phá những đặc điểm chung đã kích hoạt các cảnh báo của chúng ta:

typosquatting

Cả hai đều cố gắng bắt chước các gói phần mềm phổ biến hiện có.

  • graphalgo (PyPI): "Gói Python dùng để tạo và thao tác với đồ thị và mạng lưới.Được tải lên bởi một người dùng có tên “larrytech” Vào ngày 13 tháng 6 năm 2025, gói phần mềm này tự giới thiệu mình như một lựa chọn thay thế trên PyPi cho dự án graphalgo ban đầu không độc hại, sau này được đổi tên thành graphdict.
  • express-cookie-parser (npm)Gói này bắt chước gói cookie-parser nổi tiếng, thậm chí còn sao chép cả cấu trúc của nó. README.md. Việc mạo danh như vậy là một chiến thuật kinh điển để tận dụng lòng tin hiện có.

Che giấu thông tin như một biện pháp phòng thủ đầu tiên.

Cả hai gói phần mềm đều che giấu mã độc của chúng bên trong các tệp gốc. Ví dụ: đồ thịĐoạn mã bị làm mờ đã được tìm thấy bên trong /utils/load_libraries.py. Trong trường hợp express-cookie-parser, cookie-loader.min.js Chứa dữ liệu đã được mã hóa.

Lớp mã hóa ban đầu này thường được sử dụng để cản trở việc kiểm tra thông thường và phân tích tĩnh. Quá trình mã hóa khá đơn giản: nén ZLib lặp đi lặp lại cộng với mã hóa Base64. Loại mã hóa này cho thấy rõ ràng phần mềm đang cố gắng che giấu hành vi của nó. Cùng với các bằng chứng khác, điều này cho phép Xygeni MEW phân loại các gói phần mềm là phần mềm độc hại tiềm ẩn. Trong giai đoạn xác nhận, các chuyên gia đánh giá của chúng tôi đã nhanh chóng chuẩn bị một kịch bản giải mã, qua đó tiết lộ giai đoạn phát tán phần mềm độc hại rõ ràng.

Vận chuyển hàng hóa nhiều giai đoạn và điểm xuất phát chung

Cả hai gói đều hoạt động như "ban đầu"ống nhỏ giọt,” tạo tiền đề cho tải trọng thực sự. Chúng có chung một “hạt giốngURL tệp:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

Tệp hạt giống bên ngoài giống hệt nhau này là một dấu hiệu mạnh mẽ cho thấy có chung tác nhân đe dọa. Điều thú vị là, nội dung của tệp hạt giống này dường như chỉ là các biến môi trường đơn giản (ví dụ: JWT_SECRET, PORT), có thể gây hiểu lầm khi kiểm tra về chức năng thực sự của nó.

Độ phân giải C2 động với DGA

Một chiến thuật tinh vi được quan sát thấy trong các gói phần mềm độc hại này là việc sử dụng Thuật toán Tạo Tên Miền (DGA) để phân giải máy chủ Điều khiển và Quản lý (C2) một cách động. Kỹ thuật này, thường thấy trong các cuộc tấn công chuỗi cung ứng phần mềm tiên tiến vào năm 2025, dựa trên hàm băm SHA256 được tạo ra từ nội dung của tệp hạt giống, kết hợp với các giá trị được mã hóa cứng khác. Bằng cách đó, cơ sở hạ tầng C2 thay đổi thường xuyên, khiến việc đưa vào danh sách đen truyền thống trở nên kém hiệu quả hơn nhiều. Trong trường hợp này, biến thể npm đã sử dụng một giá trị cố định là 496AAC7E như một phần logic của DGA.

Thiết lập sự kiên trì

Cả hai kẻ tấn công đều tìm cách thiết lập sự hiện diện lâu dài trên các hệ thống bị ảnh hưởng. Chiến lược của chúng bao gồm việc thả một tập tin, startup.py (dành cho PyPi) hoặc startup.js (Đối với npm), vào các thư mục dữ liệu người dùng chung của Google Chrome trên nhiều hệ điều hành khác nhau (Windows, Linux, macOS).

Dọn dẹp sau khi thực thi

Để giảm thiểu dấu vết, cả hai tập lệnh độc hại đều thực hiện các thao tác dọn dẹp. Điều này bao gồm việc xóa các tập tin thả ban đầu của chúng (load_libraries.py, cookie-loader.min.js) và sửa đổi các tệp gói hợp pháp (__init__.py, index.js) để loại bỏ các tham chiếu đến các thành phần đã bị xóa.

Các dấu hiệu cho thấy sự xâm phạm trong các gói Python và npm độc hại

  • Gói PyPI: graphalgo (được xuất bản bởi larrytech, ngày 13 tháng 6 năm 2025)
  • Gói npm: express-cookie-parser (cụ thể là phiên bản 1.4.12)
  • Truy cập URL hạt giống được chia sẻ

https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

  • Tên tệp cố định: startup.py (Trăn) startup.js (Javascript)
  • Các đường dẫn lưu trữ thường xuyên (phụ thuộc vào hệ điều hành): Bên trong các thư mục dữ liệu người dùng của Google Chrome (ví dụ: AppData\Local\Google\Chrome\UserData\Scripts\ trên Windows, ~/.config/google-chrome/Scripts/ (trên Linux, v.v.).

Cách phòng chống các gói phần mềm độc hại trong các cuộc tấn công chuỗi cung ứng phần mềm năm 2025

Một phương pháp được đề xuất dành cho các nhà phát triển

Sự cố này là một nghiên cứu điển hình có giá trị trong bối cảnh mối đe dọa ngày càng gia tăng của các cuộc tấn công chuỗi cung ứng phần mềm vào năm 2025. Nó cho thấy các gói Python độc hại và các gói npm độc hại có thể xâm nhập vào các hệ sinh thái đáng tin cậy như thế nào, thường tránh được sự phát hiện cho đến khi quá muộn. Đó là lý do tại sao việc phát hiện sớm, các công cụ thông minh và việc chủ động bảo vệ hệ thống hiện là những phần thiết yếu của bất kỳ quy trình làm việc DevOps an toàn nào. Các nhà phát triển được khuyến khích xem xét những điều sau:

Đánh giá phụ thuộc

Nếu dự án của bạn bao gồm đồ thị or express-cookie-parserVì vậy, việc tiến hành loại bỏ chúng là điều nên làm.

  • Đối với PyPI: pip uninstall graphalgo
  • Đối với npm: npm uninstall express-cookie-parser

Vệ sinh hệ thống

Hãy cân nhắc thực hiện quét hệ thống toàn diện. Bạn cũng nên kiểm tra thủ công các đường dẫn thư mục dữ liệu người dùng Chrome thông thường để tìm bất kỳ vấn đề bất thường nào. startup.py or startup.js các tập tin.

Các biện pháp an ninh chủ động

  • Đánh giá các mối phụ thuộc mớiThiết lập quy trình đánh giá kỹ lưỡng các gói phần mềm mới trước khi tích hợp, tập trung vào các gói từ các nhà phát hành chưa quen thuộc.
  • Tích hợp các công cụ bảo mật: Các công cụ như MEW của Xygeni, cùng với các công cụ Phân tích Thành phần Phần mềm khác (SCACác giải pháp này có thể cung cấp một lớp phòng thủ quan trọng bằng cách xác định các hành vi đáng ngờ và các lỗ hổng.
  • Đặc quyền nhấtViệc vận hành môi trường phát triển theo nguyên tắc quyền hạn tối thiểu có thể giúp hạn chế tác động tiềm tàng của một cuộc tấn công xâm nhập.
  • Nhận thức mạng lướiViệc giám sát lưu lượng mạng đi ra để phát hiện các kết nối bất thường đôi khi có thể giúp nhận biết các thông tin liên lạc C2 do DGA tạo ra.

Thành phần chính của load_libraries.py (từ graphalgo)

  • download_remote_content(): Chức năng này xử lý việc tải các tập tin từ các URL được chỉ định.
  • run_process(): Thực thi các tập lệnh Python bên ngoài một cách độc lập, ngăn chặn việc hiển thị đầu ra để giữ kín đáo.
  • get_output_file_path()Xác định vị trí hệ thống lý tưởng cho tệp startup.py cố định.
  • remove_self(): Điều phối quá trình dọn dẹp sau khi thực thi các tập tin độc hại ban đầu và các sửa đổi gói phần mềm.
  • simple_shift_encrypt() / simple_shift_decrypt(): Các hàm mã hóa tùy chỉnh để che giấu các kênh liên lạc, rất quan trọng cho việc triển khai DGA.
  • load_libraries()Chức năng trung tâm điều phối toàn bộ quy trình nhiều giai đoạn, từ tải xuống ban đầu đến thực thi và dọn dẹp dữ liệu cuối cùng.

Sau trận đấu

Cũng như các gói phần mềm độc hại tiềm ẩn khác được MEW xác định, tường lửa phụ thuộc đã ngay lập tức bảo vệ người dùng khi họ đưa các gói phần mềm độc hại này vào phần phụ thuộc của mình. Sau khi xác nhận, chúng tôi đã thực hiện các thủ tục thông báo cho cả hai kho lưu trữ, và sau khi xem xét, chúng đã gỡ bỏ cả hai gói phần mềm.

sca-tools-software-composition-analysis-tools
Ưu tiên, khắc phục và bảo mật các rủi ro phần mềm của bạn
Đăng ký tài khoản miễn phí ngay.
Không cần thẻ tín dụng.

Bảo mật quá trình phát triển và phân phối phần mềm của bạn.

với bộ sản phẩm Xygeni