軟件安全技術(shù)-代碼靜態(tài)分析課件_第1頁
軟件安全技術(shù)-代碼靜態(tài)分析課件_第2頁
軟件安全技術(shù)-代碼靜態(tài)分析課件_第3頁
軟件安全技術(shù)-代碼靜態(tài)分析課件_第4頁
軟件安全技術(shù)-代碼靜態(tài)分析課件_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第4章代碼安全靜態(tài)分析

第4章代碼安全靜態(tài)分析

教學(xué)目標(biāo)應(yīng)掌握的知識要點:靜態(tài)分析的概念;靜態(tài)分析技術(shù);靜態(tài)分析的過程;執(zhí)行代碼審查;安全審查;靜態(tài)分析度量標(biāo)準(zhǔn);靜態(tài)分析中的常見缺陷;緩沖區(qū)溢出。軟件漏洞重點代碼安全靜態(tài)分析靜態(tài)分析中的常見缺陷靜態(tài)分析的過程教學(xué)目標(biāo)應(yīng)掌握的知識要點:2本節(jié)安排靜態(tài)分析的概念靜態(tài)分析技術(shù)代碼靜態(tài)分析工具的引入本節(jié)安排靜態(tài)分析的概念34.1靜態(tài)分析4.1靜態(tài)分析定義及特點程序靜態(tài)分析(ProgramStaticAnalysis)是指在不運行代碼的方式下,通過各種分析工具對程序代碼進行掃描并做出評估的過程。4.1.1靜態(tài)分析的概念特點不實際執(zhí)行程序,只是通過對代碼的靜態(tài)掃描對程序進行分析執(zhí)行速度快、效率高定義及特點程序靜態(tài)分析(ProgramStaticAna5類型檢查例1shorts=1;inti=s;shortr=i;在本例中,程序的本意是想要將一個類型為int的表達(dá)式賦予給一個類型為short的變量,但是卻無法通過類型檢查。可以通過一個顯式的類型轉(zhuǎn)換來解決這個問題。例2String[]sa=newString[100];sa[0]="helloworld";Object[]oa=sa;oa[0]=newInteger(1);System.out.println(sa[0]);只有只讀的Object[]才能是String[]的父類型。但Java里并沒有只讀數(shù)組這么個類型,于是錯誤發(fā)生了。

4.1.2靜態(tài)分析技術(shù)類型檢查例1shorts=1;4.1.2靜6風(fēng)格檢查風(fēng)格檢查程序所顯示的錯誤常只是影響代碼的可讀性和可維護性,而不是程序運行過程中會發(fā)生的某種錯誤PMD會檢查出:catch塊中沒有內(nèi)容、if判斷塊中沒有內(nèi)容、代碼中出現(xiàn)System.out.println等警告描述。4.1.2靜態(tài)分析技術(shù)風(fēng)格檢查風(fēng)格檢查程序所顯示的錯誤常只是影響代碼的可讀性和可維7程序理解程序理解最主要的用途在于幫助理解程序,搞懂代碼庫中的大量代碼。它是一個從計算機程序中獲取知識信息的過程,這些知識信息可以用于程序排錯、增強程序、重用程序和整理文檔等工作。在很多集成開發(fā)環(huán)境(IDE)中,都包括了一些初級的程序理解功能,比如:查找本變量的聲明和使用位置。更高級一點的還能幫助查找類之間的關(guān)聯(lián)關(guān)系等。4.1.2靜態(tài)分析技術(shù)程序理解程序理解最主要的用途在于幫助理解程序,搞懂代碼庫中的8程序驗證和屬性檢查程序驗證是對源代碼進行分析,如果源代碼符合預(yù)先專門制定的一份描述程序行為的規(guī)格說明,那么則說明該程序完好。性檢查的方法跟程序驗證的方法從本質(zhì)上是一樣的,它們的區(qū)別在于,屬性檢查依據(jù)的只是描述部分程序行為的部分規(guī)格說明,而程序驗證依據(jù)的是描述所有程序行為的規(guī)格說明。4.1.2靜態(tài)分析技術(shù)代碼中,在調(diào)用new分配內(nèi)存后,程序未對調(diào)用結(jié)果的正確性進行檢測。如果cbSize為0的話,則(cbSize-1)為-1。但是Memset中第3個參數(shù)本身是無符號數(shù),因此會將-1視為正的0xffffffff,函數(shù)執(zhí)行之后程序當(dāng)然就只有崩潰了。程序驗證和屬性檢查程序驗證是對源代碼進行分析,如果源代碼符合9Bug查找Bug查找是指按照預(yù)先制定的一些共同認(rèn)同的規(guī)則,來查找程序中存在的一些bug。4.1.2靜態(tài)分析技術(shù)最后一行將產(chǎn)生一個null指針異常,因為變量actions還沒有初始化如果第1行的Map不包括一個名為“bob”的人,那么在第5行詢問person的名字時就會出現(xiàn)null指針異常。

Bug查找Bug查找是指按照預(yù)先制定的一些共同認(rèn)同的規(guī)則,來10安全審查以安全為中心的靜態(tài)分析;現(xiàn)代安全分析工具往往更像是一種屬性檢查程序和bug查找程序的混合體,許多安全屬性能被簡潔的表達(dá)為程序?qū)傩?,對于一個屬性檢查程序來說,搜索潛在的緩沖區(qū)溢出漏洞可以當(dāng)做是檢查這樣的程序?qū)傩裕骸俺绦虿粫L問被分配內(nèi)存的邊界之外的地址”。安全分析工具采納了這樣一種觀念,即開發(fā)人員往往會繼續(xù)再使用相同的不安全的方法來解決問題,這可說成是一種不安全的慣例。4.1.2靜態(tài)分析技術(shù)安全審查以安全為中心的靜態(tài)分析;4.1.2靜態(tài)分析技術(shù)11代碼安全靜態(tài)分析工具的引入對程序員來說,對安全編程所需的知識缺乏理解會導(dǎo)致其所編寫的代碼不符合安全規(guī)范而引發(fā)安全問題。另外,即使是經(jīng)驗豐富的程序員也無法完全避免在代碼編寫的過程中出現(xiàn)或多或少的拼寫錯誤,這類簡單錯誤有時也可能引發(fā)安全問題。靜態(tài)分析工具能夠完整而客觀地進行程序檢測,而不管編碼人員是否了解哪些代碼是與安全“相關(guān)的”。當(dāng)一種新的攻擊出現(xiàn)時,靜態(tài)分析工具可以迅速地對相關(guān)代碼進行復(fù)查,同時分析該新型攻擊能否對代碼構(gòu)成威脅。在被發(fā)現(xiàn)之前,某些安全缺陷已在程序中存在很久了,靜態(tài)分析工具有能力針對新發(fā)現(xiàn)的缺陷類型對遺留代碼進行檢查。盡管誤報難以避免,但從安全的角度看,漏報才是最嚴(yán)重的局限性。HPFortify4.1.2靜態(tài)分析技術(shù)代碼安全靜態(tài)分析工具的引入對程序員來說,對安全編程所需的知識124.2靜態(tài)分析的過程4.2靜態(tài)分析的過程靜態(tài)分析的過程提取源代碼根據(jù)分析需求把程序源代碼變換成易于分析處理的程序模型。在這個過程用到了編譯原理中的成熟技術(shù);將代碼按照檢查規(guī)則執(zhí)行分析;按照制定的報告模式生成分析報告。4.2靜態(tài)分析的過程靜態(tài)分析的過程提取源代碼4.2靜態(tài)分析的過程14定義靜態(tài)分析工具首先要做的,是用一個程序模型來表示待分析的代碼,即提取目標(biāo)代碼的數(shù)據(jù)結(jié)構(gòu)。在構(gòu)建該模型的過程中,靜態(tài)分析工具一般會借用大量來自編譯器領(lǐng)域的技術(shù):

