少し前に、ソフトウェア A の一部が同じソフトウェア A の別の部分に入り込み、プログラムが正しく動作しなくなるというメモリ侵入について聞いたことがあります。
記憶の侵略は本当に存在しますか?つまり、私は C++ を使用しており、配列が無限に大きくなる可能性があることは知っていますが、他の構造で大きくなる可能性はありますか? 配列が MI を生成しない場合、何が生成されるのでしょうか?
少し前に、ソフトウェア A の一部が同じソフトウェア A の別の部分に入り込み、プログラムが正しく動作しなくなるというメモリ侵入について聞いたことがあります。
記憶の侵略は本当に存在しますか?つまり、私は C++ を使用しており、配列が無限に大きくなる可能性があることは知っていますが、他の構造で大きくなる可能性はありますか? 配列が MI を生成しない場合、何が生成されるのでしょうか?
あなたはバッファオーバーフローについて説明しています。そうです、それらはソフトウェアのセキュリティ問題の大きな原因です。誰かがプログラム コードを任意のデータで上書きでき、その任意のデータに攻撃者が選択した実行可能コードが含まれている場合、基本的に、オーバーフローが発生したプログラムの特権レベルでマシン コードを実行できます。
この問題は通常、一定量のストレージが不明な量の入力 (キーボード、ネットワーク、API 呼び出しなどから) に割り当てられ、入力量がストレージのサイズよりも大きいことが判明した場合に発生します。配列アクセスで境界チェックを実行しないプログラミング言語では、これによりコードの実行可能領域が上書きされる可能性があります。DEPなどのテクノロジは、メモリの実行可能領域の書き込みを保護することで、このリスクを軽減できます。
スタック オーバーフローもこの問題を引き起こす可能性があります。
自動的にメモリ管理されない言語では、それほど珍しいことではありません。たとえば、バッファ オーバーフローは侵入の非常に良い例です。
特定の種類の侵入に対してはいくつかの保護があります (たとえば、他のマテリアルを超えるのではなく、スタック オーバーフローが発生することがよくあります) が、ポインターが関係するときはいつでも、予想外のメモリやコードを簡単に超えてしまいます。アクセス。
Java や C# などの言語では、メモリを低レベルで操作できないため、リスクが軽減されます。
「メモリ侵入」は、バッファまたはスタック オーバーフローと呼ばれます。これはおそらく、セキュリティ上の欠陥を見つけるために悪用できる最も重要な脆弱性です。
標準 C ライブラリには、入力が割り当てられたバッファ スペースをオーバーフローしないことを軽視する関数がたくさんあります。入力がバッファよりも大きい場合、メモリの他の部分へのバッファ オーバーフローが発生します。プログラムはもはや正しく機能しておらず、微妙な方法で破損している可能性があります。
これを読んでください:http://www.owasp.org/index.php/A5_2004_Buffer_Overflow
C++ では、配列が無限に大きくなることはありません。無制限のメモリはありません。メモリ侵入は、次のようなものによって引き起こされます。
int foo[100];
foo[100]=5; // writing outside the array. This might cause some problems.