圖片來源: 

Markus Spiske on unsplash

美國國家安全局(NSA)上周公布了一份軟體開發指南,建議開發者多使用可保障記憶體安全的程式語言,例如用C#、Rust、Go、Java、Ruby或Swift來取代C與C++。

NSA先描述了軟體記憶體安全的重要性,指出不管是微軟或Google的研究,都顯示有70%的安全漏洞是源自於記憶體的安全問題,駭客可利用這些漏洞來執行遠端程式攻擊,作為大舉入侵組織網路的第一步。

開發者常用的C與C++在記憶體管理上提供了很大的彈性,因而重度仰賴開發者來檢查記憶體參數,而簡單的錯誤便可能導致記憶體遭到濫用的安全漏洞。即使軟體分析工具可偵測到許多記憶體管理問題,操作環境的選項也能帶來某些保護,但NSA認為,藉由原本就內建記憶體保護的程式語言來撰寫程式,即可避免或減少絕大多數的記憶體管理問題。

常見的記憶體問題包括緩衝區溢位、邏輯錯誤或競爭危害。NSA指出,記憶體管理問題不僅會衍生安全漏洞,就算是那些不會遭到濫用的記憶體問題,也可能造成錯誤的程式結果,降低程式的效能或造成程式當掉,然而,那些把記憶體視為自動化管理的程式語言,將可協助避免開發者引入某些類型的記憶體問題。

這些程式語言利用編譯時間與執行期的檢查來建立自動保護機制,以防開發者無意中採用錯誤的記憶體管理。

不過,就算是使用這些內建記憶體保護的程式語言,也並非毫無風險,因為軟體有時需要執行不安全的記憶體管理功能才能完成任務,且各種語言對記憶體的安全保護程度不一。

NSA表示,他們理解要把一個成熟的軟體開發基礎架構從一個語言遷移到另一個語言並非易事,即便是老練的程式開發者也需要接受新語言的訓練,效率也會受到影響,但他們必須忍受此一學習曲線並克服各種新手錯誤。

若是無法立即切換程式語言,NSA亦建議開發者應透過安全測試來強化應用程式的安全性,包括針對應用程式進行靜態(SAST)與動態(DAST)的安全測試,而且最好是執行多個不同的SAST及DAST工具來提高找出記憶體問題的機率,以確保應用程式的安全。

總之,NSA鼓勵組織儘可能地採用多管齊下的方式來強化記憶體管理的安全性,除了採用記憶體安全程式語言之外,還可同時輔以編譯器選項、工具分析及作業系統配置,以減少記憶體漏洞,提高駭客的攻擊門檻。

相關新聞:

Chromium專案中的70%安全缺陷是記憶體安全問題

解決開源軟體安全將從10大問題面著手,美政府、業者與社群協力提對策,並宣布投入預算

微軟Azure技術長認為應以Rust代替C/C++開發專案

熱門新聞

Advertisement