Khai thác Discord webhooks: Nguy hiểm tấn công chuỗi cung ứng

Khai thác Discord webhooks: Nguy hiểm tấn công chuỗi cung ứng

Các gói phần mềm độc hại trên các kho lưu trữ phổ biến đang lạm dụng Discord webhooks để đánh cắp các tệp nhạy cảm và thu thập thông tin telemetry, qua đó vượt qua cơ sở hạ tầng C2 truyền thống và hòa lẫn vào lưu lượng HTTPS hợp pháp. Việc khai thác Discord webhooks này tạo ra một kênh tấn công khó bị phát hiện và là một mối đe dọa mạng đáng gờm.

Nội dung
Cơ Chế Khai Thác Discord Webhooks cho Command and Control (C2)
Các Trường Hợp Khai Thác Thực Tế Chi Tiết

Khai Thác trên Nền Tảng npm: mysql-dumpdiscord và nodejs.discord
Tấn Công Chuỗi Cung Ứng qua PyPI và RubyGems
Ảnh Hưởng và Rủi Ro của Khai Thác Discord Webhooks
Chiến Lược Phòng Ngừa và Giảm Thiểu Mối Đe Dọa

Công Cụ Hỗ Trợ Phát Hiện và Bảo Vệ Hiệu Quả

Cơ Chế Khai Thác Discord Webhooks cho Command and Control (C2)

Discord webhooks là các URL HTTPS đơn giản chấp nhận yêu cầu POST. Chúng được thiết kế để tích hợp ứng dụng, nhưng lại trở thành mục tiêu bị lạm dụng.

Các webhook này không yêu cầu thông tin xác thực phức tạp ngoài việc sở hữu URL. Lưu lượng truy cập của chúng xuất hiện dưới dạng JSON vô hại qua cổng 443, khiến việc phát hiện trở nên khó khăn.

Nhóm nghiên cứu bảo mật của Socket đã phát hiện một xu hướng ngày càng gia tăng. Kẻ tấn công nhúng các URL webhook của Discord vào các gói mã nguồn mở để phục vụ làm điểm cuối Command and Control (C2).

Khi mã cài đặt hoặc mã chạy của một gói gửi payload đến các webhook này, kẻ tấn công sẽ nhận được các tệp, chi tiết máy chủ hoặc thông báo tùy chỉnh trong kênh Discord mà chúng kiểm soát. Đây là hình thức khai thác Discord webhooks tinh vi.

Không giống như các máy chủ C2 cổ điển thường có dấu hiệu đặc trưng, webhooks hoạt động trên một miền đáng tin cậy (discord.com). Điều này giúp chúng né tránh các chặn tường lửa và hiếm khi kích hoạt tính năng phát hiện dựa trên chữ ký.

Các Trường Hợp Khai Thác Thực Tế Chi Tiết

Khai Thác trên Nền Tảng npm: mysql-dumpdiscord và nodejs.discord

Trong một gói npm có tên mysql-dumpdiscord, script index.js được thiết kế để nhắm mục tiêu vào các tệp cấu hình quan trọng. Các tệp này bao gồm config.json, config.js, .env, ayarlar.jsonayarlar.js.

Script này hoạt động bằng cách giải quyết đường dẫn tuyệt đối của từng tệp, sau đó đọc nội dung của chúng. Các lỗi trong quá trình đọc được bỏ qua một cách im lặng, đảm bảo hoạt động không bị gián đoạn.

Cơ chế này cho phép bất kỳ mã nào sử dụng trình bao bọc này đánh cắp các thông tin nhạy cảm. Ví dụ như biến môi trường, khóa API hoặc đầu ra lệnh mà không cảnh báo người dùng.

Nếu tệp tồn tại và có nội dung, script sẽ tạo một thông báo để gửi đi. Các tệp có kích thước dưới 1.900 ký tự được gói gọn trong một khối mã. Đối với các tệp dài hơn, chúng sẽ bị cắt ngắn xuống 1.900 ký tự kèm theo một cảnh báo tiếng Thổ Nhĩ Kỳ (“Dosya çok büyük, kısaltıldı” – Tệp quá lớn, đã bị cắt ngắn).

Thông báo này sau đó được gửi dưới dạng JSON bằng phương thức POST đến một URL webhook của Discord được mã hóa cứng. Đây là một ví dụ rõ ràng về dropper đánh cắp tệp sử dụng Discord thay vì máy chủ C2 truyền thống.

Một module npm khác, nodejs.discord, đơn giản hơn nhưng cũng nguy hiểm. Nó chỉ chứa một lớp DiscordWebhook. Phương thức connect(…messages) của nó nối các đối số thành một chuỗi và, sử dụng Discord.js‘s WebhookClient, gửi chúng đến một URL webhook nhúng khác. Đây cũng là một phương pháp khai thác Discord webhooks hiệu quả.

Tấn Công Chuỗi Cung Ứng qua PyPI và RubyGems

Trên PyPI, gói malinssx thể hiện một kỹ thuật tấn công chuỗi cung ứng. Nó ghi đè lệnh install của setuptools trong tệp setup.py.

