如何針對PC端的應用軟體進行安全測試?

最近手裡有一個PC端的應用軟體需要進行安全測試,平時對於web和安卓app至少還知道用burp抓抓包啥的,PC應用軟體就不知道該如何入手了,測試PC軟體有沒有什麼常見的套路呢?


我回來了,下面開更。

—————————— 分割線————————————————

2016.09.14 更新

軟體安全檢測技術主要用於對軟體中的安全缺陷或漏洞進行分析測試,以期發現軟體中的安全隱患。主要包括以下三種技術:軟體靜態安全檢測技術、軟體動態安全檢測技術和軟體動靜結合的安全檢測技術。

一、靜態檢測技術

靜態檢測針對的是未處於運行狀態的軟體,可用於對軟體源代碼和可執行代碼的檢測。

1、軟體源代碼的靜態安全檢測(這是軟體源代碼的主要安全檢測技術)

優勢:不需要構建代碼的運行環境,分析效率高,消耗資源少,減少了人工分析的工作量。

劣勢:誤報率較高。

主要技術包括:詞法分析、數據流分析、污點傳播分析、符號分析、模型檢查、定理證明等。

(1)詞法分析

通過對源代碼進行基於文本或字元標識的匹配分析對比,以查找符合特定特徵和此法規則的危險函數、API或簡單語句組合。

缺點是只能進行表面的詞法檢測,不能進行語義方面的深層次分析。

工具:Checkmarx和ITS4等。

(2)數據流分析

通過分析軟體代碼中變數的取值變化和語句的執行情況,來分析數據處理邏輯和程序的控制流關係。

適合檢查因控制流信息非法操作而導致的安全問題,如內存訪問越界、常數傳播等,但準確率較低,誤報率高。由於可以實現大規模代碼的快速分析,廣泛應用於商業的源代碼安全性分析工具中。

工具:Coverity、Klockwork

(3)污點傳播分析

通過分析代碼中輸入數據對程序執行路徑的影響,以發現不可信的輸入數據導致的程序執行異常。

污點傳播分析的核心是分析輸入倉鼠和執行路徑之間的關係,適用於由輸入參數引發漏洞的檢測。該技術分析準確率較高,但針對大規模代碼的分析,性能將受較大影響。

工具:Pixy

(4)符號分析

符號分析是指在不實際執行程序的前提下,將程序的輸入表示成符號,更具程序的執行流程和輸入參數的賦值變化,把程序的輸出表示成包含這些符號的邏輯或算術表達式的一種技術。

它的優點是代價小、效率高,但由於程序執行的可能路徑隨著程序規模的增大呈指數級增長,當程序執行路徑的數量超過約束求解工具的求解能力時,符號執行將難以進行。

工具:EXE、SAGE、SMART、KIEE等

(5)模型檢查

模型檢查是將程序的執行過程抽象為狀態遷移的模型,採用狀態遷移過程中安全屬性的驗證來判斷程序的安全性質。

模型檢驗對於路徑和狀態的分析過程可以實現全自動化,但由於窮舉所有狀態,所以和符號分析一樣存在計算能力受限的問題。此外,模型檢驗對大型複雜軟體的漏洞挖掘方面仍處於探索階段。

工具:微軟的SLAM項目、伯克利大學的MOPS工具等。

(6)定理證明

定理證明是將待解決問題轉化為數學上的定理證明問題,從而判定程序是否滿足特定安全屬性。

由於定理證明的方法整個過程都使用嚴格的推理證明實現分析,在靜態分析技術中是最準確的、誤報率較低。但是該技術抽象和轉黃工作需要人工干預,自動化程度不高,難以應用於新漏洞的檢測,而且難以應用於大型軟體的程序分析。

工具:Saturn、ESC/Java等。

2、可執行代碼的靜態分析

只能對可執行代碼反彙編後得到的彙編代碼進行檢測,而彙編代碼多是寄存器之間數值的操作,沒有明確的語義信息,因此靜態檢測往往分析效率低下,誤報率較高。可執行代碼檢測可以分為基於程序結構的安全檢測技術和基於程序語義的安全檢測技術。

