新四季網

基於靜態分析的c語言安全規則檢查方法

2023-06-25 22:59:46

專利名稱:基於靜態分析的c語言安全規則檢查方法
技術領域:
本發明涉及一種基於靜態分析的C語言安全規則檢查方法,屬於靜態代碼分析 技術領域。
背景技術:
C語言在提供給程式設計師簡潔和靈活的同時,也帶給我們諸多的容易造成漏洞的 副作用。通過靜態代碼分析,我們可以在不執行代碼的前提下檢測到多種容易導致程序 漏洞的代碼。這樣的靜態分析工具上世紀八十年代就已經產生。目前,像PC-Lint, Coverity Prevent, LDRATestbed等商業工具廣泛地應用於軟體開發過程中,還有像Splint
這樣的開源工具也在不斷的演變和完善中。靜態代碼分析工具極大的提高了軟體工程中 代碼檢查的效率,降低了人工代碼複查的工作量。當前市場上的這些分析工具,其中有 的工具功能非常強大,能夠對程序進行全局分析和對運行時的程序狀態進行預判。例 如,對空指針引用的預判,堆棧溢出的檢查,運算操作中損失精度的檢查,等等。然 而,C語言中可能導致漏洞的隱患是多方面的,在一些關鍵的應用領域中,比如國防和 航天,即便是潛在的漏洞也是不能容忍的。為了防患於未然,對C語言的語法和語義做 出嚴格的規範是有必要的。

發明內容
為了解決這些問題,本發明提供了一種全新的方法,可以加強對C代碼安全性 的驗證。這個驗證是在編譯的早期階段完成的,所以並不涉及到目標代碼的生成。因此 可以高效率地對大規模C代碼進行檢查,無論是運行時間還是內存佔有方面。本發明採用的技術方案如下一種基於靜態分析的C語言安全規則檢查方法,其特徵在於包括以下步驟1)檢查C語言的類型,避免強制類型轉換的發生,禁止對通用指針類型的聲 明;2)規定全局變量和局部變量不可同名,全局變量與函數的形式參數不可重名;3)對控制流語句的循環變量做限制;4)強化C語言的聲明和定義;5)對原始碼作詞法、語法、語義的分析,找出原始碼中不符合上述規定的地方。進一步地在所述步驟3)中,對if-else語句和switch語句的組成結構加以限制,對循環語 句中循環控制表達式的組成元素的存儲類嚴格限制。在所述步驟4)中,對沒有使用的聲明和定義進行識別,禁止定義帶有可變參數 的函數。本發明的優點是1)在不需要執行代碼的前提下找到可能的C語言編程上的漏
3洞2)有效彌補C語言在軟體工程中安全性不足的缺陷。