詞法分析語法分析

抽象語法

語義分析

跟蹤控制流

跟蹤數(shù)據(jù)流

污染傳播

指針別名歧義4.2.1建模定義靜態(tài)分析工具首先要做的,是用一個程序模型來表示待分析的代15詞法分析是把源文件的字符流轉(zhuǎn)換成記號流,即從左到右逐個字符對構(gòu)成源程序的字符串進行掃描,依據(jù)詞法規(guī)則,識別出一個一個的標(biāo)記(token),把源程序變?yōu)榈葍r的標(biāo)記串序列。例:inta=3+5;經(jīng)過詞法分析會輸出int,a,=,3,+,5和;這七個單詞。然后比較記號流中的標(biāo)識符和預(yù)先定義的安全性漏洞字典,如果匹配就發(fā)出警告。在靜態(tài)分析工具中,詞法分析是針對源代碼進行的第一個操作,該操作將代碼轉(zhuǎn)換為一系列記號,這個記號流的創(chuàng)建過程稱為詞法分析4.2.1建模詞法分析是把源文件的字符流轉(zhuǎn)換成記號流,即從左到右逐個字符對16語法解析語法解析器中用來匹配上述記號流的是一種與上下文環(huán)境無關(guān)的語法。該語法由一組產(chǎn)生式構(gòu)成,用語言中的一對符號來標(biāo)記。4.2.1建模語法解析語法解析器中用來匹配上述記號流的是一種與上下文環(huán)境無17抽象語法解析樹無法完成復(fù)雜的分析,因為在解析工程中,經(jīng)常會對語法進行等價的轉(zhuǎn)換,這樣會給語法引入一些多余的成分,對后續(xù)階段造成不利影響,甚至?xí)垢麟A段變得混亂。因此,很多編譯器(包括GJC)經(jīng)常要獨立地構(gòu)造解析樹,為前、后端建立一個清晰的接口。這時就需要使用抽象語法樹(AST)。上例中的語法樹如下:4.2.1建模抽象語法樹的結(jié)構(gòu)不依賴于源文件的文法,也就是解析階段所采用的上下文無關(guān)語法,因此它能夠為后來的分析提供一個更加標(biāo)準(zhǔn)方便的版本抽象語法解析樹無法完成復(fù)雜的分析,因為在解析工程中,經(jīng)常會對18語義分析語義分析,即審查每個語法成分的靜態(tài)語義。4.2.1建模語義分析檢查點類型檢查控制流檢查一致性檢查語義分析語義分析,即審查每個語法成分的靜態(tài)語義。4.2.119跟蹤控制流許多靜態(tài)分析算法都會探究函數(shù)執(zhí)行可能采取的路徑。因此,絕大多數(shù)分析工具都會在AST或者中間表示法之上生成一個控制流圖以使算法更高效??刂屏鲌D中的節(jié)點是一些基本塊:指令序列總以連續(xù)方式從第一條執(zhí)行到最后一條。4.2.1建模跟蹤控制流許多靜態(tài)分析算法都會探究函數(shù)執(zhí)行可能采取的路徑。因20跟蹤數(shù)據(jù)流數(shù)據(jù)流分析一般是對某個函數(shù)的控制流圖進行遍歷,同時記錄數(shù)據(jù)值的產(chǎn)生和使用位置。4.2.1建模跟蹤數(shù)據(jù)流數(shù)據(jù)流分析一般是對某個函數(shù)的控制流圖進行遍歷,同時21污染傳播通過污染傳播測試能知道攻擊者可能潛在地控制程序中的哪些值,確定污染數(shù)據(jù)的來源,找出所有外部數(shù)據(jù)進入程序的入口代碼以及它在程序中是如何移動的。4.2.1建模代碼動態(tài)構(gòu)建和執(zhí)行一個SQL查詢,查找與給定名稱匹配的item。查詢限定只有當(dāng)當(dāng)前用戶名與item的所有者名稱匹配時,才向當(dāng)前用戶顯示item。污染傳播通過污染傳播測試能知道攻擊者可能潛在地控制程序中的哪22指針別名歧義指針別名分析是另一個問題數(shù)據(jù)流問題。別名分析的目的是要了解哪些指針可能是指向相同的內(nèi)存位置。例:只有當(dāng)指針p1和p2不指向內(nèi)存的相同位置時,編譯器才會記錄下面兩個聲明:*p1=1;*p2=2;對于安全工具來說,別名分析在執(zhí)行污染傳播測試方面很重要。一個流動的敏感的污點-跟蹤算法需要執(zhí)行別名分析,以了解下面代碼中從getUserInput()到processInput()的數(shù)據(jù)流:

