iT邦幫忙

鐵人檔案

2022 iThome 鐵人賽
回列表
Security

模糊測試從入門到放棄 系列

隨著資訊產業的興起,資訊安全的議題也逐漸被人們重視,除了透過人工的方式如逆向、code review 找出程式漏洞之外,自動化的方法如模糊測試 (Fuzzing) 也越來越多人研究。模糊測試的概念在很早期就已經被提出,原理也能輕易猜到:想辦法產生一組輸入能讓程式在讀取後 crash,並且從一開始的黑箱測試,輸入皆隨機產生,到後來灰箱測試,透過分析該次輸入在程式執行的狀態來增進後續輸入的品質。本次我想藉由鐵人賽與各位介紹模糊測試,前期著重於概念與原理,中期帶到實作與分析,後期會分享近期模糊測試的研究方向,統整相關論文貢獻以及要改善的現況。

鐵人鍊成 | 共 30 篇文章 | 21 人訂閱 訂閱系列文 RSS系列文 團隊30 個字以內
DAY 1

[Day 1] 模糊測試概念總覽

此系列文的主題為模糊測試,內容包含但不限於其概念、實作以及演進,對象設定在有一定程式基礎的人。看完後至少會知道模糊測試怎麼運作,如果能完整消化的話,應該就已經...

2022-09-03 ‧ 由 cc85nod 分享
DAY 2

[Day 2] Fuzzing 內部架構

簡單介紹一下 basic block。程式在執行時會因為不同的條件執行不同的程式碼,而不同條件主要就是以 if 來定義,以下方程式碼為例子,當 a == 1 &...

2022-09-04 ‧ 由 cc85nod 分享
DAY 3

[Day 3] 透過 Sanitizer 偵測程式異常

即使程式存在漏洞,也不一定會在執行到有漏洞的程式碼時觸發異常,以下面的程式碼為例子,如果使用者輸入的 idx 落在 0~99 之間則屬於正常範圍,超過 100...

2022-09-05 ‧ 由 cc85nod 分享
DAY 4

[Day 4] 近代 fuzzer 始祖 - AFL - 總覽 & 編譯

Fuzzing 的概念也許已經存在一陣子,不過近期最有影響性的 fuzzer 應該公認為 AFL,實作直觀並且具有完整的框架,code base 不大之外程式碼...

2022-09-06 ‧ 由 cc85nod 分享
DAY 5

[Day 5] 近代 fuzzer 始祖 - AFL - 插樁 & 組譯

插樁介紹 插樁 (instrumentation) 的核心概念為: 在保證原程式邏輯的完整性下,在程式中插入一些程式碼來蒐集 runtime 期間的執行狀態。以...

2022-09-07 ‧ 由 cc85nod 分享
DAY 6

[Day 6] 近代 fuzzer 始祖 - AFL - 插樁程式碼

在 Day 4, 5 已經了解 afl 是如何包裝編譯的過程,並且在組譯時插入程式碼,在此做個小複習: afl-gcc 包裝了 gcc 的執行參數來 comp...

2022-09-08 ‧ 由 cc85nod 分享
DAY 7

[Day 7] 近代 fuzzer 始祖 - AFL - Fuzzer - 初始化 & Fuzzing loop

前幾天已經介紹 afl 在編譯時會對 target 做怎樣的處理,並且了解 fuzzing 時 target 是如何與 fuzzer 做互動。接下來要講 afl...

2022-09-09 ‧ 由 cc85nod 分享
DAY 8

[Day 8] 近代 fuzzer 始祖 - AFL - Fuzzer - 校正 & Fork server

由於所有處理的邏輯都寫在 function fuzz_one(),導致此 function 多達 1600 行,因此會拆成多個部分介紹,其中有些處理會包含機率,...

2022-09-10 ‧ 由 cc85nod 分享
DAY 9

[Day 9] 近代 fuzzer 始祖 - AFL - Fuzzer - Trimming & Mutation

今天主要會介紹 trimming 以及 mutation,並了解 function run_target() 的執行過程,而 run_target() 其實是用...

2022-09-11 ‧ 由 cc85nod 分享
DAY 10

[Day 10] 近代 fuzzer 始祖 - AFL - Fuzzer - Interesting input

每次做完 mutation 都會執行 common_fuzz_stuff(),而此 function 會呼叫 run_target() 以及 save_if_i...

2022-09-12 ‧ 由 cc85nod 分享