Kebocoran kata sandi (dan banyak lagi!) di macOS
Pengantar
Tulisan ini menjelaskan kerentanan CVE-2024-54471 yang disertakan dalam pembaruan keamanan Apple. Kerentanan ini telah ditambal di macOS Sequoia 15.1, macOS Sonoma 14.7.1, macOS Ventura 13.7.1. Jika Anda menggunakan perangkat macOS, disarankan untuk memperbarui ke versi terbaru.
Apa itu kernel?
Dalam sistem operasi, kode yang berkomunikasi dengan perangkat keras dan menyediakan model multitasking untuk aplikasi disebut kernel. Kernel macOS adalah XNU, sebuah kernel hibrida yang mencakup varian kernel BSD dan kernel Mach.
Sejarah Mach
Kernel Mach sangat terkait dengan perang Unix pada tahun 1980-an dan 90-an. Mach dimulai sebagai proyek riset sistem operasi di Carnegie Mellon University, digunakan dalam sistem operasi NeXTSTEP, yang pada akhirnya menjadi fondasi macOS.
Mengapa Mach?
Mach dikembangkan untuk mengurangi kompleksitas dalam desain dan penggunaan sistem Unix. Mach terdiri dari empat abstraksi dasar, yang masih digunakan di macOS modern.
Arsitektur Mach
Empat abstraksi
- Task: lingkungan tempat thread dapat berjalan, dan merupakan unit dasar alokasi sumber daya.
- Thread: unit dasar pemanfaatan CPU, yang beroperasi dengan penghitung program independen di dalam task.
- Port: saluran komunikasi untuk pesan, yang dilindungi oleh kernel.
- Pesan: sekumpulan objek data yang digunakan untuk komunikasi antarthread.
Task, port, dan hak port
Port hanya ada di ruang kernel, dan diekspos ke ruang pengguna sebagai hak port. Beberapa task dapat memiliki hak kirim ke suatu port, tetapi hak terima hanya dapat dimiliki oleh satu task.
Struktur pesan
Setiap pesan Mach terdiri dari header, deskriptor opsional, payload arbitrer, dan trailer yang ditambahkan oleh kernel.
Cara memperoleh hak kirim
macOS memiliki bootstrap server, yang memegang hak terima atas port yang semua task miliki hak kirimnya. Klien dapat meminta hak kirim ke layanan Mach dengan nama tertentu kepada bootstrap server.
Mach Interface Generator (MIG)
Pengantar
MIG adalah alat untuk menghasilkan antarmuka fungsional untuk pengiriman dan penerimaan pesan Mach. Ini menyediakan antarmuka bergaya RPC berbasis pesan yang meningkatkan keamanan memori.
Detail teknis
MIG adalah pembungkus untuk pesan Mach; setiap fungsi disebut routine, dan kumpulan routine disebut subsystem. Subsystem diindeks ke field ID pesan.
Kerentanan pada server MIG
Keamanan server MIG
Jika server MIG tidak memverifikasi pengirim pesan, task yang memiliki hak kirim dapat memanggil routine server.
Menemukan server MIG
Anda dapat menggunakan alat CLI ipsw untuk mencari biner yang menggunakan simbol NDR_record. Ini berguna untuk menemukan server dan klien MIG.
Kerentanan di NetAuthAgent
Pengantar NetAuthAgent
NetAuthAgent adalah daemon yang menangani kredensial server file di macOS. Sebelum kerentanan ini ditambal, daemon ini akan memberikan kredensial server jika diminta.
Cara kerja NetAuthAgent
NetAuthAgent menggunakan Keychain macOS untuk menyimpan kredensial. Keychain adalah pengelola rahasia terpusat, dan setiap entri memiliki access control list-nya sendiri.
Server MIG NetAuthAgent
NetAuthAgent mengekspos server MIG yang terdaftar di bootstrap server dengan nama com.apple.netauth.user.gui. Server ini menyediakan routine yang dapat membaca, membuat, dan menimpa kredensial.
Dampak kerentanan
Paparan token API iCloud
Kerentanan ini dapat mengekspos token API iCloud, sehingga penyerang dapat membocorkan informasi pengguna atau melacak lokasi perangkat lain.
Apa yang seharusnya dilakukan Apple
Tulisan ini mencakup pembahasan tentang langkah-langkah yang seharusnya diambil Apple untuk mengatasi kerentanan ini.
1 komentar
Komentar Hacker News
Tulisan yang ditulis dengan baik. Ini mengingatkan pada insiden zero-day yang tampaknya sempat coba ditutupi Apple sampai tingkat tertentu. Itu adalah insiden ketika login root bisa dilewati dengan "mencoba kata sandi kosong dua kali". Kejadian ini sekitar tahun 2017 atau 2018
"ACLs don’t": <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>
Jika sebuah proses mengekspos mekanisme yang memungkinkan proses lain mem-proxy kueri keychain, hal itu dapat melemahkan keamanan seluruh sistem
Ada sedikit koreksi pada artikelnya
Butuh 8 jam, tetapi postingan ini sekarang tidak lagi berada di 5 besar halaman depan (saat ini #27, masih di halaman depan tetapi di bagian bawah). Terima kasih untuk semua komentarnya
Saya penasaran apakah penulis menyediakan kode PoC yang benar-benar berfungsi. Saya ingin menguji langkah mitigasinya. Saya melihat kode contohnya, tetapi tampaknya tidak lengkap
Artikel yang sangat menarik. Saya tidak tahu ada begitu banyak cerita di balik pembuatan kernel Mach dan Darwin
Saat ini Mach terasa seperti sumber bug yang andal di macOS. Saya tahu Apple bekerja keras untuk mengunci semuanya, tetapi saya penasaran apakah ada jalur untuk sepenuhnya keluar dari Mach
[dead]