Keamanan Serius: Bug logon Samba disebabkan oleh crypto yang sudah ketinggalan zaman

Keamanan Serius: Bug logon Samba disebabkan oleh crypto yang sudah ketinggalan zaman

Samba, sederhananya, adalah implementasi ulang sumber terbuka yang sangat berguna, mega-populer, dari protokol jaringan yang digunakan di Microsoft Windows, dan kepentingan historisnya dalam internetworking (menghubungkan dua jenis jaringan yang berbeda bersama-sama) tidak dapat diremehkan.

Pada akhir 1990-an, jaringan Microsoft melepaskan sifatnya yang buram dan eksklusif dan menjadi standar terbuka yang dikenal sebagai CIFS, kependekan dari sistem file internet umum.

Tapi tidak ada yang "umum" atau "terbuka" tentang hal itu di awal 1990-an, ketika akademisi Australia Andrew Tridgell mulai memperbaikinya dengan menerapkan sistem yang kompatibel yang memungkinkannya menghubungkan komputer Unix miliknya ke jaringan Windows, dan sebaliknya.

Saat itu, protokol tersebut secara resmi disebut sebagai SMB, kependekan dari blok pesan server (nama yang masih lebih sering Anda dengar daripada CIFS), jadi Tridge, seperti yang dikenal Andrew Tridgell, dapat dimengerti menyebut proyeknya "SMBserver", karena memang begitu.

Tapi produk komersial dengan nama itu sudah ada, jadi diperlukan moniker baru.

Saat itulah proyek tersebut dikenal sebagai Samba, nama yang mudah diingat yang dihasilkan dari pencarian kamus untuk kata-kata dalam bentuk tersebut S?M?B?.

Bahkan, samba masih kata pertama keluar dari gerbang menurut abjad di dict file yang biasa ditemukan di komputer Unix, diikuti dengan kata yang agak tidak pas scramble dan benar-benar tidak pantas scumbag:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Beberapa bug yang Anda buat, tetapi beberapa bug yang Anda dapatkan

Selama bertahun-tahun proyek Samba tidak hanya memperkenalkan dan memperbaiki bug uniknya sendiri, seperti yang umumnya dilakukan oleh proyek perangkat lunak kompleks mana pun, tetapi juga mewarisi bug dan kekurangan dalam protokol yang mendasarinya, mengingat tujuannya selalu untuk bekerja secara mulus dengan jaringan Windows.

(Sayangnya, disebut kompatibilitas bug seringkali merupakan bagian yang tidak dapat dihindari dalam membangun sistem baru yang bekerja dengan sistem yang sudah ada.)

Di akhir tahun 2022, salah satu dari "kerentanan yang diwariskan" ditemukan dan dilaporkan ke Microsoft, diberi pengenal CVE-2022-38023, dan ditambal dalam pembaruan Patch Selasa November 2022.

Bug ini dapat memungkinkan penyerang untuk mengubah konten beberapa paket data jaringan tanpa terdeteksi, meskipun menggunakan MAC kriptografi (kode otentikasi pesan) dimaksudkan untuk mencegah spoofing dan gangguan.

Khususnya, dengan memanipulasi data pada waktu masuk, penjahat dunia maya yang licik dapat melakukan serangan elevasi-of-privilege (EoP).

Mereka dapat, setidaknya secara teori, mengelabui server agar berpikir bahwa mereka telah lulus "apakah Anda memiliki kredensial Administrator?" tes, meskipun mereka tidak memiliki kredensial tersebut dan data palsu mereka seharusnya gagal dalam verifikasi kriptografinya.

Kelincahan kriptografi

Kami memutuskan untuk menulis tentang bug yang agak esoterik ini bukan karena menurut kami Anda sangat mungkin untuk dieksploitasi olehnya (walaupun terkait dengan keamanan siber, kami mengambil sikap Jangan pernah bilang tidak akan pernah), tetapi karena itu a pengingat lain mengapa kelincahan kriptografi penting.



