2 điểm bởi GN⁺ 2024-04-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Dòng thời gian sự kiện:

    • 2024.01.19: Trang web XZ được chuyển sang GitHub Pages bởi một maintainer mới (jiaT75)
    • 2024.02.15: build-to-host.m4 được thêm vào .gitignore
    • 2024.02.23: Hai "tệp kiểm thử" chứa các giai đoạn script độc hại được đưa vào
    • 2024.02.24: XZ 5.6.0 được phát hành
    • 2024.02.26: Commit trong CMakeLists.txt phá hoại tính năng bảo mật Landlock
    • 2024.03.04: Backdoor gây ra sự cố với Valgrind
    • 2024.03.09: Hai "tệp kiểm thử" được cập nhật, các hàm CRC bị chỉnh sửa, sự cố Valgrind được "khắc phục"
    • 2024.03.09: XZ 5.6.1 được phát hành
    • 2024.03.28: Lỗi được phát hiện, Debian và RedHat được thông báo, Debian hoàn tác XZ
    • 2024.03.29: Email được công bố trên mailing list OSS-security, RedHat xác nhận đã phát hành XZ có cài backdoor
    • 2024.03.30: Debian dừng các bản build và bắt đầu quá trình build lại
    • 2024.04.02: Nhà phát triển chính của XZ xác nhận sự cố backdoor
  • Giá trị hash của các bản phân phối XZ chứa backdoor độc hại:

    • xz-5.6.0: Cung cấp các giá trị hash MD5, SHA1, SHA256
    • xz-5.6.1: Cung cấp các giá trị hash MD5, SHA1, SHA256

Phân tích lây nhiễm ban đầu

  • Giai đoạn 1 - Script build-to-host bị sửa đổi:

    • Tệp mã nguồn phát hành ban đầu là vô hại, nhưng khi được tải từ URL do hacker kiểm soát thì chứa tệp build-to-host.m4 thực thi mã độc
    • Tệp .m4 này được chạy trong quá trình build để sửa đổi và giải nén tệp đầu tiên được thêm vào thư mục kiểm thử
  • Giai đoạn 2 - Shell script bị chèn:

    • Script độc hại được chèn bởi tệp .m4 sẽ kiểm tra xem nó có đang chạy trong quy trình build dự kiến trên Linux hay không
    • Nó dùng tệp good-large_compressed.lzma để thực thi bước tiếp theo; tệp này được nén bình thường nhưng bên trong dữ liệu đã giải nén có chứa dữ liệu rác
    • Dùng lệnh head/tail để trích xuất 33.492 byte và áp dụng phép thay thế cơ bản bằng lệnh tr để giải rối mã
  • Giai đoạn 3 - Trích xuất backdoor:

    • Shell script ở bước cuối thực hiện nhiều phép kiểm tra để xác nhận nó đang chạy trong môi trường mong đợi
    • Nó trích xuất chính mã nhị phân backdoor được giấu ở một offset khác trong cùng tệp good-large_compressed.lzma
    • Dùng công cụ XZ để trích xuất tệp và giải mã dữ liệu nhị phân bằng một chuỗi lệnh gọi head sử dụng thuật toán giống RC4
    • Trích xuất tệp nén bằng XZ, loại bỏ các byte ở phần đầu bằng giá trị predefined, rồi lưu thành liblzma_la-crc64-fast.o
    • Sửa đổi hàm is_arch_extension_supported trong crc_x86_clmul.h để đổi lệnh gọi __get_cpuid thành _get_cpuid

