20199121《網絡攻防實踐》綜合實踐


1、論文介紹

  • Title
    • Angora: Efficient Fuzzing by Principled Search
  • Source

    • IEEE Symposium on Security and Privacy,2018
  • Authors

    • Peng Chen ;ShanghaiTech University ; chenpeng@shanghaitech.edu.cn

    • Hao Chen ; University of California, Davis ; chen@ucdavis.edu

Fuzzing是一種流行的發現軟件錯誤的技術。

然而,最先進的fuzzer的性能還有很多需要改進的地方。基於符號執行的fuzzer產生高質量的輸入,但運行速度慢;而基於隨機變異的fuzzer運行速度快,但難以產生高質量的輸入。該論文提出了一種新的基於變異的Angora,它的性能遠遠優於最新的fuzzer。

Angora的主要目標是通過解決路徑約束而不需要符號執行來增加分支覆蓋率。為了有效地解決路徑約束問題,論文引入了幾個關鍵技術:可擴展的字節級污點跟蹤、上下文相關的分支計數、基於梯度下降的搜索和輸入長度探索。

2、基礎知識

  • 軟件脆弱性研究中主要有三種形式:模糊測試、污點分析、符號執行。

    • 模糊測試(Fuzzing)

      一般來說,模糊測試通過生成大量的隨機測試用例,並以這些測試用例為輸入執行被測程序,希望能到導致程序異常或崩潰,從而捕捉到導致程序異常或崩潰的錯誤或安全漏洞。模糊測試之所以能夠受到軟件測試業界的青睞,是因為它具有以下的優點:1)模糊測試可以針對任意輸入的程序,可在程序源代碼或可執行字節碼上進行;2)模糊測試針對實際可執行的被測程序,不會出現靜態測試技術中的誤報問題;3)模糊測試不需要進行大量的准備工作,只需要提供被測程序及其初始文件或符合規范的輸入,便可進行模糊測試用例生成,對軟件進行安全漏洞檢測;4)模糊測試易於自動化實現。在模糊測試技術的眾多優點中,易於自動化實現是其能夠被人們廣泛關注的主要優點之一。

    • 符號執行

      符號執行是一種信息流分析技術,它在程序執行過程中以符號輸入代替實際輸入,將程序變量符號化,並在分析中通過插樁(Instrumenation)不斷收集路徑約束條件(Path Condition),通過約束求解器(Solver)生成測試用例以發現軟件存在的脆弱性。

      • 插樁是指通過注入插樁代碼,來分析二進制應用程序在運行時的行為的方法。

      符號執行的最大問題是,由於軟件分支數目和循環次數巨大,存在着天文數字的執行路徑,導致符號執行在實際應用中具有潛在的路徑爆炸問題,這已經成為符號執行應用的最大瓶頸。

    • 污點分析

      污點分析是檢測蠕蟲攻擊和自動提取行為特征的有效方法。該方法將一切來自於非信任源的數據標記為“污染”,對“污染”數據進行追蹤,所有對“污染”數據的運算操作結果均會標記為“污染操作”,然后根據各種安全策略對“污染操作”進行分析,凡違反安全策略的“污染操作”都會發出警報,以此達到發現軟件脆弱性的目的。

  • Fuzzing技術分類(按測試用例來分)

    • 基於隨機變異(Mutation-based)

      是將一個(或一組)正常的符合規范(或協議)的初始輸入文件作為初始種子(seed),通過對種子進行隨機變異,生成大量的測試用例,對軟件進行安全漏洞檢測,是目前廣泛使用的一種模糊測試技術。但基於變異的模糊測試用例生成對種子的依賴性較強,不同的初始種子,其安全漏洞檢測效果也大不一樣。因此,如何選取合適的種子,進行基於變異的模糊測試用例生成,是提高模糊測試技術安全漏洞檢測能力的一個關鍵問題。

    • 基於模板(Generation-based)

      不需要種子文件,依賴於安全人員結合自己的知識,給出輸入數據的模板,構造豐富的輸入測試數據。

  • 覆蓋率

    If( a > 2)
        a=2;
    if (b > 2)
        b=2;
    else
        a=3;b=4;
    
    • 路徑覆蓋( 覆蓋程序中所有可能的路徑 ): 4個數據集(a=3,b=3 ; a=1, b=3 ; a=3,b=2 ; a=1,b=2)
    • 分支覆蓋( 使得程序中每個判斷的取真分支和取假分支至少經歷一次 ): 4個數據集(a=3,b=3 ; a=1, b=3 ; a=3,b=2 ; a=1,b=2)
    • 代碼行覆蓋: 2個數據集(a=3,b=3 ; a=3,b=2)
  • AFL介紹

    灰盒模糊測試介於白盒模糊測試和黑盒模糊測試之間,是一種針對程序可執行代碼進行的模糊測試方法。灰盒模糊測試是基於二進制插樁而不是源代碼分析上。基於覆蓋的灰盒模糊測試(Coverage-based grey-box fuzzing)試圖在生成大量隨機測試用例的生成過程中,更有效地進行路徑探索,增加代碼覆蓋率,因此,基於覆蓋的灰盒模糊測試已成為目前檢測軟件安全漏洞的一種有效測試方法。

    AInerican Fuzzy Lop (AFL) 是目前使用廣泛的一種基於覆蓋的灰盒模糊測試工具。它通過對被測程序的可執行代碼進行插樁,跟蹤記錄測試用例的覆蓋情況;以輸入(種子)的二進制字節、雙字節、四字節為單位,進行隨機測試用例的生成,以覆蓋新基本塊為指導,進行種子隊列的更新,生成大量的隨機測試用例,對被測程序進行測試,從而捕捉到導致程序異常或崩潰的錯誤或安全漏洞。但AFL難以發現隱藏在被測程序循環或嵌套條件語句深處的錯誤和安全漏洞。

