Versi Rusia dari artikel ini.Firmware motherboard PC modern mengikuti spesifikasi
UEFI sejak 2010. Pada 2013, sebuah teknologi baru bernama Secure Boot muncul, dimaksudkan untuk mencegah
bootkit dipasang dan dijalankan. Boot Aman mencegah eksekusi kode program yang tidak ditandatangani atau tidak dipercaya (program .efi dan pemuat boot sistem operasi, firmware perangkat keras tambahan seperti kartu video dan OPROM adaptor jaringan).
Boot Aman dapat dinonaktifkan pada motherboard ritel apa pun, tetapi persyaratan wajib untuk mengubah kondisinya adalah kehadiran fisik pengguna di komputer. Penting untuk memasukkan pengaturan UEFI saat komputer melakukan boot, dan hanya dengan demikian dimungkinkan untuk mengubah pengaturan Boot Aman.
Kebanyakan motherboard hanya menyertakan kunci Microsoft yang tepercaya, yang memaksa vendor perangkat lunak yang dapat di-boot meminta Microsoft untuk menandatangani bootloader mereka. Proses ini termasuk prosedur audit kode dan justifikasi untuk kebutuhan untuk menandatangani file mereka dengan kunci tepercaya secara global jika mereka ingin disk atau USB flash bekerja dalam mode Boot Aman tanpa menambahkan kunci mereka pada setiap komputer secara manual.
Distribusi Linux, hypervisor, disk boot antivirus, penulis perangkat lunak pemulihan komputer semua harus menandatangani bootloader mereka di Microsoft.
Saya ingin membuat flash drive USB yang dapat di-boot dengan berbagai perangkat lunak pemulihan komputer yang akan melakukan booting tanpa menonaktifkan Boot Aman. Mari kita lihat bagaimana ini bisa dicapai.
Bootloader bootloader yang ditandatangani
Jadi, untuk mem-boot Linux dengan Boot Aman diaktifkan, Anda memerlukan bootloader yang ditandatangani. Microsoft melarang untuk menandatangani perangkat lunak yang dilisensikan di bawah GPLv3 karena aturan lisensi pembatasan
tivoization , oleh karena itu
GRUB tidak dapat ditandatangani .
Untuk mengatasi masalah ini, Linux Foundation merilis
PreLoader dan Matthew Garrett membuat
shim β bootloader kecil yang memverifikasi tanda tangan atau hash dari satu file dan menjalankannya. PreLoader dan shim tidak menggunakan toko sertifikat
db UEFI , tetapi berisi basis data hash yang diizinkan (PreLoader) atau sertifikat (shim) di dalam file yang dapat dieksekusi.
Kedua program, selain secara otomatis mengeksekusi file tepercaya, memungkinkan Anda untuk menjalankan program yang sebelumnya tidak dipercaya dalam mode Boot Aman, tetapi membutuhkan kehadiran fisik pengguna. Ketika dieksekusi untuk pertama kalinya, Anda harus memilih sertifikat yang akan ditambahkan atau file yang akan di-hash dalam antarmuka grafis, setelah itu data ditambahkan ke variabel NVRAM khusus pada motherboard yang tidak dapat diakses dari sistem operasi yang dimuat . File menjadi tepercaya hanya untuk pra-pemuat ini, bukan untuk Boot Aman secara umum, dan masih tidak dapat dimuat tanpa PreLoader atau shim.
Software pertama yang tidak terpercaya boot dengan shim.Semua distribusi Linux populer modern menggunakan shim karena dukungan sertifikat, yang membuatnya mudah untuk memberikan pembaruan untuk bootloader utama tanpa perlu interaksi pengguna. Secara umum, shim digunakan untuk menjalankan GRUB2 - bootloader paling populer di Linux.
GRUB2
Untuk mencegah penyalahgunaan bootloader yang ditandatangani dengan niat jahat, Red Hat membuat tambalan untuk GRUB2 yang memblokir fungsi "berbahaya" ketika Secure Boot diaktifkan: insmod / rmmod, appleloader, linux (diganti oleh linuxefi), multiboot, xnu, memrw, iorw. Modul chainloader, yang memuat file .efi yang sewenang-wenang, memperkenalkan loader internal .efi (PE) kustomnya sendiri tanpa menggunakan fungsi UEFI LoadImage / StartImage, serta kode validasi file yang dimuat melalui shim, untuk menjaga kemampuan untuk memuat file yang dipercaya oleh shim tetapi tidak tepercaya dalam hal UEFI. Tidak jelas mengapa metode ini lebih disukai - UEFI memungkinkan seseorang untuk mendefinisikan kembali (mengaitkan) fungsi verifikasi UEFI, ini adalah cara kerja PreLoader, dan memang fitur sangat
shim hadir tetapi dinonaktifkan secara default.
Bagaimanapun, menggunakan GRUB yang ditandatangani dari beberapa distribusi Linux tidak sesuai dengan kebutuhan kita. Ada dua cara untuk membuat flash drive bootable universal yang tidak perlu menambahkan kunci dari setiap file yang dapat dieksekusi ke file tepercaya:
- Gunakan GRUB modded dengan EFI loader internal, tanpa pengubahan tanda tangan digital atau pembatasan modul;
- Gunakan pra-pemuat khusus (yang kedua) yang mengaitkan fungsi pengubahan file UEFI (EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState, EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication)
Metode kedua lebih disukai karena perangkat lunak yang dieksekusi dapat memuat dan memulai perangkat lunak lain, misalnya, shell UEFI dapat menjalankan program apa pun. Metode pertama tidak menyediakan ini, hanya memungkinkan GRUB untuk mengeksekusi file sewenang-wenang. Mari kita
modifikasi PreLoader dengan menghapus semua fitur yang tidak perlu dan tambal kode verifikasi untuk memungkinkan semuanya.
Arsitektur disk adalah sebagai berikut:
______ ______ ______ β±β β β±β β β±β β /_β β β /_β β β /_β β β β β β β β β β β EFI β β β EFI β β β EFI β β_______β β_______β β_______β BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication (GRUB2) override) βββ β β ______ β β±β β β /_β β β β β ββββββββββββ β EFI β β_______β MokManager.efi (Key enrolling tool)
Ini adalah bagaimana
Super UEFIinSecureBoot Disk telah dibuat.
Disk Super UEFIinSecureBoot adalah gambar yang dapat di-boot dengan bootloader GRUB2 yang dirancang untuk digunakan sebagai dasar untuk pemulihan flash drive USB.
Fitur utama: disk berfungsi penuh dengan mode Boot Aman UEFI diaktifkan. Ini dapat meluncurkan sistem operasi atau file .efi apa pun, bahkan dengan tanda tangan yang tidak tepercaya, tidak valid, atau hilang.
Disk dapat digunakan untuk menjalankan berbagai distribusi Linux Live, lingkungan WinPE, boot jaringan, tanpa menonaktifkan mode Boot Aman dalam pengaturan UEFI, yang mungkin nyaman untuk melakukan pemeliharaan PC dan laptop perusahaan orang lain, misalnya, dengan pengaturan UEFI dikunci dengan kata sandi.
Gambar berisi 3 komponen: shim pre-loader dari Fedora (ditandatangani dengan kunci Microsoft yang sudah diinstal sebelumnya di sebagian besar motherboard dan laptop), Linux Foundation PreLoader yang dimodifikasi (menonaktifkan verifikasi tanda tangan digital dari file yang dieksekusi), dan loader GRUB2 yang dimodifikasi.
Pada boot pertama, perlu untuk memilih sertifikat menggunakan MokManager (dimulai secara otomatis), setelah itu semuanya akan berfungsi seperti Boot Aman dinonaktifkan - GRUB memuat file .efi atau kernel Linux yang tidak ditandatangani, program EFI yang dijalankan dapat memuat semua executable yang tidak dipercaya lainnya atau driver.
Untuk mendemonstrasikan fungsi disk, gambar berisi Super Grub Disk (sekumpulan skrip untuk mencari dan mengeksekusi OS meskipun bootloader rusak), GRUB Live ISO Multiboot (sekumpulan skrip untuk memuat distro Linux Live langsung dari file ISO), One File Linux (kernel dan initrd dalam satu file, untuk pemulihan sistem) dan beberapa utilitas UEFI.
Disk ini juga kompatibel dengan UEFI tanpa Boot Aman dan dengan PC yang lebih tua dengan BIOS.
Bootloader yang ditandatangani
Saya bertanya-tanya apakah mungkin untuk mem-bypass pendaftaran kunci boot pertama melalui shim. Mungkinkah ada beberapa bootloader yang ditandatangani yang memungkinkan Anda melakukan lebih dari yang diharapkan penulis?
Ternyata - ada loader seperti itu. Salah satunya digunakan dalam
Kaspersky Rescue Disk 18 - disk boot perangkat lunak antivirus. GRUB dari disk memungkinkan Anda memuat modul (perintah insmod), dan modul dalam GRUB hanyalah kode yang dapat dieksekusi. Pra-pemuat pada disk adalah yang khusus.
Tentu saja, Anda tidak bisa hanya menggunakan GRUB dari disk untuk memuat kode yang tidak tepercaya. Penting untuk memodifikasi modul chainloader sehingga GRUB tidak menggunakan fungsi UEFI LoadImage / StartImage, tetapi sebaliknya memuat sendiri file .efi ke dalam memori, melakukan relokasi, menemukan titik masuk dan melompat ke sana. Untungnya, hampir semua kode yang diperlukan ada di
repositori Red Hat GRUB Boot Aman , satu-satunya masalahβ pengurai header
PE tidak ada. GRUB mendapat header diuraikan dari shim, dalam menanggapi panggilan fungsi melalui protokol khusus. Ini bisa dengan mudah diperbaiki dengan porting kode yang sesuai dari shim atau PreLoader ke GRUB.
Beginilah cara
Silent UEFIinSecureBoot Disk dibuat. Arsitektur disk terakhir terlihat sebagai berikut:
______ ______ ______ β±β β β±β β β±β β /_β β /_β β β /_β β β β β β β β β β EFI β β EFI β β β EFI β β_______β β_______β β_______β BOOTX64.efi grubx64.efi grubx64_real.efi (Kaspersky (FileAuthentication (GRUB2) Loader) override) βββ β β ______ β β±β β β /_β β β β β ββββββββββββ β EFI β β_______β fde_ld.efi + custom chain.mod (Kaspersky GRUB2)
Akhirnya
Pada artikel ini kami membuktikan keberadaan bootloader tidak cukup andal yang ditandatangani oleh kunci Microsoft, yang memungkinkan mem-boot kode yang tidak dipercaya dalam mode Boot Aman.
Menggunakan file Kaspersky Rescue Disk yang ditandatangani, kami mencapai boot diam dari file .efi yang tidak dipercaya dengan Boot Aman diaktifkan, tanpa perlu menambahkan sertifikat ke UEFI db atau MOK shim.
File-file ini dapat digunakan baik untuk perbuatan baik (untuk boot dari USB flash drive) dan untuk yang jahat (untuk menginstal bootkit tanpa persetujuan pemilik komputer).
Saya berasumsi bahwa sertifikat tanda tangan bootloader Kaspersky tidak akan bertahan lama, dan akan ditambahkan ke
daftar pencabutan sertifikat UEFI global , yang akan diinstal pada komputer yang menjalankan Windows 10 melalui Pembaruan Windows, memecahkan Kaspersky Rescue Disk 18 dan Disk UEFIinSecureBoot Diam. Mari kita lihat seberapa cepat ini akan terjadi.
Unduhan Disk Super UEFIinSecureBoot:
https://github.com/ValdikSS/Super-UEFIinSecureBoot-DiskUnduhan Disk UEFIinSecureBoot Diam (jaringan
ZeroNet Git Center ):
http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/Tentang ZeroNetZeroNet adalah sistem yang sangat kuat untuk desentralisasi situs web dan layanan dinamis terdistribusi. Pengguna mulai mengunduh dan menyemai data situs web setelah mengunjunginya, mengikuti prinsip BitTorrent. Tetapi tidak seperti sistem serupa lainnya, ZeroNet memungkinkan membuat blog lengkap dengan komentar, forum, hosting video, situs wiki, obrolan, email dan git.
ZeroNet memisahkan data situs web dari kode situs web: data disimpan dalam file .json dan digabungkan ke dalam basis data sqlite dengan skema yang ditentukan, yang memungkinkan untuk mengimplementasikan fitur yang membengkokkan pikiran: pencarian lokal di semua situs web yang dibuka dalam arti milidetik, semua situs nyata -waktu pembaruan aliran seperti RSS.
ZeroNet menyediakan sistem otentikasi standar yang mirip dengan dukungan OAuth, NAT, dan Tor.
Sistem ini bekerja sangat cepat, mudah digunakan, memiliki antarmuka pengguna modern dengan fitur-fitur kecil namun nyaman seperti pergantian tema malam / hari global untuk semua situs.
Saya percaya bahwa ZeroNet diremehkan dan secara diam-diam mengunggah versi disk hanya ke ZeroNet Git, untuk menarik pengguna baru.