常常聽到一些hacker或者病毒利用軟體的一類漏洞,叫做buffer overflow或者stack over run,然後可以達到入侵的目的,這些執行的結果往往是為了跳到特定的位址執行某些程式碼。啥是特殊位置?buffer overflow跟stack overrun是為了啥?
以前聽得很模糊,對linux的loader跟process有了解之後,大概可以解釋這種行為的意圖,先看網路上抓來的兩張圖片,一張是virtual process的空間配置是意圖,另外一張是process各資料區段的示意圖
一般來說,hacker想要存取的是kernel space的地方,因為畢竟user space的權限不大,進入kernel space就比較可以隨心所欲,但是一般而言,是無法直接存取kernel space的;此時就是必須利用如heap之類的空間,讓寫入的資料超出本來該寫入的地方,並且寫到kernel space上;又或者想把辦法蓋掉text的程式碼,讓他跳至特定的kernel space內,去執行一些意想不到的code
c string由於沒有邊界檢查,是最常被用來突破的點,但是現在防範的手法已經愈來愈高明了,邊界檢查也是愈來愈嚴苛,可能會規範heap的大小範圍,一旦範圍超出規定的上限或者下限位址,程式就當掉
當然還是有百密一疏的時候,畢竟防禦的人要擋下所有攻擊,但是進攻方只要找到一個突破的點,難易程度也是不對稱的。
當然話說回來,不是只有這種入侵手法,這只是最常見的。
沒有留言:
張貼留言