Mayhem - serangan kerusakan bit memori untuk melewati otentikasi sudo dan OpenSSH

Para peneliti dari Worcester Polytechnic Institute (AS) telah memperkenalkan jenis serangan Mayhem baru yang menggunakan teknik distorsi bit memori akses acak dinamis Rowhammer untuk mengubah nilai variabel tumpukan yang digunakan sebagai tanda dalam program untuk memutuskan apakah otentikasi dan pemeriksaan keamanan telah dilakukan. lulus. Contoh praktis dari serangan tersebut ditunjukkan untuk melewati otentikasi di SUDO, OpenSSH dan MySQL, serta mengubah hasil pemeriksaan terkait keamanan di perpustakaan OpenSSL.

Serangan tersebut dapat diterapkan pada aplikasi yang menggunakan pemeriksaan untuk membandingkan nilai yang berbeda dari nol. Contoh kode yang rentan: int auth = 0; ... // kode verifikasi yang mengubah nilai autentikasi jika autentikasi berhasil if(auth != 0) return AUTH_SUCCESS; jika tidak, kembalikan AUTH_FAILURE;

Dalam konteks contoh ini, agar serangan berhasil, cukup merusak bit apa pun di memori yang terkait dengan variabel autentikasi 32-bit di tumpukan. Jika ada bit dalam variabel yang rusak, nilainya tidak lagi nol dan operator kondisional akan menentukan keberhasilan penyelesaian otentikasi. Pola validasi seperti ini cukup umum dalam aplikasi dan ditemukan, misalnya, di SUDO, OpenSSH, MySQL, dan OpenSSL.

Mayhem - serangan kerusakan bit memori untuk melewati otentikasi Sudo dan OpenSSH

Serangan juga dapat diterapkan pada perbandingan bentuk β€œif(auth == 1)”, tetapi dalam kasus ini implementasinya menjadi lebih rumit, karena yang diperlukan bukan hanya bit 32 yang terdistorsi, tetapi bit terakhir. Metode ini juga dapat digunakan untuk mempengaruhi nilai variabel dalam register prosesor, karena isi register dapat dipindahkan sementara ke tumpukan ketika saklar konteks, pemanggilan fungsi, atau pengendali sinyal diaktifkan. Selama periode waktu ketika nilai register berada di memori, distorsi dapat dimasukkan ke dalam memori ini dan nilai yang diubah akan dikembalikan ke register.

Mayhem - serangan kerusakan bit memori untuk melewati otentikasi Sudo dan OpenSSH

Untuk mendistorsi bit, salah satu modifikasi serangan kelas RowHammer digunakan. Karena memori DRAM adalah susunan sel dua dimensi, masing-masing terdiri dari kapasitor dan transistor, melakukan pembacaan terus menerus pada wilayah memori yang sama akan menghasilkan fluktuasi tegangan dan anomali yang menyebabkan hilangnya sedikit muatan di sel tetangga. Jika intensitas pembacaannya tinggi, sel tetangga mungkin kehilangan muatan dalam jumlah yang cukup besar dan siklus regenerasi berikutnya tidak akan punya waktu untuk memulihkan keadaan semula, yang akan menyebabkan perubahan nilai data yang disimpan di sel. . Untuk melindungi dari RowHammer, produsen chip telah menambahkan mekanisme TRR (Target Row Refresh), yang memblokir kerusakan sel dalam kasus-kasus khusus, namun tidak melindungi dari semua kemungkinan variasi serangan.

Untuk melindungi dari serangan Mayhem, disarankan untuk menggunakan perbandingan bukan evaluasi perbedaan dari nol atau kebetulan dengan satu, tetapi pemeriksaan kecocokan menggunakan nilai benih acak dengan oktet bukan nol. Dalam hal ini, untuk menetapkan nilai variabel yang diinginkan, sejumlah besar bit perlu didistorsi secara akurat, yang tidak realistis, berbeda dengan distorsi satu bit. Contoh kode yang tidak dapat diserang: int auth = 0xbe406d1a; ... // kode verifikasi yang menetapkan nilai autentikasi ke 0x23ab8701 jika autentikasi berhasil if(auth == 0x23ab8701) return AUTH_SUCCESS; jika tidak, kembalikan AUTH_FAILURE;

Metode perlindungan yang ditentukan telah digunakan oleh pengembang sudo dan disertakan dalam rilis 1.9.15 sebagai perbaikan kerentanan CVE-2023-42465. Mereka berencana untuk menerbitkan prototipe kode untuk melakukan serangan setelah perbaikan dilakukan pada proyek-proyek utama yang rentan.

Sumber: opennet.ru

Tambah komentar