個人理解的Windows漏洞利用技術發展史

Ox9A82發表於2016-09-22

大概四、五年前,看過陳皓的酷殼上面的一篇文章,上面有一句話我一直記得,是關於學習技術的心得和態度的。

要了解技術就一定需要了解整個計算機的技術歷史發展和進化路線。因為,你要朝著球運動的軌跡去,而不是朝著球的位置去,要知道球的運動軌跡,你就需要知道它歷史上是怎麼跑的。

 我覺得對於漏洞利用技術來說也是這樣,現有的技術由於歷史積攢的原因變的複雜和難以理解,但是如果能追根溯源從源頭入手就能夠看到由最簡單的形態逐步變繁雜的過程。也就可以在追隨技術的發展軌跡的過程中理解技術的本質了。

Windows下漏洞緩解措施的主線就是 無-->DEP-->ASLR 這麼一個過程,其實主要的攻防技術變化都是圍繞著這個主線展開的。

1.蠻荒時期

在Windows XP SP2之前是不存在任何的漏洞緩解措施的,自然而然攻擊者的目光放在了在棧上執行程式碼這一條路上。這一時期的shellcode也是放到棧上的,攻擊者考慮的問題主要是棧的地址是不定的,由此產生了跳板技術。使用類似於jmp esp之類的跳板指令實現在棧上執行程式碼。

  • 主要問題:棧地址不固定
  • 解決方法:使用跳板語句

此外,攻擊者發現有時候因為棧中的區域性變數覆蓋會觸發異常,而處理異常的SEH結構就儲存在棧中,透過溢位就可以覆蓋掉。

  • 主要問題:溢位會觸發異常
  • 解決方法:覆蓋SEH結構

對於C++物件的漏洞來說的話,透過溢位相鄰物件的虛表就可以偽造虛擬函式指標從而實現任意程式碼執行。可是堆的地址也不是你想分配到哪就能分配到哪的,換句話說就是不可控的。為了使這個地址可被預知,誕生了堆噴射技術。其實堆噴射在本質上和棧跳板解決的是同一個問題

  • 主要問題:堆的分配地址不固定
  • 解決辦法:堆噴到固定地址

2.2004年8月DEP出現

DEP資料執行保護在2004於xp sp2上首次出現,斷絕了在棧及堆上執行程式碼的可能。DEP是一種程式單位的保護措施,一旦一個程式啟用,那麼就不存在可執行的模組。作為一種漏洞緩解措施DEP的威力是巨大的,從根本上改變了漏洞利用的思路。為了能夠執行程式碼一種思想引用自Linux下的ret2libc的技術誕生了,即使用程式中的程式碼來分配一個可執行的記憶體或是執行一些功能。就目前為止(只有DEP保護),所有的dll上的gadgets地址都是不變的。如果是為了在不同系統版本間通用,那麼就避免使用系統的dll中的指令,全部使用程式的dll和模組中的指令。透過執行gadgets構成的指令鏈實現能夠在記憶體執行程式碼的目的,比如分配一塊可讀可寫可執行的記憶體,然後複製shellcode進去並執行,或者直接把shellcode所處的記憶體設為可以執行的,這些操作都可以透過簡單的呼叫兩三個api來實現。

  • 主要問題:棧記憶體不可執行
  • 解決方法:透過構造ROP構造出可以執行的記憶體塊

這時利用SEH的思路是不受影響的,但是首先你得能覆蓋的到。

對於C++漏洞來說,在04年之前使用的在堆上偽造虛表的方法就行不通了。因為堆是不可以執行的,在這種情況下,誕生了結合ROP與構造偽虛表結合的思路。總的來說,這種思路是在ROP需要控制棧而堆溢位根本碰不到棧的情況下誕生的,透過把偽造的虛擬函式地址指定為xchg eax esp的地址,導致把esp(棧)轉換到指定的記憶體空間上(由於觸發這種型別的漏洞時,eax必定可控),在堆上佈置rop鏈。而指定的記憶體空間可以由堆噴來實現目的。

  • 主要問題:堆記憶體不可執行導致構造的偽虛擬函式得不到執行
  • 解決方法:透過替換棧到堆上,並透過堆噴到指定的地址,在堆中佈置好rop地址。

3.2007年1月ASLR出現

2007年Windows Vista系統引入對ASLR特性的支援,ASLR地址空間隨機化會導致系統每次重新啟動後所有模組載入的基地址都不相同。同時也會對堆疊的分配起始地址進行隨機化,並且TEB和PEB也不存在固定的地址了。但是ASLR是一種以模組為單位的緩解措施,如果有一個程式中有某一個模組不支援ASLR,那麼這個模組的載入基地址就不會發生變化。

  • 主要問題:模組地址隨機化,導致ROP指令的地址無法確定
  • 解決方法:找到沒有開啟ASLR的模組,使用其中的指令作為ROP

對於C++類漏洞來說,基本的利用方法保持不變,但是要配合使用一個可以洩漏地址的漏洞進行組合利用才能最終達成目的。比如在IE瀏覽器中就存在這樣的利用方式,透過洩漏物件的虛表地址來計算出模組地址從而繞過ASLR,可以計算出ROP指令的地址實現利用。

  • 主要問題:要構造ROP的指令地址受到ASLR的影響不能確定
  • 解決方法:透過一個可以洩漏地址的漏洞組合利用,實現bypass ASLR

相關文章