Secara kolektif, kita membutuhkan keterampilan dan kemauan untuk meninggalkan algoritme lama untuk selamanya segera setelah mereka ditemukan cacat, dan tidak membiarkannya tergeletak tanpa batas sampai mereka berubah menjadi masalah orang lain. ("Orang lain" itu mungkin saja berubah menjadi kita, sepuluh tahun ke depan.)

Yang mengherankan, kerentanan CVE-2022-38023 ada di tempat pertama karena Windows dan Samba masih mendukung gaya perlindungan integritas berdasarkan algoritma hashing MD5 yang sudah lama tidak digunakan lagi.

Sederhananya, otentikasi jaringan menggunakan protokol Kerberos versi Microsoft masih memungkinkan data dilindungi integritas (atau checksum, untuk menggunakan istilah jargon yang biasa tetapi tidak sepenuhnya akurat) menggunakan kriptografi yang cacat.

Anda tidak boleh menggunakan MD5 lagi karena dianggap rusak: penyerang yang gigih dapat dengan mudah menghasilkan dua input berbeda yang berakhir dengan hash MD5 yang sama.

Namun, seperti yang mungkin sudah Anda ketahui, salah satu persyaratan hash apa pun yang mengklaim kualitas kriptografi adalah bahwa hal ini tidak mungkin dilakukan.

Dalam jargonnya, dua input yang memiliki hash yang sama dikenal dengan a tabrakan, dan seharusnya tidak ada trik atau pintasan terprogram untuk membantu Anda menemukannya dengan cepat.

Seharusnya tidak ada cara untuk menemukan tabrakan yang lebih baik daripada keberuntungan sederhana โ€“ mencoba berulang kali dengan file input yang selalu berubah sampai Anda mendapatkan jackpot.

Biaya sebenarnya dari tabrakan

Dengan asumsi algoritme yang andal, tanpa kelemahan yang dapat dieksploitasi, Anda akan berharap bahwa hash dengan keluaran X bit akan membutuhkan sekitar 2X-1 mencoba menemukan input kedua yang bertabrakan dengan hash file yang ada.

Bahkan jika semua yang ingin Anda lakukan adalah menemukan dua input (dua input arbitrer, terlepas dari konten, ukuran atau struktur) yang kebetulan memiliki hash yang sama, Anda akan membutuhkan sedikit lebih dari 2X / 2 mencoba sebelum Anda menabrak tabrakan.

Setiap algoritme hashing yang andal dapat "dipecahkan" lebih cepat dari itu tidak aman secara kriptografis, karena Anda telah menunjukkan bahwa proses internalnya untuk merobek-robek-memotong-dan-mengaduk-up data yang dimasukkan ke dalamnya tidak menghasilkan benar-benar hasil pseudorandom sama sekali.

Perhatikan bahwa setiap prosedur cracking yang lebih baik daripada peluang, bahkan jika itu hanya mempercepat proses pembuatan tabrakan sedikit dan oleh karena itu saat ini tidak akan menjadi risiko yang dapat dieksploitasi dalam kehidupan nyata, menghancurkan kepercayaan pada algoritme kriptografi yang mendasarinya dengan merusak klaimnya tentang kebenaran kriptografi. .

Jika ada 2X kemungkinan hasil hash yang berbeda, Anda berharap mendapatkan peluang 50:50 untuk menemukan masukan dengan hash spesifik yang telah ditentukan sebelumnya setelah sekitar setengah percobaan, dan 2X/ 2 = 2X-1. Menemukan dua file yang bertabrakan lebih mudah, karena setiap kali Anda mencoba input baru, Anda menang jika hash baru Anda bertabrakan Apa pun dari input sebelumnya yang sudah Anda coba, karena pasangan input apa pun diperbolehkan. Untuk tabrakan jenis "dua file apa pun dalam ember raksasa ini akan berfungsi", Anda mencapai peluang sukses 50:50 hanya sedikit lebih banyak daripada akar kuadrat dari jumlah kemungkinan hash, dan โˆš2X = 2X / 2. Jadi, untuk hash 128-bit seperti MD5, rata-rata Anda mengharapkan hash sekitar 2127 blok untuk mencocokkan nilai output tertentu, dan 264 blok untuk menemukan pasangan input yang bertabrakan.

