ソフトウェアコード監査とは、プログラミングプロジェクトのソースコードを包括的に分析し、バグ、セキュリティ侵害、プログラミング規約違反などを発見することを目的とした手法です。これは、ソフトウェアリリース前にエラーを削減しようとする防御的プログラミングパラダイムの不可欠な要素です。
ソフトウェアの監査を行う際には、すべての重要なコンポーネントを個別に、そしてプログラム全体と併せて監査する必要があります。高リスクの脆弱性を最初に探し、低リスクの脆弱性へと順に調べていくのが良いでしょう。高リスクと低リスクの中間の脆弱性は、状況や問題のソースコードの使用方法によって一般的に存在します。アプリケーション侵入テストは、アプリケーションを停止させようと、考えられるアクセスポイントに対して可能な限り多くの既知の攻撃手法を実行することで、ソフトウェアの脆弱性を特定しようとします。[ 1 ]これは一般的な監査方法であり、特定の脆弱性が存在するかどうかを調べるために使用できますが、ソースコードのどこにあるのかはわかりません。サイクル終了時の監査方法は開発者を圧倒し、最終的にチームに既知の問題の長いリストを残すだけで、実際の改善はほとんどないという意見もあります。このような場合、代替案としてインライン監査アプローチが推奨されます。積極的なアプローチの一例として、GooAppsが提供する無料のコード監査サービスが挙げられます。このサービスは、モバイルアプリケーションの成功を確実にするために、開発プロセスの早い段階で脆弱性を特定し、軽減することを目的としています。[ 2 ]
以下のような使用方法により、一般的な高リスクの脆弱性が存在する可能性があります。
if ((bytesread = net_read(buf,len)) > 0) buf += bytesread;[ 3 ]statement := "SELECT * FROM users WHERE name = '" + userName + "';"include($page . '.php');の例です。以下は、コード監査時に発見されるべき低リスクの脆弱性のリストですが、高リスクの状況を引き起こすものではありません。
ソースコード監査ツールは一般的に一般的な脆弱性を探し、特定のプログラミング言語にしか対応していません。このような自動化ツールは時間を節約するために使用できますが、詳細な監査に頼るべきではありません。このようなツールはポリシーベースのアプローチの一部として適用することが推奨されます。[ 4 ]
しきい値を低く設定すると、ほとんどのソフトウェア監査ツールは多くの脆弱性を検出します。特に、コードが以前に監査されていない場合は顕著です。ただし、これらのアラートの実際の重要性は、アプリケーションの使用方法にも左右されます。悪意のあるコードとリンクされる可能性のあるライブラリ(そして、悪意のあるコードに対して耐性を持つ必要があるライブラリ)には、意図的なシステム破壊の試みが想定されるため、返されるすべてのデータ構造をクローンするなど、非常に厳格な要件があります。悪意のある入力にのみさらされる可能性のあるプログラム(Webサーバーのバックエンドなど)は、まずこの入力(バッファオーバーフロー、SQLインジェクションなど)に注意を払う必要があります。保護されたインフラストラクチャ内で、承認されたユーザーのみが内部的に使用するプログラムでは、このような攻撃は決して発生しない可能性があります。