1 poin oleh GN⁺ 2024-03-23 | 1 komentar | Bagikan ke WhatsApp
  • Data Memory-Dependent Prefetcher (DMP) dapat membocorkan kunci rahasia bahkan pada implementasi waktu konstan (constant-time) dengan memperlakukan nilai data dalam kode kriptografi seperti alamat
  • Pada CPU Apple m-series, ketika nilai yang dimuat dari memori terlihat seperti pointer, DMP mencoba melakukan dereferensi sehingga asumsi pemrograman waktu konstan tentang pemisahan data dan alamat menjadi goyah
  • Para peneliti mendemonstrasikan ekstraksi kunci end-to-end pada Apple m1 untuk OpenSSL Diffie-Hellman, dekripsi Go RSA, CRYSTALS-Kyber, dan CRYSTALS-Dilithium, serta mengonfirmasi perilaku DMP serupa pada m2 dan m3
  • Pada m3, bit DIT secara efektif menonaktifkan DMP, tetapi ini tidak berlaku untuk m1 dan m2, sementara bit konfigurasi HID yang ditemukan pada April 2024 sulit langsung digunakan karena tidak ada dukungan kernel macOS
  • Mitigasi mencakup menjaga perangkat lunak tetap terbaru, menggunakan bit DIT/DOIT pada CPU tertentu, input blinding, dan menghindari berbagi perangkat keras; evaluasi kerentanan memerlukan kriptanalisis dan inspeksi kode

Inti serangan GoFetch

  • GoFetch adalah serangan side-channel mikroarsitektur yang memanfaatkan Data Memory-Dependent Prefetcher (DMP)
  • Ekstraksi kunci rahasia dimungkinkan bahkan pada implementasi kriptografi yang ditulis dengan waktu konstan
  • Target yang didemonstrasikan peneliti adalah sebagai berikut
    • OpenSSL Diffie-Hellman Key Exchange
    • Go RSA decryption
    • CRYSTALS-Kyber
    • CRYSTALS-Dilithium
  • Makalah dan alat masing-masing tersedia di Paper, Tools

Cara DMP merusak asumsi waktu konstan

  • DMP pada CPU Apple m-series aktif jika data yang dimuat dari memori adalah nilai yang terlihat seperti pointer dan mencoba melakukan dereferensi
  • Pemrograman waktu konstan memisahkan data dan alamat agar cabang, loop, akses memori, dan indeks array tidak berubah berdasarkan nilai rahasia
  • Bahkan jika kode korban mematuhi aturan ini, DMP dapat membuat akses memori yang bergantung pada rahasia pada level perangkat keras
  • Akibatnya, kode yang semestinya waktu konstan dapat menunjukkan perbedaan waktu yang dapat diamati dan terekspos pada serangan ekstraksi kunci

Prosedur serangan

  • Penyerang menyusun input pilihan untuk operasi kriptografi sehingga nilai yang tampak seperti pointer hanya muncul pada status antara ketika tebakan atas sebagian kunci rahasia benar
  • Setelah itu, analisis timing cache digunakan untuk memeriksa apakah DMP melakukan dereferensi dan memverifikasi apakah tebakan itu benar
  • Jika tebakan yang benar terkonfirmasi, kumpulan bit kunci berikutnya ditebak dengan cara yang sama
  • Dengan prosedur ini, ekstraksi kunci end-to-end dimungkinkan pada implementasi kriptografi klasik maupun post-quantum

Prosesor yang terdampak dan hasil pengamatan

  • Serangan GoFetch end-to-end dilakukan pada perangkat keras dengan prosesor Apple m1
  • CPU m2 dan m3 juga menunjukkan pola aktivasi DMP serupa yang dapat dieksploitasi
  • Varian m-series lain seperti m2 Pro tidak diuji, tetapi karena menggunakan mikroarsitektur yang sama dengan model sederhana, kemungkinan juga memiliki DMP yang dapat dieksploitasi
  • Mikroarsitektur Intel 13th Gen Raptor Lake juga memiliki DMP
    • Namun, kriteria aktivasinya lebih terbatas sehingga tangguh terhadap serangan GoFetch

Perbedaan dengan Augury

  • DMP Apple m-series pertama kali ditemukan oleh Augury
  • Augury menilai bahwa dalam kondisi tertentu DMP dapat mencampur data dan alamat
  • Tim peneliti GoFetch menilai bahwa kriteria aktivasi DMP yang dirangkum Augury terlalu terbatas
  • Dalam perilaku aktual, nilai apa pun yang dimuat dari memori dapat menjadi kandidat dereferensi, sehingga berujung pada serangan end-to-end terhadap kode kriptografi waktu konstan yang nyata

