Versi Rusia dari artikel ini.Pendahuluan
Firmware motherboard komputer modern berfungsi sesuai dengan spesifikasi
UEFI , dan sejak 2013 mereka mendukung teknologi otentikasi program yang diunduh dan driver Secure Boot, yang dirancang untuk melindungi komputer dari
bootkit . Boot Aman memblokir eksekusi kode program yang tidak ditandatangani atau tidak dipercaya: .efi-file program dan boot loader dari sistem operasi, firmware dari peralatan tambahan (kartu video OPROM, adaptor jaringan).
Boot Aman dapat dinonaktifkan pada motherboard toko mana pun, tetapi persyaratan fisik untuk mengubah pengaturannya adalah keberadaan fisik di komputer. Anda harus masuk ke pengaturan UEFI saat komputer dinyalakan, dan hanya dengan demikian dimungkinkan untuk menonaktifkan teknologi atau mengubah pengaturannya.
Sebagian besar motherboard hanya memiliki kunci Microsoft yang tepercaya, itulah sebabnya pencipta perangkat lunak boot terpaksa menghubungi Microsoft untuk tanda tangan bootloader, menjalani prosedur audit, dan membenarkan perlunya tanda tangan global dari file mereka jika mereka menginginkan drive atau flash drive untuk berjalan secara tidak perlu. nonaktifkan Boot Aman atau tambahkan kunci mereka secara manual di setiap komputer.
Microsoft harus menandatangani pengunduh untuk pengembang distribusi Linux, hypervisor, disk boot antivirus, dan program pemulihan komputer.
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 diterapkan.
Pengunduh Bootloader yang Ditandatangani
Jadi, untuk mem-boot Linux dengan Boot Aman diaktifkan, Anda memerlukan bootloader yang telah ditandatangani. Microsoft telah melarang penandatanganan perangkat lunak yang dilisensikan di bawah GPLv3 karena larangan
tivoisasi oleh aturan lisensi, sehingga
GRUB tidak akan dapat menandatangani .
Sebagai tanggapan, Linux Foundation merilis
PreLoader , dan Matthew Garrett menulis
shim , bootloader kecil yang memverifikasi tanda tangan atau hash dari unduhan berikutnya. PreLoader dan shim tidak menggunakan sertifikat
UEFI db , tetapi berisi basis data hash yang diizinkan (PreLoader) atau sertifikat (shim) di dalamnya.
Kedua program, selain mengunduh file tepercaya secara otomatis, memungkinkan Anda untuk mengunduh file yang sebelumnya tidak dipercaya dalam mode Boot Aman, tetapi memerlukan kehadiran fisik pengguna: pada permulaan pertama, Anda perlu memilih sertifikat tambahan atau file hash dalam antarmuka grafis, setelah itu data dimasukkan ke dalam variabel NVRAM khusus motherboard yang tidak tersedia untuk diubah dari sistem operasi yang dimuat. File menjadi tepercaya hanya untuk prapemuat ini, dan tidak untuk Boot Aman secara umum, dan Anda tidak dapat menjalankannya tanpa PreLoader / shim.
Diperlukan tindakan saat memulai program yang tidak terpercaya untuk pertama kali melalui shim.Semua distribusi Linux populer saat ini menggunakan shim, karena dukungan sertifikat, yang membuatnya mudah untuk memperbarui bootloader berikutnya tanpa perlu interaksi pengguna. Biasanya, shim digunakan untuk menjalankan GRUB2, bootloader paling populer di Linux.
GRUB2
Untuk mencegah penyerang diam-diam melakukan bisnis dengan bantuan bootloader yang ditandatangani dari beberapa kit distribusi, 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 sewenang-wenang, dilengkapi dengan loader .efi (PE) sendiri, tanpa menggunakan perintah UEFI LoadImage / StartImage, serta kode validasi file yang diunduh melalui shim, sehingga kemampuan untuk mengunduh file yang dipercaya untuk shim tetapi tidak dipercaya. dalam hal UEFI. Mengapa mereka melakukan itu tidak jelas; UEFI memungkinkan Anda untuk mendefinisikan kembali (mengaitkan) fungsi memeriksa gambar yang diunduh, ini adalah cara kerja PreLoader, dan shim sendiri memiliki
fungsi seperti itu , tetapi dinonaktifkan secara default.
Dengan satu atau lain cara, menggunakan GRUB yang ditandatangani dari beberapa distribusi Linux akan gagal. Ada dua cara untuk membuat flash drive USB universal yang dapat di-boot yang tidak perlu menambahkan kunci dari setiap file yang diunduh ke yang tepercaya:
- Menggunakan GRUB yang dimodifikasi yang mengunduh file EFI sendiri, tanpa memeriksa tanda tangan digital, dan tanpa memblokir modul;
- Menggunakan preloader Anda sendiri (kedua) menggantikan fungsi verifikasi tanda tangan digital UEFI (EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState, EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication)
Opsi kedua lebih disukai - program yang tidak dipercaya yang diunduh juga dapat mengunduh program yang tidak tepercaya (misalnya, Anda dapat mengunduh file melalui UEFI Shell), dan dalam versi pertama, hanya GRUB sendiri yang dapat mengunduh semuanya.
Kami memodifikasi PreLoader , menghapus kode tambahan dari itu dan memungkinkan peluncuran file apa pun.
Total, arsitektur flash drive adalah sebagai berikut:
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ → /_│ │ → /_│ │ │ │ → │ │ → │ │ │ EFI │ → │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication (GRUB2) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ MokManager.efi (Key enrolling tool)
Jadi ada
Super UEFIinSecureBoot Disk .
Super UEFIinSecureBoot Disk - gambar disk dengan bootloader GRUB2, yang dirancang untuk menjalankan program dan sistem operasi yang tidak ditandai dalam mode Boot Aman UEFI.
Disk dapat digunakan sebagai dasar untuk membuat drive USB dengan utilitas pemulihan komputer, untuk meluncurkan berbagai distribusi langsung Linux dan WinPE, booting dari jaringan, tanpa menonaktifkan Boot Aman dalam pengaturan motherboard, yang dapat dengan mudah digunakan saat melayani komputer atau perusahaan orang lain laptop, misalnya, dengan kata sandi yang diatur untuk mengubah pengaturan UEFI.
Gambar tersebut terdiri dari tiga komponen: prapemuat shim dari Fedora (ditandatangani dengan kunci Microsoft yang sudah diinstal pada sebagian besar motherboard dan laptop), preloader Linux Foundation PreLoader yang dimodifikasi (untuk menonaktifkan verifikasi tanda tangan saat memuat file .efi), dan bootloader GRUB2 yang dimodifikasi.
Selama boot pertama dari disk di komputer dengan Boot Aman, Anda harus memilih sertifikat melalui menu MokManager (dimulai secara otomatis), setelah itu bootloader akan berfungsi seolah-olah Boot Aman mati: GRUB memuat file .efi atau kernel Linux yang tidak ditandatangani, program EFI yang diunduh dapat menjalankan program dan driver lain dengan tanda tangan yang hilang atau tidak tepercaya.
Untuk menunjukkan pengoperasian, gambar berisi Super Grub Disk (skrip untuk mencari dan memuat sistem operasi yang diinstal, bahkan jika bootloadernya rusak), GRUB Live ISO Multiboot (skrip untuk boot LiveCD Linux yang nyaman langsung dari ISO, tanpa membongkar dan memproses awal), One File Linux (kernel dan initrd dalam satu file, untuk pemulihan sistem), dan beberapa utilitas UEFI.
Drive ini kompatibel dengan UEFI tanpa Boot Aman, serta komputer lama dengan BIOS.
Pengunduh yang Ditandatangani
Saya bertanya-tanya apakah mungkin entah bagaimana menyiasati kebutuhan untuk menambahkan kunci melalui shim pada awal pertama. Mungkin ada beberapa pengunduh bertanda tangan yang memungkinkan Anda melakukan lebih dari yang diharapkan penulis?
Ternyata - ada loader seperti itu. Salah satunya digunakan di
Kaspersky Rescue Disk 18 - disk boot dengan perangkat lunak antivirus. GRUB dari disk memungkinkan Anda memuat modul (perintah insmod), sedangkan modul di GRUB memungkinkan Anda memuat kode yang dapat dieksekusi biasa. Pra-pemuat disk adalah asli.
Tentu saja, hanya karena GRUB dari disk tidak memuat kode yang tidak dipercaya. Penting untuk memodifikasi modul chainloader sehingga GRUB tidak menggunakan fungsi UEFI LoadImage / StartImage, tetapi secara mandiri memuat file .efi ke dalam memori, melakukan relokasi, menemukan titik masuk dan mengikutinya. Untungnya, hampir semua kode yang diperlukan ada di repositori
GRUB dengan dukungan Red Hat Secure Boot , satu-satunya masalah: tidak ada kode penguraian header
PE , header mem-parsing dan mengembalikan shim, sebagai respons terhadap panggilan fungsi melalui protokol khusus. Ini dapat dengan mudah diperbaiki dengan porting kode yang sesuai dari shim atau PreLoader ke GRUB.
Jadi ada Disk UEFIinSecureBoot
Diam . Arsitektur disk yang dihasilkan adalah 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)
Kesimpulan
Pada artikel ini, kami menemukan bahwa tidak ada cukup bootloader terpercaya yang ditandatangani dengan kunci Microsoft yang mengaktifkan mode Boot Aman.
Dengan menggunakan file Kaspersky Rescue Disk yang telah ditandatangani, kami mencapai unduhan "diam" dari file .efi yang tidak tepercaya dengan Boot Aman yang diaktifkan, tanpa perlu menambahkan sertifikat ke UEFI db atau MOK shim.
File-file ini dapat digunakan baik untuk perbuatan baik (untuk mengunduh dari USB flash drive) dan untuk yang jahat (untuk menginstal bootkit tanpa sepengetahuan pemilik komputer).
Saya berasumsi bahwa sertifikat Kaspersky tidak akan bertahan lama, dan akan ditambahkan ke
daftar global sertifikat UEFI yang dicabut , yang akan diinstal pada komputer yang menjalankan Windows 10 melalui Pembaruan Windows, yang akan mengganggu pemuatan Kaspersky Rescue Disk 18 dan Disk UEFIinSecureBoot yang Diam. Mari kita lihat seberapa cepat ini akan terjadi.
Unduh Super UEFIinSecureBoot Disk:
https://github.com/ValdikSS/Super-UEFIinSecureBoot-DiskUnduh Silent UEFIinSecureBoot Disk di jaringan
ZeroNet Git Center :
http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/Tentang ZeroNetZeroNet adalah sistem yang sangat kuat untuk membuat situs web dan layanan dinamis terdistribusi terdesentralisasi. Saat mengunjungi sumber daya, pengguna mulai mengunduh dan mendistribusikannya, seperti di BitTorrent. Pada saat yang sama, dimungkinkan untuk membuat sumber daya lengkap: blog dengan komentar, forum, hosting video, situs wiki, obrolan, email, git.
ZeroNet memisahkan konsep kode dan data situs: data pengguna disimpan dalam file .json, dan ketika disinkronkan, mereka diimpor ke dalam basis data sqlite situs dengan skema standar, yang memungkinkan Anda melakukan hal-hal menakjubkan: pencarian teks lokal di semua situs yang pernah dibuka dalam milidetik, otomatis analog RSS waktu nyata untuk semua situs sekaligus.
Otentikasi dan sistem otorisasi standar (mirip dengan OAuth), dukungan untuk bekerja di belakang NAT dan melalui Tor.
ZeroNet sangat cepat, ramah pengguna, memiliki antarmuka modern dan fitur kecil, tetapi sangat nyaman, seperti pergantian global tema siang / malam di situs.
Saya menganggap ZeroNet sistem yang sangat diremehkan, dan saya sengaja menerbitkan versi Diam hanya di ZeroNet Git, untuk menarik pengguna baru.