3、論文創新點及結果

論文創新點

AFL和其他類似的fuzzer使用分支覆蓋作為度量。不同的是,Angora通過解決路徑約束而不使用符號執行來探索程序的狀態。Angora跟蹤未探明的分支,並試圖解決這些分支的路徑限制。 有效地解決路徑約束的技術如下:

  • 1)用上下文敏感的方式進行分支覆蓋

    AFL所使用的上下文不敏感的分支處理,不能識別相同分支潛在的不同內部狀態。相較於AFL只將分支的始塊和終塊作為分支特征,作者在此基礎上又加入了上下文特征

    如下圖所示,f中的x參數是輸入的一部分,而trigger所控制的分支,受 "是否第一次調用f" 這個上下文環境影響。該分支是一種內部狀態。在第一次運行期間,程序接受輸入10。當它在第19行調用 \(f()\) 時,它在第4行執行\(true\)分支。稍后,當它在第21行調用 \(f()\) 時,它在第10行執行\(false\)分支。由於AFL對分支的定義是上下文不敏感的,它認為兩個分支都已執行。后來,當程序接受一個新的輸入01時,AFL認為這個輸入不會觸發新的內部狀態,因為第4行和第10行的分支都是在前一次運行中執行的。但事實上,這個新輸入觸發了一個新的內部狀態,因為當輸入input[2]=1時,它將導致第6行崩潰。

    Angora用一個三元組\((l_{prev},l_{cur},context)\)定義一個分支,其中 \(context\)\(h(stack)\)\(stack\)包含了調用棧的狀態。利用對棧進行 \(hash\) 的方法,來獲取上下文。為了避免產生過多的獨立分支,作者使用的hash函數會異或調用棧。即 \(h(stack)=⊕cs∈stackID(cs)\)

  • 2)字節級的污點追蹤

    污點跟蹤的代價是昂貴的,特別是跟蹤的字節不是相互獨立的情況下,所以AFL沒有使用這個。

    在污點追蹤中,作者使用某一字節在輸入中的偏移作為taint lable,記為 \(t_x\) ,將 \(t_x\) 與變量 \(x\) 關聯taint lable一個簡單的實現是用一個 bit vector,為了減小taint lable的存儲空間,該方案維護一個表,這個表的索引是taint lable,這種情況下的數據結構在面對UNION操作時代價很大。

    於是作者又提出了新的數據結構,數據結構包含兩個組件:

    • 一個二叉,保存 bit vectorlabel 的映射關系。每個 bit vector 表示為樹上的一個結點 \(v_b\),層次為 \(∣b∣\)\(∣b∣\)\(b\) 的長度。\(v_b\) 保存 \(b\)label
    • 查詢表,記錄從 labelbit vector 的映射

    然后作者又分析了空間復雜度,確實減少了內存占用。

    通過這種污點分析,可以得到輸入的使用情況,繼而判斷各個字節作為變量的長度,以便進一步的進行數據突變等操作。

  • 3)使用梯度下降來求解條件語句

    字節級別的污點跟蹤輸入中的哪些字節傳入條件表達式中進行計算。但是如何變異這些輸入來探索未探索到的區域? 目前很多fuzzer都是隨機地變異輸入或使用粗糙的啟發式方法。 如果使用符號執行的方法,成本太高。

    作者把探索區域的問題視為搜索問題,選擇使用梯度下降的求解的方法來獲得滿足條件語句的值。假設有一個黑盒函數\(f(x)\),其中\(x\)是一個值的向量。對於\(f(x)\)有三種約束:

    1. \(f(x)<0\)
    2. \(f(x)≤0\)
    3. \(f(x)==0\)

    然后一些比較就可以轉換為上述三種約束了,如下表,作者將條件判斷語句轉換成誤差函數,而后利用梯度下降的方法求解誤差函數,進一步的可實現對條件語句的滿足。

    正好本學期金鑫老師的機器學習課程講解了梯度下降算法,所以這部分理解起來不太困難。在機器學習中,梯度下降常常會陷入局部最優, 但是在fuzzing中不存在這個問題。 若一個約束是\(f(x)< 0\),我們只需要找到滿足這個約束的 \(x\) 就行了,而不需要找到 \(f(x)\) 的全局最小值。

    在神經網絡中,求偏導可以得到\(f(x)\)的解析形式,但是在fuzzing時\(f(x)\)是黑盒的。對於這個問題采取使用數值近似的方法:

    對於這個問題采取使用數值近似的方法:
    \(\frac{\partial f(x)}{\partial x_i}=\frac{f(x+\delta v_i)-f(x)}{\delta}\) 其中\(v_i\) 是第 \(i\) 維的單元向量

    理論上梯度下降可以解決任何約束,在實際中,梯度下降的速度依賴於數學函數的復雜度:

    • 如果\(f(x)\)是單調或者凸函數,梯度下降可以很快的找到解,即使\(f(x)\)是一個復雜的解析形式
    • 若局部最小值滿足約束,那么找到解也是很快的
    • 若局部最優找不到解,Angora會隨機采樣到其他的\(x′\),然后重新進行梯度下降來找到另一個滿足約束的局部最優

    下圖算法5即搜索算法,每次迭代從輸入 \(x\) 開始,然后計算\(f(x)\)\(x\)處的梯度\(\nabla_x f(x)\) ,然后進行梯度下降操作,\(x\leftarrow x - \epsilon\nabla_x f(x)\),其中\(\epsilon\)是學習率。

  • 4)變量大小與類型判斷

    \(x\) 是輸入中值的向量。

    我們可以把\(x\)中的每一個字節作為一個元素。但是在梯度下降時,由於類型不匹配會產生問題。

    假設四個連續的字節序列 \(b_3b_2b_1b_0\) 是一個整數,\(x_i\)表示一個整數值。當計算\(f(x+δvi)\)時,我們應該\(\delta\) 到整數中。但是這樣簡單地把 \(x\) 中的每個字節 \(b_i\) 看做一個值,把其中某個字節增加后再拼接起來,在求偏導數就會出現問題。

    為了抑制這個問題,需要確定:

    1. 輸入中的哪些字節常作為一個值來使用
    2. 值的類型是什么

    作者把第一個問題稱為shape inference,第二個問題稱為type inference,並在動態污點分析時解決他們。

    對於shape inference,初始化輸入中的所有字節都是獨立的。在污點分析期間,當插樁讀到字節序列符合某些原始的大小(1,2,4,8字節等),Angora就會把這些字節標記為同一個值。當產生沖突時,Angora選擇匹配到的最小的size。對於type inferenceAngora依賴於在這些值上的操作的插樁。

    如果在一個有符號整數上進行插樁操作,Angora就會把兩個操作數視為有符號整數。若一個值同時作為有符號和無符號整數,則把他視為無符號類型。如果Angora沒有成功推導值的精確的大小和類型,梯度下降並不會阻礙它找到一個結果,只是搜索時間會更長。

    變量在污點分析時已經判斷過大小了,而類型(是否帶符號)可以通過語義判斷。當明確了變量的大小和類型后,基於條件語句構造的誤差函數中變量的定義會更准確。

  • 5)探測輸入的長度

    輸入太短沒有效果,太大會爆內存。因此需要得出合適的輸入長度。作者認為只有當增加長度能得到新分支時,才增加長度,也就是使得讀取長度盡可能滿足程序的需要。

    具體做法是,在污點跟蹤時,Angora把read相關函數調用的目標內存地址和相關的字節偏移相關聯,同時也記錄read調用的返回值,如果返回值在條件語句中使用且約束不滿足,則Angora增加輸入長度。

