<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    模糊測試探索者之路

    VSole2021-07-03 16:58:01

    模糊測試探索者姜宇:由于分布式系統固有的復雜性,保障分布式系統安全充滿挑戰;模糊測試是具有良好擴展性、適用性以及高準確率的漏洞挖掘技術;模糊測試在分布式系統上的應用還存在局限性;解決高效模糊測試三大關鍵挑戰為國產數據庫軟件安全保駕護航。

    01 分布式系統安全保障充滿挑戰性

    分布式系統安全是軟件安全中尤為重要的一個分支。作為基礎軟件中的重要組成部分,具有高可用性的分布式系統往往是關鍵系統的實現方式。然而,分布式系統安全的形勢并不容樂觀。2019 年以來,在我國境內大量使用的 MongoDB ,Elasticsearch ,數據庫相繼曝出存在嚴重安全漏洞,可能導致數據泄露風險 ,對我國的軟件安全造成了嚴重的隱患。

    由于分布式系統固有的復雜性,保障分布式系統安全也充滿了挑戰。雖然分布式架構提供了全面、可拓展、魯棒的服務,額外的復雜性也作為一個副作用被引入系統。以數據庫管理系統為例,以庫模式運行的 SQLite 以單個源文件分發,并且只被報告了約 700 個缺陷 。與之對應的分布式系統 PostgreSQL 卻具有上百萬行源碼,并有著超過 16,000 個缺陷。在如此龐大的代碼庫中,確保分布式系統的正確性十分復雜。一方面,開發人員仍然手動編寫集成測試和回歸測試,這些測試方法費時費力,尚且不足以涵蓋大多數基本情況,更不用說更可能出現錯誤的邊緣案例了。另一方面,自動化工具確實改善了現狀,但存在限制:形式化方法可以驗證分布式系統,但只能在設計層面驗證;缺陷注入可以檢查安全性,但卻無法檢測其他類型的重要屬性;靜態分析則往往報告過多錯誤,因此開發人員依然需要逐一確認是否為誤報。

    02 廣泛使用的模糊測試技術

    模糊測試是一種漏洞挖掘技術,它通常將無效的,非預期的或隨機的數據作為目標程序的輸入,通過監控異常來發現軟件的安全問題。模糊測試最早出現在1989年,Miller教授和他的團隊開發了第一個基礎的模糊測試工具來測試UNIX應用的魯棒性。相比起其他測試技術,模糊測試具有良好的擴展性和適用性。它不需要用戶對測試對象有太多的了解,具有極高的準確率,同時便于大規模的部署。目前模糊測試已被廣泛使用在包括華為,微軟和谷歌在內的許多公司中,并發現了大量的軟件缺陷和安全漏洞。

    從待測對象上講,輸入生成會采用不同的策略,包括面向文件格式,面向協議和面向內核的模糊測試。由于大多數應用軟件都涉及文件處理,模糊測試被廣泛用于查找這些應用程序的錯誤。大多數關于模糊測試的研究主要集中在文件格式模糊測試上,一系列模糊測試工具被提出,包括Peach, AFL及其擴展。協議的安全問題可能比本地應用程序造成更嚴重的危害,比如造成拒絕服務和信息泄露等等。針對其特點,面向協議的模糊測試通過偽造數據包來測試處理程序,其中一個代表性的模糊測試工具為SPIKE。對于面向內核的模糊測試,主要的挑戰在于捕捉崩潰和與內核進行交互。內核模糊測試一般通過隨機調用具有隨機生成參數值的內核API函數來進行。許多基于覆蓋的模糊測試工具被適配到內核上,包括Syzkaller, TriforceAFL和kAFL。

    從產生測試用例的方法上講,模糊測試可以分為“基于生成”和“基于變異”兩種類別。基于生成的模糊測試通常針對接受高度結構化輸入的程序(比如SQL和JavaScript)。此方法需要用戶對被測試系統有較強的領域知識,事先獲取或合成生成語法,并針對每一種規范開發相應的模糊測試工具。但這種方法既需要大量的人工參與,又難以保證測試的覆蓋率。Peach是一個利用輸入建模的生成式模糊測試工具。它通過建立描述輸入格式的數據模型來生成測試用例。基于變異的模糊測試工具通過不斷的變異現有的輸入來創造新的測試用例。例如,zzuf是早期的基于變異的模糊測試工具,它通過隨機的翻轉輸入中的某些位來對測試用例進行修改。目前大部分流行模糊測試工具都是基于變異生成測試用例的,例如AFL, libFuzzer和honggfuzz等。隨機的變異常常會產生許多無用的測試用例,特別是對于復雜的程序。

    現代的軟件規模越來越龐大,需要解析的數據結構越來越復雜,執行的邏輯也越來越繁瑣,這都增大了漏洞產生的可能性。而使用隨機變異方法的盲目模糊策略通常會導致大量無效的測試用例,因而造成較低的模糊測試效率。為了提升模糊測試的效率,實際運用中通常將模糊測試并行化和導向化。

    03 分布式系統模糊測試初探

    由于模糊測試的高度有效性,開發人員對模糊測試進行了初步探索,從而將模糊測試應用于分布式系統。首先,研究者嘗試剝離分布式系統所使用的基礎庫,從而進行單進程測試。由于基礎庫的依賴性很少,很容易進行模糊測試。例如,域名解析是分布式系統中的一項基本任務,研究者通過模糊測試 Golang 中的 DNS 解析器,發現了數十個缺陷。其次,研究者嘗試將分布式系統進行切片。領域專家詳細調研目標系統,并通過搭建腳手架,在代碼中添加 Mock 組件,從而將代碼拆分出多個獨立組件。此時,每個組件可以在單進程中進行模糊測試。例如,開發人員沒有將谷歌瀏覽器作為一個整體進行測試,而是將項目拆分為大約 500 個模糊測試組件。這些嘗試的確使得模糊測試能夠應用于分布式系統,但它們存在著明顯的局限性

    1. 界限不明

    基礎庫中的缺陷固然會影響整個系統,但通常不是特定分布式系統的主要關注點。開發者往往直接升級外部依賴,而不是手動檢測并修復缺陷。

    1. 成本高昂

    需要搭建腳手架、進行程序切片和開發 Mock 組件。這些方法在大型系統上往往難以實施;若能實施,也需要大量修改目標系統,開發成本高昂。

    1. 缺少交互

    上述兩種方法僅同時執行代碼的一部分,因此不能測試組件之間的跨進程交互。

    04 分布式系統模糊測試的三大關鍵挑戰

    由于分布式系統的這些特征與基礎庫和實用程序大相徑庭,因此大多數單進程的模糊測試工具無法良好支持分布式系統。在耗費大量成本進行適配后,模糊測試在分布式系統上的缺陷尋找效果卻不能和基礎庫和實用程序的性能相匹配。分布式系統的模糊測試工作需要解決如下三個關鍵挑戰

    跨進程邏輯的反饋收集

    由于分布式系統邏輯復雜,盲目生成隨機輸入不足以在可行的時間內覆蓋源碼。因此,模糊測試工具必須收集每個輸入的反饋,以引導目標程序進入有趣的新路徑。傳統上,模糊器通過創建計數器數組收集反饋:在編譯過程中,插樁編譯器為基本塊生成隨機的標簽;在運行過程中執行基本塊時,會對當前控制流轉移標簽所對應的計數器執行增加操作,從而反映執行到的邏輯。

    收集反饋在分布式系統中充滿挑戰。分布式系統的調度過程是動態的:分布式系統由一組不斷變化的組件構成;這些組件位于不同的進程中,運行在不同的主機上,并處理不同的請求。由于分布式系統的動態性,測試工具難以確定收集反饋的目標進程,更不用說在區分不同請求帶來的不同語意了。即使可以收集反饋,反饋的質量 仍然低下。由于標簽是隨機分配的,在邏輯量大的復雜系統中,不同位置的代碼可以映射到同一計數器。此外,多進程系統還存在另一個問題:不同進程內的基本塊可以映射到同一個計數器。綜上,低質量的反饋信息會誤導模糊測試工具,使得新發現的代碼被直接忽略。為了準確收集反饋,需要分析驅動的插樁策略。插樁器針對多進程程序進行優化,在精確收集反饋信息的同時降低執行成本

    動態進程集合的異常檢測

    每個模糊測試工具都需要一個測試準則,該測試準則可識別當前輸入是否觸發缺陷。一般地,模糊器會創建目標進程并等待其退出碼。如果退出碼表示異常(如 abort() )或段錯誤,則當前執行被視為異常;測試工具將存儲輸入以供進一步檢查。

    然而,此方法不能適用于多進程的分布式系統。通常,要啟動分布式系統,用戶會首先調用啟動器,啟動器接下來會啟動守護進程,而守護進程會最終創建工作進程。簡而言之,在多階段的初始化過程中,進程集合發生動態而難以預知的變化。因此,模糊測試工具無法確定是否發生了異常。此外,鑒于工作進程已經受到內置的守護進程的監控,模糊測試工具無法重復地監視工作進程的異常。為了檢測異常,需要調試輔助的監視策略。監視器捕獲新創建的進線程,并在不影響父子進程關系的情況下監視它們

    無關進程的噪音消除

    分布式系統往往創建背景任務以維護必要的基本功能。例如,PostgreSQL 定期運行 VACCUM 任務,從而回收數據庫存儲在文件系統中的過時記錄項。由于該任務的執行需要消耗一定時間,執行反饋中會因此出現大量的額外記錄。有必要在執行反饋中移除這些記錄,因為 VACCUM 任務與當前查詢無關。

    通過頻繁重新啟動程序來消除噪音是不可行的。模糊測試工具通過不斷生成輸入來測試目標系統。由于輸入的執行次數巨大,必須避免對分布式系統進行昂貴的重新啟動。但是,傳統的模糊測試加速方法不支持多進程分布式系統。針對庫的模糊測試工具通常使用進程內測試,以降低每次執行輸入時創建進程的成本。根據定義,顯然進程內模糊不適用于多進程的分布式系統。針對實用程序的模糊器通常使用 forkserver 以減少 execve 系統調用的成本。然而,forkserver 僅能維護單個進程的狀態,所有進程共享的狀態將隨之丟失。因此,forkserver也不能應用于分布式系統。為了消除噪音,需要進程感知的調度策略。調度器將輸入與處理它的進程關聯在一起,從而在不重啟目標系統的情況下,實現連續的模糊測試執行

    05 模糊測試助力國產數據庫軟件安全加固

    數據庫作為重要的基礎軟件,十分適合分布式場景下的模糊測試。2020年我國數據庫軟件市場規模已達200億元,國產數據庫市場占有率從2009年的4.2%提升至2020年的20%左右。在嚴峻的信息安全形勢下,使用自主可控的國產數據庫產品是大勢所趨。隨之而來的是如何進行高效的安全測試,保障國產數據庫的安全可靠,也是當前迫切的需求。研究組在華為GaussDB、彭博社ComDB,及開源Redis、PostgreSql等各類數據庫軟件中,高效完成自動化安全測評,挖掘內存安全相關漏洞,提升代碼質量。

    分布式架構安全測試
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    云計算的概念從提出到現在已經近 15 年時間。最初,業界大多將云計算架構分為基礎設施即服務(IaaS)、平臺即服務(PaaS)和軟件即服務(SaaS),這種基于虛擬主機(VM)為主體的虛擬化技術,從 IT 架構視角進行劃分的方法雖然清晰但有局限性,因為它并不是完全站在應用和業務視角。
    API技術逐漸成了現代數字業務環境的基礎組成,也是企業數字化轉型發展戰略實現的核心要素,幾乎所有的企業都依賴API進行服務連接、數據傳輸和系統控制。然而,API的爆炸式應用也為攻擊者提供了更多的方法,而現有的安全工具卻難以檢測和減輕特定于API的威脅,使組織容易受到妥協、濫用和欺詐的影響。
    原生云安全理念強調安全建設與云在時間和空間上的深度融合,成為實現云安全的關鍵選擇。
    2021年是“十四五”的開局之年。隨著全社會數字化轉型的加速,網絡安全重要性的不斷提升,我國網絡安全產業迎來了發展的關鍵時刻。基于“十三五”打下的良好基礎,網絡安全相關法律法規陸續發布實施,國家層面正持續開展相關配套制度、標準體系的建設及完善,網絡安全風險投資日趨活躍,網絡安全創業蔚然成風,產業繼續快速發展。
    模糊測試探索者之路
    2021-07-03 16:58:01
    模糊測試探索者姜宇:由于分布式系統固有的復雜性,保障分布式系統安全充滿挑戰;模糊測試是具有良好擴展性、適用性以及高準確率的漏洞挖掘技術;模糊測試在分布式系統上的應用還存在局限性;解決高效模糊測試三大關鍵挑戰為國產數據庫軟件安全保駕護航。
    可編程協議棧測試是對模糊測試的進一步提升,可針對 5G 協議和流程順序加以變化,形成更為有力的安全檢測手段。
    云原生化成為企業數字化轉型的高效方式,各大行業開始加速云原生化步伐。為了解決云原生安全帶來的新挑戰,提高應用服務全生命周期安全管理效率,國內某制造業企業通過青藤蜂巢·云原生安全平臺,實現了這一目標。通過采用云原生架構,部署青藤蜂巢產品,為某制造業企業的數字化創新提供了堅實的基礎支撐,最大限度的減少了安全瓶頸的發生頻率。隨著技術架構的升級,云原生在行業的應用范圍還將會不斷擴大。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类