11 điểm bởi GN⁺ 2024-03-30 | 8 bình luận | Chia sẻ qua WhatsApp
  • Trong quá trình cài đặt Debian sid, đã quan sát thấy một số dấu hiệu bất thường liên quan đến liblzma (một phần của gói xz), như mức sử dụng CPU tăng khi đăng nhập SSH và lỗi valgrind
  • Phát hiện nguyên nhân của vấn đề là kho lưu trữ thượng nguồn và tarball của xz đã bị nhiễm backdoor. Một phần của backdoor chỉ tồn tại trong tarball được phát hành
  • Script có trong tarball được chạy ở cuối configure và khi đáp ứng một số điều kiện nhất định, nó sẽ sửa đổi $builddir/src/liblzma/Makefile để chèn mã độc.

Backdoor trong kho lưu trữ

  • Phần chính của backdoor tồn tại ở dạng mã hóa trong thư mục tests/files của kho lưu trữ.
  • Các tệp này không được dùng cho bài kiểm thử của phiên bản 5.6.0, và ở phiên bản 5.6.1 đã có nỗ lực khắc phục lỗi valgrind và sự cố crash do backdoor gây ra.

Hệ thống bị ảnh hưởng

  • Script backdoor được gọi lần đầu sau configure và chỉ sửa đổi quá trình build trong các điều kiện cụ thể (ví dụ: hệ thống Linux x86-64, dùng gcc và GNU linker, đang build gói Debian hoặc RPM).

Ảnh hưởng đến máy chủ openssh

  • Khi dùng liblzma đã cài backdoor, việc đăng nhập qua SSH trở nên chậm hơn.
  • openssh không trực tiếp dùng liblzma, nhưng một số bản phân phối gồm cả Debian áp dụng bản vá cho openssh để hỗ trợ thông báo systemd, và libsystemd phụ thuộc vào lzma.

Phân tích mã đã bị chèn

  • Phân tích này được thực hiện từ góc nhìn của một người quan sát, không phải nhà nghiên cứu bảo mật hay chuyên gia dịch ngược.
  • Backdoor chặn việc thực thi thông qua ifunc resolver, và trong quá trình khởi tạo của sshd, nó phân giải symbol rồi thay đổi symbol RSA_public_decrypt sang mã của chính nó.

Ảnh hưởng đến sshd

  • RSA_public_decrypt@....plt bị đổi để trỏ tới mã backdoor, khiến mã backdoor được gọi trong quá trình đăng nhập bằng khóa công khai.
  • Từ đó, nhiều khả năng có thể bỏ qua xác thực hoặc cho phép thực thi mã từ xa.

Báo cáo lỗi

  • Không báo cáo lỗi vì nghi ngờ có sự can dự của kho lưu trữ thượng nguồn.
  • Red Hat đã gán mã CVE-2024-3094 cho vấn đề này.

Phát hiện cài đặt dễ bị tấn công

  • Có cung cấp một script để phát hiện liệu binary ssh của hệ thống có dễ bị tấn công hay không.

8 bình luận

 
[Bình luận này đã bị ẩn.]
 
depth221 2024-03-30

Mọi điều tôi biết về backdoor xz
Bài viết do Andres Freund, người đã phát hiện ra backdoor này, chấp bút.

 
edunga1 2024-04-01

Thật đáng kinh ngạc vì họ đã hành động rất có chủ đích;; quá trình này cứ như một bộ phim truyền hình.

 
carnoxen 2024-03-30

Bị lăng trì cũng đáng.

 
roxie 2024-03-31

Tại sao?

 
keepworking 2024-04-01

Vì đây là hành vi cố ý cài backdoor vào mã nguồn mở... trong quá trình đó họ còn âm thầm tiến hành cả chiến dịch thao túng dư luận nữa.
Trước đây cũng từng có trường hợp cố tình chèn lỗ hổng vào kernel Linux, thật sự thấy chua chát.

 
roxie 2024-04-01