結果

在和其他fuzzer的比較中,fuzzer運行使用CPU核心數這一變量被統一限定為單核(注:作者提到Angora支持多核,但是實驗中未作改變核心數的縱向比較)。每種實驗做5次,取平均結果。

  • 1)通過LAVA語料與其他fuzzer比較 (能力與效率)

    LAVA技術可以用來在源碼中生成現實bug,LAVA-M語料集在每個程序里添加了許多bug。LAVA-M包含了四種 GNU coretutils程序:uniq, base64, md5sum, who。作者使用這些語料來做和其他程序做對比測試。
    結果如Table 1Angora對於發現bug的能力明顯優於現有fuzzer,甚至發現了一些在LAVA作者預期內,但是沒做處理的BUG。

    對於Angora明顯強於較好的其他fuzzer(VUzzerSteelix)的原因,作者認為有兩點:

    • 追蹤了輸入字節的偏移
    • 對條件表達式做了有力的計算

    通過Figure 4我們可以看出Angora時間效率,本圖測試樣本為who,在前5分鍾就可以發現近1000個bug,雖然之后發現bug的速率下降,但是45分鍾的運行已經能讓他發現超過1500個bug。

  • 2)通過未修改的現實軟件測試Angora

    作者選用AFLAngora做對比,由於測試的是現實軟件,bug較少,所以作者除了測試發現新bug,還對運行覆蓋情況做了測試。其中對新bug發現能力的檢測,以觸發unique crash的數量為標准。
    分別經過5小時的運行,Angora發現的unique crash數多倍於AFL。同時,通過表5我們可以看出,Angora在代碼覆蓋率上對AFL有所改進,在jhead做樣本時的實驗中Angora在行覆蓋和分支覆蓋上,分別有127.4%和144.0%的增長。

  • 3)上下文敏感的分支計數

    • 效果
      在前文中提到,作者認為,如果同一分支能以來源於不同的調用者區分開來(改分支計數部分),那么fuzzer可以找到更多bug。為了驗證這一假設,作者分別使用是否帶有上下文敏感機制的Angora,來測試file程序。
      結果是帶有上下文敏感的Angora在代碼覆蓋上不明顯強於非上下文敏感,但是帶有上下文敏感的Angora可以發現6個unique crash,而不帶有的不能。
    • hash碰撞
      AngoraAFL都使用了hash表來存儲分支,增加上下文敏感機制使得unique分支的數量至多是不帶有上下文敏感機制時的8倍左右。因此,作者使用了16倍於AFL的hash表大小的hash表。盡管Angora的hash表大小與cache大小不適配,他的查找機制使得這種不適配的性能影響得到減弱。
  • 4)基於梯度下降的搜索算法

    Angora對限制條件進行梯度下降求解比隨機突變和magic bytes突變的方法能求解更多的條件表達式,如Table 8所示。 此外,沒使用符號執行,使得在fuzz大程序上更有效率 。

  • 5)輸入長度探測

    Angora對比AFL的隨機長度機制,以更少的增長次數等到更多的有用路徑,同時,更短的平均執行長度,使得Angora運行得更快。

  • 6)執行速度

    相較於AFL,如果沒有taint機制,AngoraAFL的插樁機制擁有相同的運行速度。從Table 10 可以看出,在taint機制的影響下,Angora的運行效率比AFL稍低,相同時間處理的輸入較少。不過結合之前的實驗,在fuzzer的執行結果方面,Angora效率更高。

4、復現

1)Angora的安裝

  • 下載 Angora ,其路徑為/home/zhangtuoning/ztn/Angora​,其百度雲鏈接如下。

    git clone https://github.com/AngoraFuzzer/Angora
    

    鏈接:https://pan.baidu.com/s/1y9D7aS9YW4Y4_z2m811uMw
    提取碼:951g

  • 安裝cmake、cargo,命令apt-get install cmakeapt-get install cargo

  • 安裝LLVM,在Angora目錄下新建文件夾llvm,運行:

    PREFIX=/home/zhangtuoning/ztn/Angora/llvm  ./build/install_llvm.sh
    

    由於網絡原因可能會一直卡在 wget下載llvm的壓縮包的地方,可以點擊該鏈接手動下載,將下載后的壓縮包放在llvm文件夾下,再將install_llvm.sh中的wget那一行語句刪除。llvm的壓縮包百度雲鏈接如下。

    鏈接:https://pan.baidu.com/s/1FPyo8dzKsvG2BjBYL77F9A
    提取碼:cjw1

    按照他的提示添加環境變量,命令如下:

    #export PATH=/home/zhangtuoning/ztn/Angora/llvm/clang+llvm/bin:$PATH
    #export LD_LIBRARY_PATH=/home/zhangtuoning/ztn/Angora/llvm/clang+llvm/lib:$LD_LIBRARY_PATH
    

    附tar.xz解壓方法

    # xz -d XXX.tar.xz
    # tar -xvf XXX.tar
    
  • 安裝Rust

    參考 https://rustup.rs/ 給出的命令curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,不能一步到位的話參考 https://blog.csdn.net/sinat_37954989/article/details/82913413 中的方法手動安裝。

  • 安裝Angora,在Angora目錄下運行 ./build/build.sh即可。

  • CPU設置,echo core | sudo tee /proc/sys/kernel/core_pattern

  • 測試Angora,在Angora/tests/目錄下運行,./test.sh mini

2)LAVA-M測試集的安裝

  • LAVA是由Brendan Dolan-Gavitt等人提出的用於在程序中插入bug的技術方法,其相關論文《LAVA: Large-scale Automated Vulnerability Addition》發表在了2016年的S&P上。

    通過LAVA在uniq、who、md5sum、base64四個程序上進行bug插入而形成的測試集即為LAVA-M。

    LAVA-M被廣泛應用於fuzz領域的工具效果評估。

  • LAVA-M下載地址 http://panda.moyix.net/~moyix/lava_corpus.tar.xz ,百度雲鏈接如下。

    鏈接:https://pan.baidu.com/s/12QsrCUYY7R43Nrb-2qx2iA
    提取碼:636z

  • 以base64為例介紹安裝方法,進入base64文件夾,./validate.sh使用腳本進行安裝。

    如果顯示Validated 0/44bugs,則可能的解決辦法為:

    • 缺少了libacl,通過命令sudo apt-get install libacl1-dev安裝即可。

    • validate.sh中的 --prefix要改為絕對路徑/你的路徑/lava_corpus/LAVA-M/base64,原腳本中提供的命令為

      ./configure --prefix=`pwd`/lava-install LIBS="-lacl" &> /dev/null
      

3)使用AFL對LAVA-M及進行測試

  • LAVA-M安裝時為自動化腳本安裝方法,安裝后的base64默認為gcc編譯,為了使用AFL系列工具對LAVA-M進行測試,我們需要將編譯選項進行調整,以生成被afl-gcc插樁后的base64。 設置環境如下。

    export CC=afl-gcc
    export CXX=afl-g++
    

    再運行腳本./validate.sh,插入bug數量仍為44/44,即安裝成功。

  • 生成被afl-gcc插樁后的base64,之后即可通過AFL系列工具進行測試。

4)使用Angora對LAVA-M及進行測試

Angora的GitHub主頁對LAVA-M的安裝及測試方法進行介紹 ,其中主要介紹了如何使用gllvm對LAVA-M進行編譯。 接下來使用angora-clang進行編譯安裝

  • 在coreutils-8.24-lava-safe目錄下,使用angora-clang進行編譯:

    CC=/home/zhangtuoning/ztn/Angora/bin/angora-clang CXX=/home/zhangtuoning/ztn/Angora/bin/angora-clang++ LD=/home/zhangtuoning/ztn/Angora/bin/angora-clang ./configure --prefix=pwd/lava-install LIBS="-lacl"
    

    此處若報錯:

    根據提示修改環境變量export FORCE_UNSAFE_CONFIGURE=1, 一堆checking通過后生成Makefile:

  • 依次使用TRACK模式和FAST進行編譯安裝,先生成TRACK模式下插樁編譯的base64,復制為base64.taint。 :

    USE_TRACK=1 make -j
    make install
    

    再使用FAST模式進行編譯,將FAST模式下生成的base64復制為base64.fast。注意,base64.fast是直接可以通過輸入input進行crash的插入校驗。 :

    make clean
    USE_FAST=1 make -j
    make install
    
  • 最后即可進行測試:

    angora-fuzzer -i input -o output -t base64.taint -- base64.fast -d @@
    

Table8 即是進行上述操作得到的結果,只不過這里只以base64為例。

5)使用Angora對GNU Binutils 2.32進行測試

與LAVA-M的操作類似,GNU Binutils 2.32是常用的評估漏洞挖掘工具效率的Benchmark軟件。

  • 通過./configure配置Make所需環境變量 , 在Binutils 2.32所在目錄下運行:

    CC=/home/zhangtuoning/ztn/Angora/bin/angora-clang CXX=/home/zhangtuoning/ztn/Angora/bin/angora-clang++ LD=/home/zhangtuoning/ztn/Angora/bin/angora-clang PREFIX=/home/zhangtuoning/ztn/binutils-2.32 ./configure --disable-shared
    

    成功配置並生成Makefile文件:

  • 對Binutils進行污點跟蹤編譯, 在Binutils 2.32所在目錄下運行:

    USE_TRACK=1 make -j
    make install
    

    編譯安裝完成后,在binutils目錄下生成了被污點跟蹤技術插樁編譯產生的可執行文件objdump等。創建target目錄,在/home/XXX/目錄下建立文件夾/target,在/home/XXX/target/目錄下分別建立文件夾/fast及/taint,將binutils目錄下的可執行文件objdump、readelf等復制到/root/target/taint/目錄下,並重命名為objdump.taint、readelf.taint等。

  • 對Binutils進行快速編譯, 在Binutils 2.32所在目錄下運行:

    make clean
    USE_FAST=1 make -j
    make install
    

    編譯安裝完成后,在binutils目錄下生成了快速編譯產生的可執行文件objdump等,與上一步類似,將binutils目錄下的可執行文件objdump、readelf等復制到/home/XXX/target/fast/目錄下,並重命名為objdump.fast、readelf.fast等。

  • 對objdump -d進行測試,在/home/XXX/目錄下建立種子文件夾/input/,放入ELF可執行文件,作為種子對objdump進行測試,這里選取AFL提供的ELF文件格式的初始種子。

    在Angora目錄下運行:

    ./angora_fuzzer -I /home/zhangtuoning/input -o /home/zhangtuoning/output -t /home/zhangtuoning/target/taint/objdump.taint -- /home/zhangtuoning/target/fast/objdump.fast -d @@
    

6、實驗思考

近年來,學術界對Fuzzer技術有較為密切的關注。 因為本文是出自18年的S&P會議,所以我也關注了同年的另外兩篇來自該會議的 CollAFL: Path Sensitive FuzzingT-Fuzz: fuzzing by program transformation 關於fuzzer的文章。其中T-Fuzz提出的改進方法是直接將目標程序中的校驗語句給去除,然后進行fuzzing測試,找到了bug之后,再看看觸發bug的這些輸入會不會通過校驗測試,這樣,從發現的bug里面驗證是否輸入合法,相比於正向的去求解總共有哪些合法的解,復雜性降低。 而本文提出的用上下文敏感的方式進行分支覆蓋等方法,也是對測試深度、速度等的優化。

在復現過程中深刻的體會到,做科研絕不是紙上談兵的事情,有了好的idea之后,更難得是如何實現以及如何驗證。在這一點上,我覺得Angora的開發團隊做得很棒。由於本人是第一次接觸fuzzing技術,光是弄懂論文的內容就花了不少功夫,也就沒有仔細研究源碼,不過由此帶來的科研思考是值得的。

7、學習總結&課程建議

不管是疫情下的學習生活,還是這門課本身,這段日子回憶起來都是難忘的吧。

本科階段上網絡攻防課的時候總是囫圇吞棗,“原理?原理和我有什么關系?我要做一輩子的工具黨!”那個時候就是抱着這種心態完成了各種實驗,以至於這學期上課的狀態就是:嗯這個我學過,但我不會(理直氣壯 后來大四畢業去面試了幾個大廠,后知后覺的才發現知識不會說謊,前輩的話還是得聽。雖然時至今日我仍然經常懷疑自己是不是不適合讀研,但好在已經在思想上與自己和解,因為當你意識到你學的所有總有一天會回報你的時候,就不會再以應付的心態去完成作業了。

這學期的實驗真的挺多的,也常常會抱怨會吐槽,但學到了很多是真的,自學的能力越來越強了也是真的。所以在此想對王老師說一聲感謝,也想對在電腦面前一坐就是一整天抓耳撓腮的自己說一聲感謝。接下來,又是新的學習開始了。

關於這門課的建議,首先非常贊同老師以實踐為主的教學方式,希望老師在之后的教學過程中,優化實驗深度與廣度,對於實驗的驗收及課堂驗收形式做一些改進。其實有感受到老師在不斷的優化,但個人覺得還是應該稍微穿插一些理論的講解,因為我們有時候查閱很多資料都理解不了的內容,可能老師一句點撥就豁然開朗而且印象更加深刻。其次希望老師可以結合上課內容推薦一些研究點。

最后,再次感謝老師的辛苦付出【畢竟我們做了多少東西,老師就要批改多少東西啊啊啊啊

不斷學習,不斷進步,共勉。

參考資料

Angora

漏洞挖掘之亂拳打死老師傅——Fuzzer

fuzzing工具之Angora的安裝與使用

使用Afl-fuzz (American Fuzzy Lop) 進行fuzzing測試


免責聲明!

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



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