2 puan yazan GN⁺ 2025-01-01 | 1 yorum | WhatsApp'ta paylaş
  • 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 FVEc ve Windows 8.1/10'daki Cngb yerine FVEK'in dFVE ve None etiketleri altında bulunduğu görüldü
  • Microsoft SymCryptSessionDestroy gibi 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 shim gibi 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.sh betiğ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
  • tools dizinindeki concatDumps, 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 xxd gibi 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.sys içindeki şifreleme tahsisleriyle ilişkili FVEc pool tag'inden anahtar kurtarmak mümkündü
    • Windows 8.1 ve Windows 10'da anahtar, ksecdd.sys modülüyle ilişkili Cngb etiketli bellek havuzunda bulunabiliyordu
  • Windows 11 dökümünde FVEc ve Cngb içinde anahtar bulunamadı; bunun yerine FVEK iki konumda tespit edildi
    • Birincisi, dumpfve.sys tarafından ayrılan belleği gösteren dFVE pool tag'inin altındadır
    • dumpfve.sys, BitLocker drive encryption için full volume encryption crash dump filter ile ilişkilidir
    • dFVE konumu, anahtarın en kolay ve en tutarlı biçimde bulunduğu yerdi
    • Bu konumdaki anahtarın önünde şifreleme türünü gösteren 0x0480 bulunuyordu ve demo ortamında bu XTS-AES-128 anlamına geliyordu
    • İkinci konum, ExAllocatePool çağrısıyla ilişkili None etiketinin altındadır
    • Bu konumda anahtarın ilk yarısı iki kez, ikinci yarısı ise bir kez görünüyordu

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ğeri 0x8004 olarak eklenir
  • Bu şekilde oluşturulan değer bir dosyaya kaydedilip output.fvek biç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.fvek ile 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, windbg ile ç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 SymCryptSessionDestroy gibi işlevlerle anahtarları yok etmeye çalışsa da anahtarlar heap'te kalabilir ve tüm anahtarlar tamamen temizlenmeyebilir

İlgili bağlantılar

1 yorum

 
GN⁺ 2025-01-01
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.

    • LUKS’ta birden fazla anahtar yuvası var; hatırladığım kadarıyla bir yuva TPM ile kilit açma için, başka bir yuva da uzun parola ile kurtarma için kullanılabiliyordu.
      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.
    • Windows, TPM başlangıçta FVEK’i almak için PIN istese bile sonunda FVEK’i RAM’de tutacaktır.
      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.
    • Bölünmüş anahtar şifreleme ya da şifrelenmiş bir gizli anahtar kullanmak daha iyi olabilir diye düşünü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.
    • BIOS’un açılış parolası da işe yaramalı değil mi diye düşünüyorum. O olmazsa sistem TPM’in FVEK’i açtığı noktaya kadar gelemez.
      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?
    • TPM’in bir tür bal küpü olduğunu düşünüyorum.
      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

    • SPI veri yolu trafiği şifreli değil
      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
    • Çalınan bir cihazı açarsanız sadece giriş ekranına kadar gelirsiniz; parola veya biyometrik doğrulama olmadan ötesine geçemezsiniz
      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
    • Doğru, ama amaç şu: giriş ekranında (winlogon), o bilgisayardaki hesap kimlik bilgilerine sahip değilseniz veya biyometrik kaydınız yoksa gerçekten yapabileceğiniz çok az şey var
      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
    • BitLocker’ı PIN+TPM ile kullanmanın başlıca amacı, kapalı durumdaki bilgisayarı ya da sürücünün kendisini tuğlaya çevirmektir
      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
    • BitLocker birimleri birden fazla koruyucuya sahip olabilir; key file, passphrase, PIN ve TPM deposu kullanabilir: https://learn.microsoft.com/en-us/windows-server/administrat...
      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

    • Windows’un bu özelliği kullandığı biliniyor: https://learn.microsoft.com/en-us/windows/security/operating...
      “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
    • Bu hafifletme önlemi çok kaba, çünkü RAM’in üzerine yazılırken bile müdahale edebilirsiniz
      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
    • Yine de RAM modülünün tamamını söküp çevrimdışı dökmeyi engellemez
      İ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

    • Microsoft, belirli yazılım parçalarını korumaya yönelik “enclaves” çalıştırma özelliği de dahil olmak üzere giderek daha fazla sanallaştırma tabanlı güvenliğe yöneliyor: https://learn.microsoft.com/en-us/windows/win32/trusted-exec...
      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
    • Intel bunu şu anda Total Memory Encryption özelliğiyle sunuyor. Windows ekosisteminde de isabetli biçimde sanal makine tarafını hedefliyor
      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?

    • Teoride mümkün. Pratikte ise DDR bağlantısı kurulurken bellek denetleyicisi ile RAM arasında çok fazla pazarlık gerekiyor ve aynı zamanlamayı koruyarak veriyi dökecek bir durum oluşturmak kolay değil
      Hazır bir çözüm olarak piyasaya çıkmasını beklemek zor
    • Modern AMD/Intel CPU’lar şeffaf tam bellek şifrelemeyi desteklediği için böyle bir interposer yalnızca şifrelenmiş RAM verisini görür
  • 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

    • Anladığım kadarıyla AMD bu özelliğe SME(Secure Memory Encryption), Intel ise TME-MK(Total Memory Encryption-Multi Key) diyor