(1)基於程序結構的安全檢測技術

該技術需要根據二進位可執行文件的格式特徵,從二進位文件的頭部、符號表以及調試信息中提取安全敏感信息,來分析文件中是否存在安全缺陷。

工具:IDA Pro、Bugscam。

(2)基於程序語義的檢測技術

該技術需要先程序進行反彙編得到彙編代碼,再將彙編代碼轉換為中間語言,在分析中間語言的基礎上針對得到的部分語義信息進行缺陷分析和漏洞的檢測。

工具:UAFChecker檢測工具。

ps:今天先更這麼多,有事做了,不過好像沒什麼人看,下次再更 動態檢測和動靜結合的檢測技術。

——————我叫分割線——————————

2016.09.17 0:24

莫蘭蒂過後的廈門滿目瘡痍,百廢待興,人們生活在水深火熱之中,沒有水,沒有電,但還是挺過來了,希望廈門能早日重煥光彩。

第二次更新,補上動態分析與動靜結合分析

下面開更:

二、動態檢測技術

動態檢測是針對運行中的軟體程序,通過構造非正常的輸入來檢測軟體運行時是否出現故障或崩潰等非正常輸出,並通過檢測軟體運行中的內部狀態信息來驗證或檢測軟體缺陷的過程。動態檢測的分析對象時可執行代碼,其與可執行代碼的靜態檢測的區別就在於程序是否處於運行狀態。動態安全檢測技術是通過實際運行程序來發現問題的,因此檢出的安全缺陷與漏洞準確率非常高(誤報率低)。

目前主要的動態檢測技術有:模糊測試、智能模糊測試和動態污點分析。

1、模糊測試(Fuzzing)

是一種自動化或半自動化的安全漏洞檢測技術,通過向受測軟體輸入大量的畸形數據並檢測目標系統的異常來發現潛在的軟體漏洞。屬於黑盒測試的一種。缺點是畸形數據的生成具有隨機性,而隨機性將造成測試代碼覆蓋不充分,從而導致測試數據覆蓋率不高。可選用的模糊測試工具有SPIKE、Peach等。

在具體測試軟體時,需要根據目標的實際因素而選擇不同方法。然而無論使用何種方法進行測試,模糊測試基本都需要採用以下幾個步驟:

(1)確定測試對象和輸入數據

由於可利用的漏洞都是由於程序接收了用戶輸入的數據造成的,並且在處理輸入數據時沒有先過濾非法數據或進行校驗確認,所以對模糊測試而言,確定可能的輸入數據以及畸形輸入數據的枚舉是極為重要的。文件、網路數據包、註冊表鍵值、環境變數等都可能是模糊測試的輸入數據。

(2)生成模糊測試數據

一旦確定了輸入數據,就可以生成模糊測試用的畸形數據。我們需要根據目標程序及輸入數據格式的不同,選擇不同的測試數據生成演算法。

(3)檢測模糊測試數據

啟動目標程序,把生成的測試數據輸入到接收測試的應用程序中。

(4)監測程序異常

這一步非常重要,只有實時監測目標程序的運行,才能追蹤到引發目標程序異常的源測試數據。在這裡可以採用操作系統的監測功能和第三方監測軟體。

(5)確定可利用性

這個步驟並非必須,只是監測這個異常對應的漏洞是否可被利用。這需要測試人員具備較強的漏洞挖掘和分析經驗。

儘管模糊測試對安全缺陷和漏洞的檢測能力很強,但由於它的測試樣本生成方式具有隨機性,所以並不能發現所有錯誤。為了彌補它的不足,有的公司採用多台測試伺服器組成的集群進行分散式協同測試,通過增加物理資源,能在一定程度上彌補模糊測試的不足。

2、智能模糊測試(Smart Fuzzing)

這種技術是在模糊測試的基礎上引入了基於符號執行等 可進行程序理解的方法,有針對性地設計測試數據,從而實現比傳統模糊測試更高的效率。

具體的實現步驟:

(1)反彙編

先對可執行代碼進行反彙編,然後在彙編代碼的基礎上進行輸入數據、控制流、執行路徑之間相關關係的分析。