Tabrakan MD5 yang cepat menjadi mudah

Seperti yang terjadi, Anda tidak dapat dengan mudah membuat dua input pseudorandom yang sama sekali berbeda, tidak terkait, yang memiliki hash MD5 yang sama.

Dan Anda tidak dapat dengan mudah mundur dari hash MD5 untuk mengungkap apa pun tentang input spesifik yang menghasilkannya, yang merupakan janji kriptografi lain yang perlu dijaga oleh hash yang andal.

Tetapi jika Anda memulai dengan dua input yang identik dan dengan hati-hati menyisipkan sepasang potongan "pembentuk tabrakan" yang sengaja dihitung pada titik yang sama di setiap aliran input, Anda dapat dengan andal membuat tabrakan MD5 dalam hitungan detik, bahkan pada laptop sederhana.

Sebagai contoh, inilah program Lua yang kami tulis yang dapat dengan mudah dipotong menjadi tiga bagian berbeda, masing-masing sepanjang 128 byte.

Ada awalan kode yang diakhiri dengan sebaris teks yang memulai komentar Lua (string dimulai --[== pada baris 8), maka ada 128 byte teks komentar yang bisa diganti dengan apapun yang kita suka, karena diabaikan saat file berjalan (baris 9 s/d 11), dan ada sufiks kode 128 byte yang menutup komentar (baris XNUMX). string dimulai --]== baris 12) dan menyelesaikan program.

Bahkan jika Anda bukan seorang pemrogram, Anda mungkin dapat melihat bahwa kode aktif membaca isi [baris 14] dari berkas kode sumber itu sendiri (dalam Lua, nilainya arg[0] pada baris 5 adalah nama file skrip yang sedang Anda jalankan), lalu mencetaknya sebagai hex dump [baris 15] , diikuti dengan hash MD5 [baris 17]:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menjalankan file pada dasarnya bersifat deskriptif sendiri, dan membuat tiga blok 128-byte menjadi jelas:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menggunakan MD5 alat penelitian bernama md5_fastcoll, awalnya dibuat oleh matematikawan Marc Stevens sebagai bagian dari gelar Masternya di bidang kriptografi pada tahun 2007, kami dengan cepat menghasilkan dua potongan 128-byte "MD5 collision-building" yang kami gunakan untuk mengganti teks komentar yang ditampilkan dalam file di atas.

Ini membuat dua file yang keduanya masih berfungsi seperti sebelumnya, karena perubahan terbatas pada komentar, yang tidak memengaruhi kode yang dapat dieksekusi di salah satu file.

Tetapi mereka tampak berbeda dalam beberapa byte, dan karenanya harus memiliki nilai hash yang sama sekali berbeda, seperti kode berikut diff (jargon untuk tumpukan perbedaan yang terdeteksi) mengungkapkan.

Kami telah mengonversi potongan pembuat tabrakan 128 byte, yang tidak masuk akal sebagai teks yang dapat dicetak, menjadi heksadesimal untuk kejelasan:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menjalankan keduanya, bagaimanapun, jelas menunjukkan bahwa mereka mewakili tabrakan hash, karena ternyata memiliki output MD5 yang sama:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Kompleksitas tabrakan dieksplorasi

MD5 adalah hash 128-bit, seperti yang dijelaskan oleh string keluaran di atas.

Jadi, seperti yang disebutkan sebelumnya, kami berharap membutuhkan sekitar 2128/2, Atau 264 mencoba rata-rata untuk menghasilkan tabrakan MD5 dalam bentuk apa pun.

Itu berarti memproses minimal sekitar 18 triliun blok hash MD5, karena 264 = 18,446,744,073,709,551,616.

Pada perkiraan tingkat hash MD5 puncak sekitar 50,000,000 blok/detik di laptop kami, itu berarti kami harus menunggu lebih dari 10,000 tahun, dan meskipun penyerang yang memiliki dana besar mungkin dengan mudah pergi 10,000 hingga 100,000 kali lebih cepat dari itu, bahkan mereka akan melakukannya menunggu berminggu-minggu atau berbulan-bulan hanya untuk satu collison acak (dan belum tentu berguna) muncul.

Namun pasangan file Lua berwajah dua di atas, yang memiliki hash MD5 yang persis sama meskipun jelas tidak identik, kami hanya perlu beberapa detik untuk mempersiapkannya.

Memang, menghasilkan 10 tabrakan berbeda untuk 10 file, menggunakan 10 awalan awal berbeda yang kami pilih sendiri, membawa kami: 14.9 detik, 4.7 detik, 2.6 detik, 2.1 detik, 10.5 detik, 2.4 detik, 2.0 detik, 0.14 detik, 8.4 detik, dan 0.43 detik.

Jelas, janji kriptografi MD5 untuk memberikan apa yang dikenal sebagai ketahanan benturan pokoknya rusakโ€ฆ

โ€ฆtampaknya dengan faktor setidaknya 25 miliar, berdasarkan pembagian waktu rata-rata yang kita harapkan untuk menunggu untuk menemukan tabrakan (ribuan tahun, seperti yang diperkirakan di atas) dengan waktu terburuk yang sebenarnya kita ukur (14.9 detik) saat berputar sepuluh tabrakan berbeda hanya untuk artikel ini.

Cacat otentikasi dijelaskan

Tapi bagaimana dengan penggunaan MD5 yang tidak aman di CVE-2022-38023?

Dalam pseudocode gaya Lua, kode autentikasi pesan rusak yang digunakan selama logon adalah dihitung seperti ini:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Untuk menjelaskan: kode autentikasi yang digunakan dihitung oleh hmac.md5() panggilan fungsi di baris 15, menggunakan apa yang dikenal sebagai a kunci hash, dalam hal ini HMAC-MD5.

Nama HMAC adalah kependekan dari konstruksi kriptografi untuk menghasilkan kode autentikasi pesan berbasis hash, dan akhiran -MD5 menunjukkan algoritma hashing yang digunakan secara internal.

HMAC menggunakan kunci rahasia, digabungkan dengan dua doa dari hash yang mendasarinya, bukan hanya satu, untuk menghasilkan kode autentikasi pesannya:

Keamanan Serius: Bug masuk Samba disebabkan oleh kripto yang sudah ketinggalan zaman, PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
Di atas, kami menggunakan MD5 secara internal, jadi ragam algoritme ini dilambangkan dengan HMAC-MD5. Konstruksi alternatif yang dianggap aman pada tahun 2023 meliputi HMAC-SHA-256 dan HMAC-SHA-512, menggunakan fungsi hash SHA-256 atau SHA-512 pada tahap merah tua.

Kuncinya memiliki beberapa bit yang dibalik terlebih dahulu, dan ditambahkan ke data yang disediakan sebelum hash pertama dimulai.

Hal ini sangat mengurangi kontrol yang dimiliki cracker kriptografi, saat mereka mencoba memprovokasi tabrakan atau perilaku non-acak lainnya dalam proses hashing, atas status internal fungsi hash saat byte pertama dari data masukan tercapai.

Khususnya, kunci rahasia mencegah penyerang memulai dengan awalan pesan pilihan mereka sendiri, seperti yang kami lakukan di twohash.lua contoh di atas.

Kemudian, setelah hash pertama dihitung, kuncinya memiliki set bit yang berbeda dibalik, ditambahkan ke nilai hash pertama, dan data input baru ini di-hash untuk kedua kalinya.

Hal ini juga mencegah penyerang memanipulasi bagian akhir perhitungan HMAC, terutama mencegah mereka menambahkan sufiks pilihan mereka sendiri ke tahap terakhir proses hashing.

