• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    UNIX下的緩沖區溢出深度防御體系

    發布: 2009-6-09 14:05 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 40次 | 進入軟件測試論壇討論

    領測軟件測試網

    二、庫函數鏈接保護
    ------------------
    ◆Formatguard
        Formatguard是個Glibc的補丁,遵循GPL,它使用特殊的CPP(gcc預編譯程序)宏取代原有的*printf()的參數統計方式,它會比較傳遞給*printf的參數的個數和格式竄的個數,如果格式竄的個數大于實際參數的個數,就判定為攻擊行為,向syslogd發送消息并終止進程。如果弱點程序調用Glibc以外的庫,formatguard就無法保護。
    www.immunix.org

    ◆Libsafe
        Libsafe是一個動態鏈接庫,在標準的C庫之前被加載,主要加固了gets(),strcpy(),strcat(),sprintf ()……等容易發生安全問題的C函數,它設計為只針對stack smashing && format string類型的攻擊。Alert7很早也寫過如何繞過libsafe保護的文章。
    http://www.research.avayalabs.com/project/libsafe/

    --------------
    三、棧不可執行
    --------------
    ◆Solar designer’s nonexec kernel patch
        從名字可以看出這是一個Linux上的內核補丁,該補丁最主要的特性是:用戶區堆棧不可執行[Non-executable User Stack]由于x86 CPU上并沒有提供頁(page)執行的bit位,所以該補丁通過減小代碼段的虛擬地址來區分數據段和代碼段,程序執行流返回 0xC0000000以下一段用戶堆?臻g的操作都被認為是緩沖區溢出攻擊行為,隨即產生一個通用保護異常而終止進程。這樣把shellcode安置在 buffer或環境變量(都位于堆棧段)的exploit都會失效。當然其安全也不是絕對的,利用PLT返回庫函數的文章里詳細描述了突破該補丁的攻擊方法。    該補還有一些其他的特性:動態鏈接庫映射到地址低端(0x00開始)、限制符號鏈接攻擊、/tmp目錄限制、/proc目錄限制、 execve系統調用加固等。
        www.openwall.com

    ◆Solaris/SPARC nonexec-stack protection
        在Solaris/SPARC下可以通過去掉堆棧的執行權限來禁止堆棧段執行,方法如下,在/etc/system中加入兩條語句:
        Set noexec_user_stack = 1
        Set noexec_user_stack_log = 1
    第一條禁止堆棧執行,第二條記錄所有嘗試在堆棧段運行代碼的活動。Reboot之后才會生效。
    所有只讓棧不可執行的保護是有限的。Return-to-libc、fake frame之類的技術都可以突破限制,不過棧不可執行的保護已經極大了提升了攻擊難度。

    ------------------
    四、數據段不可執行
    ------------------
    ◆kNoX
        Linux內核補丁,功能:數據段的頁不可執行,撤銷共享內存,加強對execve系統調用的限制,對文件描述符0、1、2的特殊處理,/proc目錄的限制,FIFO限制,符號鏈接限制,該補丁只支2.2內核。
    http://isec.pl/projects/knox/knox.html

    ◆RSX
    Linux內核模塊,數據段(stack、heap)不可執行。
        http://www.starzetz.com/software/rsx/

    ◆Exec shield
        Exec-shield從內核態顯示的跟蹤一個應用程序所包含的可執行映像的最大虛擬地址,動態的維護這個“可執行虛擬地址的最大值”稱為“可執行限界”,每次發生進程切換的時候調度進程就會用這個值更新代碼段描述符寫入GDT,exec-shield動態的跟蹤每個應用程序,所以每個程序運行時都有不同的“可執行限界”,因為可執行限界通常是個很低的虛擬地址,所以除了stack以外mmap()映射的區域以及malloc()分配的空間都處在可執行限界之上,因此都是不可執行的。
       

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    32/3<123>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>