2007年7月24日 星期二

利用 dangling pointer 的新駭客手法

‧利用 dangling pointer 的新駭客手法

New hacking technique exploits common programming error

http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci1265116,00.html

By Dennis Fisher, Executive Editor / 23 Jul 2007 | SearchSecurity.com

Watchfire Inc. 的研究者表示他們發現一種可靠的方法來 exploiting 一種常見的程式撰寫錯誤,那到目前為止都只被認為是一個品質上的問題,而非安全漏洞。

Watchfire 的 Jonathan Afek 與 Adi Sharabani 當他們在執行該公司的 AppScan software 對抗一個 Web server 時,碰巧發現這種從遠端 exploiting 懸置指標(dangling pointers,http://en.wikipedia.org/wiki/Dangling_pointer)的方法。Server 在掃描中與稍後的調查中當掉,這一對發現 dangling pointers 已成了罪犯(culprit)。這並非一個讓人驚訝的結果,大家都知道這些程式撰寫上的錯誤,在奇怪時刻會導致程式當掉。

不過在某些更進一步的實驗之後,Afek 與 Sharabani 發現,藉由傳送一個特製的 URL 到 server 上,就能在內部引起 crash,然後開始尋找某方法在目標機器上執行他們自己的程式碼。

Afek,Watchfire 的資深安全研究員,將在 8 月份,於拉斯維加斯舉辦的 Black Hat Briefings 上演示該技術。

Dangling pointers 是軟體程式碼當中的錯誤,它們無法正確的指向某個合法的物件。通常被參照到的物件若被刪除時,不會導致指標的值發生改變。

Dangling pointers 相當常見,不過安全專家與開發者表示,多年來都沒有實用的方法可以 exploit 它們,所以它們被認為是質量保證方面的問題,而非安全性瑕疵。不過現在情況已經改變了。

"一般都認為這種問題不可 exploit。不過我們觀察到這個,然後想,如果我們都能夠在這台 server 上實作我們自己的程式碼,難道它這樣還算完善(neat)嗎?" Danny Allan 說,Watchfire 的研究主管,該公司位於麻州 Waltham。

"這問題在以前是,你得要踐踏(override)指標所指向的正確位置才會發生。這被認為是不可能的。不過我們發現了一種方法能夠對付一般的 dangling pointers 然後執行我們自己的 shell code。"

Afek 與 Sharabani 的發現真是一大「進步」,而且還是一個會引起大家恐慌的發現,因為這樣的程式撰寫錯誤無所不在。研究者透過此法,可對付 微軟的 IIS 5.1,不過 Allan 表示這技術只要「任何程式」當中存在 dangling pointer 的話「都有效」。微軟則在七月的 MS07-041 當中處理這個問題。

"結果很像是 buffer overflow。這相當嚴重," Allan 表示。"這有點像潘朵拉的盒子,而且一旦我們打開它,它將成為冰山一角。這是一個相當普遍的問題,特別是在低階語言中。有很多時候,你根本不曉得那裡存在 dangling pointer。"

為在紐約的 Matasano Security 的 Thomas Ptacek 表示,雖然他還沒瞧過Watchfire 的研究結果,不過聽起來相當可信,而且是一個重大進展。

"這是必殺 exploit 的一種新方法,這是相當重要的一步,因為它不只是(針對)某個弱點,它是一種新等級的 bugs," Ptacek 說。"現在我們正處於人們還不會認真看待 dangling pointers 的時候,但大多數的我們都只在等待某些人能夠想出一種可靠方式來達成它。"

Dangling pointers 對於使用 C++ 程式設計師來說尤其是個讓人提心弔膽的問題,Ptacek 說。

"這種問題隨時都會發生,不過它們相當依賴情勢," Ptacek 說。"總而言之,如果你能決定這個指標的值,那就玩完了。"

當 Watchfire 首先向微軟的安全回應團隊警告他們所發現的問題時,他們遇到了懷疑論者,而這是可以理解的,Allan 說。微軟從 2005 年「早」就知道這個會當掉 IIS 的臭蟲了,不過它們認為那是一個簡單的 DoS 問題,而且無法遠端 exploit。

"這過去一向都是理論性的與學術性的。不過一但我們給它們概念驗證程式碼,它們就十分擔心了," Allan 說。"它們對於該研究背後的內幕相當有興趣。

Allan 指出,那些基於 Java 的應用不受這個 exploit 的影響,因為該語言內建的機制會自動回收記憶體(deallocating memory)。