- Vào tháng 3 năm 2024, một cửa hậu đã được phát hiện trong phần mềm
xz dùng để giải nén source tarball trên các bản phân phối Linux.
- Cửa hậu này đã bị một người bảo trì độc hại, Jia Tan, âm thầm cài vào trong suốt 3 năm.
- Sự việc này có tác động rất lớn vì cho phép thực thi mã từ xa và cực kỳ khó bị phát hiện.
- Andres Freund, nhà phát triển Postgres tại Microsoft, đã tình cờ phát hiện ra khi điều tra hiện tượng suy giảm hiệu năng, qua đó tránh được một thảm họa lớn.
Cách cuộc tấn công hoạt động
- Cửa hậu chiếm quyền chương trình
ssh để cho phép thực thi mã từ xa.
- Nó sửa đổi hàm
RSA_public_decrypt để kẻ tấn công có thể chạy lệnh tùy ý khi đăng nhập bằng một khóa RSA cụ thể.
- Nó gồm hai thành phần chính:
- Một script cài đặt tệp đối tượng độc hại như một phần của quy trình build
xz.
- Một thủ tục hook hàm
RSA_public_decrypt.
1. Script cài đặt tệp đối tượng độc hại
- Tệp đối tượng độc hại được ẩn trong các tệp kiểm thử của kho Git
xz.
- Cửa hậu chỉ được kích hoạt trong release tarball do người bảo trì cung cấp.
2. Thủ tục hook hàm RSA_public_decrypt
- Nó sử dụng tính năng ifunc của
glibc để buộc thực thi mã chạy tại thời điểm nạp động.
- Khi
ssh chạy, libsystemd và liblzma được nạp, và trong quá trình này cửa hậu thực thi mã tùy ý.
Cách tránh thảm họa xz
- Để nâng cao độ tin cậy của phần mềm mã nguồn mở, cần xử lý cả vấn đề xã hội lẫn vấn đề kỹ thuật.
- Cần cải thiện các quy trình bảo mật chuỗi cung ứng phần mềm.
Build phần mềm từ nguồn đáng tin cậy
- Cuộc tấn công hiệu quả vì nhiều bản phân phối đã build
xz từ tarball do người bảo trì cung cấp.
- Khi có thể, nên build phần mềm từ nguồn đáng tin cậy nhất.
Khi hoàn cảnh cho phép...
- NixOS là một bản phân phối dựa trên mô hình quản lý gói hàm, trong đó mỗi gói được biểu diễn bằng ngôn ngữ lập trình hàm Nix.
- NixOS có văn hóa sử dụng các kho lưu trữ mã nguồn được GitHub tự động tạo ra.
Xây dựng niềm tin với release tarball không đáng tin cậy
- NixOS từng phải sử dụng tarball do người bảo trì cung cấp ở giai đoạn bootstrap.
- Cần thiết lập các biện pháp bảo vệ cụ thể để tăng cường an ninh chuỗi cung ứng phần mềm.
1. So sánh nguồn
- Điều quan trọng là phải xác nhận source tarball mà bản phân phối sử dụng có giống với bản trên GitHub hay không.
- Tuy nhiên, release tarball thường khác với mã nguồn, và điều đó không phải là vấn đề.
2. Tận dụng khả năng tái lập đến từng bit
- Bản dựng có thể tái lập là thuộc tính của một dự án phần mềm tạo ra cùng một artifact khi được build hai lần trong cùng điều kiện.
- Khả năng tái lập đến từng bit có thể giúp xây dựng niềm tin đối với tarball do người bảo trì cung cấp nhưng không đáng tin cậy.
Kết luận
- Sự cố cửa hậu
xz nhắc lại tầm quan trọng của bảo mật chuỗi cung ứng phần mềm mã nguồn mở.
- Các hệ thống như NixOS có thể tăng cường bảo mật thông qua các bản dựng có thể tái lập.
1 bình luận
Ý kiến trên Hacker News
NixOS và các bản dựng có thể tái lập đã không phát hiện được backdoor xz. NixOS đã phân phối bản dựng xz độc hại, nhưng không có vấn đề gì vì nó không nhắm tới NixOS
Có vẻ tác giả chỉ đang tập trung vào riêng vụ việc này. Vụ Jiatan là một trường hợp đơn lẻ, và ở những kịch bản khác thì biện pháp phòng vệ vẫn có thể thất bại
NixOS không liên quan vì backdoor xz nhắm tới RedHat và Debian. Trớ trêu là backdoor lại được phát hiện bởi một nhân viên Microsoft
Bài viết nói rằng các bản phân phối nên lấy mã nguồn trực tiếp từ VCS (ví dụ: Github) thay vì tarball cài đặt truyền thống
Nếu muốn tập trung vào sự cố mà NixOS có thể đã ngăn chặn, thì nên tập trung vào sự cố CrowdStrike. Nếu có thể khởi động bằng cấu hình của ngày hôm qua thì phần lớn vấn đề đã có thể được giảm nhẹ
NixOS biên dịch mọi thứ từ mã nguồn, xác minh bằng mật mã rằng mã nguồn được dùng không bị sửa đổi, và có quan hệ phụ thuộc phiên bản giữa các gói. Debian cũng có các bản dựng có thể tái lập
"Có thể đã làm được" nghĩa là điều đó chưa được chứng minh, và trên thực tế họ đã phân phối nó
Một bài phân tích giải thích rất tốt. Tiêu đề sai lệch, dễ gây hiểu nhầm, có lẽ là "đúng về mặt kỹ thuật", nhưng theo kiểu tốt nhất cho nghĩa "có chứa backdoor"
Nếu PR của Jia Tan được chấp nhận, các artifact độc hại cũng có thể dễ dàng được đưa lên Github release giống như tarball. Thật khó hiểu khi cho rằng Github release là một biện pháp giảm thiểu bảo mật
Việc tarball phát hành khác với mã nguồn
git add&commit. Ngay cả trong trường hợp đó vẫn phải kiểm tra lịch sử commit, và vì nó trông vô hại bằng mắt thường nên cũng khó hiểu phải xác minh bằng cách nàoCó nhiều vấn đề hơn là chỉ đẩy lên các tệp kiểm thử bị đầu độc, nhưng khó hiểu Nix có thể ngăn điều đó bằng cách nào
Không rõ là tôi đã hiểu sai bài viết hay đã bỏ sót điều gì đó