美國禁用C語言,政府機構(gòu)再想新招:開發(fā)AI工具,一鍵將舊的C代碼轉(zhuǎn)為Rust
共 6355字,需瀏覽 13分鐘
·
2024-08-09 08:00
因公眾號更改推送規(guī)則,請點“在看”并加“星標”第一時間獲取精彩技術分享
點擊關注#互聯(lián)網(wǎng)架構(gòu)師公眾號,領取架構(gòu)師全套資料 都在這里
出品 | CSDN 整理 | 蘇宓
-
首先,C 語言等編程語言允許程序員直接操作內(nèi)存,因此很容易在程序中意外引入錯誤,使看似常規(guī)的操作破壞內(nèi)存狀態(tài)。 -
其次,當我們在編寫代碼時,有時候會遇到一種叫做“未定義行為”的情況。就是說,編程語言的規(guī)則(或者標準)沒有明確說明在某些特定情況下程序該怎么運行。所以,如果我們寫的代碼觸發(fā)了這些不明確的情況,程序可能會以一種我們意想不到的方式運行,甚至可能導致內(nèi)存安全問題(比如程序崩潰或產(chǎn)生錯誤結(jié)果)。
-
2022 年 11 月,美國國家安全局(NSA)發(fā)布了關于保護軟件開發(fā)者和運營商免受內(nèi)存安全問題影響的指南,列舉了微軟在 2006 年到 2018 年期間,發(fā)現(xiàn)的 70% 的漏洞都是因內(nèi)存安全問題造成的;Google Chrome 中存在了類似比例的內(nèi)存安全漏洞...鼓勵多個組織將編程語言從 C/C++ 轉(zhuǎn)為使用內(nèi)存安全的語言,如 C#、Rust、Go、Java、Ruby 和 Swift,稱這樣可以幫助軟件開發(fā)者和使用者預防并緩解軟件內(nèi)存安全問題;
-
彼時,微軟 Azure CTO Mark Russinovich 也呼吁,「是時候停止使用 C/C++ 啟動任何新項目」。 -
2023 年 12 月,美國網(wǎng)絡安全和基礎設施局 (CISA)也開始聯(lián)合 NSA、美國聯(lián)邦調(diào)查局 (FBI) 以及澳大利亞、加拿大、英國和新西蘭的網(wǎng)絡安全機構(gòu)發(fā)布了一份 23 頁的《內(nèi)存安全路線圖指南》,直接點名 C 和 C++ 是內(nèi)存不安全的語言代表,軟件開發(fā)商應該放棄使用,從而迅速采用 Rust、C#、Go、Java、Python 和 Swift 等其他內(nèi)存安全編程語言 (MSL)。 -
2024 年 2 月,美國白宮國家網(wǎng)絡主任辦公室 (ONCD)在一份主題為《回到基礎構(gòu)件:通往安全軟件之路》的 19 頁 PDF 報告中再次強烈呼吁道,“C、C++ 不安全,新應用開發(fā)時就別用了,舊應用應該采取遷移行動”。 -
2024 年 7 月,美國網(wǎng)絡安全部門(CISA)聯(lián)合美國聯(lián)邦調(diào)查局(FBI)、澳大利亞信號局(ASD)、澳大利亞網(wǎng)絡安全中心(ACSC)和加拿大網(wǎng)絡安全中心(CCCS)共五大機構(gòu)發(fā)布了一份 22 頁的調(diào)查報告——《探索關鍵開源項目中的內(nèi)存安全》,發(fā)現(xiàn) 172 個項目中有 52% 是使用 C、C++ 和其他所謂“內(nèi)存不安全”的語言編寫的,希望引發(fā)眾人的重視。
-
互聯(lián)網(wǎng)安全研究小組的 Prossimo 項目與 weedegolf 合作,用 Rust 重寫 Network Time Protocol (NTP) ,以提供內(nèi)存安全的 NTP。 -
早些時候,蘋果公司修改了用于構(gòu)建 iBoot 引導載入程序的 C 編譯器工具鏈,以減少內(nèi)存和類型安全問題。 -
有消息稱,微軟已經(jīng)用 3.6 萬行 Rust 代碼改寫了 Windows 內(nèi)核; -
2022 年 12 月,Linux 內(nèi)核 6.1 發(fā)布,包含了初始 Rust 支持...
-
這聽起來......很難。尤其是編寫 Rust 與 C 語言的習慣完全不同,而且大多數(shù)有趣的代碼都是用 C++ 編寫的。 這不就等同于我們需要在靜態(tài)分析中確定所有 C 程序中內(nèi)存分配的生命周期,包括使用自定義分配器實現(xiàn)的分配,或者與專有庫交互的分配?多年來,盡管人們對這個問題進行了大量研究,但并沒有取得顯著成果。C/C++ 程序可以做一些事情,比如將內(nèi)存分配的生命周期與用戶點擊的按鈕關聯(lián),而不是使用引用計數(shù)或其他機制來確保安全。雖然這不是一個好的做法,但它們確實可以這么做。 編寫這種靜態(tài)分析工具的另一個顯著問題是,你所分析的程序本身可能是有漏洞的,生命周期分析可能沒有意義(如果生命周期明確,就不會有內(nèi)存安全漏洞,也就不需要替換)。我見過的關于靜態(tài)檢測生命周期問題的唯一研究,假定被分析的代碼從一開始就是正確的。不過,你可以嘗試開發(fā)一種程序,它能夠檢測出無法計算生命周期的地方,并向開發(fā)人員尋求幫助。
— 完 —
最后,關注公眾號互聯(lián)網(wǎng)架構(gòu)師,在后臺回復:2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全。
如果這篇文章對您有所幫助,或者有所啟發(fā)的話,幫忙掃描上方二維碼關注一下,您的支持是我堅持寫作最大的動力。
評論
圖片
表情