Latar belakang cache dan prefetcher

  • Prosesor modern menggunakan cache untuk mengurangi latensi akses memori
  • Data yang sebelumnya diakses tetap berada di cache sehingga akses berikutnya menjadi lebih cepat
  • Penyerang yang berjalan bersama pada mesin yang sama dapat mengamati status cache bersama untuk menyimpulkan pola akses korban
  • Prefetcher umum memprediksi alamat yang akan diakses berikutnya berdasarkan pelacakan alamat akses memori sebelumnya
  • DMP menentukan data yang akan diambil dengan mempertimbangkan isi memori untuk menangani pola akses tidak teratur seperti traversal linked list
  • Perilaku ini mencampur data dan alamat memori pada level perangkat keras, sehingga seluruh stack komputasi dapat tampak seperti non-constant-time

Menentukan kerentanan dan mitigasi

  • Untuk menentukan apakah sebuah implementasi rentan, perlu diketahui kapan dan bagaimana nilai antara dapat dibuat terlihat seperti pointer secara bergantung pada rahasia
  • Evaluasi ini memerlukan kriptanalisis dan inspeksi kode, bersifat manual dan lambat, serta tidak dapat menyingkirkan metode serangan lain
  • Pada beberapa prosesor, DMP dapat dinonaktifkan
    • Pada CPU m3, pengaturan bit DIT secara efektif menonaktifkan DMP
    • Ini tidak berlaku untuk m1 dan m2
    • Pada Intel Raptor Lake, DMP dapat dinonaktifkan dengan bit DOIT
  • Pada April 2024, Hector Martin (marcan) menemukan bit konfigurasi HID SYS_APL_HID11_EL1[30] yang menonaktifkan DMP pada CPU m1 dan m2
    • Pengaturan chicken bit ini memerlukan dukungan kernel
    • Saat ini macOS belum memiliki dukungan tersebut
    • Informasi terkait ada di tulisan @marcan
  • Pengguna disarankan memakai perangkat lunak terbaru dan melakukan pembaruan rutin
  • Pengembang library kriptografi dapat mengatur bit DIT/DOIT pada CPU yang mendukung
  • Input blinding dapat membantu menghindari nilai antara yang dikendalikan penyerang pada beberapa skema kriptografi
  • Menghindari berbagi perangkat keras agar penyerang tidak dapat mengukur aktivasi DMP dapat semakin memperkuat keamanan protokol kriptografi

Pengungkapan dan pembaruan lanjutan

  • Tim peneliti mengungkapkan hasil ini kepada Apple pada 5 Desember 2023, yaitu 107 hari sebelum rilis publik
  • Pada Agustus 2024, GoFetch memenangkan Pwnie Award 2024 Best Cryptographic Attack
  • Pada Desember 2024, penelitian lanjutan melakukan reverse engineering terhadap semantik Intel DMP dan menunjukkan teknik yang tetap dapat membocorkan informasi bahkan ketika DMP melakukan dereferensi pointer yang tidak valid

