CERTで働く Brian Seacord によるSecure Coding in C and C++ を最近読み終えました。
全体として、これは優れた本であり、まだ読んでいないプログラマーにはこの本をお勧めします。それを読んだ後、さまざまな種類のセキュリティ脆弱性 (エクスプロイト コード インジェクション、バッファ オーバーフロー、整数オーバーフロー、文字列フォーマットの脆弱性など) のすべてについて、すべてのセキュリティ ホールが 1 つのことに帰着するように思えます。プロセスによって正当に割り当てられたバッファによって制限されていないメモリ アドレスにアクセスする機能。
悪意のあるコードを挿入したり、プログラム ロジックを再ルーティングしたりできるかどうかは、正当に割り当てられたバッファの外にあるメモリ アドレスにアクセスできるかどうかにかかっています。しかし、Java のような言語では、これはまったく不可能です。起こりうる最悪の事態は、プログラムが で終了し、ArrayIndexOutOfBoundsException
サービス拒否につながることです。
では、Java のような「安全な」言語では、無効なメモリ アクセスが不可能なセキュリティ上の脆弱性はありますか? (ここでは例として Java を使用していますが、無効なメモリ アクセスを防止するあらゆる言語のセキュリティの脆弱性について知りたいと思っています。)