2 poin oleh GN⁺ 2024-04-13 | 1 komentar | Bagikan ke WhatsApp
  • Timeline of events:

    • 2024.01.19: Website XZ dipindahkan ke GitHub Pages oleh maintainer baru (jiaT75)
    • 2024.02.15: build-to-host.m4 ditambahkan ke .gitignore
    • 2024.02.23: Dua "file uji" yang berisi tahapan skrip berbahaya diperkenalkan
    • 2024.02.24: XZ 5.6.0 dirilis
    • 2024.02.26: Commit di CMakeLists.txt yang menyabotase fitur keamanan Landlock
    • 2024.03.04: Backdoor menimbulkan masalah dengan Valgrind
    • 2024.03.09: Dua "file uji" diperbarui, fungsi CRC dimodifikasi, masalah Valgrind "diperbaiki"
    • 2024.03.09: XZ 5.6.1 dirilis
    • 2024.03.28: Bug ditemukan, Debian dan RedHat diberi tahu, Debian melakukan rollback XZ
    • 2024.03.29: Email dipublikasikan di mailing list OSS-security, RedHat mengonfirmasi XZ yang dibackdoor telah dikirim
    • 2024.03.30: Debian menghentikan build dan memulai proses rebuild
    • 2024.04.02: Developer utama XZ menyadari insiden backdoor tersebut
  • Nilai hash distribusi XZ yang mengandung backdoor berbahaya:

    • xz-5.6.0: Nilai hash MD5, SHA1, SHA256 disediakan
    • xz-5.6.1: Nilai hash MD5, SHA1, SHA256 disediakan

Analisis Infeksi Awal

  • Stage 1 - Skrip build-to-host yang dimanipulasi:

    • File source rilis pada awalnya tidak berbahaya, tetapi jika diunduh dari URL yang dikendalikan peretas, file build-to-host.m4 yang menjalankan kode berbahaya akan ikut disertakan
    • File .m4 ini dijalankan saat build dan memodifikasi serta mengekstrak file pertama yang ditambahkan ke folder test
  • Stage 2 - Shell script yang disuntikkan:

    • Skrip berbahaya yang disuntikkan oleh file .m4 memeriksa apakah ia berjalan di dalam proses build yang dituju di Linux
    • Menggunakan file good-large_compressed.lzma untuk menjalankan tahap berikutnya; file ini memang dikompresi secara normal, tetapi data hasil ekstraksinya mengandung data sampah
    • Mengekstrak 33.492 byte dengan perintah head/tail lalu menghapus obfuscation dengan menerapkan substitusi dasar melalui perintah tr
  • Stage 3 - Ekstraksi backdoor:

    • Shell script tahap terakhir melakukan beberapa pemeriksaan untuk memastikan ia berjalan di lingkungan yang diharapkan
    • Mengekstrak kode biner backdoor itu sendiri yang disembunyikan pada offset lain dari file good-large_compressed.lzma yang sama
    • Mengekstrak file dengan alat XZ dan mendekripsi data biner melalui serangkaian pemanggilan head menggunakan algoritma mirip RC4
    • Mengekstrak file terkompresi dengan XZ, menghapus byte awal berdasarkan nilai predefined, lalu menyimpannya sebagai liblzma_la-crc64-fast.o
    • Memodifikasi fungsi is_arch_extension_supported di crc_x86_clmul.h untuk mengubah pemanggilan __get_cpuid menjadi _get_cpuid

