NSA建議開發者考慮從C和C++轉換為內存安全的編程語言


美國國傢安全局(NSA)正在敦促開發人員轉向內存安全語言--如C#、Go、Java、Ruby、Rust和Swift--以保護他們的代碼免受遠程代碼執行或其他黑客攻擊。在上述語言中,Java是企業和Android應用開發中使用最廣泛的語言,而Swift是排名前十的語言,部分歸功於iOS應用開發。而在系統編程中,人們對Rust作為C和C++的替代品的興趣也越來越大。

985px-National_Security_Agency_headquarters,_Fort_Meade,_Maryland.jpg

"NSA建議企業考慮在可能的情況下,從很少或沒有提供固有內存保護的編程語言(如C/C++)轉向內存安全語言。內存安全語言的一些例子是C#、Go、Java、Ruby和Swift,"NSA說。

該機構引用Google和微軟最近的研究,他們在Chrome和Windows中分別有70%的安全問題與內存有關,其中許多是使用C和C++的結果,這兩種語言更容易出現基於內存的漏洞。

"NSA在"軟件內存安全"網絡安全信息表中指出:"惡意的網絡行為者可以利用這些漏洞進行遠程代碼執行或其他不利影響,這往往可以損害一個設備,成為大規模網絡入侵的第一步。常用的語言,如C和C++,在內存管理方面提供很大的自由度和靈活性,同時嚴重依賴程序員對內存引用進行必要的檢查。"

因此,該機構建議盡可能使用內存安全語言,無論是應用開發還是系統編程。

雖然大多數信息安全專傢都熟悉關於內存安全語言的辯論,但也許不是所有的開發人員都熟悉。不過,也許他們應該熟悉,因為這是一個幾十年前就存在的問題,正如Java創建者James Gosling最近在討論如何以及為什麼創建Java時指出的。

如果有的話,NSA的文件為開發者提供一個清晰的、通俗的解釋,說明向內存安全語言轉變背後的技術原因。在內存安全方面討論最多的語言可能是Rust,它是作為C和C++的"替代品"的主要候選。

Linux內核最近引入Rust作為C語言的第二種語言,繼Android開源項目之後。這些項目不會取代舊的C/C++代碼,但對於新的代碼會優先考慮Rust。另外,微軟Azure首席技術官Mark Russinovich最近呼籲所有開發人員在所有新項目中使用Rust而不是C和C++。

"通過利用這些類型的內存問題,惡意行為者--他們不受軟件使用的正常預期約束--可能會發現他們可以在程序中輸入不尋常的輸入,導致內存以意想不到的方式被訪問、寫入、分配或刪除,"NSA解釋說。

但是--正如專傢們在關於Rust和C/C++的辯論中所指出的那樣--NSA警告說,僅僅使用一種內存安全語言並不能默認排除將內存錯誤引入軟件。此外,語言通常允許使用不是用內存安全語言編寫的庫。

"即使使用內存安全語言,內存管理也不完全是內存安全的。大多數內存安全語言承認,軟件有時需要執行不安全的內存管理功能來完成某些任務。因此,有一些類或函數被認為是非內存安全的,並允許程序員執行可能不安全的內存管理任務,"NSA說。

"一些語言要求任何內存不安全的東西都要明確註釋為內存不安全,以使程序員和程序的任何審查人員意識到它是不安全的。內存安全語言也可以使用以非內存安全語言編寫的庫,因此可以包含不安全的內存功能。盡管這些包含內存不安全機制的方式顛覆固有的內存安全,但它們有助於定位可能存在內存問題的地方,允許對這些代碼部分進行額外的審查。"

NSA指出,向一些內存安全語言的轉化可能要付出性能上的代價,這需要開發人員學習一種新的語言。它還指出,開發人員可以采取一些措施來加固非內存安全語言。例如,Google的Chrome團隊正在探索多種方法來加固C++,但這些方法也會帶來性能開銷。在可預見的未來,C++將繼續留在Chrome的代碼庫中。

NSA建議進行靜態和動態應用程序安全測試,以發現內存問題。它還建議探索內存加固方法,如控制流保護(CFG),它將對代碼的執行位置進行限制。同樣,建議使用地址空間佈局隨機化(ASLR)和數據執行預防(DEP)。


相關推薦

2024-03-25