Memang, meskipun Anda seharusnya tidak menggunakan MD5 sama sekali, kami tidak mengetahui adanya serangan saat ini yang dapat merusak algoritme saat digunakan dalam bentuk HMAC-MD5 dengan kunci yang dipilih secara acak.

Lubangnya ada di tengah

Oleh karena itu, lubang yang dapat dieksploitasi dalam kodesemu di atas tidak ada di salah satu baris di mana hmac.md5() fungsi digunakan.

Alih-alih, inti bugnya adalah baris 11, di mana data yang ingin Anda autentikasi dikompresi menjadi string dengan panjang tetapโ€ฆ

.. dengan mendorongnya melalui satu doa dari MD5 biasa.

Dengan kata lain, apa pun fungsi HMAC yang Anda pilih pada baris 15, dan tidak peduli seberapa kuat dan tahan benturan langkah terakhir itu, Anda tetap memiliki kesempatan untuk menyebabkan benturan hash pada baris 11.

Sederhananya, jika Anda tahu data yang seharusnya masuk ke chksum() berfungsi untuk diautentikasi, dan Anda dapat menggunakan pembuat tabrakan untuk menemukan blok data yang berbeda dengan hash MD5 yang samaโ€ฆ

โ€ฆ baris 11 berarti Anda akan berakhir dengan nilai masukan yang sama persis (variabel signdat dalam pseudocode) didorong ke langkah HMAC akhir yang aman seperti yang Anda suka.

Oleh karena itu, meskipun Anda mungkin menggunakan fungsi intisari pesan kunci yang kuat pada akhirnya, Anda tetap dapat mengautentikasi hash MD5 yang berasal dari data palsu.

Lebih sedikit akan lebih banyak

Seperti milik Samba buletin keamanan kompak menggambarkan masalah:

Kelemahannya [โ€ฆ] adalah secure checksum dihitung sebagai HMAC-MD5(MD5(DATA),KEY), artinya penyerang aktif yang mengetahui data plaintext dapat membuat pilihan yang berbeda DATA, dengan checksum MD5 yang sama, dan gantikan ke aliran data tanpa terdeteksi.

Ironisnya, meninggalkan MD5(DATA) bagian dari rumus HMAC di atas, yang sekilas tampak meningkatkan keseluruhan proses โ€œpencampuranโ€, akan meningkatkan ketahanan benturan.

Tanpa kompresi MD5 di tengah, Anda perlu menemukan tabrakan di HMAC-MD5 itu sendiri, yang mungkin tidak mungkin dilakukan pada tahun 2023, bahkan dengan dana pemerintah yang hampir tidak terbatas, setidaknya tidak dalam masa sesi jaringan yang Anda coba untuk berkompromi.

Kenapa lama sekali?

Sekarang, Anda mungkin bertanya-tanya, seperti kami, mengapa bug ini tidak ditemukan, atau setidaknya tidak ditambal, begitu lama.

Setelah semua, RFC 6151, yang berasal dari tahun 2011, dan memiliki judul yang terdengar signifikan Memperbarui Pertimbangan Keamanan untuk Algoritma MD5 Message-Digest dan HMAC-MD5, menyarankan sebagai berikut (penekanan kami, lebih dari satu dekade kemudian):

Serangan pada HMAC-MD5 tampaknya tidak menunjukkan kerentanan praktis saat digunakan sebagai kode autentikasi pesan. Oleh karena itu, mungkin tidak mendesak untuk menghapus HMAC-MD5 dari protokol yang ada. Namun, sejak MD5 tidak boleh digunakan untuk tanda tangan digital, untuk desain protokol baru, ciphersuite dengan HMAC-MD5 tidak boleh disertakan.

Tampaknya, bagaimanapun, karena sebagian besar platform server SMB baru-baru ini telah menonaktifkan otentikasi HMAC-MD5 ketika pengguna mencoba masuk, klien SMB yang masih mendukung mode tidak aman ini umumnya tidak pernah menggunakannya (dan akan tetap gagal jika mereka dicoba).

