ASAN


ASAN簡介

ASAN(Address Sanitizer)是linux下的內存檢測工具,早先是LLVM中的特性,后來被加入GCC 4.9,現被clang和gcc支持,用於運行的時候對內存進行檢測,以達到發現內存漏洞的效果。

在開啟ASAN后。afl插樁則會在目標代碼的關鍵位置添加檢查代碼,例如:malloc(),free()等,一旦發現了內存訪問錯誤,便可以SIGABRT中止程序。

注意:
例如越界讀等內存訪問錯誤不一定會造成程序的崩潰,所以在沒有開啟ASAN的情況下,許多內存漏洞都無法被AFL給發現。所以在編譯二進制代碼的時候,強烈建議開啟ASAN。
ASAN開啟后的fuzzing會消耗更多的內存,這是需要注意的因素,對於32位的程序,基本上800MB即可;但64為程序大概需要20TB,所以,使用ASAN的話,建議添加CFLAGS=-m32來限制編譯目標為32位,
否則,可能應為64位消耗內存過多而造成程序崩潰。
在使用了ASAN之后,可以再alf-fuzz的時候通過選項-m來指定使用的內存上限。啟用了ASAN的32位程序,一般設置-m 1024即可。

ASAN的使用

ASAN是GCC支持的一個性能,所以,在使用ALF對軟件進行編譯之前,只需要設置環境變量即可,指令如下:

cd packet
export AFL_USE_ASAN=1 
env

ASAN的開啟,如果是針對小程序的話,只需要在編譯的同時,加上選項--fsanitizer=address即可。

編譯結束之后,為了保證我們的軟件成功的開啟了ASAN並且在目標代碼的關鍵位置插入了檢查代碼,我們還需要用命令進行檢測,命令如下:

strings ffmpeg | grep 'asan'

若已經成功的開啟ASAN編譯了目標軟件,則會看到如圖結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM