The Safe C++ Extensions Proposal: Strengthening Security in a Complex Ecosystem
2024/09/18 SecurityOnline — 長年のメモリ安全性の懸念に対処するための決め手となる動きとして、C++ コミュニティは Safe C++ Extensions 提案を発表し、この言語における重要な瞬間を迎えようとしている。2年間にわたる綿密な議論を経て、C++ を強化することを目的とする、この提案が生まれた。C++ は、そのパワーと柔軟性で支持を得ているが、バッファ・オーバーフローや解放後使用 (UAF) エラーなどの、メモリ関連の問題に対する脆弱性が多発すると批判される言語でもある。

特にセキュア・システムへの依存性が高まり続けているため、ソフトウェア業界内ではメモリの安全性に対する懸念が高まっている。C++ の作成者である Bjarne Stroustrup が説明したように、この提案は単なる漸進的な改善ではなく、現代の開発にとって安全で回復力のある C++ 言語にするための飛躍である。
メモリ・セーフティの推進:問題の中心となる C++
2019 年に始まったメモリ・セーフなプログラミング言語の推進が、勢いを増している。政府/民間における主要な組織は、強力なメモリ安全性保証を提供する、Rust/C#/Go などの利用を提唱している。NSA/CISA/DARPA はいずれも、コード・セキュリティの向上の必要性を声高に訴えており、C++ 開発者にプレッシャーをかけている。
メモリの安全性に対する懸念は目新しいものではないが、大規模なコード・ベースへ向けた成長に伴い、その蔓延はより顕著になっている。2019年の時点でソフトウェア・エンジニアである Alex Gaynor は、重大な脆弱性の大部分は、バッファ・オーバーフローや UAF エラーなどの、メモリの安全性の問題に起因すると指摘している。これらの脆弱性は、クラッシュを引き起こすだけではなく、これらの弱点を悪用してソフトウェア・システムのセキュリティを侵害する、攻撃者にとって格好の侵入口にもなり得る。
そこから、2022年までの間に、メモリの安全性の話題は技術会議の中心となっていった。そして 2022年に Microsoft Azure の最高技術責任者 Mark Russinovich が提案したのは、C と C++ を放棄すること、そして、パフォーマンスを犠牲にすることなく安全性を優先するように設計された、Rust 言語を採用することだった。さらに 2023年には、このように提起された問題は、政府機関なども含む広範な聴衆に届くようになり、C++ に対する監視が強化された。
より安全な言語を採用するために、C++ の放棄を求める声もあったが、C++ は進化できると、Bjarne Stroustrup は断固として主張した。彼は、この言語は、最新のメモリ安全性メカニズムを考慮して設計されていないが、今日のセキュリティ要件を満たすように適応できると認めている。
Safe C++ Extensions:近代化への実践的なアプローチ
Safe C++ Extensions の提案は、言語の汎用性を維持しながら、メモリ安全性の懸念に対処することを目指している。従来からの、ベスト・プラクティス順守に大きく依存していた試みとは異なり、この新しい提案では、コンパイル時の分析と初期化チェックが導入され、UAF エラーなどの脆弱性を防ぎ、タイプの安全性も強化する。
開発者である Sean Baxter (Circle コンパイラの作成者) と、C++ Alliance の Cristian Mazakas は、厳格なメモリ安全性保証を提供する Rust を認めているが、そこへの移行には困難が伴う可能性があることを指摘している。C++ と Rust は、機能が大きく異なるため、相互運用性と移行プロセスの自動化が妨げられている。
これらのセキュリティ機能を、段階的に導入できることにより、大きな利点が生じると見なされている。既存のワークフローを混乱させ、多大なコストを消費する可能性のある、Rust などのへの完全な移行とは異なり、Safe C++ Extensions は、時間の経過につれてセキュリティの改善を統合するという柔軟性を、開発者たちに提供する。この安全性と互換性のバランスが、この提案の魅力の中心である。
今後の課題:C++ セキュリティは実現可能か?
Safe C++ Extensions をめぐる期待にもかかわらず、課題が残されている。 Alex Gaynor のような専門家たちは、Rust のセキュリティ保証に対して、C++ が完全に肩を並べることに懐疑的である。提案は正しい方向への一歩ではあるが、C++ のように複雑で普及している言語において、完全なメモリ安全性を実現するのは途方もない作業となる。
重要な懸念事項の1つは、これらの変更が、業界に受け入れられるかどうかである。この提案は、開発者コミュニティの一部において支持を得ているが、その成功を確実にするためには、幅広い採用と継続的な開発が必要となる。C++ の機能と新しいセキュリティ標準との互換性の、完全なレビューが計画されているが、開発者と業界関係者の時間と労力が必要となる。
将来を見据えて:C++ とメモリの安全性の将来
Safe C++ Extensions の提案が前進するにつれて、C++ にとっての転換点が迫ってきている。C++ の独自の利点を失うことなく、より以上の安全性を確保するという目標は、野心的ではあるが、必要なことである。メモリの安全性は、ソフトウェア開発において引き続き重要な問題である。したがって、この提案は、システム プログラミング用の強力な言語としての地位を C++ が維持しながら、最新のセキュリティ・スタンダードが満たされるように進化するという希望を与えてくれる。
次のステップでは、コミュニティの深い関与、さらなる改良、C++ 機能の詳細な分析が行われるという。それが成功すれば、Safe C++ Extensions は C++ における新しい時代となり、この言語が持つ歴史的な強みと、今日のソフトウェア・エコシステムのセキュリティ・ニーズとのギャップが埋められることになる。
つい先日の 2024/09/09 に、「Google が推進する Rust 化:レガシー・ファームウェアをメモリ・セーフに!」という記事をポストしていて、ついに Rust への大きなシフトが始まったのかと思っていたところです。しかし、プログラミング言語のエコシステムは、そう簡単に変化しないという見方もあります。Safe C++ Extensions もあれば、Rust もあるといった状況が一番好ましいのでしょう。よろしければ、カテゴリ SecTools も、ご利用ください。
You must be logged in to post a comment.