偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

符號執(zhí)行框架綜述:代碼轉(zhuǎn)換為符號執(zhí)行所需符號的工具與技術(shù)

開發(fā) 前端
符號執(zhí)行是一種強大的程序分析技術(shù),它通過使用符號變量代替具體值,探索程序的所有可能執(zhí)行路徑。目前,已經(jīng)開發(fā)了多種符號執(zhí)行框架和工具,如Angr、KLEE、S2E等,它們在軟件測試、漏洞檢測、惡意軟件分析等領(lǐng)域有著廣泛的應(yīng)用。

引言

符號執(zhí)行是一種程序分析技術(shù),它通過使用抽象的符號值代替具體輸入值來分析程序執(zhí)行情況。這種技術(shù)能夠有效探索程序路徑,并生成對應(yīng)路徑的輸入條件,因此被廣泛應(yīng)用于軟件測試、漏洞檢測和逆向工程等領(lǐng)域。本報告將深入探討目前主流的符號執(zhí)行框架,分析它們的功能特點、應(yīng)用場景以及技術(shù)實現(xiàn),為讀者提供全面的符號執(zhí)行工具參考。

符號執(zhí)行技術(shù)概述

符號執(zhí)行的基本概念

符號執(zhí)行是一種靜態(tài)分析技術(shù),旨在理解程序在輸入條件的不同組合下的行為。與傳統(tǒng)的具體執(zhí)行不同,符號執(zhí)行使用符號變量代替具體值作為程序輸入,并用符號表達式表示與符號值相關(guān)的程序變量的值[0]。在遇到程序分支指令時,程序的執(zhí)行也會相應(yīng)地分支,形成不同的符號約束條件。 符號執(zhí)行技術(shù)是一種白盒的靜態(tài)分析技術(shù),它通過采用抽象的符號代替精確值作為程序輸入變量,得出每個路徑抽象的輸出結(jié)果[31]。這種技術(shù)的核心思想是通過使用符號值來代替具體值作為程序輸入,并用符號表達式來表示與符號值相關(guān)的程序變量的值[4]。

符號執(zhí)行的應(yīng)用領(lǐng)域

符號執(zhí)行技術(shù)在多個領(lǐng)域有著廣泛的應(yīng)用:

  1. 軟件測試:通過生成滿足特定路徑條件的輸入,實現(xiàn)對程序路徑的全面覆蓋
  2. 漏洞檢測:發(fā)現(xiàn)程序中可能存在的安全漏洞和錯誤
  3. 惡意軟件分析:分析惡意軟件的行為模式和攻擊方式
  4. 代碼逆向工程:理解編譯后的二進制代碼的功能和邏輯
  5. 固件安全分析:分析嵌入式設(shè)備固件的安全性[30]

主流符號執(zhí)行框架

Angr框架

Angr是一個基于Python的二進制分析框架,它支持靜態(tài)分析和符號執(zhí)行,尤其在惡意軟件分析、漏洞挖掘和逆向工程等安全領(lǐng)域中扮演著重要角色[9]。Angr的主要特點

  1. 開源性:Angr是一個開源的Python框架,可以直接通過pip安裝
  2. 功能強大:提供了多種工具,用于靜態(tài)和動態(tài)分析二進制文件,包括反匯編、控制流圖分析、模擬執(zhí)行、符號執(zhí)行等功能[10]
  3. 多架構(gòu)支持:是一個多架構(gòu)開源二進制分析工具包
  4. 動態(tài)符號執(zhí)行:能夠?qū)ΧM制文件執(zhí)行動態(tài)符號執(zhí)行,如Mayhem、KLEE等[29] Angr的架構(gòu)包括CLE(用于處理二進制文件和庫)、VEX(中間表示)、SimProcedures(模擬系統(tǒng)調(diào)用)等多個組件。CLE對不同的二進制格式進行抽象,以處理加載給定的二進制文件和它所依賴的任何庫、解析動態(tài)符號、執(zhí)行重定位以及正確初始化程序狀態(tài)[24]。 Angr被廣泛應(yīng)用于CTF競賽中的逆向分析,研究人員可以利用這個工具嘗試對一些CTF題目進行符號執(zhí)行來找到正確的解答,即flag[21][22]。 此外,Angr還被用于惡意軟件分析工具SEMA的開發(fā),SEMA基于angr,而angr則用于提取API調(diào)用[27]。

