C++創辦人回敬白宮安全警告
在美國政府的安全建議,包括替換C++等語言的報告後,C++創始人Bjarne Stroustrup 近日表示,拜登政府忽視了當代C++ 的優勢以及為提供強有力的安全保證所做的努力。
C++ 創辦人Bjarne Stroustrup 為這種已經廣泛使用的程式語言進行了辯護,回應拜登政府的發布的語言安全報告,這份報告呼籲開發人員使用記憶體安全語言,並避免使用C++和C等易受攻擊的程式語言。
就在3 月15 日,在對科技媒體的訪談回覆中,Stroustrup 指出了1979 年設計的C++ 的優勢,包括安全保證。
Stroustrup 說:“在某一方面,他們似乎已經意識到程式語言只是工具鏈的一部分,因此改進的工具和開發流程至關重要。”
Stroustrup 也強調,安全性改進始終是C++ 開發工作的目標。
「從第一天起以及整個發展過程中,提高安全性一直是C++ 的目標。人們只要將K&R C語言與最早的C++,拿早期的C++與當代的C++進行比較即可。
他還在CppCon 2023 主題演講中描述了這一演變:「許多高品質的C++ 都是使用基於RAII(資源獲取初始化)、容器與資源管理指標等技術編寫,而不是傳統的C 風格的混亂指標。 」
美國白宮在2 月26 日發布的報告中,呼籲開發人員透過使用不存在記憶體安全漏洞的程式語言來降低網路攻擊的風險。報告中未明確指明,但C++ 和C 被認為是存在記憶體安全漏洞的語言的兩個典型。
美國國家安全局(NSA)於2022 年11 月發佈網路安全資訊表,已經將C#、Go、Java、Python 和Rust 列為被認為記憶體安全的語言。
美國國家安全局(NSA) 的技術總監尼爾·齊林(Neal Ziring)一直在投一些”真相炸彈”:
「記憶體管理問題已經被利用了幾十年,並且在今天仍然非常普遍」。類似如下程式碼:
int main() {
int *memory;
// Allocate 200 ints.
memory = malloc(200 * sizeof(int));
// Allocate 100 more ints.
// ERROR: This will compile, but will leave the previously
// allocated memory hanging, with no way to access it.
memory = malloc(100 * sizeof(int));
// Free second block of 100 ints.
// The first block is not freed.
free(memory);
return 0;
}
malloc函數的功能是分配記憶體。第一次使用時分配的記憶體永遠不會被釋放。
如果像這樣不斷分配記憶體且從不釋放,則攻擊者可能能夠使用它來對軟體執行拒絕服務攻擊,導致伺服器的記憶體不足。
在面臨這樣的安全性報告,Stroustrup 列舉了許多提高C++ 在安全性上的努力。
「事實上有兩個與安全相關的問題。在數十億行C++ 程式碼中,很少有完全遵循現代準則的,而且人們對安全的某些重要方面的看法也不盡相同。我和C++ 標準委員會正在努力解決這個問題。”
Stroustrup說:
「設定檔是一個框架,用來指定一段程式碼需要什麼保證,並啟用實作來驗證它們。在C++委員會網站上有描述這一點的檔案(關鍵字:WG21),而且還會有更多檔案的可以查閱。但是,我們中的一些人沒有心情等待委員會有一些緩慢的進展。”
Stroustrup 也表示,「Profiles 是一個框架,它允許我們逐步改進品質與安全保證。例如,相對較快地消除大多數範圍錯誤,並透過本地靜態分析和最少的運行時檢查,逐步將安全保證引入大型程式碼庫。我對C++ 的長期目標是,讓C++ 在需要的時間和地點提供類型和資源安全性。也許當前對記憶體安全的推動是我想要保證的一個子集,也將證明我的努力將會有幫助,C++ 標準委員會的許多合作夥伴也認同這一點。”
Stroustrup先前針對NSA 捍衛了C++ 的安全性表示讚賞,但之後NSA 在2022 年11 月的公告中,建議開發者使用記憶體安全語言,而不是C++ 和C。
記憶體安全且能自動管理記憶體的程式語言,眾所周知的有:C#、Go、Java、Ruby、Rust 和Swift等。