Sự cố backdoor XZ - Kết quả phân tích ban đầu
(securelist.com)-
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.txtphá 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-hostbị 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.m4thực thi mã độc - Tệp
.m4nà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ử
- 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
-
Giai đoạn 2 - Shell script bị chèn:
- Script độc hại được chèn bởi tệp
.m4sẽ 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ệnhtrđể giải rối mã
- Script độc hại được chèn bởi tệp
-
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
headsử 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ànhliblzma_la-crc64-fast.o - Sửa đổi hàm
is_arch_extension_supportedtrongcrc_x86_clmul.hđể đổi lệnh gọi__get_cpuidthà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
mainkhi 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_cpuidthì thực tế sẽ gọi phiên bản backdoor
- XZ sử dụng các hàm
-
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_crc64gọi_get_cpuid - Nó tìm địa chỉ GOT để xác định vị trí con trỏ
cpuidrồ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
- 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
-
Hành vi cốt lõi:
- Nhắm hook các hàm
RSA_public_decrypt,EVP_PKEY_set1_RSA,RSA_get0_keycủalibcrypto - 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
- Nhắm hook các 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_auditcho 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
Ý kiến trên Hacker News
Tóm tắt: