在美國政府的安全建議,包括替換C++等語言的報告後,C++創始人BjarneStroustrup近日表示,拜登政府忽視當代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等。