美國國家安全局(NSA)發布軟件內存安全指南,敦促機構和企業棄用C和C++等老派編程語言,轉向內存安全的編程語言,比如C#、Rust、Go、Java、Ruby和Swift。
這個美國政府機構中最大的情報部門在指南中寫道:“NSA建議機構和企業盡可能使用內存安全語言,并通過編譯選項、工具選項和操作系統配置等代碼強化防御措施來加強保護。”
NSA的主要關切在于不法之徒可能會利用代碼中內存管理不善的漏洞,而這種漏洞常見于能賦予程序員更多選擇和靈活性的編程語言。
在示例方面,NSA舉出了黑客通過緩沖區溢出或利用軟件內存分配缺陷入侵系統的例子。
同時,內存安全語言綜合采用編譯時和運行時檢查來自動封鎖程序員失誤所造成的漏洞。注意,盡管不能完全杜絕錯誤,但每減少一個都有幫助。比如說,涉及內存指針的不安全使用或并發線程間競爭的漏洞就能被此類編程語言捕獲。
NSA表示:“惡意網絡攻擊者可能利用這些漏洞發起遠程代碼執行或形成其他有害影響,常可損害設備并成為大規模網絡入侵的第一步。”
很明顯,我們最好避免這種情況。
NSA網絡安全技術總監Neal Ziring稱,想要杜絕此類漏洞,開發軟件時就必須始終使用內存安全語言和其他保護措施。
不過,NSA確實認識到“內存安全”有點兒用詞不當,這個概念范圍太廣,各人理解不同。
內存安全也有其自身的挑戰。比如說,由于特定工具鏈不會生成內存不安全代碼,額外的固有保護可能會先拖慢開發,盡管減少漏洞和增強代碼可維護性終能值回票價。從一種語言轉換到另一種語言可謂ASCII的老大難問題了,有時候甚至都沒法換。例如,Rust盡管功能強大,其學習曲線卻很陡峭。
分析師公司SlashData的數據表明,2020年第一季度到2022年第一季度,Rust用戶數量增長了兩倍。Go語言也不遑多讓,據稱其開發者社區規模達到了330萬人之巨。JavaScript則以1750萬開發者在長達十年的時間里一直榮膺最流行編程語言稱號。
至于C和C++,盡管普遍存在于當今計算機世界,但NSA與大多數人觀點一致,都認為這兩種編程語言很有問題。今年9月,微軟Azure首席技術官Mark Russinovich擺明態度,認為現在就應該停止使用這兩種久經考驗的語言編寫任何新項目了。
這位首席技術官承認,盡管自己偏向用Rust開發新工具,但“未來幾十年(或更長時間里)仍有大量C/C++代碼需要維護或發展”。就在發出此條推特的前一晚,Russinovich才往自己已有8.5萬行的Sysinternals C/C++代碼里又加進了幾行。
網絡安全公司Acronis首席信息安全官Kevin Reed向媒體透露:“我覺得NSA做得對。”
“某種程度上而言,地址空間布局隨機化(ASLR)和堆棧保護等緩解措施不過是個創可貼,談不上是完整解決方案;轉向內存安全語言是好得多的選擇。”Reed補充道,然后附和了Russinovich的看法。
“由于這些年來產出了大量C和C++代碼,我不認為我們能立馬看到效果,而且即使我們全都明天就開始使用Rust和Go,估計也得花上個幾十年才能收拾干凈這爛攤子。”
嘶吼專業版
D1Net
安全圈
關鍵基礎設施安全應急響應中心
全球網絡安全資訊
FreeBuf
安全圈
Rot5pider安全團隊
看雪學苑
安全圈
數世咨詢
黑白之道