p1=p2;*p1=getUserInput();processInput(*p2);4.2.1建模指針別名歧義指針別名分析是另一個問題數(shù)據(jù)流問題。別名分析的目23組成任何優(yōu)秀的分析策略都至少包括兩個組成部分:分析每個單獨的函數(shù)的程序內(nèi)分析(本地分析)和分析函數(shù)之間的關(guān)系的程序間分析(全局分析)。4.2.2分析算法組成任何優(yōu)秀的分析策略都至少包括兩個組成部分:分析每個單獨的24斷言4.2.2分析算法從安全特性產(chǎn)生的斷言那些與在程序中傳送時數(shù)據(jù)被賦予的信任等級相關(guān)的斷言緩沖區(qū)溢出漏洞所引發(fā)的斷言對象在程序運行時的狀態(tài)斷言4.2.2分析算法從安全特性產(chǎn)生的斷言那些與在程序中25本地分析法本地分析法抽象解釋:是一種通用技術(shù),這種方法首先將程序中與所關(guān)注的屬性無關(guān)的信息抽取出去,而后使用選中的程序抽象執(zhí)行一種解釋。謂詞轉(zhuǎn)換器:一種用來替換模擬和解釋的方法是導(dǎo)出函數(shù)對其調(diào)用者的需求。模型檢查:對于臨時性的安全屬性,比如“內(nèi)存應(yīng)該只釋放一次”以及“應(yīng)該只有非空指針才能被解除引用”,可以很容易地將所檢查的屬性表示為一個小型的有限狀態(tài)自動機。4.2.2分析算法本地分析法本地分析法抽象解釋:是一種通用技術(shù),這種方法首先將26全局分析全局分析的作全局分析被采用的實質(zhì)原因有兩個方面:首先,它可以保證匯編系統(tǒng)的一致性;其次,它通過提供自動優(yōu)化,減輕了程序員的負(fù)擔(dān)。用是用來分析程序中各個函數(shù)之間的關(guān)系。4.2.2分析算法全局分析全局分析的作4.2.2分析算法27定義及分類是指安全工具應(yīng)該報告的內(nèi)容的規(guī)則集。分析算法有時可能由錯誤的“因”獲得正確的“果”,但分析工具永遠(yuǎn)也不會報告超出規(guī)則集范圍的問題。4.2.3規(guī)則規(guī)則格式:專用的規(guī)則文件、批注用于傳播的規(guī)則源規(guī)則定義及分類是指安全工具應(yīng)該報告的內(nèi)容的規(guī)則集。分析算法有時可28審計人員如何利用報告審計人員如何利用報告將所報告的結(jié)果進行分類并分組消除所報告的結(jié)果中非預(yù)期的部分對所報告結(jié)果的意義進行解釋4.4.4報告結(jié)果審計人員如何利用報告審計人員如何利用報告將所報告的結(jié)果進行分29靜態(tài)分析技術(shù)劃分建模涉及到的技術(shù)分類規(guī)則分類如何利用報告小結(jié)靜態(tài)分析技術(shù)劃分小結(jié)30靜態(tài)分析的過程控制流圖數(shù)據(jù)流圖本地分析和全局分析作業(yè)靜態(tài)分析的過程作業(yè)31第4章代碼安全靜態(tài)分析