À, giờ thì tôi có vẻ đã hiểu được sắc thái đó rồi, cảm ơn bạn.

 
GN⁺ 2024-03-30
Ý kiến trên Hacker News
  • Liên kết liên quan:

  • Tóm tắt:

    • Tác giả backdoor đã liên lạc suốt nhiều tuần để đưa xz 5.6.x vào Fedora 40 & 41. Mọi người đã phối hợp để xử lý sự cố valgrind do backdoor này gây ra, nhưng cuối cùng mới phát hiện chính backdoor là nguyên nhân của vấn đề. Sau khi thời hạn cấm công bố vô tình bị phá vỡ, họ đã phải khẩn cấp xử lý sự việc.
    • Một trong các tác giả backdoor đã trực tiếp vô hiệu hóa một tính năng trong oss-fuzz mà backdoor phụ thuộc vào, nhằm ngăn việc bị phát hiện tình cờ.
    • Tác giả backdoor đã thêm tệp SECURITY.md vào dự án xz-java. Tệp này hướng dẫn rằng nếu phát hiện lỗ hổng bảo mật thì không được công khai mà phải báo cáo riêng. Nhìn từ góc độ khác, điều này có thể được hiểu là ý đồ câu giờ để tác giả điều chỉnh exploit của mình và tận dụng mục tiêu.
    • openssh không trực tiếp sử dụng liblzma, nhưng Debian và nhiều bản phân phối khác đã áp dụng bản vá cho openssh để hỗ trợ thông báo systemd. Vì vậy libsystemd trở nên phụ thuộc vào liblzma, tạo thêm phụ thuộc cho các daemon quan trọng về bảo mật như openssh và làm tăng rủi ro tấn công chuỗi cung ứng.
    • Những điểm chính cần kiểm tra đối với những ai đang hoang mang:
      • Có đang dùng phiên bản gần đây của liblzma5 (5.6.0 hoặc 5.6.1) hay không. Đây là phiên bản chỉ mới được thêm vào khoảng một tháng gần đây.
      • Có đang dùng bản phân phối Linux dựa trên Debian hoặc RPM hay không. Có vẻ đây là một nỗ lực nhằm làm cho việc reverse engineering trở nên khó hơn.
      • Có đang chạy OpenSSH sshd trên systemd hay không. OpenSSH đã được vá trên một số bản phân phối sẽ dùng libsystemd cho chức năng ghi log, và điều này kéo theo liblzma5 dễ bị tấn công.
      • Debian testing đã có phiên bản 5.6.1+really5.4.5-1, nhưng thực chất đây là bản cũ 5.4 được đóng gói lại dưới số phiên bản mới.
    • Nếu muốn giấu thứ gì đó đáng ngờ trong GNU autoconf, thì nên giấu ở đó chứ không phải trong một script kiểu "curl | sh". Người phát tán trong vụ việc lần này trước đây cũng từng phụ trách phát hành và đã bắt đầu commit từ năm 2022. Có nhiều commit chứa thay đổi thực sự, và cũng có commit ở các dự án liên quan như libarchive. Việc cài được backdoor này đã cần rất nhiều công sức.
    • Vài năm trước có người viết một thư viện Go để bọc mã C của xz, cho phép nén xz từ Go. Khoảng một tuần trước, người đó nhận được PR đầu tiên cho repo của mình để nâng cấp lên 5.6.1. Đây là một tài khoản GitHub khác với tài khoản ở upstream.
    • Có một người đóng góp, không phải nhà nghiên cứu bảo mật hay reverse engineer, nhưng rất thích viết bài kỹ thuật. Bản báo cáo tóm tắt phát hiện của anh ấy được xem là một mẫu rất tốt cho những người đóng góp ngoài giới debug chính thống, vốn thường ngại chia sẻ.
    • Nếu hình dung một nỗ lực cài backdoor tinh vi hơn đối với xz(1), có lẽ nó đã không bị phát hiện nhanh như vậy. xz được dùng gần như ở khắp mọi nơi. Có thể tạo ra một phiên bản xz chỉ chọn lọc sửa đổi những phần rất nhỏ của các tệp như tarball phần mềm .tar.xz được dùng làm nền tảng cho một quy trình build cụ thể. Mục tiêu sẽ là các tarball phân phối nhị phân đã biên dịch sẵn, chứ không phải tarball mã nguồn.