• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            旅途

            如果想飛得高,就該把地平線忘掉

            緩沖區(qū)溢出原理淺析以及防護

            摘要】 本文從程序語言本身的缺陷,不夠健壯的角度出發(fā),詳細分析了緩沖溢出攻擊的基本原理,描述了黑客利用緩沖區(qū)漏洞進行系統(tǒng)攻擊的一般過程,最后又簡單討論了幾種防范溢出攻擊的策略.
             
            【關鍵字】 緩沖溢出; 程序跳轉; 長跳轉緩沖區(qū);
             
            近些年來,黑客攻擊事件頻繁發(fā)生,尤其是緩沖區(qū)溢出漏洞攻擊占據(jù)了網(wǎng)絡遠程攻擊的絕大多數(shù). 因為這類攻擊可以使任何人獲得系統(tǒng)主機的完全控制權,所以它代表了一類十分嚴重的攻擊.
            緩沖區(qū)溢出攻擊之所以常見,是因為它太常見了,且易于實現(xiàn), 這完全是軟件發(fā)展史上不可避免的問題. 緩沖區(qū)漏洞是程序員在編寫程序時未檢查內存空間,導致內存泄漏而引起,以下我們先來簡單了解一下它:
             
            一、 認識緩沖區(qū)溢出
            緩沖溢出是一種系統(tǒng)攻擊的手段,借著在程序緩沖區(qū)編寫超出其長度的代碼,造成溢出,從而破壞其堆棧,使程序執(zhí)行攻擊者在程序地址空間中早已安排好的代碼,以達到其目的. 一般黑客攻擊root程序,然后執(zhí)行類似exec(sh)的代碼獲得root的shell. 它造成了兩種嚴重的后果:
            1.     覆蓋堆棧的相鄰單元. 使程序執(zhí)行失敗, 嚴重可導致系統(tǒng)崩潰.
            2.     可執(zhí)行認識指令代碼,最后獲得系統(tǒng)root特級權限.
            現(xiàn)在很多人使用C或C++編寫程序,但同時太多的人忽略了對其的數(shù)組邊界檢查和類型安全檢查,所以現(xiàn)今的大多數(shù)溢出都和C語言有關, C語言中中有可能產(chǎn)生溢出的函數(shù)有:char s[n],strlen(s),strcpy(dst, src),p=malloc(n),strcat(s,suffix)等等,所以我們要盡可能地避免使用這些危險函數(shù),即使使用,也一定要做嚴格的檢查.為容易理解,我們來看一個簡單的程序:
             
            /*
             * example.c
             * written by Devil_Angel <Devil___Angel@126.com>
             * gcc –o example example.c
                            */
            void func(char * str)
            {
            char buf[8];
            strcpy(buf, str);
            printf(“%sn”,buf);
            }
            int main(int argc, char * argv[])
            {
            If(argc >1)
                                        Func(argv[1]);
            }//end of main
             
            該程序在輸入時,并沒有對str的大小進行檢查便直接送入數(shù)組buf,一旦輸入超出buf長度,就產(chǎn)生了最簡單的溢出,當然象這樣的溢出一般只會出現(xiàn)Segmentation fault錯誤,而不能達到攻擊的目的. 這里并沒有進一步深入分析,只是讓大家對溢出有一個大概的概念,在以后將會對其做進一步的分析.
             
            二、 緩沖區(qū)溢出漏洞攻擊方式
            最常見的攻擊手段是通過制造緩沖區(qū)溢出使程序運行一個用戶shell,在通過shell執(zhí)行其他命令. 若該程序輸入root且有suid權限的話,攻擊者就獲得了一個有root權限的shell,此時就可以對系統(tǒng)進行隨意操作了.下面我來介紹一下如何控制程序跳轉到攻擊代碼:
            l         打開記錄(Activation Records)
            在程序中,每一個函數(shù)調用發(fā)生,在堆棧中會留下一個Activation Records,它包括函數(shù)結束時返回的地址,攻擊者通過溢出這些自動變量,使地址指向攻擊程序代碼. 通過改變程序的返回地址,當調用結束時,程序就跳到攻擊者設定的地址,而不是原地址.這類溢出被稱為 stacks mashing attack.
             
            l         函數(shù)指針(Function Pointers)
            void(*foo)(1)定義一個返回函數(shù)指針的變量foo, Function Pointers可用來定位任何地址空間. 所以只需在任何空間內的Function Pointers附近找到一個能溢出的緩沖區(qū),然后溢出它來改變Function Pointers. 在某時刻,當程序通過Function Pointers調用函數(shù)時,程序的流程就按黑客的意圖實現(xiàn)了(典型的溢出程序有:Linux下的Superprobe程序).
             
            l         長跳轉緩沖區(qū)(Longjmpbuffers)
            在C語言中,包含了一個簡單的檢驗/恢復系統(tǒng),稱為setjmp/longjmp.即在檢驗點設定setjmp(buffer),用longjmp(buffer)恢復. 但若攻擊者能夠進入緩沖區(qū)空間,則longjmp(buffer)實際上跳轉到攻擊者的程序代碼. 像Function Pointers, longjmp緩沖區(qū)能指向任何地方,所以攻擊者要做的就是找到一個可供溢出的buffer即可.
             
            最常見的是在一個字符串中綜合了代碼植入和打開記錄. 攻擊者定位或提供溢出的自動變量,然后向程序傳一個超大字符串,在引發(fā)buffer溢出改變打開記錄時植入程序代碼,由此達到入侵系統(tǒng)的目的.
             
            三、 應對遠程緩沖區(qū)溢出攻擊
            對付緩沖區(qū)溢出攻擊的方法不少,但常見的也是最重要有一下四種方式:
            1.     編寫嚴格的代碼
            編寫正確嚴格的代碼是一件有意義但非常耗時的工作, 有C程序設計或匯編語言經(jīng)驗的人會深有體會,盡管軟件的發(fā)展經(jīng)歷了不短的時間了,但漏洞程序依舊存在,因此人們開發(fā)了一些工具和技術來幫助經(jīng)驗不足的程序員編寫安全的程序.例如高級查錯工具,如faultinjection等. 這些工具的目的在于通過人為隨機地產(chǎn)生一些緩沖區(qū)溢出來尋找代碼的安全漏洞.但由于C語言的特點,這些工具不可能找出所有的緩沖區(qū)溢出漏洞. 所以,偵錯技術只能用來減少緩沖區(qū)溢出漏洞,并不能完全地消除其存在. 錯誤的消除還是要靠程序員來編寫.
             
            2.     不可執(zhí)行堆棧數(shù)據(jù)段
            通過操作系統(tǒng)時數(shù)據(jù)斷地址空間不可執(zhí)行,從而使得攻擊者不能執(zhí)行被植入的攻擊代碼,但攻擊者不一定是非要植入攻擊代碼來實現(xiàn)緩沖區(qū)溢出的攻擊,所以這種方法還是存在很多弱點的.
             
            3.     利用程序編譯器的邊界檢查
            植入代碼是引起緩沖區(qū)溢出的一個方面,改變程序執(zhí)行流程是另一方面. 而利用編譯器邊界檢查則使得緩沖區(qū)溢出不可能實現(xiàn),從而完全消除了緩沖區(qū)溢出的威脅,但相對而言代價較大.
             
            4.     指針完整性檢查
            程序指針完整性檢查和邊界檢查略微不同. 程序指針完整性檢查在程序指針被改變之前檢測.因此,即便攻擊者成功改變了程序的指針,也會因先前檢測到指針的改變而失效,這樣雖然不能解決所有問題,但它的確阻止了大多數(shù)的緩沖區(qū)攻擊,而且這種方法在性能上有很大的優(yōu)勢,兼容性也很好.
             
            從長遠來看,要想從根本上消除緩沖區(qū)溢出攻擊,需要對編程模式或CPU體系的基礎性修改才能解決問題. 不過,隨著信息技術的飛速發(fā)展和人們對網(wǎng)絡安全的重視程度不斷加深, 緩沖區(qū)溢出攻擊總會有解決的一天.
            【參考文獻】
            [1] 黑客大曝光. [美]Joel Scambray,Stuart McClure,George Kurtz著.
            [2] The Art and Science of C. [美]Eric S.Roberts,斯坦福大學著.
                   [3]緩沖區(qū)溢出原理及防護. 中科院研究生院 蔣濤著.

            posted on 2007-07-22 03:18 旅途 閱讀(249) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            国产精品美女久久福利网站| 97精品伊人久久久大香线蕉| 无码专区久久综合久中文字幕| 久久亚洲精品成人无码网站| 久久99精品久久久久久久久久| 久久国产精品国产自线拍免费 | 久久久久久伊人高潮影院| 久久福利资源国产精品999| 久久人人爽爽爽人久久久| 久久综合欧美成人| 久久精品国产亚洲av麻豆图片| 国产成人精品久久综合| 青草国产精品久久久久久| 亚洲午夜久久久精品影院| 色综合久久综合中文综合网| 国产免费久久精品丫丫| 久久久久久九九99精品| 久久久久亚洲精品天堂久久久久久 | 久久精品国产99国产精品澳门| 免费一级欧美大片久久网 | 欧美国产精品久久高清| 狠狠色噜噜狠狠狠狠狠色综合久久| 思思久久99热只有频精品66| 国内精品久久久久久久涩爱 | 日本福利片国产午夜久久| 中文国产成人精品久久不卡| 午夜福利91久久福利| 精品熟女少妇aⅴ免费久久| 国产产无码乱码精品久久鸭| 婷婷综合久久中文字幕蜜桃三电影| 三级韩国一区久久二区综合| 精品一久久香蕉国产线看播放| 久久青草国产手机看片福利盒子| 久久综合亚洲欧美成人| 久久精品中文字幕无码绿巨人| 亚洲精品午夜国产VA久久成人 | 婷婷久久综合九色综合绿巨人 | 国产成人99久久亚洲综合精品| 久久综合丁香激情久久| 日本福利片国产午夜久久| 精品国产乱码久久久久久浪潮|