第4章代碼安全靜態(tài)分析

教學(xué)目標(biāo)應(yīng)掌握的知識要點:靜態(tài)分析的概念;靜態(tài)分析技術(shù);靜態(tài)分析的過程;執(zhí)行代碼審查;安全審查;靜態(tài)分析度量標(biāo)準(zhǔn);靜態(tài)分析中的常見缺陷;緩沖區(qū)溢出。軟件漏洞重點代碼安全靜態(tài)分析靜態(tài)分析中的常見缺陷靜態(tài)分析的過程教學(xué)目標(biāo)應(yīng)掌握的知識要點:33本節(jié)安排靜態(tài)分析的概念靜態(tài)分析技術(shù)代碼靜態(tài)分析工具的引入本節(jié)安排靜態(tài)分析的概念344.1靜態(tài)分析4.1靜態(tài)分析定義及特點程序靜態(tài)分析(ProgramStaticAnalysis)是指在不運行代碼的方式下,通過各種分析工具對程序代碼進行掃描并做出評估的過程。4.1.1靜態(tài)分析的概念特點不實際執(zhí)行程序,只是通過對代碼的靜態(tài)掃描對程序進行分析執(zhí)行速度快、效率高定義及特點程序靜態(tài)分析(ProgramStaticAna36類型檢查例1shorts=1;inti=s;shortr=i;在本例中,程序的本意是想要將一個類型為int的表達(dá)式賦予給一個類型為short的變量,但是卻無法通過類型檢查??梢酝ㄟ^一個顯式的類型轉(zhuǎn)換來解決這個問題。例2String[]sa=newString[100];sa[0]="helloworld";Object[]oa=sa;oa[0]=newInteger(1);System.out.println(sa[0]);只有只讀的Object[]才能是String[]的父類型。但Java里并沒有只讀數(shù)組這么個類型,于是錯誤發(fā)生了。

4.1.2靜態(tài)分析技術(shù)類型檢查例1shorts=1;4.1.2靜37風(fēng)格檢查風(fēng)格檢查程序所顯示的錯誤常只是影響代碼的可讀性和可維護性,而不是程序運行過程中會發(fā)生的某種錯誤PMD會檢查出:catch塊中沒有內(nèi)容、if判斷塊中沒有內(nèi)容、代碼中出現(xiàn)System.out.println等警告描述。4.1.2靜態(tài)分析技術(shù)風(fēng)格檢查風(fēng)格檢查程序所顯示的錯誤常只是影響代碼的可讀性和可維38程序理解程序理解最主要的用途在于幫助理解程序,搞懂代碼庫中的大量代碼。它是一個從計算機程序中獲取知識信息的過程,這些知識信息可以用于程序排錯、增強程序、重用程序和整理文檔等工作。在很多集成開發(fā)環(huán)境(IDE)中,都包括了一些初級的程序理解功能,比如:查找本變量的聲明和使用位置。更高級一點的還能幫助查找類之間的關(guān)聯(lián)關(guān)系等。4.1.2靜態(tài)分析技術(shù)程序理解程序理解最主要的用途在于幫助理解程序,搞懂代碼庫中的39程序驗證和屬性檢查程序驗證是對源代碼進行分析,如果源代碼符合預(yù)先專門制定的一份描述程序行為的規(guī)格說明,那么則說明該程序完好。性檢查的方法跟程序驗證的方法從本質(zhì)上是一樣的,它們的區(qū)別在于,屬性檢查依據(jù)的只是描述部分程序行為的部分規(guī)格說明,而程序驗證依據(jù)的是描述所有程序行為的規(guī)格說明。4.1.2靜態(tài)分析技術(shù)代碼中,在調(diào)用new分配內(nèi)存后,程序未對調(diào)用結(jié)果的正確性進行檢測。如果cbSize為0的話,則(cbSize-1)為-1。但是Memset中第3個參數(shù)本身是無符號數(shù),因此會將-1視為正的0xffffffff,函數(shù)執(zhí)行之后程序當(dāng)然就只有崩潰了。程序驗證和屬性檢查程序驗證是對源代碼進行分析,如果源代碼符合40Bug查找Bug查找是指按照預(yù)先制定的一些共同認(rèn)同的規(guī)則,來查找程序中存在的一些bug。4.1.2靜態(tài)分析技術(shù)最后一行將產(chǎn)生一個null指針異常,因為變量actions還沒有初始化如果第1行的Map不包括一個名為“bob”的人,那么在第5行詢問person的名字時就會出現(xiàn)null指針異常。

Bug查找Bug查找是指按照預(yù)先制定的一些共同認(rèn)同的規(guī)則,來41安全審查以安全為中心的靜態(tài)分析;現(xiàn)代安全分析工具往往更像是一種屬性檢查程序和bug查找程序的混合體,許多安全屬性能被簡潔的表達(dá)為程序?qū)傩裕瑢τ谝粋€屬性檢查程序來說,搜索潛在的緩沖區(qū)溢出漏洞可以當(dāng)做是檢查這樣的程序?qū)傩裕骸俺绦虿粫L問被分配內(nèi)存的邊界之外的地址”。安全分析工具采納了這樣一種觀念,即開發(fā)人員往往會繼續(xù)再使用相同的不安全的方法來解決問題,這可說成是一種不安全的慣例。4.1.2靜態(tài)分析技術(shù)安全審查以安全為中心的靜態(tài)分析;4.1.2靜態(tài)分析技術(shù)42代碼安全靜態(tài)分析工具的引入對程序員來說,對安全編程所需的知識缺乏理解會導(dǎo)致其所編寫的代碼不符合安全規(guī)范而引發(fā)安全問題。另外,即使是經(jīng)驗豐富的程序員也無法完全避免在代碼編寫的過程中出現(xiàn)或多或少的拼寫錯誤,這類簡單錯誤有時也可能引發(fā)安全問題。靜態(tài)分析工具能夠完整而客觀地進行程序檢測,而不管編碼人員是否了解哪些代碼是與安全“相關(guān)的”。當(dāng)一種新的攻擊出現(xiàn)時,靜態(tài)分析工具可以迅速地對相關(guān)代碼進行復(fù)查,同時分析該新型攻擊能否對代碼構(gòu)成威脅。在被發(fā)現(xiàn)之前,某些安全缺陷已在程序中存在很久了,靜態(tài)分析工具有能力針對新發(fā)現(xiàn)的缺陷類型對遺留代碼進行檢查。盡管誤報難以避免,但從安全的角度看,漏報才是最嚴(yán)重的局限性。HPFortify4.1.2靜態(tài)分析技術(shù)代碼安全靜態(tài)分析工具的引入對程序員來說,對安全編程所需的知識434.2靜態(tài)分析的過程4.2靜態(tài)分析的過程靜態(tài)分析的過程提取源代碼根據(jù)分析需求把程序源代碼變換成易于分析處理的程序模型。在這個過程用到了編譯原理中的成熟技術(shù);將代碼按照檢查規(guī)則執(zhí)行分析;按照制定的報告模式生成分析報告。4.2靜態(tài)分析的過程靜態(tài)分析的過程提取源代碼4.2靜態(tài)分析的過程45定義靜態(tài)分析工具首先要做的,是用一個程序模型來表示待分析的代碼,即提取目標(biāo)代碼的數(shù)據(jù)結(jié)構(gòu)。在構(gòu)建該模型的過程中,靜態(tài)分析工具一般會借用大量來自編譯器領(lǐng)域的技術(shù):

