web-dev-qa-db-ja.com

コードレビュー戦略

私の情報によると、セキュリティコードのレビューを行うための厳格なルールはありませんが、私たち全員が同じための独自の戦略を開発しています。セキュリティコードのレビューで使用したり、使用したりするさまざまな戦略をみんなで共有できるかどうか疑問に思っていました。

10
p_upadhyay

@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で「アプリケーションセキュリティコンサルティング」を検索しても、次に進むべき場所がない場合は機能するはずです。

12
atdre

私は通常チェックリストから始めます。 OWASPトップ10またはCERT Cコーディングガイドライン(または自分の本のセクション!)を言います。チェックリストに関連してコードを評価し、無向テストとレビューをチームに依頼します。開いているレビューからの「人気のある」問題はチェックリストに追加され、元々そこにあった問題以外が置き換えられます。

さらに、可能な場合は静的分析ツールが使用されます。

このアプローチの利点は、その最大の欠点でもあります。チェックリストの問題は簡単に見つけられますが、多くの場合、創造的なバグハンティングは簡単ではないため、唯一の問題が見つかります。

5
user185

あなたの声明に反して、私は(セキュリティ)コードレビューがほとんどアドホックな活動であってはならないと私は信じています。 効率的なコードレビューを行うためのいくつかの非常に強力な方法論があります。最良の結果を得るには、これを段階的かつ反復的に行う必要があります。

以下は、そのような方法論の概要のサンプルであり、いくつかの指針となる原則があります。

  • システム(アーキテクチャ、デザインなど)を理解します。用意された質問リストを使用...
  • 明確な目的を決定する
    • 範囲
    • 制約
    • ゴール
    • 非目標!
    • セキュリティ問題の種類
    • 制限時間
  • 脅威を分析し(例:脅威モデリングを使用)、リスクの高い領域に焦点を当てるのに役立ちます
  • 自動化ツールを使用した予備スキャン
  • 複雑で壊れやすいセクションを確認する
    • 複雑なコード(例:循環的複雑度)
    • 過去のバグが多いエリア
    • 自動スキャンによる多くの「誤検知」
  • すべての入力のデータ検証を特定する
    • 信頼問題の説明
  • Webページのデータ出力
  • 特に、すべてのセキュリティメカニズムを詳細に確認します(認証、暗号化など)
  • 「興味深い」接合点、例:
    • プロセスの作成
    • スレッドと同期(特に静的メソッドとコンストラクター)
    • リソースアクセス(データアクセス、ファイルシステムなど)
    • デフォルトのコード
    • 昇格された特権
    • 認証されていないアクセス
    • ネットワーキング
  • 言語固有の問題、
    • 例えばC/C++の場合:バッファオーバーフロー(スタック/ヒープ)、整数オーバーフロー、フォーマット文字列、動的LoadLibrary()s、「禁止された」APIなど.
    • または.NETの場合:InterOp、リフレクション、動的Assembly.Load()、CAS /完全/部分的信頼、安全でないコードなど。
5
AviD

TAOSSAパートIは、いくつかのアプローチとハイブリッドシナリオをカバーしています。ブランドンエドワーズは、技術にとらわれないレビュー戦略と、ここにあるビデオ(http://pentest.cryptocity.net/code-audits/)の大規模なレビューのよくある落とし穴について説明します。

3
user2154

一部の方法論は、監査する対象に応じて少し異なる場合があります。Webアプリケーションの場合は、C/C++アプリケーションの場合は、別の方法もあります。また、ソースコードが利用可能かどうかにも依存します。ただし、一般的には次の段階が含まれます。

  1. ブラックボックスソフトウェアテスト-スキャナー、ファザー、または手動を使用。
  2. 可能な場合はソースコード監査-もう一度スキャナーを使用するか手動で。

このプロセスでは、静的または動的なコードアナライザーが使用されます。どちらを使用するかはあなた次第です。私が提供したリンクが役立つかもしれません。

ただし、以前に自分で監査したソフトウェアを確認しなければならないことが非常に多いため、作業を簡単にすることができます。ソースコードについては、 WinMerge を使用できます。これにより、古いバージョンと新しいバージョンの違いを見つけることができます。バイナリの場合、 DarungrimBinDiff を使用できます。

現在の質問について読むのに意味があるかもしれないトピックは、ここで見つけることができます:

2
anonymous