圖1表示強制類型轉換的隱患;圖2表示通用指針的隱患;圖3表示規則檢查工具的工作原理;圖4為模塊間的數據流程圖。
具體實施例方式本發明提供了一種基於靜態分析的C語言安全規則檢查方法,包括以下步驟1)檢查C語言的類型,避免強制類型轉換的發生,禁止對通用指針類型的聲 明;2)規定全局變量和局部變量不可同名,全局變量與函數的形式參數不可重名;3)對控制流語句的循環變量做限制;4)強化C語言的聲明和定義;5)對原始碼作詞法、語法、語義的分析,找出原始碼中不符合上述規定的地方。下面詳細說明。本發明提出了安全C語言準則的概念,目的在於規範C語言編程,同時,幫助 C程式設計師養成良好的C語言編程風格和習慣。它是基於代碼分析工具基礎上的代碼規範 性檢測工具。對比當前已有的靜態檢查工具,在遵從C99標準的前提下,它對C語言的 語義和語法進行了更加嚴格的限定。這些限定比較集中的體現在以下幾個方面·類型檢查儘可能的讓C語言向純粹的靜態類型語言靠近。C語言中的類型強制轉換允許 不同類型間的混合運算,如圖1所示,其中類型轉換是編譯器「自動」完成的。這種隱 性的類型轉換很大程度上削弱了 C語言的類型安全性,因此要儘量避免強制類型轉換的 發生。如圖2所示,C語言中通用指針(void*)的存在,也是類型安全的巨大隱患。本 發明禁止對通用指針類型的聲明。·符號名使用的限制為了增強代碼的可讀性和可維護性,本發明對C語言中的符號命名做了嚴格的 限制。比如,在一個文件裡,全局變量和局部變量不可以同名,全局變量與函數的形式 參數不可以重名,儘管這樣的重名在C語言中是合法的並且C的編譯器可以根據作用域 的差別來解析這些重名的符號。·控制流中的限制控制流語句因為可能涉及到複雜的條件分支,最容易造成程序的漏洞。我們對 if-else和switch語句的組成結構加以限制,從而降低使用這兩種語句時漏掉判定條件的 風險。對循環語句,我們對循環控制表達式的組成元素的存儲類(即auto,extern, static)做了限制(比如只允許特定的存儲類的變量出現在循環控制表達式中),同樣是為了降低因使用全局變量的副作用造成的風險。·聲明和定義強化C語言的聲明和定義的規則,可以幫助我們減少編程中遇到的歧義,增強 代碼的可讀性。比如,對沒有使用的聲明和定義進行識別並且以分析報告的形式反饋給 用戶,禁止定義帶有可變參數的函數,等等。本發明的實現原理與編譯器前端的原理一致,都是對文本形式的原始碼作詞 法、語法和語義分析,從而找出原始碼中不符合相關詞法、語法、語義的定義的地方。 由於提出的安全C語言準則主要針對C語言的語義進行規範,規則檢查工具的大部分的 工作都是圍繞在語義分析進行的,這其中包括了重要的一環-類型檢查。如圖3所示,在這一過程中,原始碼被分析並且保存在一個語法樹中,另外各 種符號的屬性信息(比如類型,存儲類,名字)將會保存在一個符號表中。本發明依 賴於語法樹和符號表的信息來完成對原始碼的靜態分析。對代碼的靜態分析包括語法和 語義分析兩部分。其過程是通過將字符流轉換成token流,對token流進行語法分析和部 分語義分析後形成語法樹,然後再對語法樹進行語義分析。如圖4所示,本發明的內部構造主要由CPP和CCOM兩個模塊組成。CPP模塊 對原始碼進行預處理,並且負責檢查預處理階段的規則。CPP模塊的輸出是一個中間文 本文件,而這個中間文件隨即由CCOM模塊處理。CCOM模塊對代碼的語法和語義進行 檢查,所以,絕大部分的規則檢測是由這個模塊完成的。本發明可以在Windows作業系統的命令行下使用,也可作為集成開發環境的插 件部分來使用。例如,它現在已經作為SZIDE(神舟IDE嵌入式軟體集成開發環境)中 的一個有效的安全編程輔助工具,應用於我國航空,航天,軍工等領域的關鍵的嵌入式 軟體的研發中。
權利要求
1.一種基於靜態分析的C語言安全規則檢查方法,其特徵在於包括以下步驟1)檢查C語言的類型,避免強制類型轉換的發生,禁止對通用指針類型的聲明;2)規定全局變量和局部變量不可同名,全局變量與函數的形式參數不可重名;3)對控制流語句的循環變量做限制;4)強化C語言的聲明和定義;5)對原始碼作詞法、語法、語義的分析,找出原始碼中不符合上述規定的地方。
2.如權利要求1所述的基於靜態分析的C語言安全規則檢查方法,其特徵在於 在所述步驟3)中,對if-else語句和switch語句的組成結構加以限制,對循環語句中循環控制表達式的組成元素的存儲類嚴格限制。
3.如權利要求1所述的基於靜態分析的C語言安全規則檢查方法,其特徵在於 在所述步驟4)中,對沒有使用的聲明和定義進行識別,禁止定義帶有可變參數的函
全文摘要
本發明涉及一種基於靜態分析的C語言安全規則檢查方法,其包括以下步驟1)檢查C語言的類型,避免強制類型轉換的發生,禁止對通用指針類型的聲明;2)規定全局變量和局部變量不可同名,全局變量與函數的形式參數不可重名;3)對控制流語句的循環變量做限制;4)強化C語言的聲明和定義;5)對原始碼作詞法、語法、語義的分析,找出原始碼中不符合上述規定的地方。本發明的優點是1)在不需要執行代碼的前提下找到可能的C語言編程上的漏洞;2)有效彌補C語言在軟體工程中安全性不足的缺陷。
文檔編號G06F21/22GK102012991SQ20101053987
公開日2011年4月13日 申請日期2010年11月9日 優先權日2010年11月9日
發明者於鵬珊, 崔小磊, 程勝, 陸麒 申請人:北京神舟航天軟體技術有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