目次:
定義-Stack Smashingとはどういう意味ですか?
スタックスマッシングは、コンピューターアプリケーションまたはOSのスタックが強制的にオーバーフローする脆弱性の一種です。 これにより、プログラム/システムが破壊され、クラッシュする可能性があります。
スタック(先入れ先出し回路)は、内部の操作の中間結果を保持するバッファーの形式です。 単純化するために、スタックスマッシングは、保持容量よりも多くのデータをスタックに入れます。 熟練したハッカーは、意図的に過剰なデータをスタックに持ち込む可能性があります。 過剰なデータは、関数の戻りアドレスなど、他のスタック変数に保存される場合があります。 関数が戻ると、スタック上の悪意のあるコードにジャンプし、システム全体が破損する可能性があります。 スタック上の隣接データが影響を受け、プログラムが強制的にクラッシュします。
TechopediaによるStack Smashingの説明
スタックスマッシングの影響を受けるプログラムが信頼できないネットワークからのデータを受け入れ、特別な権限で実行される場合、セキュリティの脆弱性が発生します。 信頼できないユーザーから提供されたデータがバッファに含まれている場合、プログラムに実行可能コードを挿入することでスタックが破損し、コンピュータへの不正アクセスが発生する可能性があります。 攻撃者は、スタックに格納されている制御フロー情報を上書きすることもできます。
スタックスマッシングが非常に深刻な脆弱性に成長すると、スタックスマッシングの災害を克服するために特定の技術が実装されます。 スタックバッファオーバーフロー保護は、関数呼び出しのスタックフレーム内のデータの構成を変更して、カナリア値を含めます。 これらの値は、破棄されると、メモリ内でその前にあるバッファがオーバーフローしたことを示します。 カナリア値はバッファオーバーフローを監視し、制御データとスタック上のバッファの間に配置されます。 これにより、バッファオーバーフローによってカナリアが最初に破損することが保証されます。 カナリアデータの検証の失敗は、スタックのオーバーフローを意味します。 カナリアの3つのタイプは、ランダム、ターミネーター、およびランダムXORです。
ターミネーターカナリアは、スタックバッファーオーバーフロー攻撃がターミネーターで終わる文字列操作に依存するという事実に基づいています。 ランダムカナリアはエントロピー収集デーモンからランダムに生成され、攻撃者が値を知ることを防ぎます。 ランダムカナリアはプログラムの初期化時に生成され、グローバル変数に保存されます。 ランダムXORカナリアは、制御データを使用してXORスクランブルされたランダムキャリアです。 カナリアを取得するための「スタックメソッドからの読み取り」が複雑であることを除いて、ランダムカナリアに似ています。 ハッカーは、元のカナリアを作成するためにカナリア、アルゴリズム、および制御データを必要とします。 これらは、構造内のオーバーフローしたバッファーをポインターに入れて、制御データの一部を指すようにポインターを変更する攻撃から保護します。
