バッファオーバーフロー攻撃

バッファオーバーフロー攻撃

私は今日、分散システムクラスでカーネルが各ユーザーにアドレス空間を割り当てることを学びました。ユーザーがsu権限を取得するには、カーネルアドレス空間に転送する必要があります。

これがバッファオーバーフロー攻撃の基礎ですか?ユーザーがアドレス空間から出ると、カーネルアドレス空間にアクセスできるか上書きできますか?

ベストアンサー1

プロセスはメモリの外部から読み書き、分岐できません。これは、他のプロセスのメモリ、未割り当てメモリ、またはカーネルメモリにアクセスできないことを意味します。したがって、攻撃者がプロセスでバッファオーバーフローを引き起こし、そのプロセスのコンテキストで任意のコードを実行できる場合でも、攻撃者にカーネルレベルのアクセス権は与えられません。

解決策があります。プロセスはシステムコールを行うことができます。これシステムコールを行う正確な方法オペレーティングシステムとプロセッサの種類に応じて、最も単純な形式で、プロセッサには「システムコール」コマンドがあります。カーネルがシステムコール処理コードをインストールした特定のアドレスに分岐します。

システムコールを実行すると、プロセッサはメモリへのアクセス権を変更します。このようにして、カーネルは読み出し、書き込み、全てのメモリ分岐機能、ハードウェアデバイスアクセス機能を含む高い特権で実行される。同様に、特権の昇格がどのように実行されるかについての詳細は、特定のプラットフォームでシステムコールがどのように実装されるかによって大きく異なります。たとえば、プロセッサは2つのアクセス制御リスト(1つはユーザースペース用、もう1つはカーネルスペース用)とシステムコールコマンドを保持できます。これら2つのテーブルを切り替えることができます。

システムコールを処理するカーネルコードは、プロセスに渡されたパラメータをデコードします。パラメータが渡される方法はプラットフォームによって大きく異なります。システムコールはこれらのパラメータの妥当性を正しく検証できます。たとえば、カーネルが配列パラメータを期待し、配列全体がプロセスのアドレス空間に収まるかどうかを確認しないと、通常のプロセスがカーネルに対してバッファオーバーフロー攻撃を実行し、カーネルコード選択を実行できるようになります。 。

リモート攻撃者がカーネルレベルのアクセス権を取得するには、通常、ネットワークプロセスとカーネルの2つの脆弱性を悪用する必要があります。場合によっては、カーネルネットワーク処理コードにワンステップ攻撃を許可するバグがある場合があります。

おすすめ記事