KLEE框架

KLEE是一個封裝比較好的符號執(zhí)行工具,可以直接輸入程序進行分析,不像angr那樣更像是一個框架[15]。KLEE主要用于C語言代碼的符號執(zhí)行分析。KLEE的特點

  1. 封裝性:相比于angr,KLEE是一個可以直接使用的工具
  2. 針對C語言:主要面向C代碼的符號執(zhí)行
  3. 高效性:在處理非聚合類型的輸入時,Klee表現(xiàn)卓越(達82.80%)[25] KLEE在軟件測試和漏洞挖掘領(lǐng)域有著廣泛的應(yīng)用,它可以有效地探索程序的執(zhí)行路徑,并生成滿足特定路徑條件的輸入。

S2E框架

S2E是一個選擇性的符號執(zhí)行平臺,構(gòu)建于QEMU之上。在Avatar框架中,S2E提供了一個功能強大的插件接口,插件可以通過這些接口攔截仿真事件(比如,基本塊)[33]。S2E的主要特點

  1. 基于QEMU:構(gòu)建于QEMU虛擬機監(jiān)控器之上
  2. 選擇性符號執(zhí)行:可以選擇性地對程序的某些部分進行符號執(zhí)行
  3. 插件系統(tǒng):提供強大的插件接口,方便擴展功能 S2E是針對KLEE無法對二進制生成LLVM IR的缺點而開發(fā)的,它在QEMU虛擬機上實現(xiàn)了將二進制程序翻譯成中間表示的功能[16]。

Z3約束求解器

Z3是由微軟開發(fā)的一個SMT(滿意賦值理論)求解器,雖然它本身不是一個完整的符號執(zhí)行框架,但在符號執(zhí)行過程中扮演著重要角色。Z3用于解決符號執(zhí)行過程中生成的約束條件,幫助確定是否存在滿足特定路徑條件的輸入。Z3的特點

  1. 高效約束求解:能夠高效地求解符號執(zhí)行過程中生成的約束條件
  2. 多語言支持:提供多種編程語言的接口,包括Python、C++等
  3. 廣泛應(yīng)用于符號執(zhí)行工具:許多符號執(zhí)行工具,如angr,都使用Z3作為約束求解器 Z3在符號執(zhí)行過程中與符號執(zhí)行引擎(如angr)配合使用,在整個過程中,會使用Z3來求解路徑約束,以生成滿足特定路徑條件的測試用例[18]。

Boomerang框架

Boomerang是一個反編譯工具,它可以將二進制代碼轉(zhuǎn)換為高級語言表示,為符號執(zhí)行提供更高級的抽象。雖然它本身不是一個完整的符號執(zhí)行框架,但可以與符號執(zhí)行工具結(jié)合使用。

Triton框架

Triton是一個用于分析二進制程序的符號執(zhí)行框架,它可以幫助定位與用戶輸入有交互的代碼塊,并對這些代碼塊進行符號執(zhí)行,從用戶輸入點作為符號變量開始,直到達到所需的約束條件[23]。

μEmu和Jetset

2021年的μEmu和Jetset將符號執(zhí)行框架(如S2E或Angr)與固件重新托管技術(shù)結(jié)合,以提高固件仿真的效率[30]。這些工具在嵌入式設(shè)備固件安全分析領(lǐng)域有著重要應(yīng)用。

Driller

Driller是AFL(American Fuzzy Lop)和angr結(jié)合的產(chǎn)物,它通過結(jié)合模糊測試和符號執(zhí)行,提高漏洞發(fā)現(xiàn)的效率。Driller的使用需要通過import來導(dǎo)入angr和driller接口,在包含afl和angr的虛擬環(huán)境中部署好之后,可以通過腳本來調(diào)用[32]。