Phân tích backdoor nhị phân

  • Kịch bản nạp ẩn:

    • XZ sử dụng các hàm lzma_crc32, lzma_crc64 để tính CRC, và chúng được lưu trong bảng ký hiệu ELF với kiểu IFUNC
    • IFUNC được dùng để quyết định động có sử dụng phiên bản tối ưu hóa hay không
    • Backdoor được lưu dưới dạng tệp đối tượng, và mục tiêu chính là được liên kết với file thực thi main khi biên dịch
    • Tệp đối tượng chứa ký hiệu _get_cpuid; bằng cách bỏ đi một dấu gạch dưới trong mã nguồn gốc, khi mã gọi _get_cpuid thì thực tế sẽ gọi phiên bản backdoor
  • Phân tích mã backdoor:

    • Mã backdoor ban đầu được gọi 2 lần, và hoạt động độc hại thực sự bắt đầu khi IFUNC lzma_crc64 gọi _get_cpuid
    • Nó tìm địa chỉ GOT để xác định vị trí con trỏ cpuid rồi thay thế bằng con trỏ hàm độc hại chính
    • Mục tiêu chính là hook một số hàm nhất định để có thể giám sát mọi kết nối tới hệ thống đã nhiễm
  • Hành vi cốt lõi:

    • Nhắm hook các hàm RSA_public_decrypt, EVP_PKEY_set1_RSA, RSA_get0_key của libcrypto
    • Kiểm tra xem tiến trình hiện tại có đáp ứng tiêu chí thực thi hay không và xác nhận sự tồn tại của kill switch
    • Sử dụng cấu trúc Trie để thực hiện các phép toán trên chuỗi
    • Sử dụng từ 3 routine symbol resolver trở lên để tìm vị trí của cấu trúc ELF Symbol
    • Lạm dụng tính năng rtdl-audit để chiếm quyền các routine phân giải symbol, từ đó thực hiện hook hàm

Ý kiến của GN⁺

  • Bài viết này cho thấy rõ một trường hợp tấn công cực kỳ tinh vi, trong đó mã độc đã được cấy vào phần mềm mã nguồn mở. Nó mang lại bài học rằng chính những ưu điểm của mã nguồn mở cũng có thể bị lợi dụng ngược lại.

  • Các cuộc tấn công mạng và backdoor nhắm vào hệ thống Linux ngày càng tinh vi hơn. Đặc biệt, các cuộc tấn công thông qua máy chủ SSH có thể trở thành một mối đe dọa bảo mật nghiêm trọng.

  • Mặt khác, vụ việc cũng cho thấy khả năng tự thanh lọc của hệ sinh thái mã nguồn mở. Cuối cùng backdoor đã được cộng đồng phát hiện và ứng phó nhanh chóng. Tính minh bạch là yếu tố cốt lõi.

  • Việc sử dụng các kỹ thuật như cấu trúc dữ liệu Trie nâng cao, Symbol Resolver, hook dl_audit cho thấy sự tiến hóa về mặt kỹ thuật của mã độc trên Linux. Cần đặc biệt chú ý đến bảo mật hệ thống Linux.

  • Khi doanh nghiệp áp dụng phần mềm mã nguồn mở, không chỉ giấy phép mà cả khía cạnh bảo mật cũng cần được thẩm định kỹ. Cần xem xét liệu đó có phải là nguồn phân phối đáng tin cậy hay không, và liệu mã nguồn có đang được giám sát liên tục hay không.

1 bình luận

 
GN⁺ 2024-04-13
Ý kiến trên Hacker News

Tóm tắt:

  • Xét đến việc kẻ tấn công đã bỏ ra rất nhiều công sức vào script và mã để né tránh bị phát hiện, toàn bộ dự án này có thể đóng vai trò như một phương án thay thế cho việc chuyển hướng hoặc cho nhiều nỗ lực được tiến hành đồng thời
  • Cần cân nhắc rằng việc tập trung vào SSHD có thể khiến người ta bỏ qua tác động tới các phần khác của toàn hệ thống, cũng như các khía cạnh kỹ thuật và xã hội
  • Mỗi thư viện liên kết động có GOT riêng, và việc đánh dấu bảng là chỉ đọc sau khi liên kết động hoàn tất có thể là một bước tăng cường bảo mật hữu ích
  • Mã nguồn dường như được tạo ra theo cách chạy trình dịch ngược, tìm hiểu mã thực hiện điều gì, rồi đổi tên mọi thứ bằng các tên mô tả
  • Sự chậm trễ và chậm chạp của SSH do lỗi trong backdoor gây ra cuối cùng đã khiến nó bị lộ; tôi tự hỏi liệu đã có phân tích nào về điều này chưa
  • Kho lưu trữ xz đã xuất hiện trở lại trên GitHub, và những người bảo trì đang dọn dẹp, chẳng hạn như loại bỏ hỗ trợ ifunc và commit mã tạo các tệp kiểm thử
  • Thật dễ hình dung rằng còn nhiều backdoor khác mà mọi người chưa phát hiện ra, và chỉ mong là không có cái nào kín đáo đến mức như thế này