Klien secara implisit tampaknya "dilindungi", dan kode yang tidak aman tampaknya sama baiknya dengan tidak berbahaya, karena otentikasi yang lemah tidak diperlukan atau digunakan.

Jadi masalah potensial tidak pernah mendapat perhatian yang layak.

Sayangnya, "keamanan dengan asumsi" semacam ini gagal sepenuhnya jika Anda kebetulan menemukan (atau terpikat) server yang menerima tidak aman ini chksum() algoritma selama logon.

"Masalah downgrade" semacam ini bukanlah hal baru: pada tahun 2015, para peneliti merancang yang terkenal FREAK dan KEMACETAN serangan, yang dengan sengaja menipu klien jaringan untuk menggunakan apa yang disebut cipher EKSPOR, yang merupakan mode enkripsi yang sengaja dilemahkan yang secara aneh dipaksakan oleh pemerintah AS oleh undang-undang abad lalu.

Seperti yang kami tulis saat itu:

Panjang kunci EKSPOR dipilih agar hampir dapat dipecahkan pada tahun 1990-an, tetapi tidak pernah diperpanjang untuk mengimbangi kemajuan dalam kecepatan prosesor.

Itu karena cipher ekspor ditinggalkan oleh AS sekitar tahun 2000.

Itu adalah ide konyol sejak awal: perusahaan AS baru saja mengimpor perangkat lunak kriptografi yang tidak memiliki batasan ekspor, dan merugikan industri perangkat lunak mereka sendiri.

Tentu saja, begitu pembuat undang-undang menyerah, ciphersuite EKSPOR menjadi tidak berguna, jadi semua orang berhenti menggunakannya.

Sayangnya, banyak toolkit kriptografi, termasuk OpenSSL dan Microsoft SChannel, menyimpan kode untuk mendukungnya, sehingga Anda (atau, yang lebih mengkhawatirkan, penjahat yang berpengetahuan luas) tidak berhenti menggunakannya.

Kali ini, penyebab utama di antara server yang masih menggunakan proses MD5-plus-HMAC-MD5 yang rusak ini tampaknya adalah jajaran NetApp, di mana beberapa produk tampaknya terus (atau sampai saat ini) mengandalkan algoritme berisiko ini.

Oleh karena itu, terkadang Anda mungkin masih melalui proses logon jaringan yang rentan, dan berisiko terkena CVE-2022-38023, bahkan mungkin tanpa menyadarinya.

Apa yang harus dilakukan?

Bug ini akhirnya ada ditangani oleh, setidaknya secara default, di rilis terbaru Samba.

Sederhananya, Samba versi 4.17.5 sekarang memaksa dua pilihan reject md5 clients = yes dan reject md5 servers = yes.

Ini berarti bahwa setiap komponen kriptografi dalam berbagai protokol jaringan SMB yang melibatkan algoritme MD5 (walaupun secara teoritis aman, seperti HMAC-MD5), adalah dilarang secara default.

Jika Anda benar-benar membutuhkannya, Anda dapat mengaktifkannya kembali untuk mengakses server tertentu di jaringan Anda.

Pastikan saja, jika Anda membuat pengecualian yang telah secara resmi disarankan oleh standar internet selama lebih dari satu dekadeโ€ฆ

โ€ฆbahwa Anda menetapkan sendiri tanggal di mana Anda akhirnya akan menghentikan opsi non-default itu selamanya!

Serangan kriptografi hanya menjadi lebih pintar dan lebih cepat, jadi jangan pernah mengandalkan protokol dan algoritme yang sudah ketinggalan zaman hanya dengan "tidak digunakan lagi".

Lepaskan semuanya dari kode Anda sama sekali, karena jika tidak ada sama sekali, Anda TIDAK BISA menggunakannya, dan Anda tidak dapat tertipu untuk menggunakannya oleh seseorang yang mencoba memikat Anda ke dalam rasa tidak aman.


Stempel Waktu:

Lebih dari Keamanan Telanjang