DICE

DICE是在P2IM的基礎(chǔ)上增加DMA仿真功能的符號執(zhí)行框架,它擴展了符號執(zhí)行的應(yīng)用范圍,使其能夠處理更復(fù)雜的系統(tǒng)[30]。

符號執(zhí)行框架的比較

S2E、Angr、KLEE和QSYM的比較

根據(jù)搜索結(jié)果,S2E、Angr、KLEE和QSYM是四個主要的符號執(zhí)行引擎[16]。它們的主要區(qū)別在于:

  1. S2E:構(gòu)建于QEMU之上,是一個選擇性的符號執(zhí)行平臺,提供強大的插件接口
  2. Angr:基于Python的二進制分析框架,支持動態(tài)符號執(zhí)行和靜態(tài)分析
  3. KLEE:封裝比較好的符號執(zhí)行工具,主要用于C語言代碼的分析
  4. QSYM:可能是一個針對特定場景優(yōu)化的符號執(zhí)行引擎

動態(tài)符號執(zhí)行和LLM的比較

在生成測試用例方面,動態(tài)符號執(zhí)行工具如Klee在特定場景下表現(xiàn)良好。對于非聚合類型的輸入,Klee表現(xiàn)卓越(達82.80%),展示了符號執(zhí)行技術(shù)在理想條件下的高效性。但在實際復(fù)雜場景中,其局限性也較為明顯[25]。

靜態(tài)二進制分析的局限性

靜態(tài)二進制分析盡管使得系統(tǒng)能檢測到所有可能的程序路徑,卻犧牲了可擴展性和表現(xiàn)。靜態(tài)二進制分析通常很慢,在處理間接跳轉(zhuǎn)語句時也受限。在構(gòu)造CFG(控制流圖)時處理非直接跳轉(zhuǎn)語句也面臨挑戰(zhàn)[34]。

符號執(zhí)行工具的最新發(fā)展

多線程并行符號執(zhí)行引擎

隨著計算能力的提升,多線程并行的符號執(zhí)行引擎成為研究熱點。基于多線程并行的符號執(zhí)行引擎設(shè)計與實現(xiàn)的研究表明,這種技術(shù)可以顯著提高符號執(zhí)行的效率和性能[26]。

結(jié)合機器學(xué)習(xí)的符號執(zhí)行

將機器學(xué)習(xí)技術(shù)與符號執(zhí)行相結(jié)合,可以提高符號執(zhí)行的效率和準(zhǔn)確性。例如,利用LLM(大語言模型)與動態(tài)符號執(zhí)行相結(jié)合,可以生成更有效的測試用例[25]。

嵌入式設(shè)備固件安全分析

隨著物聯(lián)網(wǎng)設(shè)備的普及,嵌入式設(shè)備固件的安全分析成為研究熱點。2021年的μEmu和Jetset將符號執(zhí)行框架(如S2E或Angr)與固件重新托管技術(shù)結(jié)合,以提高固件仿真的效率。2021年的DICE在P2IM的基礎(chǔ)上增加DMA仿真功能,進一步擴展了符號執(zhí)行的應(yīng)用范圍[30]。

符號執(zhí)行工具的使用場景

漏洞挖掘

符號執(zhí)行工具在漏洞挖掘領(lǐng)域有著廣泛應(yīng)用。通過符號執(zhí)行,可以系統(tǒng)地探索程序的執(zhí)行路徑,發(fā)現(xiàn)可能導(dǎo)致安全漏洞的輸入條件。例如,Angr、KLEE等工具都被廣泛應(yīng)用于漏洞挖掘研究中。

代碼混淆研究

符號執(zhí)行工具如KLEE和Angr也被用于代碼混淆研究。通過對混淆代碼進行符號執(zhí)行,可以分析代碼的行為,理解混淆技術(shù)的實現(xiàn)原理,從而開發(fā)更有效的反混淆方法[19]。

