Analisis Kerentanan 0day Microsoft: Mungkin Menyebabkan Ancaman Besar bagi Infrastruktur Web3
Bulan lalu, patch keamanan Microsoft menyertakan celah eskalasi hak istimewa win32k yang dieksploitasi di alam liar. Celah ini tampaknya hanya ada di sistem Windows yang lebih awal dan tidak dapat dipicu di Windows 11.
Eksploitasi kerentanan jenis ini telah ada sejak lama. Artikel ini akan menganalisis bagaimana penyerang mungkin terus memanfaatkan kerentanan ini dalam konteks peningkatan langkah-langkah mitigasi baru saat ini. Kami menyelesaikan seluruh proses analisis di lingkungan Windows Server 2016.
Vulnerabilitas 0day merujuk pada celah yang belum diungkapkan dan diperbaiki, yang dapat dimanfaatkan secara jahat tanpa terdeteksi, dan memiliki potensi kerusakan yang besar. Vulnerabilitas 0day yang ditemukan kali ini berada di tingkat sistem Windows, di mana peretas dapat memperoleh kontrol penuh atas Windows melalui celah tersebut.
Sistem yang dikendalikan oleh peretas dapat menyebabkan kebocoran informasi pribadi, keruntuhan sistem, kehilangan data, kerugian finansial, serta penyisipan perangkat lunak berbahaya. Bagi pengguna Web3, kunci pribadi dapat dicuri, dan aset digital dapat dipindahkan. Dari perspektif yang lebih luas, celah ini bahkan dapat mempengaruhi keseluruhan ekosistem Web3 yang berjalan di atas infrastruktur Web2.
Analisis Patch
Setelah menganalisis patch, tampaknya masalahnya hanya karena jumlah referensi objek diproses lebih dari satu kali. Karena kode win32k cukup tua, kami dapat menemukan beberapa komentar sumber awal yang menunjukkan bahwa kode sebelumnya hanya mengunci objek jendela, tanpa mengunci objek menu di dalam objek jendela, di mana objek menu ini mungkin telah dirujuk secara salah.
Pembuktian Konsep Eksploitasi Kerentanan ( PoC )
Kami menemukan bahwa menu yang diterima xxxEnableMenuItem() biasanya sudah terkunci di fungsi lapisan atas. Analisis lebih lanjut menunjukkan bahwa fungsi MenuItemState dalam xxxEnableMenuItem mengembalikan dua kemungkinan menu: menu utama jendela, atau submenu dalam menu( bahkan submenu dari submenu).
Dalam PoC, kami membangun struktur menu empat lapisan khusus, dan menetapkan atribut tertentu pada setiap tingkat menu, untuk melalui deteksi dan penilaian dalam fungsi xxxEnableMenuItem. Langkah kunci termasuk menghapus beberapa hubungan referensi menu, serta melepaskan objek menu tertentu saat xxxRedrawTitle mengembalikan ke lapisan pengguna.
Eksploitasi Kerentanan ( Exp )
Pemikiran keseluruhan
Kami terutama mempertimbangkan dua arah pemanfaatan: mengeksekusi kode shellcode, dan memanfaatkan primitif baca-tulis untuk memodifikasi alamat token. Mengingat berbagai faktor, kami memilih yang terakhir.
Seluruh exp dapat dipecah menjadi dua masalah kunci: bagaimana memanfaatkan kerentanan UAF untuk mengontrol nilai cbwndextra, dan bagaimana untuk mencapai primitif baca/tulis yang stabil setelah mengontrol nilai cbwndextra.
melakukan penulisan data pertama
Kami menggunakan objek nama jendela dalam kelas jendela WNDClass untuk mengalokasikan objek menu yang dibebaskan. Kuncinya adalah menemukan lokasi dalam struktur alamat yang dapat kami bangun yang bisa ditulis data secara sembarangan.
Akhirnya kami memilih untuk melakukan penulisan melalui operasi AND 2 pada sebuah flag di dalam fungsi xxxRedrawWindow. Kami menulis cb-extra dari HWNDClass dan bukan cb-extra dari objek jendela, untuk mengontrol tata letak memori dengan lebih baik.
tata memori yang stabil
Kami merancang tata letak memori dari setidaknya tiga objek HWND berukuran 0x250 byte yang berurutan, melepaskan yang tengah, dan menggunakan objek HWNDClass berukuran 0x250 byte. Objek HWND di depan dan di belakang masing-masing digunakan untuk memeriksa parameter dan sebagai media primitif baca-tulis.
Kami menentukan dengan tepat apakah objek jendela yang diminta diatur sesuai harapan dengan menggunakan alamat pegangan kernel yang bocor di memori tumpukan.
Modifikasi primitif baca-tulis
Kami menggunakan GetMenuBarInfo() untuk melakukan pembacaan sembarang, dan menggunakan SetClassLongPtr() untuk melakukan penulisan sembarang. Selain operasi penulisan yang menggantikan TOKEN, semua penulisan lainnya dilakukan dengan memanfaatkan objek kelas dari objek jendela pertama menggunakan offset.
Ringkasan
Meskipun kerentanan win32k sudah ada sejak lama, Microsoft sedang mencoba untuk merestrukturisasi kode kernel terkait menggunakan Rust, dan kerentanan semacam ini mungkin akan dihilangkan di sistem baru di masa depan.
Proses eksploitasi kerentanan kali ini relatif sederhana, tantangan utamanya adalah bagaimana mengontrol penulisan pertama. Kerentanan ini masih sangat bergantung pada kebocoran alamat pegangan tumpukan desktop, yang tetap menjadi risiko keamanan bagi sistem yang lebih tua.
Penemuan kerentanan ini mungkin berkat deteksi cakupan kode yang lebih baik.
Untuk deteksi pemanfaatan kerentanan, selain memperhatikan titik kunci dari fungsi pemicu kerentanan, juga harus melakukan deteksi yang tepat terhadap tata letak memori yang tidak biasa dan operasi baca/tulis data jendela.
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
13 Suka
Hadiah
13
7
Bagikan
Komentar
0/400
CryptoPhoenix
· 18jam yang lalu
Ini adalah kesempatan untuk membangun kembali keyakinan! Lakukan cadangan Cold Wallet dengan baik, keluar dari zona bawah untuk menjaga keselamatan sangat penting.
Lihat AsliBalas0
SignatureVerifier
· 22jam yang lalu
*sigh* sekali lagi validasi yang secara teknis tidak memadai... kapan mereka akan belajar menghitung dengan benar?
Lihat AsliBalas0
FlatTax
· 22jam yang lalu
Segera perbarui sistemnya sebelum berbicara, hati-hati akunmu bisa hilang.
Lihat AsliBalas0
MysteriousZhang
· 22jam yang lalu
Sudah win lagi, tahun berapa masih menjalankan node di win
Lihat AsliBalas0
TooScaredToSell
· 22jam yang lalu
Jangan pakai dompet komputer tua, cepat pindahkan!
Lihat AsliBalas0
LootboxPhobia
· 22jam yang lalu
Menakutkan Kunci Pribadi Dompet Dingin rasa aman++
Lihat AsliBalas0
CryptoCross-TalkClub
· 22jam yang lalu
Bear Market bercanda, bull run Perdagangan Mata Uang Kripto, memang membuat Microsoft membuatkan saya sebuah suckers cepat!
Ancaman kerentanan 0day pada sistem Win dapat membahayakan keamanan infrastruktur Web3
Analisis Kerentanan 0day Microsoft: Mungkin Menyebabkan Ancaman Besar bagi Infrastruktur Web3
Bulan lalu, patch keamanan Microsoft menyertakan celah eskalasi hak istimewa win32k yang dieksploitasi di alam liar. Celah ini tampaknya hanya ada di sistem Windows yang lebih awal dan tidak dapat dipicu di Windows 11.
Eksploitasi kerentanan jenis ini telah ada sejak lama. Artikel ini akan menganalisis bagaimana penyerang mungkin terus memanfaatkan kerentanan ini dalam konteks peningkatan langkah-langkah mitigasi baru saat ini. Kami menyelesaikan seluruh proses analisis di lingkungan Windows Server 2016.
Vulnerabilitas 0day merujuk pada celah yang belum diungkapkan dan diperbaiki, yang dapat dimanfaatkan secara jahat tanpa terdeteksi, dan memiliki potensi kerusakan yang besar. Vulnerabilitas 0day yang ditemukan kali ini berada di tingkat sistem Windows, di mana peretas dapat memperoleh kontrol penuh atas Windows melalui celah tersebut.
Sistem yang dikendalikan oleh peretas dapat menyebabkan kebocoran informasi pribadi, keruntuhan sistem, kehilangan data, kerugian finansial, serta penyisipan perangkat lunak berbahaya. Bagi pengguna Web3, kunci pribadi dapat dicuri, dan aset digital dapat dipindahkan. Dari perspektif yang lebih luas, celah ini bahkan dapat mempengaruhi keseluruhan ekosistem Web3 yang berjalan di atas infrastruktur Web2.
Analisis Patch
Setelah menganalisis patch, tampaknya masalahnya hanya karena jumlah referensi objek diproses lebih dari satu kali. Karena kode win32k cukup tua, kami dapat menemukan beberapa komentar sumber awal yang menunjukkan bahwa kode sebelumnya hanya mengunci objek jendela, tanpa mengunci objek menu di dalam objek jendela, di mana objek menu ini mungkin telah dirujuk secara salah.
Pembuktian Konsep Eksploitasi Kerentanan ( PoC )
Kami menemukan bahwa menu yang diterima xxxEnableMenuItem() biasanya sudah terkunci di fungsi lapisan atas. Analisis lebih lanjut menunjukkan bahwa fungsi MenuItemState dalam xxxEnableMenuItem mengembalikan dua kemungkinan menu: menu utama jendela, atau submenu dalam menu( bahkan submenu dari submenu).
Dalam PoC, kami membangun struktur menu empat lapisan khusus, dan menetapkan atribut tertentu pada setiap tingkat menu, untuk melalui deteksi dan penilaian dalam fungsi xxxEnableMenuItem. Langkah kunci termasuk menghapus beberapa hubungan referensi menu, serta melepaskan objek menu tertentu saat xxxRedrawTitle mengembalikan ke lapisan pengguna.
Eksploitasi Kerentanan ( Exp )
Pemikiran keseluruhan
Kami terutama mempertimbangkan dua arah pemanfaatan: mengeksekusi kode shellcode, dan memanfaatkan primitif baca-tulis untuk memodifikasi alamat token. Mengingat berbagai faktor, kami memilih yang terakhir.
Seluruh exp dapat dipecah menjadi dua masalah kunci: bagaimana memanfaatkan kerentanan UAF untuk mengontrol nilai cbwndextra, dan bagaimana untuk mencapai primitif baca/tulis yang stabil setelah mengontrol nilai cbwndextra.
melakukan penulisan data pertama
Kami menggunakan objek nama jendela dalam kelas jendela WNDClass untuk mengalokasikan objek menu yang dibebaskan. Kuncinya adalah menemukan lokasi dalam struktur alamat yang dapat kami bangun yang bisa ditulis data secara sembarangan.
Akhirnya kami memilih untuk melakukan penulisan melalui operasi AND 2 pada sebuah flag di dalam fungsi xxxRedrawWindow. Kami menulis cb-extra dari HWNDClass dan bukan cb-extra dari objek jendela, untuk mengontrol tata letak memori dengan lebih baik.
tata memori yang stabil
Kami merancang tata letak memori dari setidaknya tiga objek HWND berukuran 0x250 byte yang berurutan, melepaskan yang tengah, dan menggunakan objek HWNDClass berukuran 0x250 byte. Objek HWND di depan dan di belakang masing-masing digunakan untuk memeriksa parameter dan sebagai media primitif baca-tulis.
Kami menentukan dengan tepat apakah objek jendela yang diminta diatur sesuai harapan dengan menggunakan alamat pegangan kernel yang bocor di memori tumpukan.
Modifikasi primitif baca-tulis
Kami menggunakan GetMenuBarInfo() untuk melakukan pembacaan sembarang, dan menggunakan SetClassLongPtr() untuk melakukan penulisan sembarang. Selain operasi penulisan yang menggantikan TOKEN, semua penulisan lainnya dilakukan dengan memanfaatkan objek kelas dari objek jendela pertama menggunakan offset.
Ringkasan
Meskipun kerentanan win32k sudah ada sejak lama, Microsoft sedang mencoba untuk merestrukturisasi kode kernel terkait menggunakan Rust, dan kerentanan semacam ini mungkin akan dihilangkan di sistem baru di masa depan.
Proses eksploitasi kerentanan kali ini relatif sederhana, tantangan utamanya adalah bagaimana mengontrol penulisan pertama. Kerentanan ini masih sangat bergantung pada kebocoran alamat pegangan tumpukan desktop, yang tetap menjadi risiko keamanan bagi sistem yang lebih tua.
Penemuan kerentanan ini mungkin berkat deteksi cakupan kode yang lebih baik.
Untuk deteksi pemanfaatan kerentanan, selain memperhatikan titik kunci dari fungsi pemicu kerentanan, juga harus melakukan deteksi yang tepat terhadap tata letak memori yang tidak biasa dan operasi baca/tulis data jendela.