アプリケーションがクラッシュした場合、プログラムは停止し、プログラムを再起動する以外に、誰もそれを行うことはできません。
クラッシュは一般的に悪い動作であり、回避する必要がありますが、なぜセキュリティの脆弱性と見なされるのですか?
一部の入力が正しく処理されなかったため、クラッシュしました。攻撃者は、誤った手順につながるコードパスを見つけて、潜在的な脆弱性を介して任意のコードを実行しようとする可能性があります。
クラッシュは、攻撃者にシステムとその内部の詳細に関する貴重な情報を提供する可能性があります。
クラッシュは一時的な脆弱性を作成したり、保護されていないファイル(メモリダンプなど)を残して悪用される可能性があります。
(おかげで、ハットヒントは Ladadadada に移動します)クラッシュしたアプリケーションは再起動する必要があり、明らかに時間がかかります(ウォッチドッグと対称フェイルオーバースキームを使用している場合でも)。攻撃者がクラッシュの原因となった状態を再現すると、サービスの停止( Denial-of-service )が長くなり、経済的、評判、およびその他の損失が発生します。
以前の回答は、攻撃者がアプリケーションのクラッシュを分析することで直接的な利益を得ることができるシナリオのほとんどをカバーしてきたように。 "クラッシュを分析してアプリのセキュリティの脆弱性を見つける" を読むことをお勧めします。セキュリティの脆弱性についてクラッシュを分析するには、低レベルのプログラミングスキルが必要になる場合があります。図1に示すように、すべてのエクスプロイトがセキュリティの脆弱性につながるわけではなく、アプリケーションのクラッシュを分析するための調査パスを定義します。
ディアハンターの答えを一般化するには:
予期しない例外を単にキャッチして破棄することはも安全でないであり、実行されないことに注意してください。プロセスを終了することは、予期しない一貫性のない状態で続行するよりも優れています。
これは本質的にファインマンの付録の蒸留物です:
(...)浸食とブローバイは、設計が想定したものではありません。彼らは何かが間違っているという警告です。機器は期待通りに動作していないため、この予期せぬ、十分に理解されていない方法で、さらに大きな偏差で動作する危険性があります。この危険が以前に大災害につながらなかったという事実は、それが完全に理解されない限り、それが次回には起こらないという保証はありません。
ここで完全なドキュメントを見つけることができます:
これは、すべてのソフトウェア開発者、特に完全に理解していない例外をキャッチする癖がある開発者には、読むことをお勧めします。
アプリケーションのクラッシュは、予期しない処理されない動作の結果です。これは、クラッシュしたアプリケーションにバグがあり、多数のバグが脆弱性につながることを意味します。
最も危険な種類のクラッシュの1つは、メモリの破損(セグメンテーション違反)によるクラッシュです。この種のバグは、脆弱なアプリケーションに任意の(悪意のある)コードを実行させるために悪用されることがよくあります。
さらに、サービス拒否攻撃でソフトウェアをクラッシュさせる方法を使用できます。
特定の種類のクラッシュは「アクセス違反」として知られており、システム/ソフトウェア/オペレーティングシステムを作成したプログラマが定義したルール、または実行可能ファイルを作成するコンパイラを作成したプログラマが定義したルールに「違反」するクラッシュ/異常です。
攻撃者(Neo)がソフトウェア(Matrix)の1つにクラッシュを見つけた場合、そのクラッシュを使用してルールに違反し(ルール魔女はMatrixに定義されています)、そのクラッシュを使用してシステム(Matrix)を制御し、現在、彼はAPI呼び出しを知っているために悪意のある活動を行いたい(マトリックスをオフにする)が、そのAPI呼び出しは別のプログラム/アンチウイルス(エージェントスミス)によって制御/保護されているが、システム(マトリックス)を完全に制御しているため)彼はアンチウイルス(エージェントスミス)を閉じることができ、今ではシステム(マトリックス)を閉じることができます
これはシステムの機密性、整合性、可用性に影響を与えるため、これらのクラッシュはセキュリティ問題と呼ばれます。
2つの異なるイベントをマージしています:停止とクラッシュ
多くのアプリケーションがクラッシュします。それらのすべてではありませんが、多くの場合、マシンが本来持ってはならないことを実行しているためです。マシンは、コードであると思われるものにジャンプしますが、実際にはゼロ化されたデータまたはランダムなデータ(または少なくともコードとして準備されていないデータ)です。マシンはこのデータをコードとして見ようとしますが、コードとしては意味がないので、マシンは何をすべきかわかりません。その場合、アプリケーションがクラッシュします。
しかし、バグの問題は、それらをトリガーする方法を知っていれば、意図的にトリガーできることです。場合によっては、バグの動作によっては、マシンがジャンプするデータを制御することもできます。その可能性がセキュリティ担当者を緊張させるものです:意味のないデータにマシンをジャンプさせることができ、そのデータが何であるかを制御できる場合、マシンをジャンプさせることができます行う意味のあるもの。いったんその設定を取得したら、マシンに好きなように動作させることができます。
すべてのアプリケーションクラッシュがこのように機能するわけではありません。 @AliAhmadの答えは、何ができるか、何ができないかを見分ける方法の基本を示しています。しかし、安全でないクラッシュの結果は非常に深刻になる可能性があるため、すべてのクラッシュをチェックして、「安全」かどうかを確認する必要があります。