惡意軟件分析

符號執(zhí)行技術(shù)在惡意軟件分析領(lǐng)域也有重要應(yīng)用。例如,SEMA是一款基于符號執(zhí)行的惡意軟件分析工具,可以幫助研究人員輕松執(zhí)行惡意軟件分析任務(wù)。SEMA基于angr,而angr則用于提取API調(diào)用[27]。

CTF逆向分析

在CTF競賽中,符號執(zhí)行工具如Angr被廣泛用于逆向分析。研究人員可以利用這些工具嘗試對CTF題目進行符號執(zhí)行,找到正確的解答,即flag[21][22]。

符號執(zhí)行工具的局限性

性能問題

符號執(zhí)行工具通常面臨性能問題,特別是在處理大型程序時。符號執(zhí)行需要維護大量的符號狀態(tài),這可能導(dǎo)致計算資源消耗過大,執(zhí)行時間過長。

狀態(tài)爆炸問題

隨著程序路徑的增加,符號執(zhí)行需要維護的狀態(tài)數(shù)量可能會呈指數(shù)級增長,導(dǎo)致狀態(tài)爆炸問題。這限制了符號執(zhí)行在復(fù)雜程序上的應(yīng)用。

間接跳轉(zhuǎn)處理困難

靜態(tài)二進制分析在處理間接跳轉(zhuǎn)語句時面臨挑戰(zhàn)。間接跳轉(zhuǎn)可能導(dǎo)致無法準(zhǔn)確構(gòu)建控制流圖,影響符號執(zhí)行的準(zhǔn)確性[34]。

結(jié)論

符號執(zhí)行是一種強大的程序分析技術(shù),它通過使用符號變量代替具體值,探索程序的所有可能執(zhí)行路徑。目前,已經(jīng)開發(fā)了多種符號執(zhí)行框架和工具,如Angr、KLEE、S2E等,它們在軟件測試、漏洞檢測、惡意軟件分析等領(lǐng)域有著廣泛的應(yīng)用。 隨著技術(shù)的發(fā)展,符號執(zhí)行工具也在不斷演進,出現(xiàn)了多線程并行符號執(zhí)行引擎、結(jié)合機器學(xué)習(xí)的符號執(zhí)行等新技術(shù)。這些技術(shù)的發(fā)展使得符號執(zhí)行工具能夠處理更復(fù)雜的程序,提高分析效率和準(zhǔn)確性。 然而,符號執(zhí)行工具仍然面臨性能問題、狀態(tài)爆炸問題和間接跳轉(zhuǎn)處理困難等挑戰(zhàn)。未來的研究方向可能包括優(yōu)化符號執(zhí)行算法,減少狀態(tài)空間,提高處理間接跳轉(zhuǎn)的能力,以及結(jié)合其他技術(shù)(如機器學(xué)習(xí))來提高符號執(zhí)行的效率和準(zhǔn)確性。

參考文獻

[0] test Symbolic Execution-01-符號執(zhí)行(Symbolic Execution)簡介原創(chuàng). https://blog.csdn.net/ryo1060732496/article/details/135543800.

[4] 符號執(zhí)行(Symbolic Execution) 與約束求解(Constraint Solving) - 騰訊云. https://cloud.tencent.com/developer/article/2377216.

[9] 符號執(zhí)行之a(chǎn)ngr初探原創(chuàng) - CSDN博客. https://blog.csdn.net/hanxuer_/article/details/106065133.

[10] 符號執(zhí)行angr安裝與使用原創(chuàng) - CSDN博客. https://blog.csdn.net/xshower/article/details/113869873.

[15] KLEE 源碼閱讀筆記-安全KER. https://www.anquanke.com/post/id/240038.

[16] 符號化執(zhí)行引擎對比原創(chuàng) - CSDN博客. https://blog.csdn.net/m0_37907383/article/details/105674577.

