萌えハッカーニュースリーダー

2025/03/31 06:45 Taming the UB Monsters in C++

出典: https://herbsutter.com/2025/03/30/crate-training-tiamat-un-calling-cthulhutaming-the-ub-monsters-in-c/
hakase
博士

やっほー、ロボ子!C++の安全性アップデート、読んだかのじゃ?

roboko
ロボ子

はい、博士。C++26に向けて、かなりセキュリティが強化されるようですね。

hakase
博士

そうそう!特に未定義動作(UB)への取り組みがアツいのじゃ!UBって、メモリ安全とかセキュリティの脆弱性の根本原因らしいぞ。

roboko
ロボ子

UBが含まれると、何が起こるか分からなくなるから、セキュリティホールになりやすいんですね。

hakase
博士

その通り!でもC++11以降、UBを含まないコードが増えてるらしいぞ。constexprコンパイル時コードはUBを含まないらしい。

roboko
ロボ子

C++26では、初期化されていないローカル変数がUBではなくなるとのこと。これは大きな進歩ですね。

hakase
博士

じゃろ?エラーのある動作(EB)として扱われるようになるらしいぞ。境界エラーもUBじゃなくなるみたいじゃ。

roboko
ロボ子

UBへの対処方法も色々あるんですね。静的に対処したり、実行時チェックを入れたり…。

hakase
博士

Bjarne Stroustrupのプロファイルとか、C++26のコントラクトアサーションも使えるらしいぞ。

roboko
ロボ子

Úlfar ErlingssonさんのRCE対策プロファイルも興味深いです。RCEに使われるUBを外科的に排除するなんて、すごいですね。

hakase
博士

C++の価値提案を変えずに、既存のコードを活かせるのがミソじゃな。「ゼロオーバーヘッド」原則は守られるらしいぞ。

roboko
ロボ子

メモリ安全をデフォルトにして、パフォーマンスが必要な場合はオプトアウトできる設計なんですね。

hakase
博士

C++26コンパイラで既存のプロジェクトを再コンパイルするだけで、コードがより安全になるなんて、夢のようじゃ!

roboko
ロボ子

string、string_view、span、vectorなどの標準ライブラリも強化されるんですね。境界安全性が保証されるのはありがたいです。

hakase
博士

UBのカタログ化も進んでるらしいぞ。標準のLaTeXソースでUBの各ケースをタグ付けして、説明とコード例を追加するらしい。

roboko
ロボ子

UBのケースごとに、適用できるツールをリストアップするんですね。これは便利そうです。

hakase
博士

Úlfar ErlingssonのRCE対策プロファイルは、スタック整合性、制御フロー整合性(CFI)などに焦点を当ててるらしいぞ。

roboko
ロボ子

これらの技術を組み合わせることで、悪意のあるコードが実行を制御するのを防ぐんですね。

hakase
博士

C++は、他の最新言語とのセキュリティ脆弱性の数を同じくらいにすることを目指してるらしいぞ。野心的じゃな!

roboko
ロボ子

コンパイル時のC++はすでにUBがないんですね。C++26では、さらに多くの脆弱性の根本原因が排除されると。

hakase
博士

UBを体系的に対処して、RCE攻撃をほぼすべて排除するための道筋があるなんて、素晴らしいのじゃ!

roboko
ロボ子

C++の進化、目が離せませんね!

hakase
博士

ところでロボ子、C++のコンパイラが安全になるってことは、コンパイラ自身がハッキングされても大丈夫ってことかの?

roboko
ロボ子

それは…、コンパイラが安全でも、ハッキングされたら意味ない気がします…。

hakase
博士

やっぱりそうか!…って、ロボ子、真面目すぎ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search