(2)中間語言轉換

由於直接從彙編代碼中獲得程序運行的內部信息的工作量較大,因此通常將彙編代碼再轉換成中間語言,以便理解。

(3)採用智能技術分析輸入數據和執行路徑的關係

這一步是智能模糊測試的關鍵,它通過符號執行和約束求解技術、污點傳播分析、執行路徑遍歷等技術手段,檢測出可能產生漏洞的程序執行路徑集合和輸入數據集合。

(4)利用分析獲得的輸入數據集合,對執行路徑集合進行測試

智能模糊測試的核心思想在於以儘可能小的代價找出程序中最可能產生漏洞的執行路徑,從而避免了盲目進行全路徑覆蓋測試的低效率,使漏洞分析具有了更強的針對性。然而,智能模糊測試在分析可能產生漏洞的執行路徑時,從技術實現、編碼工作和提升分析的準確性方面,都有較大難度和提升空間,並將花費大量的實價成本和人力。所以在選用技術時,需要衡量工作量和安全檢測效率之間的關係。

可用工具有典型的TainScope。

3、動態污點分析(Dynamic Taint Analysis)

模糊測試側重隨機生成數據樣本並測試,而不關注程序真實的執行過程。動態污點分析則是通過分析被測試程序內部指令的真實的執行過程,追蹤輸入數據在程序內部的傳遞、處理流程,以檢測輸入數據是否存在設計安全的敏感操作,從而分析出污點數據導致的潛在安全缺陷和漏洞。

該技術的基本思想是在程序執行過程中跟蹤用戶輸入數據在寄存器和內存單元之間的傳播過程,然後監控被測試程序對輸入數據使用的相關信息。

動態污點分析關注所有來自程序外部的不可信污點在可執行程序中的傳播過程,對所有不可信污點都標記一個唯一的標籤,然後跟蹤這些標籤在可執行程序中的傳遞過程。在跟蹤這些標籤在二進位程序中的過程時,不僅考慮二進位程序中的數據依賴關係,而且考慮二進位程序中不同變數之間的控制依賴關係。動態污點分析可以識別出輸入文件中的哪些位元組會影響二進位程序中涉及安全敏感操作的函數,如內存分配函數、字元串函數等,從而發現可能觸發安全缺陷和漏洞的污點數據。

可用的工具有BitBlaze。

三、動靜結合測試

靜態和動態分析技術都有各自的優缺點,例如靜態分析可以比較全面地考慮執行路徑,漏報率比動態分析低;但動態分析由於獲取了具體的運行信息,因此報告的漏洞更為精準。因此,單純地使用某種技術可能難以達到理想的效果,將動態分析和靜態分析結合起來,揚長避短,就能得到更好的分析效果。

動靜結合的安全檢測方法主要有:

1、先對源代碼進行靜態分析,發現潛在漏洞,然後構造輸入數據在程序動態運行時驗證。但是這種方法沒能充分發揮動態分析的作用。

2、對可執行代碼進行反彙編,通過對彙編代碼或中間語言進行靜態檢測分析獲取的信息來指導動態分析。這種方法結合了動態污點分析技術的優點,但是彙編代碼的語義信息通常難以提取和理解,並且跟蹤可執行代碼運行信息的技術難度也很大。

總之,將動靜結合的方法用於分析二進位程序,要比單純的使用一種技術更加複雜。

可選用的工具有BitBlaze。

簡單介紹一下BitBlaze:它由三部分組成:TEMU是其動態分析模塊,VINE是其靜態分析模塊,Rudder的層次在前兩者致傷,是混合進行符號執行和實際執行的模塊。BitBlaze本質上來講是一個動態Fuzzing工具,它能保證每次執行的都是不同的路徑,並以此提高測試的有效性。


推薦閱讀:

想要參加一個信息安全競賽,想請問零基礎應該如何準備學習什麼看什麼書?
白帽賭城演講記:Trend, Tech, Team,還有打槍 (Blackhat篇 - 1)

TAG:網路安全 | 信息安全 | 滲透測試 |