« 恭喜伍思凱得到金曲獎最佳男演唱人獎 | 回到主頁面 | Buffer Overflow 的範例程式 »

May 12, 2004

關於最近猖狂的病毒 Sasser Worm


~~Worm 也是很可怕的~~

聽說最近很猖獗的病毒Sasser Worm,根據微軟網站所提供的消息,為微軟程式內部LSASS(Local security authority subsystem service)的缺點
也就是利用 Buffer overflow來獲得系統控制權

微軟MS04-011安全性公告

偵測與移除Sasser Worm


或許大家講到這裡會跟我一樣好奇,為何Buffer Overflow會產生系統危險呢?
所以我去找了一個相關文件,請看下面那位大大的解說

作者: tmg (海邊漂來的..海嘯) 看板: SobVersion
標題: 說文解字: 何謂 buffer overflow
時間: Wed Nov 13 20:50:24 1996


唉....... buffer overflow 這個洞, 大概是最難防備的一個洞,
因為這個洞發生的原因純粹是因為程式的 bug,
而這種 bug 你我三不五時就會犯這種錯, 非常難以在 coding 時就加以防備。
要防止這種洞, 只有非常小心仔細檢查 code........

這種洞, 顧名思義, 就是利用 buffer overflow 的原理達成目的的......
比如, 一個陣列只有 100 bytes, 但我餵給它 200 bytes 的資料,
於是這個陣列裝不下這些資料, 造成了 overflow......

為什麼 overflow 會有 security hole 呢?
首先, overflow 發生時, 多出來的資料會蓋到其它變數上,
相信這一點大家早就知道了。

問題是, 為什麼資料蓋到其它變數上時, 頂多使程式執行錯誤,
會嚴重到出現 security 的問題嗎? 這時, 好玩的事情就發生了.......

當我們呼叫一個 function 時, 以組合語言的觀點,
會將 return address 堆入 stack 中。
如果這個 function 宣告了一些 local 變數,
那進入這個 function 之後, 會在 stack 中再空出一塊區域給這些 local 變數,
當要從這個 function return 回去時, 就把這些在 stack 中的 local 變數清掉。

現在好了, buffer overflow security hole 就是在這裡發生了.......

如果有某個 function 宣告了一個 local array, 如:

int func() {
  int i, j, k;
  char buf[16];
  struct abc *x, *y, *z;
      .
      .
      .
}

這時, 當這個 function 被呼叫時, stack 中的長像就像:

                               +



生活資訊

由 Evan 發表於 May 12, 2004
引用
本文的引用網址:


以下是前來引用的連結 '關於最近猖狂的病毒 Sasser Worm' 來自 Blog E
迴響
發表迴響









記住我的資訊?




(請輸入以下的驗證碼)