長年にわたり、コード1000行あたりの悪用可能なバグの平均数に関するさまざまな推定値を聞いてきました。一般的な数字は、コード1000行あたり1つの悪用可能なバグです。 Google検索では .02 や .048 のようなかなり低い数値が得られますが、 5 to 5 のような非常に高い数値も得られます。これらの数値はすべて、セキュリティについてレビューもテストもされていないコード用です。
この問題について深刻な実証研究が行われましたか?このような調査は、長年にわたって報告されたセキュリティホールの数を確認することにより、十分に検討されたオープンソースソフトウェアに基づいて行うことができます。そうでない場合、これらの数字はどこから来たのですか?
あなたが得るどんな数もかなり意味がないでしょう-考慮すべきいくつかの要素:
プログラミング言語-一部の言語では、非常に危険なことができます。たとえば、Cはメモリを直接割り当て、ポインタ演算を行い、文字列がnullで終了するため、Ruby/pythonなどのより安全な(ただし少し遅い)言語では許可されない多くの潜在的なセキュリティ上の欠陥をもたらします。アプリケーションの目的?どのタイプのコーダー/コードレビュー?
アプリケーションのタイプ-悪意のないプログラマーがJavaで比較的複雑な怒っている鳥型のゲームを書いている場合(unsafe
モジュールを使用しない)、「悪用可能な」ものが存在しない可能性が非常に高い"バグ-特にテスト後;プログラムをクラッシュさせる可能性があるという例外を除きます。アマチュアが作成したPHPのWebアプリケーションには、さまざまな悪用可能な欠陥(SQLインジェクション、クロスサイトスクリプティング、不適切なセッション管理、弱いハッシュ、リモートファイルの取り込みなど)が発生する可能性があります。
安全なコードの作成に関するプログラマーの専門知識。過去にWebアプリケーションのコードを作成した経験のない高校生を雇った場合、大きな欠陥になる可能性は十分あります。
さらに、「悪用可能な」バグの数を数えることも簡単な作業ではありません。バグの発見が簡単だった場合は、コードレビューで削除されます。微妙な競合状態やプログラム/ライブラリ間の複雑な相互作用が原因で、多くのバグが発生する場合があります。
ただし、オープンソースプロジェクトを採用している場合、ohloh.netでLoCの数、およびcvedetails.comで「悪用可能な」脆弱性の数を見つけるのはかなり簡単です(「悪用可能」を7以上のCVSSとして任意に定義しました)。私はランダムにいくつかのWebブラウザー、プログラミング言語、およびWebフレームワークを調べることに決め、以下を発見しました。
したがって、これらの特定の主要なプログラミングプロジェクト(エキスパートプログラマーによって作成された可能性が高い)について、1000 LoCあたり0.003〜0.08の割合で、主要な悪用可能な脆弱性の割合が見つかりました。 (または12 500〜300 000 LoCごとに1つ)。私は必然的に非主要なオープンソースプロジェクトを推定します。
Webアプリのセキュリティを面白くテストして利益を得ている人は、一般的なオープンソースのWebアプリでは、1000行あたりのセキュリティの欠陥が0.08の数値よりもはるかに高くなっています。おそらく問題は、CVEが関連するチャネルを介して検出および報告したセキュリティ欠陥のみを記録することです。コードが体系的にレビューされ、少なくとも低いセキュリティ欠陥が検出されたメトリックが必要です。それ以外の場合、測定しているのはテストの一部です。努力。