• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    尋覓安全編碼的蹤跡

    發布時間:  2012/8/22 10:24:15
    在做好安全軟件開發的準備之后,開發團隊還需要清楚安全編碼的原則。這是開發任何健壯、安全軟件的重要基礎。

    保持代碼的簡潔

    代碼庫越小越簡單,就越容易驗證軟件的安全性。有些代碼的功能強大,可能會造成嚴重的后果,通過減少實現這些功能的源代碼模塊的大小,就可以極大地減少代碼中的漏洞數量。

    在此,列示幾個縮短和簡化代碼的方法:

    1、確保軟件僅包含所要求或規定的功能。增加不必要的功能會增加軟件的攻擊面,并增加軟件被破解的可能性。

    2、盡可能地將大的或復雜的功能分解為更小、更簡單的功能。這會使系統更易于理解和記錄,在驗證個別組件、整個系統的安全性和正確性時也更為輕松。

    3、在構建系統時盡量使其依賴關系盡可能地少。這樣做有一好處,即能夠確保在不影響整個系統操作的前提下就可以禁用或替換任何過程模塊或組件。

    4、對軟件進行封裝,限制泄露敏感信息,限制外部所造成的影響。

    軟件開發團隊還應當考慮軟件的大小和簡易性之間的平衡關系。如果將功能分解成太多的小功能,在查看不同的功能如何協同工作時,就會存在困難。

    確保可以向前和向后追溯源代碼

    開發團隊應當使軟件易于跟蹤每個要求,跟蹤其設計形式,以便于追溯其源代碼。當然,開發團隊還要使軟件能夠根據代碼的形式,追查其實現的每一個需求。

    代碼的可重用性和可維護性

    使代碼安全(簡易、可理解、可跟蹤)的一些特性也有助于代碼的可重用性和可維護性。如果代碼很容易被重用,其安全性就可以傳遞給未來的軟件項目。如果代碼易于維護,在維護過程中就不太可能增加漏洞。

    開發團隊應當盡力構建可以預測未來事件的代碼。要確保軟件需要的所有值源自數據庫或外部的屬性文件,而不是源自硬編碼(硬編碼是指在計算機程序中將變量用一個固定值來代替)。例如,在JAVA中,可考慮在方法簽名中使用輸入對象的bean可重用組件,而不是指定數據類型和預期值。這會使程序的功能按照需要而變化,并實現代碼重用。

    遵循安全編碼的標準和指南

    某些特定語言已經有了明確的安全編碼的實踐和模式,開發團隊應當優先選擇并采用其安全編碼的標準和指南。否則,團隊將不能避免在軟件開發中出現常見的編碼漏洞和潛在的易受攻擊的軟件架構。開發團隊應當積極地選擇應對這些缺陷的安全方法。這些標準和指南既涉及到編碼過程的錯誤做法和正確做法。例如,美國的卡內基梅隆軟件工程學院就發布了C、C++、JAVA等語言的著名安全編碼標準。

    還有一個大名鼎鼎的標準,即汽車工業軟件可靠性聯會(MISRA)標準,它雖然不是專為解決軟件安全而制定的標準,但它確實可以作為編碼指南的一個例子。該機構是相關行業汽車制造商和公司的協會,其用戶早已經超出了汽車行業。它為C和C++語言創建了安全編碼指南,并為嵌入式電子系統提供了有關可靠性的最佳實踐。改善代碼的質量是改善代碼安全性的一個重要部分。

    在確定好標準之后,開發團隊應當對軟件執行一致性測試,判定編碼是否正確地遵循了選定的編碼標準。CERT的源代碼分析試驗室(SCAL)提供了針對CERT的C語言安全編碼標準的系統一致性測試。成功通過一致性測試的軟件就可以得到CERT加蓋的一致性測試印章。

    使用編譯器的安全檢查和強化功能

    不同的編譯器是為不同的目的開發的。例如,C語言標準定義了許多未定義的、未明確規范的、由實現環境決定的行為。其它的許多問題都留給了“實施質量”,這意味著市場決定著行為是否合適。通常,開發團隊可選擇實施實現了安全特性的編譯器,以此來改善安全性,也可以通過使用靜態分析等方法來改善安全性。

    在開始代碼開發之前,開發者應當在最大程度上啟用編譯器的警告和錯誤。如果在日后再去應對所報告的問題,其代價將很昂貴。只要可能,要盡最大努力解決各種警告問題。如果解決警告問題并不現實,就要在代碼中記錄這些警告。

    現代開發環境,如微軟的Visual Studio包含著靜態代碼分析功能,而且能夠自動應用。此集成開發環境不僅能夠編譯代碼,而且還擁有200多個預定義的規則。開發人員可以根據這些規則,對照一系列潛在的漏洞來檢查代碼的諸多方面。

    在編譯和鏈接實際的二進制可執行文件時,應當禁用調試選項。例如,有些流行的商業級操作系統都曾被報告包含危急漏洞,可以使攻擊者利用操作系統的標準的調試接口。該接口的設計目的是為了使開發人員在測試期間能夠控制程序,在實際的生產系統中也保持可用。攻擊者為了能夠控制程序,會通過網絡利用此接口,提升攻擊者對調試器程序的特權。

    有些編譯時的驗證工具可以利用類型限定符。這些限定符可以給程序加上注釋,從而可以正式驗證程序,免受已知漏洞的威脅。有些限定符不受語言的限定,并且可以檢測那些本應當由開發者檢查的“不安全的”系統調用,還有其它的工具可以檢測特定語言的漏洞。

    此外,還可以修改編譯器,以檢測對堆棧數據區域的惡意篡改。這種保護的一種簡單形式就是“堆棧密探”。子程序的入口代碼將“堆棧密探”放在堆棧上,并由編譯器生成的子程序的退出代碼對它進行驗證。如果密探被篡改,退出代碼就會終止程序,同時產生一個錯誤。

    許多C/c++編譯器可以檢測不正確的格式字符串。例如,Gnu編譯器Collection支持C的擴展。C擴展可用于標記包含不正確的格式字符串的函數,而微軟的Visual C++ .NET中的/GS編譯器開關可被用于標記運行時代碼中的緩沖區溢出。

    雖然類型和格式字符串的檢查對于檢測簡單的錯誤非常有用,但對于檢測更為復雜的漏洞,就顯得有點兒小兒科了。有些編譯時的工具會執行“污點分析”,即將輸入數據標記為“污點”,確保在將此類數據用于易受攻擊的功能之前,先對其進行驗證。開源的“污點”分析工具Flayer就是一個好例子。此功能也被集成到了Perl語言中。其它的編譯器也包括更廣泛的邏輯,可以執行全面的程序驗證,并根據正式規范來驗證復雜的安全屬性。程序驗證編譯器最常被用于檢測C和 C++程序和庫中的漏洞和“有危險的”構造,其中也包括使程序易于遭受格式字符串攻擊和緩沖區溢出的構造。

    當然,還有其它的一些要求編譯時支持的保護措施,這包括內存中的變量和代碼位置的隨機化,特別是被加載庫的位置和匯編預處理程序位置的隨機化,這可以減少C和C++程序遭受堆棧的緩沖區溢出的可能性。這常常要求編譯器和運行時的支持。 


    本文出自:億恩科技【www.vbseamall.com】

    本文出自:億恩科技【www.enidc.com】
    -->

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線