1. 程式人生 > >Windows安全機制---地址隨機化:ASLR機制

Windows安全機制---地址隨機化:ASLR機制

Windows安全機制

微軟關於記憶體保護機制

  1. GS編譯技術
  2. SEH的安全校驗機制
  3. Heap Cookie,Safe Unlinking等一系列堆安全機制
  4. DEP資料執行保護
  5. ASLR載入地址隨機
  6. SEHOP SEH的覆蓋保護

地址隨機化:ASLR機制

原理

地址隨機化需要程式自身和作業系統的雙重支援,會在PE頭中設定IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE標識來說明支援ASLR。 在這裡插入圖片描述 編譯器可以在這裡設定,其中地址隨機化包含了映像隨機化,堆疊隨機化,PEB與TEB隨機化

映像隨機化

在PE檔案對映到記憶體時,對載入虛擬地址進行隨機化處理,系統重啟這個地址是變化的。 出於相容性考慮,這個選項也可以通過登錄檔關閉 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\MoveImages 當為-1時,強制隨機化 在這裡插入圖片描述

當沒有時可以新建

堆疊隨機化

堆疊的基址是開啟程式的時候確定的,同一個程式任意兩次執行時的堆疊基址是不同的。

PEB與TEB隨機化

微軟在xp sp2之後不再使用固定的PEB基址0x7FFDF000和TEB基址0x7FFDE00

mov eax,FS:[0x18]
mov teb,eax
mov eax,dword ptr[eax+0x30]
mov peb,eax

這樣也可以快速確定TEB和PEB的地址

繞過

對於映像隨機化,雖然模組的載入地址變了,但低2個位元組不變。 對於ASLR堆疊隨機化,可以使用JMP esp和heap spray等繞過限制 對於PEB和TEB的隨機化,也是可以通過FS的偏移來定位的

攻擊未啟用ASLR的模組
利用部分覆蓋進行定位記憶體地址
利用Heap spray進行記憶體地址定位
利用Java applet heap spray定位記憶體地址
為.net控制元件禁用ASLR