詞法分析語法分析

抽象語法

語義分析

跟蹤控制流

跟蹤數(shù)據(jù)流

污染傳播

指針別名歧義4.2.1建模定義靜態(tài)分析工具首先要做的,是用一個程序模型來表示待分析的代46詞法分析是把源文件的字符流轉(zhuǎn)換成記號流,即從左到右逐個字符對構(gòu)成源程序的字符串進行掃描,依據(jù)詞法規(guī)則,識別出一個一個的標(biāo)記(token),把源程序變?yōu)榈葍r的標(biāo)記串序列。例:inta=3+5;經(jīng)過詞法分析會輸出int,a,=,3,+,5和;這七個單詞。然后比較記號流中的標(biāo)識符和預(yù)先定義的安全性漏洞字典,如果匹配就發(fā)出警告。在靜態(tài)分析工具中,詞法分析是針對源代碼進行的第一個操作,該操作將代碼轉(zhuǎn)換為一系列記號,這個記號流的創(chuàng)建過程稱為詞法分析4.2.1建模詞法分析是把源文件的字符流轉(zhuǎn)換成記號流,即從左到右逐個字符對47語法解析語法解析器中用來匹配上述記號流的是一種與上下文環(huán)境無關(guān)的語法。該語法由一組產(chǎn)生式構(gòu)成,用語言中的一對符號來標(biāo)記。4.2.1建模語法解析語法解析器中用來匹配上述記號流的是一種與上下文環(huán)境無48抽象語法解析樹無法完成復(fù)雜的分析,因為在解析工程中,經(jīng)常會對語法進行等價的轉(zhuǎn)換,這樣會給語法引入一些多余的成分,對后續(xù)階段造成不利影響,甚至?xí)垢麟A段變得混亂。因此,很多編譯器(包括GJC)經(jīng)常要獨立地構(gòu)造解析樹,為前、后端建立一個清晰的接口。這時就需要使用抽象語法樹(AST)。上例中的語法樹如下:4.2.1建模抽象語法樹的結(jié)構(gòu)不依賴于源文件的文法,也就是解析階段所采用的上下文無關(guān)語法,因此它能夠為后來的分析提供一個更加標(biāo)準(zhǔn)方便的版本抽象語法解析樹無法完成復(fù)雜的分析,因為在解析工程中,經(jīng)常會對49語義分析語義分析,即審查每個語法成分的靜態(tài)語義。4.2.1建模語義分析檢查點類型檢查控制流檢查一致性檢查語義分析語義分析,即審查每個語法成分的靜態(tài)語義。4.2.150跟蹤控制流許多靜態(tài)分析算法都會探究函數(shù)執(zhí)行可能采取的路徑。因此,絕大多數(shù)分析工具都會在AST或者中間表示法之上生成一個控制流圖以使算法更高效??刂屏鲌D中的節(jié)點是一些基本塊:指令序列總以連續(xù)方式從第一條執(zhí)行到最后一條。4.2.1建模跟蹤控制流許多靜態(tài)分析算法都會探究函數(shù)執(zhí)行可能采取的路徑。因51跟蹤數(shù)據(jù)流數(shù)據(jù)流分析一般是對某個函數(shù)的控制流圖進行遍歷,同時記錄數(shù)據(jù)值的產(chǎn)生和使用位置。4.2.1建模跟蹤數(shù)據(jù)流數(shù)據(jù)流分析一般是對某個函數(shù)的控制流圖進行遍歷,同時52污染傳播通過污染傳播測試能知道攻擊者可能潛在地控制程序中的哪些值,確定污染數(shù)據(jù)的來源,找出所有外部數(shù)據(jù)進入程序的入口代碼以及它在程序中是如何移動的。4.2.1建模代碼動態(tài)構(gòu)建和執(zhí)行一個SQL查詢,查找與給定名稱匹配的item。查詢限定只有當(dāng)當(dāng)前用戶名與item的所有者名稱匹配時,才向當(dāng)前用戶顯示item。污染傳播通過污染傳播測試能知道攻擊者可能潛在地控制程序中的哪53指針別名歧義指針別名分析是另一個問題數(shù)據(jù)流問題。別名分析的目的是要了解哪些指針可能是指向相同的內(nèi)存位置。例:只有當(dāng)指針p1和p2不指向內(nèi)存的相同位置時,編譯器才會記錄下面兩個聲明:*p1=1;*p2=2;對于安全工具來說,別名分析在執(zhí)行污染傳播測試方面很重要。一個流動的敏感的污點-跟蹤算法需要執(zhí)行別名分析,以了解下面代碼中從getUserInput()到processInput()的數(shù)據(jù)流:

p1=p2;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論