私はツールを使用して脆弱性の探索を支援していますが、テストを開始しただけですべてが問題ないと仮定することはできません。プロジェクトを監査しているときは、コードを見て、プログラマーのスタイルとスキル レベルを感じようとします。コードが乱雑に見える場合は、初心者である可能性があり、おそらく初歩的なミスを犯します。
プロジェクト内のセキュリティ関連機能を特定し、手動で監査することが重要です。 Tamperdataは、カスタムの http 要求を作成できるため、手動の監査やエクスプロイトの開発に非常に役立ちます。PHP の手動監査の良い例は次のとおりmysql_real_escape_string($var)
ですhtmlspecialchars($var,ENT_QUOTES)
。(ENT_QUOTES は、mysql の引用符と同じくらい危険なバックスラッシュを停止しません。mssql は別の話です。) セキュリティ機能は、「論理エラー」が発生する場所でもあり、これを検出できるツールはありません。 、これには手動監査が必要です。
Web アプリケーションのテストを行っている場合は、 Acunetixが最適なテスト ツールです。Wapitiは非常に優れたオープン ソースの代替手段です。どんなツールでも不適切に使用できますが。Web アプリケーションのテストを行う前に、エラー レポートがオンになっていることを確認し、try/catch などで SQL エラーを抑制していないことも確認してください。
バッファ オーバーフローなどの脆弱性について自動静的コード分析を行っている場合は、Coverityが最適なツールです (Fortify は Coverity とほぼ同じです)。Coverity は数万ドルの費用がかかりますが、国土安全保障省などの有名企業が使用しています。 ラットはオープン ソースの代替手段ですが、Coverity ははるかに複雑なツールです。これらのツールはどちらも、多くの偽陽性と偽陰性を生成します。RATS は厄介な関数呼び出しを探しますが、それでも安全かどうかはわかりません。そのため、RATS は strcpy() strcat() sprintf() のすべての呼び出しを報告しますが、たとえば静的テキストをコピーするだけの場合、これらは安全です。これは、多くのがらくたを掘り下げる必要があることを意味しますが、査読を行っている場合、手動検索を絞り込むことで RATS が大いに役立ちます。Linux のような大規模なコード ベースで 1 つの悪用可能な脆弱性を見つけようとしている場合、Rats はあまり役に立ちません。
私は Coverity を使用しましたが、彼らのセールス チームは、「コード ベース内の **** すべて **** の脆弱性を検出する」と主張しています。しかし、直接の経験から、Coverity が検出しなかったピーチによるバニラ スタック ベースのバッファ オーバーフローを発見したことがわかります。(ただし、RATS はこれらの問題を検出し、安全な 1,000 以上の他の関数呼び出しも検出しました...) 安全なアプリケーションが必要な場合、または悪用可能なバッファ オーバーフローを見つけたい場合は、Peach を使用してビルドに使用できるプラットフォーム ツールです。必要なツール。
ダングリング ポインターなどのよりエキゾチックなメモリ破損の問題を探している場合は、Valgrindが役に立ちます。