[18] 符號執(zhí)行,從漏洞掃描到自動化生成測試用例. http://www.szyisi.cn/article/663849.html.

[19] 2021看雪SDC議題回顧| 代碼混淆研究的新方向. https://zhuanlan.zhihu.com/p/426876577.

[21] 符號執(zhí)行-Angr實踐原創(chuàng) - CSDN博客. https://blog.csdn.net/yalecaltech/article/details/88753923.

[22] 利用Angr進行簡單CTF逆向分析-符號執(zhí)行工具. http://www.szyisi.cn/article/554933.html.

[23] [翻譯]使用Triton框架分析混淆代碼(How Triton may help to ... - 看雪. https://bbs.kanxue.com/thread-277009.htm.

[24] angr原理與實踐(一)——原理- WelkinChan - 博客園. https://www.cnblogs.com/welkinchan/p/16483119.html.

[25] LLM與動態(tài)符號執(zhí)行生成測試用例的比較原創(chuàng) - CSDN博客. https://blog.csdn.net/qq_44370676/article/details/144159798.

[26] 基于多線程并行的符號執(zhí)行引擎設(shè)計與實現(xiàn) - 計算機研究與發(fā)展. https://crad.ict.ac.cn/cn/article/doi/10.7544/issn1000-1239.202220920?viewType=HTML.

[27] SEMA:一款基于符號執(zhí)行的惡意軟件分析工具 - FreeBuf. https://www.freebuf.com/sectool/412060.html.

[29] ANGR初識原創(chuàng) - CSDN博客. https://blog.csdn.net/leiwuhen92/article/details/134171222.

[30] [PDF] 嵌入式設(shè)備固件仿真器綜述 - 計算機研究與發(fā)展. https://crad.ict.ac.cn/cn/article/pdf/preview/10.7544/issn1000-1239.202330476.pdf.

[31] 符號執(zhí)行 - 極客方舟. https://deelmind.com.cn/reverse/symbolic/.

[32] 符號執(zhí)行結(jié)合fuzz總結(jié)原創(chuàng) - CSDN博客. https://blog.csdn.net/sjlving123/article/details/114636197.

[33] [PDF] 嵌入式設(shè)備固件安全分析技術(shù)研究綜述 - 計算機學(xué)報. http://cjc.ict.ac.cn/online/bfpub/yyc-2020818141436.pdf.

[34] 關(guān)于CRS中的自動化漏洞檢測和攻擊代碼生成研究綜述. https://rowl1ng.com/MyWiki/machine_learning/application/automated_vulnerability_detection.html.

責(zé)任編輯:武曉燕 來源: 海燕技術(shù)棧
相關(guān)推薦

2017-01-23 08:40:33

動態(tài)符號代碼覆蓋測試

2021-04-21 10:01:18

漏洞KLEE網(wǎng)絡(luò)攻擊

2017-10-21 21:58:18

符號執(zhí)行AngrCTF

2021-05-26 08:51:50

漏洞漏洞掃描符號執(zhí)行

2022-07-26 13:00:01

安全符號源代碼

2014-08-28 10:18:36

LinuxShebang

2009-02-19 16:44:21

虛擬化藝術(shù)市場

2021-11-15 05:37:19

Linux 符號鏈接命令

2023-03-26 00:00:02

人工智能符號主義起源

2021-05-11 22:24:56

C++符號Tab

2014-08-01 17:12:14

Linux特殊符號

2010-06-12 15:12:00

UML關(guān)聯(lián)

2011-08-10 15:58:12

WPS符號欄

2020-07-20 07:56:28

JavaScript開發(fā)技術(shù)

2010-06-28 18:52:49

UML關(guān)系符號

2010-06-12 12:40:59

UML類圖符號

2010-05-10 17:01:05

Unix文本

2023-02-13 11:26:03

符號鏈接Linux

2020-09-09 07:55:51

TS開源符號

2020-09-29 10:20:02

Java編程語言
點贊
收藏

51CTO技術(shù)棧公眾號