Analisis Backdoor Biner

  • Skenario pemuatan tersembunyi:

    • XZ menggunakan fungsi lzma_crc32 dan lzma_crc64 untuk perhitungan CRC, dan keduanya disimpan di tabel simbol ELF sebagai tipe IFUNC
    • IFUNC digunakan untuk menentukan secara dinamis apakah versi yang dioptimalkan akan dipakai
    • Backdoor disimpan sebagai object file, dan tujuan utamanya adalah agar ditautkan ke executable main saat kompilasi
    • Object file tersebut menyertakan simbol _get_cpuid; dengan menghapus satu garis bawah dari source asli, ketika kode memanggil _get_cpuid, yang sebenarnya dipanggil adalah versi backdoor
  • Analisis kode backdoor:

    • Kode backdoor awal dipanggil 2 kali, dan aktivitas berbahaya yang sesungguhnya dimulai ketika IFUNC lzma_crc64 memanggil _get_cpuid
    • Mencari alamat GOT untuk menemukan lokasi pointer cpuid, lalu menggantinya dengan pointer ke fungsi berbahaya utama
    • Tujuan utamanya adalah melakukan hook pada fungsi-fungsi tertentu agar semua koneksi ke sistem yang terinfeksi dapat dipantau
  • Perilaku inti:

    • Menargetkan fungsi libcrypto seperti RSA_public_decrypt, EVP_PKEY_set1_RSA, dan RSA_get0_key untuk di-hook
    • Memeriksa apakah proses saat ini memenuhi kriteria eksekusi dan apakah ada kill switch
    • Menggunakan struktur Trie untuk melakukan operasi string
    • Menggunakan 3 atau lebih routine symbol resolver untuk menemukan lokasi struktur ELF Symbol
    • Menyalahgunakan fitur rtdl-audit untuk membajak routine symbol resolving sehingga berhasil melakukan function hooking

Opini GN⁺

  • Artikel ini menunjukkan dengan sangat baik contoh serangan yang sangat canggih di mana malware disuntikkan ke perangkat lunak open source. Ini memberi pelajaran bahwa keunggulan open source juga bisa disalahgunakan.

  • Serangan siber dan backdoor yang menargetkan sistem Linux makin lama makin canggih. Terutama serangan melalui server SSH dapat menjadi ancaman keamanan yang serius.

  • Di sisi lain, ini juga menunjukkan kemampuan ekosistem open source untuk membersihkan dirinya sendiri. Pada akhirnya backdoor tersebut ditemukan oleh komunitas dan ditangani dengan cepat. Transparansi adalah kuncinya.

  • Penggunaan teknik seperti struktur data Trie tingkat lanjut, Symbol Resolver, dan hooking dl_audit menunjukkan evolusi teknis malware Linux. Keamanan sistem Linux juga memerlukan perhatian khusus.

  • Saat perusahaan mengadopsi perangkat lunak open source, yang wajib diverifikasi bukan hanya lisensinya tetapi juga aspek keamanannya. Penting untuk memastikan apakah distribusinya dapat dipercaya dan apakah pemantauan berkelanjutan terhadap kodenya benar-benar dilakukan.

1 komentar

 
GN⁺ 2024-04-13
Komentar Hacker News

Ringkasan:

  • Fakta bahwa penyerang mencurahkan banyak upaya pada skrip dan kode untuk menghindari deteksi menunjukkan bahwa seluruh proyek ini bisa berfungsi sebagai alternatif bagi pengalihan atau beberapa upaya lain yang berjalan secara bersamaan
  • Perlu dipertimbangkan bahwa berfokus pada SSHD dapat membuat bagian lain dari keseluruhan sistem, atau aspek teknis dan sosialnya, terabaikan
  • Bisa menjadi langkah hardening yang berguna jika setiap pustaka yang ditautkan secara dinamis memiliki GOT-nya sendiri dan tabel tersebut ditandai hanya-baca setelah penautan dinamis selesai
  • Kode sumber tampaknya dihasilkan dengan cara menjalankan disassembler, memahami apa yang dilakukan kode tersebut, lalu mengganti semuanya dengan nama yang deskriptif
  • Perlambatan dan latensi pada SSH yang disebabkan oleh bug pada backdoor akhirnya mengungkapkannya, dan menarik untuk diketahui apakah sudah ada analisis mengenai hal itu
  • Repositori xz telah muncul kembali di GitHub, dan para maintainer sedang melakukan pembersihan, seperti menghapus dukungan ifunc dan meng-commit kode yang menghasilkan file pengujian
  • Sulit untuk tidak membayangkan bahwa ada banyak backdoor yang belum ditemukan, sambil berharap tidak ada yang lolos tanpa terdeteksi seperti ini