0

24 Giờ "Nghẹt Thở" Giải Cứu Dự án Open Source Khỏi Mã Độc Tấn Công Chuỗi Cung Ứng (Supply Chain Attack)

Chào anh em,

mình là một Senior SE. Hôm nay mình muốn chia sẻ một trải nghiệm "xương máu" vừa xảy ra với dự án Open Source của mình: nodejs-quickstart-structure.

Đây không chỉ là bài học về code, mà là bài học về Incident Response (Ứng phó sự cố) khi đối mặt với mã độc chuyên nghiệp đánh cắp tài khoản npm, GitHub và toàn bộ thông tin nhạy cảm.

1. Kẻ thủ ác lộ diện: Axios & plain-crypto-js

Trong quá trình phát triển bản v2.0.0, mình vô tình vướng phải một kỹ thuật tấn công gọi là Typosquatting. Một package giả mạo hoặc một dependency "vỏ bọc" đã cài cắm mã độc vào máy mình.

  • Tên mã độc: Nghi vấn liên quan đến plain-crypto-js (một biến thể tấn công nhắm vào các dev dùng Axios).
  • Hành vi: Nó không chỉ phá hoại máy tính, nó có thể âm thầm đánh cắp:
    • Browser Cookies: Chiếm quyền điều khiển các phiên đăng nhập (Session) Gmail, GitHub, LinkedIn.
    • SSH Keys: Chiếm quyền push code lên các Repository.
    • npm Tokens: Chiếm quyền publish các bản release độc hại lên npm.

2. 0h00: Phát hiện và "Cắt đuôi" (Containment)

Ngay khi nhận thấy dấu hiệu bất thường (log lạ và file lạ xuất hiện), mình đã thực hiện ngay các bước "sách giáo khoa" Hoặc bạn có thể tham khảo dưới đây Axios npm Package Compromised: Supply Chain Attack Delivers Cross-Platform RAT:

  1. Xóa Repo Local: Tiêu diệt môi trường chứa mã độc thực thi.
  2. Revoke All Sessions: Sử dụng điện thoại (môi trường sạch) để đăng xuất từ xa toàn bộ tài khoản Google, GitHub, Microsoft và LinkedIn.
  3. Hủy niềm tin thiết bị: Xóa máy tính hiện tại khỏi danh sách "Thiết bị tin cậy" của các tài khoản quan trọng.

3. Cuộc chiến giành lại tài khoản npm (The Support Battle)

Kịch bản xấu nhất đã xảy ra: Hacker đã chiếm được Session và vô hiệu hóa mã 2FA (mình thử nhập Recovery Codes cũ nhưng đều báo Invalid).

Mình đã ngay lập tức liên hệ với npm Support:

  • Ticket ID: 4223695 đã được khởi tạo.

  • Chiến thuật: Cung cấp bằng chứng sở hữu thông qua tài khoản GitHub (vẫn đang nắm giữ quyền kiểm soát) và lịch sử commit của dự án.

4. Quyết định "Đập đi xây lại" (Eradication)

Là một Architect, mình hiểu rằng nếu OS đã bị nhiễm Rootkit/Trojan, không có phần mềm diệt virus nào đảm bảo sạch 100%. Giải pháp duy nhất là: Wipe & Rebuild.

  • Phương án: Reset PC > Remove everything > Cloud download Windows.
  • Tại sao chọn Cloud Download? Để đảm bảo bản cài đặt mới tinh từ Microsoft, tránh mã độc nấp trong phân vùng Recovery cũ của máy.

5. Bài học rút ra cho anh em Developer

  1. Cảnh giác với Dependency: Luôn kiểm tra kỹ các package mới thêm vào, đặc biệt là các package có tên gần giống các thư viện nổi tiếng.
  2. 2FA là chưa đủ: Hacker có thể lấy Session Cookies để vượt qua 2FA. Hãy luôn sẵn sàng phương án Revoke Sessions từ xa.
  3. Lưu trữ Recovery Codes Offline: Đừng chỉ lưu trong máy tính, hãy in ra hoặc lưu trong trình quản lý mật khẩu tách biệt.
  4. Tư duy Incident Response: Khi bị hack, hãy bình tĩnh thực hiện theo trình tự: Cô lập -> Bảo vệ tài sản số -> Tiêu diệt tận gốc (Cài lại máy) -> Phục hồi.

Hiện tại, mình đang trong quá trình khôi phục môi trường "vô trùng" để tiếp tục hoàn thiện bản v2.0.0 cho nodejs-quickstart-structure. Bạn có thể xem chi tiết v2.0.0 beta dưới đây:

Next gen Web UI

Dự án sẽ trở lại với một tiêu chuẩn bảo mật cao hơn. Hy vọng câu chuyện này giúp anh em có thêm kinh nghiệm để bảo vệ "đứa con tinh thần" của mình!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí