ソフトウェアセキュリティの理論的な定義を探しています。そして、私は記事でいくつかの本を引用する必要があります。
ほとんどの本は、ユーザーがそれが何であるかを知っていて、おそらくそれらが正しいと仮定してすでに始まっています。
私の質問は、ソフトウェアセキュリティの最も受け入れられている定義です。
Gary McGraw による定義:
ソフトウェアのセキュリティとは、悪意のある攻撃を受けても正しく機能し続けるためのエンジニアリングソフトウェアのアイデアです。
私の知る限り、一般に受け入れられている定義はありません。トラステッドコンピューティングの一部の論文では、「信頼できるソフトウェア」をユーザーの期待に応じて機能するソフトウェアと定義しています。むしろ主観的で揮発性。
おそらく、別のアプローチを試して、一般的に受け入れられているセキュリティエンジニアリングという用語を最初に使用する必要があります。ロスアンダーソンの本「セキュリティエンジニアリング」には、ある種の定義が含まれているはずであり、優れた参考資料です。次に、ソフトウェアセキュリティをセキュリティエンジニアリング(またはソフトウェアに適用されるセキュリティエンジニアリング)のソフトウェア部分として定義するとします。
あなたが単に「引用」できるという良い定義があるかどうかはわかりません。
たとえば、「TCP/IP」とはどういう意味ですか?まあ、それは「伝送制御プロトコル/インターネットプロトコル」の略です。それは完全に正しいですが、同時に、まったく役に立ちません。最初にTCP/IPがどうなっているかわからない場合は、頭字語を拡張しても役に立ちません。
有用な定義は次のとおりです。ハッカーはソフトウェアの特定の種類のバグを悪用してコンピュータに侵入します。ソフトウェアのセキュリティはそれらのバグを取り除く科学です。
たとえば、ハッカーがよく利用するバグは「バッファオーバーフロー」です。何かを保持するために一定量のメモリを予約するために発生しますが、ハッカーはプログラマが期待する以上のものを提供します。たとえば、ユーザー名を保持するデータベースでは、プログラマーは誰もが1000文字を超える名前を持っているとは考えていません。それは本当です、彼らはそうしません-しかし、それはハッカーが長い間、偽の名前を入力することを試みることを止めません、そして、そうするとき、バッファがオーバーフローし、ハッカーがメモリの他の部分を上書きし、システムを制御します。
バッファオーバーフローが一般的である理由を知っています。たとえば、C/C++言語を取り上げます。 1970年代に戻ると、「strcpy()」や「sprint()」などの頻繁に再利用されるコードが開発され、長さを二重にチェックせずにメモリ内のバッファをコピーしました。したがって、ハッカーはソフトウェアでこれらのコードスニペットの使用を検索し、これらのバグを見つけるだけです。ソフトウェアセキュリティはこれをハッカーの前に行い、「strcpy()」のすべての使用を見つけて削除します。
"ソフトウェアのセキュリティは、主な目的がソフトウェアの機能の適切なプロビジョニングに合理的な保証を提供することである非機能的なプロパティです。"
上記のソフトウェアの目的を限定することなく(情報処理または電子レンジの制御用に設計されていますか)、定義は非常に定式化されているため、広くする必要があります。
上記の定義に対する私の議論は、おおよそ次のとおりです。
編集:申し訳ありませんが、ご質問に対する回答が半分しか提供されていないことに気づきました。本を引用する部分が欠けている。ソフトウェアのセキュリティの本質を十分に捉えた定義にまだ出会っていません。
Jason Andressapudの米国法によると、彼の本 The Information Basics of Information Security では、情報セキュリティは次のように定義されています。
不正アクセス、使用、開示、破壊、変更、または破壊からの情報および情報システムの保護
情報システム(ソフトウェア)は情報を永続化および操作するために存在するため、これはソフトウェアセキュリティの適切な定義に適合します。
セキュリティの側面をより広く定義することが重要だと思います。例えば。セキュリティは、許容可能なレベルのリスクを維持するプロセスです。リスクは有名なCIAトライアドの各側面に関係する可能性があります。機密性、完全性、可用性、および脅威には、悪意のある攻撃だけでなく、無能や事故も含まれます。
だから私はもっと好きなものを好みます
ソフトウェアセキュリティは、悪意のある攻撃、事故、および必要な更新とそのライフサイクル全体にわたるメンテナンスに直面しても、ソフトウェアが堅牢に機能するように設計するプロセスです。
オックスフォードのソフトウェア工学部の講師は言った(そして、これがどこかからの言い換えであるのか、それともオリジナルの発言であるのか、私にはわからない)。
プロセスまたはアクティビティを保護することは、そのプロセスの一部として発生するはずのことを実行し、実行してはならないことを保証するように行動することを意味します。