Force randomization for images (Mandatory ASLR)¶
/DYNAMICBASE üzerinden ASLR'ye opt-in olmamış executable image'lerin relocation'ını zorlayan bir Windows Exploit Protection / EMET ayarı.
Mechanism¶
Geri getirilen invariant
ASLR bir modülü yalnızca o modül gerçekten randomize edilmiş bir base'de yüklendiğinde korur. PE loader normalde yalnızca IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE ile flag'lenmiş (/DYNAMICBASE linker opsiyonuyla set edilen) image'leri randomize eder. /DYNAMICBASE olmadan derlenmiş tek bir legacy DLL ya da EXE bu yüzden her boot'ta sabit preferred base'ine land eder — ve tek bir predictable modül, bilinen adreslerde return-to-libc / ROP gadget'ları sağlamaya yeter ve tüm process için ASLR'yi etkisizleştirir. Mandatory ASLR bu boşluğu, memory manager'ı opt-in olmamış image'leri map'lenirken rebase etmeye zorlayarak kapatır, böylece bir attacker artık herhangi bir image'in linker'ın koyduğu yerde olacağına güvenemez.
Windows'ta bu, Windows Defender Exploit Protection'da (EMET'in halefi) "Force randomization for images (Mandatory ASLR)" olarak ve tarihsel olarak EMET'in ForceRelocateImages'ı olarak sunulur. System-wide ya da executable başına konfigüre edilebilir; Exploit Protection XML'inde app başına form <ASLR ForceRelocateImages="true" />'dır.
Zorla rebasing tek başına entropy taşımaz
Microsoft'un belgeleri açıktır: memory manager bir non-ASLR image'i zorla rebase ettiğinde, rebase'in kendisi entropy taşımaz ve predictable bir konuma land edebilir. Randomize edilmiş bir base elde etmek için Mandatory ASLR, bottom-up allocation'lara entropy ekleyen Randomize memory allocations (Bottom-up ASLR) ile birlikte kullanılmalıdır. 64-bit process'lerde o bottom-up entropy önemli ölçüde daha büyük olabilir — bkz. High Entropy ASLR.
Walkthrough¶
Ayarın neden önemli olduğunun kavramsal reprodüksiyonu, Microsoft Exploit Protection referansından alınmıştır:
- Bir target process bir modül karışımı yükler; çoğu
/DYNAMICBASEve randomize edilmiştir, ama bir legacy DLL değildir. - Non-ASLR DLL sabit preferred base'ine map'lendiği için, bir memory-corruption primitive'ini kontrol eden bir attacker o DLL'deki executable byte'ların tam adresini bilir.
- Attacker, return-to-libc ya da ROP chain'ini tamamen o predictable modüldeki gadget'lardan kurar — info leak gerekmez.
- Mandatory ASLR etkinken, loader bunun yerine o DLL'i zorla rebase eder ve (Bottom-up ASLR ile) onu randomize edilmiş bir adrese yerleştirir ve güvenilir gadget kaynağını ortadan kaldırır.
Randomize edilmiş base tek başına yetmez
Mandatory ASLR yalnızca attacker'ın adresi peşinen bilmesini engeller. Eğer process içinde runtime'da bir pointer/info leak elde edilirse — bkz. Pointer leak ile ASLR bypass — randomize edilmiş base yine de hesaplanabilir ve gadget'lar leak'lenen adrese göre relocate edilebilir; yani bu kontrol info leak'leri ortadan kaldırmaz, sadece "leak'siz" senaryoyu kapatır.
Defensive enable & verification¶
ForceRelocateImages entropy taşımadığı için her zaman BottomUp ile pair'lenmelidir. System-wide enable (elevated PowerShell):
# System-wide: zorla relocate + bottom-up entropy birlikte
Set-ProcessMitigation -System -Enable ForceRelocateImages, BottomUp
# Doğrulama: SystemWide altında ASLR alanlarını oku
Get-ProcessMitigation -System | Select-Object -ExpandProperty ASLR
# ForceRelocateImages : ON
# BottomUp : ON
App başına rollout için Exploit Protection XML stanza'sı (browser, Office, PDF reader gibi yüksek riskli target'lar):
<AppConfig Executable="contoso-reader.exe">
<ASLR ForceRelocateImages="true" BottomUp="true" />
</AppConfig>
XML'i import etmek ve durumu denetlemek için:
Set-ProcessMitigation -PolicyFilePath .\exploit-protection.xml
Get-ProcessMitigation -Name contoso-reader.exe | Select-Object -ExpandProperty ASLR
Detection¶
- Bu bir detector değil, preventive bir kontroldür, ama etrafında audit tarzı telemetry mevcuttur: ilgili mitigation'ları audit mode'da etkinleştirmek, zorla relocate edilecek olan image'leri ortaya çıkarır, ki bu estate'teki non-ASLR binary'lerinin yararlı bir envanteridir.
- Ayarı etkinleştirdikten sonra uyumluluk başarısızlıklarına (load error'ları, crash'ler) dikkat et; bunlar genellikle base adresini hard-code eden ya da sabit bir layout bekleyerek bellek paylaşan bir modüle işaret eder.
- Policy rollout'undan hemen sonra belirli bir image'in tekrarlayan crash'lerini gösteren process-creation log'ları uyumsuz bir binary'ye işaret eder.
Mitigation¶
- Uyumlu olduğu yerlerde system-wide etkinleştir. Mandatory ASLR default'ta açık değildir (sabit bir base varsayan programları bozabilir), bu yüzden ideal olarak audit-mode değerlendirmesinden sonra opt-in edilmelidir.
- Her zaman Bottom-up ASLR ile birlikte kullan ki rebasing gerçek entropy kazansın; 64-bit'te en büyük varyans için High Entropy ASLR'ye izin ver.
- Root cause'u düzeltmeyi tercih et: in-house binary'leri
/DYNAMICBASE(ve/HIGHENTROPYVA) ile yeniden derle ki zorla rebasing gereksiz olsun. - Global bir policy fazla yıkıcı olduğunda, yüksek riskli target'lar (browser'lar, Office, PDF reader'lar) için Exploit Protection XML üzerinden uygulama başına rollout yap.
Ana image'in kendisini relocatable yapmaya dair analog Linux kavramı için ayrıca bkz. Position-independent executable.