Windows 11'de bellek dökümüyle BitLocker'ı atlatmak
(noinitrd.github.io)- Bu, Windows 11 24H2 ortamında Memory-Dump-UEFI ile RAM dökümü alıp tam hacim şifreleme anahtarı olan FVEK'i bularak BitLocker korumalı hacme erişmeyi gösteren bir demodur
- Saldırganın cihaza fiziksel erişimi varsa yeniden başlatmanın hemen ardından RAM'de kalan anahtarlar hedef alınabilir, ancak güç kesintisi süresi uzadıkça RAM içeriğinin bozulması riski artar
- Demoda, güç kaybı olmadan yeniden başlatmak için anakartın reset pinleri kısa devre edildi ve Secure Boot'u atlatma vakaları demo kapsamı dışında bırakıldı
- Windows 11 dökümünde, geçmişte Windows 7'deki
FVEcve Windows 8.1/10'dakiCngbyerine FVEK'indFVEveNoneetiketleri altında bulunduğu görüldü - Microsoft
SymCryptSessionDestroygibi işlevlerle anahtarları yok etmeye çalışsa da anahtarlar heap üzerinde kalabildiğinden, BitLocker uygulamasını analiz etmenin en doğrudan yolu çekirdek düzeyi hata ayıklamadır
Windows 11 BitLocker atlatma demosunun kapsamı
- Hedef Windows 11 version 24H2 ve yöntem, BitLocker'ın tam hacim şifreleme anahtarı FVEK'i bellekten çıkarmaya dayanıyor
- RAM içeriğini döken UEFI uygulaması Memory-Dump-UEFI kullanılıyor
- Temel varsayım, saldırganın cihaza fiziksel erişimi olmasıdır
RAM dökümünün mümkün olduğu koşullar
- Yakın zamanda çalışan Windows örneğinin RAM'inde FVEK gibi hassas bilgiler kalmış olabilir
- Güç kesildiğinde RAM içeriği hızla bozulduğundan, yeniden başlatma sürecinde bilgisayarın tamamen kapalı kaldığı süre en aza indirilmelidir
- RAM bozulmasını azaltma yöntemleri arasında fiziksel soğutma veya harici güç beslemesini sürdürme bulunur; demoda ise güç kaybı olmadan yeniden başlatmak için anakartın reset pinleri kısa devre edildi
- Secure Boot, cihaz açılışında çalıştırılabilecek öğeleri sınırlayan bir güvenlik standardıdır; ancak
shimgibi yöntemlerle aşıldığı örnekler vardır ve bu demoda ayrıntılı ele alınmaz
Önyükleme USB'si hazırlama ve döküm oluşturma
- Önyükleme USB'sinde, hedef sistemin RAM kapasitesinden daha büyük bir depolama aygıtı gerekir
flashimage.shbetiği, önyüklenebilir uygulamayı hazırlamayı basitleştirir- Önyükleme uygulamasını oluşturma ve kullanma adımları MemoryDumpUEFI'de özetlenmiştir
- Windows yüklenirken ancak oturum açma ekranı görünmeden önce yeniden başlatıldığında FVEK'i bulma olasılığı en yüksek oldu
- Ardından USB aygıtından doğrudan Memory-Dump-UEFI ile önyükleme yapılıp UEFI shell içinde
app.efiçalıştırılır- Çalıştırma biçimi için uygulamanın README dosyasında ek adımlar vardır
- Döküm süresi RAM kapasitesine ve USB aygıtının hızına göre değişir
- Yanlış sürücüye yazmayı önlemek için diğer USB depolama aygıtlarını çıkarmak iyi olur
Döküm dosyalarını işleme ve arama araçları
- Memory-Dump-UEFI birden fazla döküm dosyası oluşturabilir
- UEFI belirtimine uymak için FAT32 dosya sistemi kullanılmalıdır ve FAT32'de 4 GB dosya boyutu sınırı vardır
toolsdizinindekiconcatDumps, birden fazla dökümü zaman sırasına göre tek dosyada birleştirir- Dökümler, o andaki bellekte bulunan ham veridir; bu yüzden
xxdgibi araçlarla daha okunabilir biçimde incelenebilir searchMem, döküm içinde hex desenleri arar ve bulunan konumun ofsetine gitmeyi sağlar
Pool tag'ler ve FVEK'in konumu
- Pool tag, Windows çekirdek bellek havuzunun neye ait olduğunu gösteren 4 karakterli bir tanımlayıcıdır
- Windows çekirdeğinin ayırdığı bellek havuzları, hassas bilgileri bulmak için uygun yerler olabilir
pooltag.txt, pool tag listesi ile her birinin amacına dair bilgiler içerir- Önceki Windows sürümlerinde BitLocker anahtarının konumu farklıydı
- Windows 7'de,
fvevol.sysiçindeki şifreleme tahsisleriyle ilişkiliFVEcpool tag'inden anahtar kurtarmak mümkündü - Windows 8.1 ve Windows 10'da anahtar,
ksecdd.sysmodülüyle ilişkiliCngbetiketli bellek havuzunda bulunabiliyordu
- Windows 7'de,
- Windows 11 dökümünde
FVEcveCngbiçinde anahtar bulunamadı; bunun yerine FVEK iki konumda tespit edildi- Birincisi,
dumpfve.systarafından ayrılan belleği gösterendFVEpool tag'inin altındadır dumpfve.sys, BitLocker drive encryption için full volume encryption crash dump filter ile ilişkilidirdFVEkonumu, anahtarın en kolay ve en tutarlı biçimde bulunduğu yerdi- Bu konumdaki anahtarın önünde şifreleme türünü gösteren
0x0480bulunuyordu ve demo ortamında bu XTS-AES-128 anlamına geliyordu - İkinci konum,
ExAllocatePoolçağrısıyla ilişkiliNoneetiketinin altındadır - Bu konumda anahtarın ilk yarısı iki kez, ikinci yarısı ise bir kez görünüyordu
- Birincisi,
FVEK ile BitLocker hacmine erişmek
- Elde edilen anahtarın başına, kullanımda olan şifreleme algoritmasının değeri eklenmelidir
- Örnekte, little endian biçimindeki
0480, anahtarın başına algoritma değeri0x8004olarak eklenir - Bu şekilde oluşturulan değer bir dosyaya kaydedilip
output.fvekbiçiminde kullanılabilir - dislocker araç takımı, gerekli algoritma ve değeri doğrulamak ve BitLocker korumalı bölümü kilitten çıkarmak için önerilir
- Adımlar doğruysa
output.fvekile BitLocker korumalı hacimdeki verilere erişilebilir
BitLocker uygulamasını analiz etmek ve heap'te kalan anahtarlar
- BitLocker uygulamasını anlamanın en doğrudan yolu,
windbgile çekirdek düzeyi hata ayıklama yapmaktır - Çekirdek hata ayıklaması sanal makinede ya da crossed over USB 3.0 A/A kablosuyla nispeten kolay yapılabilir
- Windows önyükleme sürecini adım adım izleyerek BitLocker davranışını gözlemlemek, anahtarın bulunmasına yardımcı oldu
- Microsoft
SymCryptSessionDestroygibi işlevlerle anahtarları yok etmeye çalışsa da anahtarlar heap'te kalabilir ve tüm anahtarlar tamamen temizlenmeyebilir
İlgili bağlantılar
- recovering-bitlocker-keys-on-windows-8-1-and-10: Windows 8.1 ve Windows 10'da BitLocker anahtar kurtarma ile ilgili kaynak
- dislocker: BitLocker hacmine erişimde kullanılan araç takımı
- SymCrypt: Microsoft şifreleme kütüphanesi
- libbde: BitLocker Drive Encryption ile ilgili kütüphane
- pooltag.txt: Windows pool tag listesi
- An Introduction to Pool Tags: Microsoft'un pool tag'lere giriş yazısı
1 yorum
Hacker News yorumları
BitLocker’ın en büyük avantajının TPM (PCR 7+11)+PIN kullanıldığında ortaya çıktığını düşünüyorum.
PIN olmadan FVEK okunamamalı; bu yüzden bu saldırıyı hafifletebilir. BitLocker düzgün uygulanmışsa, PIN çok fazla yanlış girildiğinde TPM sözlük saldırısına karşı kilitleme moduna geçer.
Aylardır Linux’ta da aynı yapılandırmayı kurmaya çalışıyorum, ama systemd-cryptsetup/cryptenroll LUKS için; benim durumumda ise yavaş dahili eMMC üzerinde fscrypt ile birkaç hassas dizini (secure boot anahtarları ve /home) şifrelemek istiyorum.
Temelin ötesine geçince TPM kodlamanın aşırı zor olduğunu hissediyorum: PCR 7’ye bağlamak, her kernel/init/cmdline güncellemesinde değişen PCR 11’e bağlamak, AuthValue yerine PIN kullanmak, oturum açarken DA kilit sayacını sıfırlamak için de aynı onay politikasını kullanırken elle sıfırlama için uzun bir parola/AuthValue de bulundurmak, ayrıca systemd-stub’ın sağladığı PCR 11 imzası ve açık anahtarla da uyumlu olmak gerekiyor.
Temel TPM kılavuzları dışında neredeyse hiç kaynak yok; bu konuda uzman biri varsa yardım almak isterim. Kişisel bir proje, ama bir gün tamamlarsam yazıya dökmeyi düşünüyorum.
Kurtarma mekanizması olarak bu yöntemi değerlendirmeye değer.
Hobi olarak açık kaynak TPM tarafıyla uğraşan az insan olmasının nedenlerinden biri, benzer ihtiyaçları çok daha kolay çözen pek çok alternatifin olması.
Önemli şifreleme anahtarlarını donanıma bağlamak istiyorsan Yubikey satın alabilirsin; dizüstü bilgisayar disk şifreleme parolası zahmetliyse tamamen kapatmak yerine kapağı kapatınca bekleme modunu kullanabilirsin.
Oturum açma parolası rahatsız ediyorsa parmak izi okuyucu ya da biyometrik kimlik doğrulamalı Yubikey var; insansız kiosk ya da okul bilgisayar laboratuvarı gibi parolasız açılması gereken sistemlerde ise sağlam bir metal kutuya koyup duvara zincirleyebilirsin.
Veri merkezi sunucusunun insansız açılması gerekiyorsa güvenilir fiziksel güvenliği olan bir veri merkezine taşı; yine de endişeleniyorsan Dropbear veya Tang ile yalnızca doğru ağdayken açılmasını sağlayabilirsin.
Homelab hobisi olarak TPM ile uğraşıyorsan gerçekten TPM üzerinde çalışmanın eğlenceli olup olmadığını kontrol etmek iyi olur; büyük olasılıkla olmadığını fark edeceksin.
Aksi halde her disk bloğu çözüleceğinde PIN girmek gerekmez mi? Her disk işlemi için TPM’i çağırmanın performans etkisi de büyük olur.
Bu saldırı anahtarı RAM’den okuduğu için TPM PIN’inin nasıl bir hafifletme sağladığını anlamıyorum.
Önyüklemeden önce parola giriliyor ve sürücünün açılabilmesi için bu parolanın TPM anahtarıyla birleştirilmesi gerekiyorsa, daha sonra TPM anahtarının keşfedildiği durumlarda yardımcı olur.
Ancak bu saldırıya karşı hangi önlemin ne kadar işe yarayacağından emin olmak zor. İşletim sistemi sürücüye okuma/yazma erişimini sürdürecekse anahtarı bir yerde tutmak zorunda; bu yüzden yalnızca anahtarın aranacağı yeri değiştirince, çoğu senaryoda bu tür RAM verisi kurtarma mümkün olacaktır.
Apple cihazlarında anahtarın güvenli alanın (enclave) dışına çıkmadığını hatırlıyorum; bu yüzden böyle saldırılara açık olmayabilirler. TPM 3.0’ın o tarafa çok daha fazla yaklaşması gerekiyor gibi görünüyor.
ThinkPad’lerde açılış parolası yerine parmak izi kullanılabiliyor; hırsız için cihazı neredeyse işe yaramaz hale getirdiği için BitLocker PIN’ine kıyasla bu yapılandırmayı tercih ediyorum.
Elbette açılış parolası ve parmak izi kimlik doğrulaması da en fazla TPM kadar güçlü, ama BitLocker TPM+PIN de öyle değil mi?
Başarılı açık kaynak şifreleme yazılımlarından sonra TPM’e yönelen akış tuhaf geliyor. Sanki büyük şirketlerin sunduğu süper güvenli bir kasa var, endişelenmeyin ve soru sormayın deniyor gibi.
İstihbarat kurumlarının tüm PIN’leri ve parolaları indirip verilere erişmesini sağlayan bir arka kapının mutlaka olduğundan şüpheleniyorum.
BitLocker’ın güvenlik modelini temelde pek anlayamıyorum
Çoğu kurulumda güç düğmesine basınca Windows’a önyükleme yapıyormuş gibi görünüyor
O zaman biri şifrelenmiş sabit diski olan bir cihazı çaldığında sadece açması mı gerekiyor? Böyle olmasa gerek, ama aynı zamanda bu belirli saldırının nasıl engellendiğini de bilmiyorum
SPI veri yolu trafiğinin şifreli olduğunu ve anahtarın bu şekilde dökülemeyeceğini varsaymak gerekir gibi geliyor, ama her hâlükârda makine anahtarı epey kolay veriyor gibi görünüyor
LUKS’ta en azından sürücü kilidini açmak için bir parola istemi var
Tuhaf biçimde Microsoft, TPM parametre şifrelemesi kullanmıyor; bu yüzden her 1-2 yılda bir güvenlik araştırmacıları TPM sniffing cihazı yapıp demo gösteriyor
LUKS da yapılandırmaya bağlı. Linux da burada Windows’la aynı şekilde yapılandırılabilir; benim ev video güvenlik sunucumun da sessizce yeniden başlatılması gerektiği için onu öyle ayarladım. Warm/cold boot saldırılarına ve yazılım saldırı yüzeyine açık olduğunu biliyorum, ama biri yalnızca sürücüyü söküp götürürse güvenli
Windows da parola isteyecek ya da PIN doğrulamalı TPM-sealed key kullanacak şekilde ayarlanabilir
Parametre şifrelemesi ve veri yolu sniffing sorununu bir kenara bırakırsak, BitLocker sınırı “herkes sürücüyü okuyabilir” durumundan “bellek içeriğini elde etmek için platform düzeyinde saldırı yapmak ya da giriş ekranında çalışan servisleri hacklemek gerekir” durumuna taşır
Rastgele geri dönüştürülmüş sabit disklerden finansal veri çalınması gibi senaryoları çok iyi engellediği için pratikte oldukça iyi bir güvenlik iyileştirmesidir
Uzak kod çalıştırma açığı ya da eski ve zafiyetli bir Windows bootloader ile önyükleme yapmak gibi bir bypass gerekir. Sürücü kilitli olduğundan yaygın “software keyboard’u cmd.exe ile değiştirme” bypass’ı çalışmaz
BitLocker yoksa Windows sürücüsünü başka bir PC’ye takıp tüm dosyaları görebilirsiniz. BitLocker varsa zafiyetli Microsoft yazılımları, açıklar, dökülmüş bellek gibi şeylerle uğraşmanız gerekir; bu da her zaman işe yaramaz
BitLocker’ı TPM+PIN modunda ayarlarsanız TPM’i açacak parola olmadığı için bunu bile yapamazsınız. BitLocker’ı yalnızca parola modunda da bırakabilirsiniz ama kaba kuvvet saldırılarına çok daha açıktır
LUKS da benzer şekilde, günümüzde çoğu Linux dağıtımında TPM ve TPM+PIN destekler
Güvenli moda ya da başka bir OS’ye, firmware güncelleme aracına vb. yeniden başlatmaya çalışırsanız BitLocker kurtarma anahtarını girmeniz gerekir
Parmak izi sensörünü veya yüz tanıma web kamerasını “hackleme” durumlarının içeride nasıl çalıştığını pek bilmiyorum
TPM’de anahtar çıkarma zafiyeti olmadığı varsayımına ihtiyaç var
Asıl nokta, gücün kapalı olduğu durumdur
Genel amaçlı sürücü şifrelemede TPM gerçek toplu veriyi çözmek için fazla yavaş olduğundan bunu yapmaz; sonuçta OS’nin çıkarılabilir bir anahtara sahip olması gerekir
Pro sürümünde grup ilkesiyle önyükleme sırasında etkileşimli bir adım da zorunlu kılınabilir. TPM olmasa da çalışır; bu durumda her başlangıçta parola sorar
Bu, https://trustedcomputinggroup.org/resource/pc-client-work-gr... ile tamamen engellenebilir
Etkinse, OS normal şekilde kapanmadığı için şifreleme anahtarını silme fırsatı bulamadığında, bir sonraki önyüklemeden önce firmware durup RAM’i temizler
Windows’un bunu kullanıp kullanmadığını mı, yoksa test edilen sistemin bunu uygulamadığını mı merak ediyorum
“BitLocker, anahtarları belleğe çıkarmadan önce MOR bit (Memory Overwrite Request) olarak da bilinen TCG Reset Attack Mitigation’ı kullanır” deniyor
Ancak çoğu platform uygulamasına hiç güvenmiyorum. Herhangi bir biçimde düzgün uygulamaya yakın bir UEFI platformu gördüğümü hatırlamıyorum
Bu araştırmacının hangi platformu kullandığını ve o platformun MOR bit desteği iddia edip etmediğini bilmek ilginç olurdu
Team Tweezers’ın orijinal Wii’ye nasıl saldırdığına bakmak yeterli
Gerçek hafifletme, modern CPU’lardaki bellek şifreleme özelliğidir. Die’ın içinde olduğundan cımbız erişemez; yalnızca anahtarı silmek gerektiği için anında silinir ve güç döngüsünden sağ çıkmış olsa bile müdahale etmek çok zordur
İdealde anahtar yalnızca CPU’nun SRAM önbelleğinde kalmalı ve CPU die’ının dışına asla çıkmamalıdır
Yazıyı yazan kişiyim. Sorunuz varsa bu hesaptan mesaj gönderebilirsiniz
Üzerinde çalışmak gerçekten çok eğlenceliydi; gösterilen büyük ilgi için teşekkürler
Windows 11 BitLocker bypass’ı ile ilgili 38C3 sunumu: https://media.ccc.de/v/38c3-windows-bitlocker-screwed-withou...
BitLocker’ın yalnızca kapalı bir bilgisayarı gerçekten koruduğu, bunun da ancak BitLocker önyükleme parolası isteyecek şekilde yapılandırılmışsa geçerli olduğu oldukça iyi biliniyor
[0] https://en.wikipedia.org/wiki/BitLocker#TPM_alone_is_not_eno...
Windows’ta bellek sıkıştırmayla birlikte önerilmiş bir bellek şifreleme seçeneği var
Hem Intel hem de AMD bu özelliği CPU’larına eklemek için çalışıyor
Ancak hedef dizüstü bilgisayarlar değil, birden fazla sanal makine çalıştıran sunucular gibi görünüyor
Yakında şifrelenmiş bir “sanal makine”nin bu tür gizli değerleri saklama aracı olarak kullanılmasına şaşırmam. Gerekli olan şey, tüketici platformlarında yaygınlaşmış donanım desteği
Öte yandan önceki CPU yan kanal saldırıları, şifrelenmiş belleğin de saldırıya açık olabileceğini gösterdi (https://www.usenix.org/conference/usenixsecurity21/presentat...). CPU normal çalışması için belleğin şifresini çözerken önbelleği hedef alıyorlar
Bellek dökümlerini etkisiz kılmaya yardımcı olur, ancak şifreli RAM, bellekten anahtarların dökülmesi sorununu tamamen bitirmez. Özellikle sabırlı ya da çok yetenekli saldırganlar söz konusuysa
https://techcommunity.microsoft.com/blog/windowsosplatform/m...
Bellek sıkıştırma uzun zamandır var; en azından Windows 10 RTM’den beri mevcut. Başlıca işletim sistemlerinin hepsi bu özelliği uyguladı, ancak güvenlikle ilgisi yok
İlgili yazı: Lenovo dizüstü bilgisayarda ucuz bir mantık analizörüyle BitLocker’ı aşmak
https://news.ycombinator.com/item?id=37249623
Hedef makinenin bellek dökümünü okumaya dayanan saldırılarda, fiziksel erişim varsa RAM’e giren ve çıkan verileri kopyalayan ya da değiştiren bir interposer cihazının ne kadar gerçekçi olacağını merak ediyorum
Eski Gameboy için kullanılan “Action Replay” gibi; oyun kartuşundan sisteme yüklenen veya çalıştırılan belleği değiştirerek hile yapmayı mümkün kılan cihazı düşünüyorum. Kartuşu Action Replay’e, Action Replay’i de Gameboy’a takma şeklindeydi
RAM ile anakart arasında da benzer bir şey yapılabilir mi? RAM’i bir cihaza takıp, o cihazı anakarta taktıktan sonra bellek okuma/yazmalarını izleyerek herhangi bir andaki bellek durumunu yakalamak gibi
Böylece elle gücü kesip gerekli verilerin hâlâ kalmış olmasını umma zahmetinden kaçınılabilir
Elektrik mühendisi değilim; tamamen imkânsız bir öneri de olabilir. Fiziksel alan ve bant genişliği kısıtları kesinlikle büyük görünüyor, ama yapılabilir mi?
Hazır bir çözüm olarak piyasaya çıkmasını beklemek zor
Son birkaç yılda çıkan Intel/AMD CPU’ların şeffaf tam bellek şifrelemeyi desteklediğini bilen az
RAM içeriği, CPU bellek denetleyicisinin içinde tutulan ve sıfırlama sırasında oluşturulan rastgele bir anahtarla şifrelenir
Genelde BIOS’ta kapalıdır; çünkü bellek performansında küçük bir kayıp (%0,1~%1) vardır
Ancak bu saldırıyı tamamen engelleyebilir