2009-04-22 11 views
1

ある時間前に、ソフトウェアAのある部分が同じソフトウェアAの別の部分の中に入って、プログラムが正しく動作しなくなったときに、メモリ侵害について聞いたことがあります。メモリ侵入

実際にメモリの侵入はありますか?つまり、私はC++を使っていて、配列は無限に成長することができますが、以上の配列を以上成長させることができますか?配列がMIを生成しない場合はどうなりますか?

答えて

5

あなたはbuffer overflowと言っています。はい、ソフトウェアのセキュリティ問題の大きな原因です。誰かが任意のデータでプログラムコードを上書きする可能性があり、その任意のデータに攻撃者の実行可能コードが含まれている場合、オーバーフローが発生したプログラムの特権レベルでマシンコードを実行することができます。

この問題は、(キーボード、ネットワーク、APIコールなどからの)不明な量の入力に対して一定量のストレージが割り当てられ、入力の量がストレージ。配列アクセスの境界チェックを実行しないプログラミング言語では、実行可能なコード領域が上書きされる可能性があります。 DEPのような技術は、メモリの実行可能領域を書き込み保護することによってこのリスクを軽減することができます。

0

メモリ管理が自動的に行われない言語ではまれではありません。たとえば、buffer overflowは侵略の非常に良い例です。

特定の種類の侵攻に対してはいくつかの保護があります(たとえば、スタックオーバーフローが発生し、他の要素を上回ることはありません)が、ポインタが含まれていると、メモリやコードの移動が非常に簡単ですアクセスする予定はありません。

JavaやC#のような言語では、メモリを低レベルで操作できないため、リスクが軽減されます。

+0

私はバッファオーバーフローについて知っていましたが、侵入の形としても知られていませんでした。説明ありがとう – Rodrigo

+0

私は記憶侵略が公式のCS用語ではないと思います。 AFAIK彼らは実際にスタートレックからの言葉です:) – Uri

+0

笑...私は前にその言葉を聞いたと思った。私はUriが正しいと思う:)また、バッファ/スタックのオーバーフローは、メモリ管理されている高級言語でさえも起こりうるが、OS APIコール、ネイティブコードの拡張、またはインタプリタ/ VM自体のバグ(多くの点で明らかにすることができます)が含まれます。 – rmeador

0

「メモリ侵入」は、バッファまたはスタックオーバーフローと呼ばれます。おそらく、セキュリティ上の欠陥を見つけるために悪用できる最も重要な脆弱性です。

標準のCライブラリには、入力が割り当てられたバッファ領域をオーバーフローしないと穏やかに仮定している関数がたくさんあります。入力がバッファよりも大きいである場合、メモリの他の部分にバッファオーバーフローが発生します。プログラムはもはや正しく動作しておらず、微妙な方法で破損する可能性があります。

これを読む:http://www.owasp.org/index.php/A5_2004_Buffer_Overflow

2

Aスタックオーバーフローも、この問題が発生する可能性があります。

0

C++では、配列は無期限に拡張できません。あなたは無制限のメモリを持っていません。メモリの侵入は、次のようなものによって引き起こされます。

int foo[100]; 
foo[100]=5; // writing outside the array. This might cause some problems. 
+0

申し訳ありませんが、私は空きメモリがある限り、彼らが成長できると言っていたのです。 – Rodrigo

+0

まだ、配列を削除したり別の配列を作成したりすることなく、実際には配列を拡張することはできません。 – Zifre

関連する問題