私の情報によると、セキュリティコードのレビューを行うための厳格なルールはありませんが、私たち全員が同じための独自の戦略を開発しています。セキュリティコードのレビューで使用したり、使用したりするさまざまな戦略をみんなで共有できるかどうか疑問に思っていました。
@sonofaaaが述べたように、「ソフトウェアのセキュリティ評価の技術」という本では、著者は第4章(パートIの終わり)でコード監査戦略について説明しています。
特に、外部フローの感度(データフローと制御フロー)とトレース方向(順方向または逆方向のスライシング)について、多くの中立的なレビュー方法とともに説明します。他のトピックは非常に詳細に説明されています。これは、安全なコードレビューの主題に関する最良の資料です。
また、Fortify SoftwareのBrian ChessとJacob Westによる本、「Secure Analysis with Static Analysis」についても触れておきます。それらはセキュリティに焦点を当てた静的分析ツールの内部と使用をカバーし、それらを安全なコードレビューの世界の他のフォーム/ツールと比較します。
最新のセキュリティ重視の静的アナライザーをチェックアウトする場合は、まずCAT.NET for .NET(通常はC#、VB.NET、ASP.NET)などのオープンソースツールや無料ツールに参加することをお勧めします)、 find-sec-bugs (または古いLAPSE +)Java Enterprise and JSP、およびRIPS Scanner for PHP。セキュリティに焦点を当てたものは一般的に見つかりません。型システムに依存しないため、動的言語をサポートする静的アナライザー。ただし、Python、Ruby、または別の動的言語(またはその他の言語)のサポートに興味がある場合はお知らせください。まず、Bandit(Python codeのOpenStackプロジェクト)およびRubyのBrakeman Proをお試しください。
商用セキュリティに焦点を当てた静的アナライザーは、高度に訓練され、専門化されたアプリケーションセキュリティ指向の開発者向けです。それらのコストは、誰かがこれらのツールをフルタイムの仕事として、通年、毎日実行して分析することを想定しています。迅速な結果の確認に関心がある場合 [〜#〜] hpfod [〜#〜] をチェックしてください-しかし、これらのツールを長期的なリスクに統合することに関心がある場合大規模インストール向けのアプリケーションポートフォリオ-チェックアウト Cigital ESP 。また、クライアント向けにこれらのツールを実行および調整する多くのアプリケーションセキュリティブティックやコンサルティングショップもあります。あなたのロケールと戦略的方向性に応じて、私が言及した他の事柄に関係なく、私はパートナーと提携することを選択します。 LinkedInで「アプリケーションセキュリティコンサルティング」を検索しても、次に進むべき場所がない場合は機能するはずです。
私は通常チェックリストから始めます。 OWASPトップ10またはCERT Cコーディングガイドライン(または自分の本のセクション!)を言います。チェックリストに関連してコードを評価し、無向テストとレビューをチームに依頼します。開いているレビューからの「人気のある」問題はチェックリストに追加され、元々そこにあった問題以外が置き換えられます。
さらに、可能な場合は静的分析ツールが使用されます。
このアプローチの利点は、その最大の欠点でもあります。チェックリストの問題は簡単に見つけられますが、多くの場合、創造的なバグハンティングは簡単ではないため、唯一の問題が見つかります。
あなたの声明に反して、私は(セキュリティ)コードレビューがほとんどアドホックな活動であってはならないと私は信じています。 効率的なコードレビューを行うためのいくつかの非常に強力な方法論があります。最良の結果を得るには、これを段階的かつ反復的に行う必要があります。
以下は、そのような方法論の概要のサンプルであり、いくつかの指針となる原則があります。
TAOSSAパートIは、いくつかのアプローチとハイブリッドシナリオをカバーしています。ブランドンエドワーズは、技術にとらわれないレビュー戦略と、ここにあるビデオ(http://pentest.cryptocity.net/code-audits/)の大規模なレビューのよくある落とし穴について説明します。
一部の方法論は、監査する対象に応じて少し異なる場合があります。Webアプリケーションの場合は、C/C++アプリケーションの場合は、別の方法もあります。また、ソースコードが利用可能かどうかにも依存します。ただし、一般的には次の段階が含まれます。
このプロセスでは、静的または動的なコードアナライザーが使用されます。どちらを使用するかはあなた次第です。私が提供したリンクが役立つかもしれません。
ただし、以前に自分で監査したソフトウェアを確認しなければならないことが非常に多いため、作業を簡単にすることができます。ソースコードについては、 WinMerge を使用できます。これにより、古いバージョンと新しいバージョンの違いを見つけることができます。バイナリの場合、 Darungrim 、 BinDiff を使用できます。
現在の質問について読むのに意味があるかもしれないトピックは、ここで見つけることができます: