国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

政府網(wǎng)站建設(shè)問題nba中國官方網(wǎng)站

政府網(wǎng)站建設(shè)問題,nba中國官方網(wǎng)站,深圳龍華區(qū)跟進(jìn)廣州政策,網(wǎng)站gbk大語言模型擁有的強(qiáng)大能力可以用來輔助多種工作,但如何有效的輔助仍然需要人的精巧設(shè)計(jì)。分享一篇發(fā)表于2024年CCS會(huì)議的論文PromptFuzz,它利用模型提示生成模糊測(cè)試驅(qū)動(dòng)代碼,并將代碼片段嵌入到LLVM框架中執(zhí)行模糊測(cè)試。 論文摘要 制作高質(zhì)…

大語言模型擁有的強(qiáng)大能力可以用來輔助多種工作,但如何有效的輔助仍然需要人的精巧設(shè)計(jì)。分享一篇發(fā)表于2024年CCS會(huì)議的論文PromptFuzz,它利用模型提示生成模糊測(cè)試驅(qū)動(dòng)代碼,并將代碼片段嵌入到LLVM框架中執(zhí)行模糊測(cè)試。

論文摘要

制作高質(zhì)量的模糊測(cè)試驅(qū)動(dòng)程序不僅耗時(shí)而且還需要對(duì)被測(cè)目標(biāo)有深入的了解,即使是最先進(jìn)的自動(dòng)化模糊測(cè)試驅(qū)動(dòng)程序生成技術(shù)也未能達(dá)到預(yù)期。雖然用被測(cè)目標(biāo)代碼派生(OSS-Fuzz)的方式可以達(dá)到深度狀態(tài),但是程序邏輯的覆蓋范圍有限。解釋性模糊測(cè)試(Hopper)可以探索多數(shù)接口調(diào)用,不過需要在較大的搜索空間進(jìn)行多次嘗試。

論文提出了 PromptFuzz ,一種覆蓋引導(dǎo)的模糊器,它可以迭代生成模糊測(cè)試驅(qū)動(dòng)程序來探索未被發(fā)現(xiàn)的庫程序代碼。通過使用大模型提示詞探索被測(cè)程序的接口調(diào)用,本文提出了幾種關(guān)鍵技術(shù),包括:1)指導(dǎo)程序生成,2)錯(cuò)誤程序驗(yàn)證,3)覆蓋引導(dǎo)的提示變異,4)變量約束的模糊器調(diào)度。PromptFuzz 在 14 個(gè)真實(shí)的庫程序上進(jìn)行了評(píng)估,模糊測(cè)試驅(qū)動(dòng)程序的分治覆蓋率相比于 OSS-Fuzz 和 Hopper 分別高出 1.61 倍和 1.63 倍。此外,所提方案在 49 次崩潰中檢測(cè)到了 33 個(gè)新的漏洞,其中 30 個(gè)漏洞已得到相應(yīng)社區(qū)的確認(rèn)。

1 背景介紹

模糊測(cè)試對(duì)軟件的安全性和可靠性至關(guān)重要。OSS-Fuzz為開源軟件部署了最先進(jìn)的模糊測(cè)試器,截至2023年2月,已在850個(gè)項(xiàng)目中發(fā)現(xiàn)并解決了8900多個(gè)漏洞和28000個(gè)錯(cuò)誤。開發(fā)者會(huì)選擇合適的模糊測(cè)試器(Fuzzer)并編寫高質(zhì)量的模糊測(cè)試驅(qū)動(dòng)程序(Fuzz Driver),驅(qū)動(dòng)程序會(huì)解析來自模糊測(cè)試器的輸入并調(diào)用被測(cè)目標(biāo)(Target or Library)的程序代碼。然而,編寫高質(zhì)量的模糊測(cè)試驅(qū)動(dòng)程序具有挑戰(zhàn)性,因?yàn)樗群臅r(shí)又需要對(duì)被測(cè)目標(biāo)有深入的了解。手動(dòng)編寫的模糊測(cè)試驅(qū)動(dòng)程序通常只調(diào)用了被測(cè)目標(biāo)的一小部分功能,限制了模糊測(cè)試的能力。

與手動(dòng)編寫的模糊測(cè)試驅(qū)動(dòng)程序相比,自動(dòng)化技術(shù)通過從源代碼或運(yùn)行時(shí)反饋中學(xué)習(xí)被測(cè)目標(biāo)的接口調(diào)用情況,從而派生出模糊測(cè)試驅(qū)動(dòng)程序。FUDGE,FuzzGen,UTopia方案從源代碼中采用靜態(tài)分析的方式提取接口調(diào)用代碼,而APICraft,WINNIE則從進(jìn)程執(zhí)行中動(dòng)態(tài)跟蹤記錄接口的調(diào)用順序。Hopper是最先進(jìn)的模糊測(cè)試驅(qū)動(dòng)程序生成解決方案(與本文同一團(tuán)隊(duì)的工作,發(fā)表于2023年CCS會(huì)議),它會(huì)將對(duì)被測(cè)目標(biāo)的模糊測(cè)試問題轉(zhuǎn)化為解釋性模糊測(cè)試問題,從接口調(diào)用的動(dòng)態(tài)反饋中學(xué)習(xí)有效的接口使用情況。盡管可以覆蓋到大多數(shù)接口函數(shù),但Hopper需要在廣闊的搜索空間中進(jìn)行多次嘗試,才能找到有用且滿足深度的接口調(diào)用序列。

大語言模型(LLM)在生成代碼方面有出色的表現(xiàn),可以在不依賴被測(cè)目標(biāo)代碼的情況下可以有效地探索接口使用情況。以GPT系列為例,它們?cè)趶V泛的代碼預(yù)料庫上進(jìn)行過訓(xùn)練,能夠生成符合用戶意圖的代碼。之前的工作也嘗試使用LLM生成模糊測(cè)試驅(qū)動(dòng)程序,但它們?cè)O(shè)計(jì)的指令僅限于特定場(chǎng)景,生成的驅(qū)動(dòng)程序在接口調(diào)用上多樣性較低,無法覆蓋不常用代碼或深度狀態(tài)。本文引入了PromptFuzz,一種覆蓋引導(dǎo)的模糊測(cè)試器,它會(huì)迭代地改變提示詞以探索未發(fā)現(xiàn)的庫程序代碼。

2 基礎(chǔ)概念

  • 庫程序模糊測(cè)試

庫程序在軟件開發(fā)中被廣泛使用,因此針對(duì)它的模糊測(cè)試變得越來越重要。與命令行程序不同,庫程序擁有多個(gè)訪問入口點(diǎn),即程序接口函數(shù),這些入口有嚴(yán)格的格式約束規(guī)范。為了能夠利用現(xiàn)有的模糊測(cè)試器,相應(yīng)的模糊測(cè)試驅(qū)動(dòng)程序被開發(fā)出來,驅(qū)動(dòng)程序從模糊測(cè)試器接受隨機(jī)字節(jié),然后將這些字節(jié)轉(zhuǎn)換成結(jié)構(gòu)良好的接口調(diào)用參數(shù),喂給被測(cè)目標(biāo)執(zhí)行模糊測(cè)試。

論文給出了一個(gè)模糊測(cè)試驅(qū)動(dòng)程序的例子,該驅(qū)動(dòng)程序嵌入在LLVM框架中,每次執(zhí)行一個(gè)測(cè)試用例。驅(qū)動(dòng)程序接受數(shù)據(jù)和大小兩個(gè)參數(shù),被測(cè)目標(biāo)為視頻解碼庫libvpx,驅(qū)動(dòng)程序執(zhí)行初始化和數(shù)據(jù)轉(zhuǎn)換操作,調(diào)用庫程序的接口函數(shù)進(jìn)行視頻解碼。

#include <vpx/vp8dx.h>
#include <vpx/vp8cx.h>
#include <vpx/vpx_decoder.h>extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {// Create the decoder configurationvpx_codec_dec_cfg_t dec_cfg = {0};...// Initialize the decodervpx_codec_ctx_t decoder;vpx_codec_iface_t *decoder_iface = vpx_codec_vp8_dx();vpx_codec_err_t decoder_init_res = vpx_codec_dec_init_ver(&decoder, decoder_iface, &dec_cfg, 0, VPX_DECODER_ABI_VERSION);if (decoder_init_res != VPX_CODEC_OK) {return 0;}// Process the input datavpx_codec_err_t decode_res = vpx_codec_decode(&decoder, data, size, NULL, 0);if (decode_res != VPX_CODEC_OK) {vpx_codec_destroy(&decoder);return 0;}// Get the decoded framevpx_image_t *img = NULL;vpx_codec_iter_t iter = NULL;while ((img = vpx_codec_get_frame(&decoder, &iter))!= NULL) {// Process the framevpx_img_flip(img);...}// Cleanupvpx_codec_destroy(&decoder);return 0;
}

  • 大語言模型

LLM是一種深度學(xué)習(xí)模型,具有非常復(fù)雜的架構(gòu)和大量的參數(shù),使得它們能夠從大量文本數(shù)據(jù)中獲取知識(shí),GPT3,ChatGPT,GPT4是當(dāng)前十分具有代表性的LLM。大語言模型被訓(xùn)練為預(yù)測(cè)下一個(gè)詞,表示為 w n + 1 w_{n+1} wn+1?,給定一個(gè)詞序列 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1?,w2?,...,wn?,最大化語言模型的目標(biāo)函數(shù),如下列公式。

P ( w 1 , w 2 , . . . , w n ) = ∏ i = 1 n P ( w i ∣ w 1 , w 2 , . . . , w i ? 1 ) P(w_1,w_2,...,w_n)=\prod^n_{i=1}P(w_i|w_1,w_2,...,w_{i-1}) P(w1?,w2?,...,wn?)=i=1n?P(wi?w1?,w2?,...,wi?1?)

在推理階段,LLM利用廣泛參數(shù)中學(xué)習(xí)到的模型權(quán)重,基于先前的token w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1?,w2?,...,wn?,自動(dòng)回歸地生成下一個(gè)token w n + 1 w_{n+1} wn+1?,用戶提供的起始token被稱為提示詞。為了確保LLM產(chǎn)生的輸出與用戶給定指令保持一致,一系列LLM已通過強(qiáng)化學(xué)習(xí)訓(xùn)練得到增強(qiáng),例如ChatGPT和GPT4。

  • 基于大語言模型的模糊測(cè)試驅(qū)動(dòng)程序生成

最近,出現(xiàn)一些利用LLM來增強(qiáng)模糊測(cè)試的研究,其主要的挑戰(zhàn)包括自動(dòng)構(gòu)造提示詞和對(duì)模型輸出的驗(yàn)證。在基于LLM的模糊測(cè)試驅(qū)動(dòng)程序生成中,提示詞通常由任務(wù)描述和上下文信息組成。為了盡可能提供信息和指導(dǎo)模型,任務(wù)描述應(yīng)至少制定被測(cè)目標(biāo)庫程序,以及包含在其中的接口函數(shù)。在早期的嘗試中,每個(gè)提示詞僅分配一個(gè)接口函數(shù)作為目標(biāo),過于簡(jiǎn)單而且難以有效果。另一方面,LLM生成的代碼無法直接用于模糊測(cè)試,因?yàn)樗a(chǎn)生的代碼很容易出錯(cuò)。依賴編譯器或簡(jiǎn)單規(guī)則進(jìn)行輸出的驗(yàn)證,只能報(bào)告語法或淺層邏輯錯(cuò)誤,當(dāng)其用作模糊測(cè)試驅(qū)動(dòng)程序時(shí),這種缺陷代碼會(huì)產(chǎn)生許多誤報(bào)。

3 系統(tǒng)設(shè)計(jì)

PromptFuzz通過覆蓋率引導(dǎo)的LLM提示詞生成高質(zhì)量的模糊測(cè)試驅(qū)動(dòng)程序以檢測(cè)庫程序錯(cuò)誤,它會(huì)改變LLM提示詞以生成涵蓋更廣泛接口調(diào)用范圍的驅(qū)動(dòng)程序,首先隨機(jī)選擇一個(gè)庫接口函數(shù)構(gòu)造提示詞,然后根據(jù)覆蓋率反饋改變?cè)撎崾驹~,直到模糊測(cè)試達(dá)到被測(cè)目標(biāo)的收斂,工作流程如圖1所示。

圖1 PromptFuzz模糊測(cè)試驅(qū)動(dòng)程序生成流程

圖1 PromptFuzz模糊測(cè)試驅(qū)動(dòng)程序生成流程

3.1 指導(dǎo)程序生成

論文選擇ChatGPT和GPT-4作為大語言模型來指導(dǎo)模糊測(cè)試驅(qū)動(dòng)程序生成,盡管模型生成的程序并不總能夠嚴(yán)格遵循指令,但它們有助于探索有效的庫程序接口調(diào)用情況,可以用提示詞來引導(dǎo)大語言模型生成符合預(yù)期的程序。PromptFuzz使用目標(biāo)庫程序和接口函數(shù)組合填充提示詞模板,如圖2所示包含以下組件。

  • 任務(wù)描述。說明了LLM應(yīng)生成的驅(qū)動(dòng)程序代碼,指定了庫程序的哪些接口函數(shù)在LLVMFuzzerTestOneInput函數(shù)中是必需的。
  • 庫程序上下文。包括了庫程序使用的頭文件,接口函數(shù)簽名,自定義類型等信息,通過整合對(duì)庫程序上下文的理解,顯著減少LLM產(chǎn)生幻覺的發(fā)生。
  • 庫程序說明。指導(dǎo)LLM生成符合庫程序所需指定模式的代碼,部分庫程序的接口函數(shù)可能從文件,文件流或描述符讀取輸入,對(duì)其進(jìn)行相應(yīng)規(guī)范。

圖2 提示詞模板

圖2 提示詞模板

3.2 錯(cuò)誤程序驗(yàn)證

PromptFuzz消除錯(cuò)誤驅(qū)動(dòng)程序通過如下三個(gè)步驟。

  1. 刪除C/C++編譯器識(shí)別出語法錯(cuò)誤的驅(qū)動(dòng)程序。
  2. 剩余的驅(qū)動(dòng)程序編譯成可執(zhí)行文件,結(jié)合多個(gè)運(yùn)行時(shí)sanitizers,捕獲和分析與預(yù)期行為模式的偏差。
  3. 使用提供的語料庫對(duì)這些驅(qū)動(dòng)程序進(jìn)行模糊測(cè)試,刪除檢測(cè)到偏差的任何驅(qū)動(dòng)程序。

在這部分模糊測(cè)試過程中,觸發(fā)獨(dú)特行為的輸入將添加到語料庫中,從而擴(kuò)展進(jìn)行更深入的運(yùn)行時(shí)驗(yàn)證。PromptFuzz同時(shí)還會(huì)計(jì)算驅(qū)動(dòng)程序執(zhí)行的代碼覆蓋率,刪除那些不符合代碼覆蓋標(biāo)準(zhǔn)的驅(qū)動(dòng)程序,表明庫程序的接口函數(shù)得到了充分的利用,錯(cuò)誤驅(qū)動(dòng)程序驗(yàn)證流程如圖3所示。

圖3 錯(cuò)誤驅(qū)動(dòng)程序驗(yàn)證流程

圖3 錯(cuò)誤驅(qū)動(dòng)程序驗(yàn)證流程

3.3 覆蓋引導(dǎo)的提示變異

為了創(chuàng)建連續(xù)多輪次的提示詞,PromptFuzz會(huì)改變前幾輪提示詞中的接口函數(shù)組合,生成不同的模糊測(cè)試驅(qū)動(dòng)程序,同時(shí)以代碼覆蓋率作為反饋來生成有效的提示詞。

  • 能量分配

首先,PromptFuzz為每個(gè)接口函數(shù)分配相同的能量,在每次模糊測(cè)試迭代期間,更新訪問過的分支并計(jì)算接口函數(shù)的分支覆蓋率。

c o v ( i ) = 包含 i 的覆蓋的分支數(shù) 包含 i 的所有的分支數(shù) cov(i)=\frac{包含i的覆蓋的分支數(shù)}{包含i的所有的分支數(shù)} cov(i)=包含i的所有的分支數(shù)包含i的覆蓋的分支數(shù)?

接著,按照AFLFast中的指數(shù)調(diào)度來更新其能量,令 s e e d ( i ) seed(i) seed(i)為調(diào)用接口函數(shù) i i i的種子驅(qū)動(dòng)程序數(shù)量, p r o m p t ( i ) prompt(i) prompt(i)表示為包含接口函數(shù) i i i的提示詞數(shù)量,計(jì)算能量如下。

e n e r g y ( i ) = 1 ? c o v ( i ) ( 1 + s e e d ( i ) ) e × ( 1 + p r o m p t ( i ) ) e energy(i)=\frac{1-cov(i)}{(1+seed(i))^e \times (1+prompt(i))^e} energy(i)=(1+seed(i))e×(1+prompt(i))e1?cov(i)?

執(zhí)行越少次數(shù)的接口函數(shù)將被分配更高的能量,于是在未來的提示詞中包含該接口函數(shù)的概率就越高。

  • 變異策略

然后,PromptFuzz會(huì)改變提示詞中的接口函數(shù)組合以指導(dǎo)模糊測(cè)試驅(qū)動(dòng)程序生成,這些策略與傳統(tǒng)的模糊測(cè)試器類似,例如在C組合中插入A函數(shù)Insert(C,A),替換C組合中的A函數(shù)為B函數(shù)Replace(C,A,B),合并C組合和S組合形成新的組合CrossOver(C,S)。

在接口函數(shù)能量的指導(dǎo)下,PromptFuzz通過變異策略組合接口函數(shù)以生成之前未探索過的組合,用density表示調(diào)用顯式數(shù)據(jù)依賴的庫程序接口函數(shù)的最大數(shù)量,用unique branches表示驅(qū)動(dòng)程序執(zhí)行時(shí)觸發(fā)的獨(dú)立分支數(shù)量。計(jì)算quality(g)=density(g) x (1+unique_branches(g))用以量化驅(qū)動(dòng)程序的質(zhì)量,以質(zhì)量值更高為目標(biāo)來指導(dǎo)變異策略

圖4 接口函數(shù)組合變異算法

圖4 接口函數(shù)組合變異算法

在每次模糊測(cè)試迭代過程中,PromptFuzz都會(huì)探索驅(qū)動(dòng)程序種子集合并更新這些種子驅(qū)動(dòng)程序的質(zhì)量,使用庫程序接口函數(shù)能量和種子驅(qū)動(dòng)程序質(zhì)量的反饋,應(yīng)用如圖4所示算法來選擇下一次迭代中使用的新接口函數(shù)組合。

3.4 變量約束的模糊器調(diào)度

為了使得種子驅(qū)動(dòng)程序能夠執(zhí)行模糊測(cè)試,PromptFuzz對(duì)其中的接口函數(shù)參數(shù)進(jìn)行約束類型推斷,將部分參數(shù)從常量轉(zhuǎn)換為從模糊測(cè)試器輸入的任意字節(jié)的變量,例如數(shù)組長度、文件名、格式化字符串等,一個(gè)簡(jiǎn)單的實(shí)例如圖5所示。

圖5 約束參數(shù)轉(zhuǎn)換例子

圖5 約束參數(shù)轉(zhuǎn)換例子

最終,PromptFuzz將種子驅(qū)動(dòng)程序整合到模糊測(cè)試器,根據(jù)其提供的幾個(gè)特定字節(jié)來調(diào)度每個(gè)種子驅(qū)動(dòng)程序,3.2節(jié)中進(jìn)行錯(cuò)誤程序驗(yàn)證的模糊測(cè)試語料將用來作為驅(qū)動(dòng)程序的初始輸入。此外,轉(zhuǎn)換之前的參數(shù)常量值也將形成初始語料,配合以進(jìn)行模糊測(cè)試器的執(zhí)行。

4 實(shí)現(xiàn)驗(yàn)證

PromptFuzz用Rust語言實(shí)現(xiàn)了大約1萬7千行代碼,開源在倉庫https://github.com/PromptFuzz/PromptFuzz中,其中使用了clang_ast做抽象語法樹的提取,額外實(shí)現(xiàn)了FSan插件來進(jìn)行文件描述檢查。論文在14個(gè)廣泛使用的開源項(xiàng)目上對(duì)PromptFuzz進(jìn)行了評(píng)估,總體實(shí)驗(yàn)結(jié)果,發(fā)現(xiàn)的已知漏洞,消融實(shí)驗(yàn)和變異策略的比較,可以詳細(xì)去看原論文,這里不再贅述。

學(xué)習(xí)筆記

這篇論文做了很好的嘗試,利用大語言模型來生成針對(duì)被測(cè)目標(biāo)的驅(qū)動(dòng)程序,再使用傳統(tǒng)的模糊測(cè)試器來執(zhí)行測(cè)試,相關(guān)工作OSS-Fuzz也做過嘗試。論文偏工程,有一定啟發(fā),方法比較雜,與近期部分LLM+Fuzz方向的研究類似,大語言模型用于輔助仍需要進(jìn)行提純,通過算法篩選和糾偏,但確實(shí)在自動(dòng)化和發(fā)散性方面比較有效。最后,附上文獻(xiàn)引用和DOI鏈接:

Lyu Y, Xie Y, Chen P, et al. Prompt Fuzzing for Fuzz Driver Generation[C]//Proceedings of the 2024 on ACM SIGSAC Conference on Computer and Communications Security. 2024: 3793-3807.

https://doi.org/10.1145/3658644.3670396

http://aloenet.com.cn/news/45655.html

相關(guān)文章:

  • 自己制作頭像的網(wǎng)站 設(shè)計(jì) 動(dòng)漫蘇州seo關(guān)鍵詞優(yōu)化方法
  • 網(wǎng)絡(luò)葉子 網(wǎng)站推廣騰訊企業(yè)qq官網(wǎng)
  • asp動(dòng)態(tài)網(wǎng)站開發(fā)課后答案寧波seo推薦推廣渠道
  • wordpress本地網(wǎng)站百度網(wǎng)盤app
  • 5188大數(shù)據(jù)官網(wǎng)seo推廣是做什么
  • 寓意好的公司名字重慶seo排名電話
  • 非物質(zhì)文化遺產(chǎn)網(wǎng)站怎么做seo推廣是什么工作
  • 域名 空間 建網(wǎng)站黃桃圖片友情鏈接
  • 網(wǎng)站備案被惡意注銷優(yōu)化網(wǎng)站找哪家
  • 網(wǎng)站404怎么解決seo服務(wù)哪家好
  • 伊春百姓網(wǎng)免費(fèi)發(fā)布信息網(wǎng)鄭州seo哪家好
  • 揚(yáng)州西區(qū)網(wǎng)站建設(shè)企業(yè)網(wǎng)站推廣的方法有哪些
  • 做網(wǎng)站定金是多少錢百度開車關(guān)鍵詞
  • 綿陽網(wǎng)站建設(shè)餐飲營銷策劃與運(yùn)營
  • wordpress文章id修改鄭州seo顧問外包
  • 搜網(wǎng)站網(wǎng)滄州網(wǎng)站優(yōu)化
  • 外貿(mào)網(wǎng)站推廣技巧網(wǎng)絡(luò)軟文發(fā)布
  • 杭州集團(tuán)公司網(wǎng)站建設(shè)怎樣免費(fèi)推廣自己的網(wǎng)站
  • 個(gè)人網(wǎng)站建設(shè)及實(shí)現(xiàn)畢業(yè)論文百度推廣有哪些售后服務(wù)
  • 商城網(wǎng)站建設(shè)fwshop最新網(wǎng)站推廣方法
  • 矢量網(wǎng)站動(dòng)畫怎么做抖音推廣
  • 有服務(wù)器做網(wǎng)站整合營銷傳播的明顯特征是
  • 怎么為做的網(wǎng)站配置域名銷售管理
  • 重慶高端網(wǎng)站開發(fā)百度精準(zhǔn)獲客平臺(tái)
  • 網(wǎng)站開發(fā)技術(shù)路線百度競(jìng)價(jià)冷門產(chǎn)品
  • 潮州網(wǎng)站開發(fā)黃頁推廣2021
  • perl網(wǎng)站開發(fā)西安網(wǎng)站搭建
  • wordpress訪客明細(xì)win7優(yōu)化大師官方網(wǎng)站
  • 人才招聘網(wǎng)站模板網(wǎng)站推廣的營銷策劃方案
  • 網(wǎng)站建設(shè)的項(xiàng)目描述品牌推廣思路