Lớp RunPayload của gói này gửi một payload JSON thông báo “Someone just installed the maladicus package via pip!” đến một webhook của Discord ngay trước khi quá trình cài đặt hoàn tất. Điều này cung cấp thông tin cài đặt cho kẻ tấn công.

Hook thời gian cài đặt này đặt ra một rủi ro chuỗi cung ứng cổ điển. Nó cung cấp cho kẻ tấn công thông tin telemetry về mọi lần cài đặt pip mà không cần thực thi mã khi chạy. Đây là một lợi thế lớn cho kẻ tấn công.

Tương tự, một Ruby gem độc hại, sqlcommenter_rails, thu thập thông tin máy chủ toàn diện. Thông tin bao gồm nội dung của /etc/passwd, máy chủ DNS từ /etc/resolv.conf, hostname, thư mục hiện tại và thư mục gốc, cùng địa chỉ IP công khai thông qua api.ipify.org.

Nó đóng gói dữ liệu này với siêu dữ liệu gem và các ghi chú tùy chỉnh vào một thông báo đa dòng được định dạng. Sau đó, nó in ra stdout và gửi dưới dạng JSON đến một webhook của Discord qua HTTPS. Mọi sự cố mạng đều bị bỏ qua một cách lặng lẽ, đảm bảo tính bí mật của hoạt động, tạo ra một mối đe dọa mạng nghiêm trọng.

Ảnh Hưởng và Rủi Ro của Khai Thác Discord Webhooks

Việc vũ khí hóa Discord webhooks làm thay đổi đáng kể kinh tế của các cuộc tấn công chuỗi cung ứng. Kẻ tấn công không còn phải chịu chi phí cơ sở hạ tầng hoặc phí đăng ký tên miền.

Chúng tận dụng các kênh miễn phí, có khả năng phục hồi cao mà các tổ chức đã cho phép. Bởi vì các URL webhook thực tế là chỉ ghi (write-only), chúng có thể ẩn mình trong mã nguồn và nhật ký tường lửa, né tránh phát hiện hiệu quả.

Ngoài Discord, kẻ tấn công cũng đang thử nghiệm với các webhook của Slack, Telegram và GitHub cho các mục đích tương tự. Điều này mở rộng phạm vi của mối đe dọa mạng này sang nhiều nền tảng phổ biến khác.

Chiến Lược Phòng Ngừa và Giảm Thiểu Mối Đe Dọa

Các nhà phòng thủ phải coi webhooks là các kênh tiềm ẩn gây mất mát dữ liệu nghiêm trọng. Việc triển khai lọc lưu lượng đi (egress filtering) là cần thiết để thực thi danh sách cho phép (allow-lists) đối với lưu lượng HTTPS đi, đặc biệt từ các máy chủ xây dựng (build servers) và máy trạm của nhà phát triển.

Các thực hành quản lý phụ thuộc (dependency management) vững chắc là rất quan trọng để ngăn chặn các gói độc hại. Điều này bao gồm việc sử dụng lockfiles, các khung chứng minh nguồn gốc (provenance frameworks) như SLSA, và quy trình kiểm tra nghiêm ngặt trước khi cài đặt bất kỳ gói nào.

Giám sát thời gian chạy (runtime monitoring) cần được cấu hình để gắn cờ mã gọi các lệnh mạng trong các hook cài đặt hoặc script xây dựng. Ngoài ra, việc xoay vòng thông tin xác thực của nhà phát triển và giảm thiểu các bí mật được lưu trữ trong các kho lưu trữ có thể hạn chế rủi ro nếu việc đánh cắp dữ liệu thành công, góp phần tăng cường bảo mật thông tin.

Công Cụ Hỗ Trợ Phát Hiện và Bảo Vệ Hiệu Quả

Bộ công cụ bảo mật của Socket trực tiếp giải quyết các mối đe dọa này. Ứng dụng GitHub của Socket quét các yêu cầu kéo (pull requests) để tìm các webhook được mã hóa cứng và các hook thời gian cài đặt.

Socket CLI thực thi các kiểm tra tương tự trong quá trình cài đặt gói, cung cấp một lớp bảo vệ chủ động. Socket Firewall điều phối việc tìm nạp phụ thuộc, chặn các gói độc hại đã biết một cách gián tiếp, ngăn chúng xâm nhập vào môi trường phát triển.

Một tiện ích mở rộng trình duyệt làm nổi bật các gói đáng ngờ trên các kho lưu trữ, cảnh báo người dùng về các rủi ro tiềm ẩn. Các công cụ mã hóa hỗ trợ AI cũng cảnh báo khi các trợ lý đề xuất các phụ thuộc rủi ro.

Bằng cách chuyển trọng tâm sang phát hiện hành vi và vệ sinh chuỗi cung ứng, các tổ chức có thể giảm thiểu các cuộc tấn công C2 dựa trên Discord trước khi dữ liệu nhạy cảm rời khỏi máy của nhà phát triển. Đây là một bước thiết yếu để đảm bảo bảo mật thông tin toàn diện trong môi trường phát triển hiện đại.

Để biết thêm chi tiết chuyên sâu về nghiên cứu này và các phương pháp phát hiện, bạn có thể tham khảo bài viết gốc từ Socket: Weaponizing Discord for Command and Control