在美國政府的安全建議,包括替換C++等語言的報告後,C++創始人BjarneStroustrup近日表示,拜登政府忽視當代C++的優勢以及為提供強有力的安全保證所做的努力。C++ 創始人 Bjarne Stroustrup 為這種已經廣泛使用的編程語言進行辯護,回

2024-02-29

日前美國政府下屬的 ONCD 辦公室發佈一份報告就詳細介紹建議開發者們使用各種內存安全編程語言,盡管 ONCD 沒有明確羅列哪些語言是內存安全編程語言,但強調 C 和 C++ 缺乏與內存安全相關的特征,因此實際上就是不建議開發

2023-01-14

Rust是由軟件開發人員GraydonHoare在2006年在Mozilla研究院工作時創建的,它的知名度不斷提高,在大型科技公司中贏得新的支持者。甚至Google現在也在考慮在其Chrome瀏覽器中整合這種新的(類似)語言。Rust是由Mozilla贊助和支持的,

2024-02-06

標保持一致。該計劃的第一項工作將是起草一份工作范圍建議書,以便與利益相關者就互操作性推進工作的重點展開討論。這筆資金很可能將用於圍繞構建系統集成的額外招聘和資源配置、基於人工智能的 C++ 到 Rust 的可能轉換

2022-09-21

支持者,日前微軟雲業務的CTOMarkRussinovich的一個表態引爆開發者爭議,因為他呼籲停止使用C/C++來開發。Mark Russinovich表示,“說到編程語言,現在是時候停止用 C/C++開發任何新項目,在那些需要使用 non-GC 語言的場景中使用 Rust

2024-02-03

微軟正在全公司范圍內加大力度采用Rust作為內部軟件開發的首選。對於有興趣將大量C#代碼轉換為更新、內存安全的編程范式的Rust專傢來說,新的工作機會是再好不過。根據微軟佈拉格辦事處最近發佈的一份職位招聘啟事,微

2022-07-19

。而在1990年代,曾有一位精通計算機、但並非身為全職開發者的朋友向他提問“為何沒有一種好用的編程語言?”當時他的回答是,編程語言同行為特定的人物或工作語言而設計。(來自:BLOG@CACM)從這個意義上說,大多數語

2022-12-14

TIOBE Index的最新數據發現,C++首次超越Java,躋身最受歡迎的編程語言TOP3之列。據悉,TIOBE Index每日檢索10萬行代碼,其統計並非嚴格的市場份額,而是基於全球熟練工程師、教學課程以及第三方供應商,很具代表性。12月的統計

2024-06-21

站長之傢(ChinaZ.com) 6月21日 消息:在今日的華為開發者大會2024上,華為終端BG軟件部總裁龔體發表重要演講,向全球開發者正式介紹華為自研的倉頡編程語言,並發佈HarmonyOS NEXT倉頡語言開發者預覽版。這是華為首次公開發佈倉頡

2024-03-29

程語言,去年8月份正式發佈,目前經已積累超過17.5萬名開發者和5萬個組織。去年5月Mojo剛發佈時,Modular宣稱,在運行Mandelbrot等算法時它比原始Python快3.5萬倍。去年9月,Modular再次表示“Mojo將動態與靜態語言的優點結合起來,

2023-11-14

日),薪酬最高的10種編程語言排行。在其調研的1000萬個開發工作崗位中,有130萬個崗位顯示有工資,其中又有23萬個崗位屬於編程語言類,在這23萬個崗位中約有8.6萬個崗位來自美國。具體排行為:10-JavaJava在薪酬排行中位列第

2022-11-16

維護的 Go 的增長歸功於 Docker 和 Kubernetes 等項目,以及雲開發。安卓對移動應用開發的影響可以從 Kotlin 的增長中看出來。GitHub 的列表與RedMonk 的最新索引略有不同,後者基於 GitHub 項目和 StackOverflow 討論。它的前10名是 JavaScript

2022-08-15

管吧,隻能硬著頭皮把那些四五十的程序員請回來。COBOL 開發者年齡( 2006 年數據 ) ▼比如 2012 年,有個 50 多歲程序員被銀行炒。結果 2 年後,那傢銀行打電話過來,請他回去修一修系統,因為招的那些新人沒一個會的。還有

2022-06-30

的是時間,越短說明性能越好,右邊的部分是基於時間及內存開銷算出來的加權得分。在這個排行中,C語言+GCC編譯全毫無懸念是最快的,這一點幾乎是程序員中的共識瞭,C++以及Rust的性能也很不錯,非常熱門的Java語言性能水