1 komentar

 
GN⁺ 2024-03-23
Pendapat di Hacker News
  • Di era ketika ada core efisiensi dan semacamnya, arsitektur modern mungkin juga memerlukan core kriptografi
    Core semacam ini harus secara eksplisit memberikan jaminan terkait algoritma waktu konstan, serta tidak melakukan prefetching, prediksi cabang, dan sejenisnya
    Mirip Itanium, tetapi jika bentuknya dibatasi sebagai “prosesor kriptografi”, karena banyak fitur yang dihilangkan, secara prinsip luas silikon core itu sendiri tampaknya tidak akan besar
    Dari sudut pandang orang yang mengimplementasikan kode kriptografi, masalah seperti ini rasanya begitu berat sampai membuat ingin minum. Bahkan dalam kondisi terbaik pun ini pertarungan yang sulit; meski semuanya diimplementasikan dengan benar, berbagai fitur prosesor saat ini dan masa depan bisa merusak kode kapan saja

    • Dari sudut pandang implementor kriptografi, masalah seperti ini benar-benar membuat frustrasi
      Namun koprosesor kriptografi adalah solusi yang terlalu disruptif. Harus dibuat segunung infrastruktur untuk berpindah ke core tersebut lalu kembali lagi, berbagi memori, dan sebagainya
      Yang lebih serius, kita tidak bisa sekadar memindahkan perkalian RSA ke core itu lalu selesai. Kunci pasti pernah di-parse di suatu tempat; apakah parser juga harus berjalan di core kriptografi? Bagaimana jika masuk lewat jaringan? Kalau semua kunci dilindungi tetapi side-channel CPU membocorkan pesan terenkripsi, apakah itu tidak masalah? Apakah bisa dianggap aman karena bukan kuncinya?
      Alasan serangan seperti ini tidak terlalu terlihat pada kode non-kriptografi adalah karena menemukan target sangat berbeda-beda untuk tiap aplikasi, sedangkan pada library kriptografi semua orang sepakat bahwa kebocoran kunci itu buruk
      Pada akhirnya, perancang prosesor tidak boleh mematahkan asumsi, dan setidaknya harus berbicara dengan kami sebelum melakukannya
    • Arah yang lebih mungkin adalah peralihan mode yang dapat mematikan komponen CPU seperti ini pada bagian tertentu dari kode yang sedang dieksekusi
      Unit abstraksinya kemungkinan besar di tingkat thread
    • Bukankah itu alasan adanya Secure Enclave?
      https://support.apple.com/guide/security/secure-enclave-sec5...
    • MMU dengan bus terenkripsi sudah ada sejak 1990-an
      Namun arsitektur cloud yang dioptimalkan biaya condong ke hardware konsumen dan akhirnya menguasai pasar CPU, sehingga kini untuk aplikasi berskala besar pun pilihan realistisnya hanyalah CPU konsumen
    • Banyak arsitektur modern biasanya memiliki ekstensi kriptografi yang mempercepat beberapa algoritma umum
      Untuk memungkinkan algoritma baru, menambahkan beberapa instruksi operasi dasar kriptografi juga bisa jadi bagus
  • Menurut makalahnya, “OpenSSL melaporkan bahwa serangan side-channel lokal berada di luar model ancamannya, dan tim Go Crypto menilai tingkat keparahan serangan ini rendah”

  • Kesimpulan akhir dari serangan side-channel seperti ini adalah CPU yang tidak melakukan optimisasi apa pun, dan semua instruksi dieksekusi dengan jumlah siklus yang sama dalam semua kondisi
    Namun hal seperti itu tidak akan pernah terjadi. Tidak ada yang menginginkan CPU lambat
    Jika tidak bisa dieksploitasi dari jarak jauh, menurut saya ini bukan masalah yang perlu dikhawatirkan. Tentu saja virtualisasi cloud multi-tenant tidak bisa

    • Semua kode yang tidak tepercaya harus dilemparkan ke core eksekusi berurutan yang mengerikan
      Tanpa eksekusi spekulatif, tanpa prefetching, core seperti pipeline 5 tahap yang muncul di kelas arsitektur komputer 101
    • Karena “virtualisasi cloud multi-tenant”, saya tidak sekhawatir terhadap kerentanan serupa pada chip Intel beberapa tahun lalu
      Memang ada beberapa penyedia cloud yang menyewakan waktu komputasi Mac Mini rackmount, tetapi jumlahnya tidak banyak, dan itu pun untuk workload atau tugas build yang sangat spesifik
      Ini bisa menjadi masalah bagi orang yang membayar mahal untuk layanan semacam itu, tetapi mayoritas besar perangkat Apple Silicon sama sekali tidak akan meng-host layanan cloud
    • Karena itu, jumlah core yang banyak dan isolasi menjadi penting
      Jika kode diisolasi ke core tertentu, dengan asumsi semuanya bekerja sesuai tujuan, exploit tidak dapat membobol tenant lain
  • Untuk pertanyaan “Bisakah DMP dinonaktifkan?”, tertulis “Bisa, tetapi hanya pada beberapa prosesor. Pada CPU M3, pengaturan bit DIT secara efektif menonaktifkan DMP, tetapi tidak demikian pada M1 dan M2”
    Pasti ada chicken bit di suatu tempat untuk mematikannya, bukan?

    • Saya selalu penasaran bagaimana bit seperti ini diatur
      Apakah bisa dilakukan di Swift, atau perlu assembly?
  • Setelah membaca, tampaknya library seperti libsodium cukup menyetel bit penonaktifan sebelum operasi kriptografi sensitif pada M3 ke atas
    Selain itu, sepertinya perlu mengetahui terlebih dahulu sebagian aspek dari kunci
    Sangat keren, tetapi tidak terlihat terlalu praktis

  • Saya teringat serangan Augury dari 2022. Ini juga mengeksploitasi prefetching DMP pada CPU Apple Silicon
    [1]: https://www.prefetchers.info

    • Sebagai catatan, tiga penulis GoFetch juga terlibat dalam Augury
    • Benar, tulisan dan FAQ secara spesifik menyebutkannya
  • Mengapa Apple punya begitu banyak backdoor perangkat keras… bug murni seperti ini?

    • Memangnya kenapa cache diperlukan sejak awal? Kenapa prefetching diperlukan?
      Untuk menjawab teori konspirasi backdoor yang omong kosong itu: karena orang menginginkan CPU yang cepat, prosesor punya cache dan perbedaan waktu. Kita tidak bisa sekaligus memiliki waktu konstan dan performa cepat, dan Apple bukan satu-satunya perusahaan yang memiliki prefetching
      Berikut dokumentasi Apple tentang cara mengaktifkan operasi waktu konstan untuk kriptografi. Seolah-olah ini memang dirancang secara sengaja di hardware. Aneh sekali: https://developer.apple.com/documentation/xcode/writing-arm6...
    • Alasannya sama dengan mengapa Intel dan AMD punya Meltdown dan Spectre
  • Jika menulis routine kriptografi, gunakan library kriptografi platform atau ikuti dokumentasinya
    https://developer.apple.com/documentation/xcode/writing-arm6...

  • Sekarang pemeriksaan malware dan pemindai virus juga mulai masuk akal di Mac dan iPad
    Penyerang harus berjalan di hardware yang sama