ホームページ >バックエンド開発 >PHPチュートリアル >ツールの推奨事項: 3 つの自動コード監査ツール
0×01 はじめに
労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぐ必要があります。
ソースコードの静的セキュリティ監査では、手動による脆弱性マイニングの代わりに自動ツールを使用することで、監査作業の効率を大幅に向上させることができます。自動化されたコード監査ツールの使用方法を学ぶことは、すべてのコード監査者にとって不可欠な能力です。 PHP ソースコード監査を学ぶ過程で、私はさまざまな自動化ツールを収集して使用しました。この記事では、RIPS、VCG、Fortify SCA という 3 つのより実用的なツールを簡単に紹介します。
RIPS は、強力な脆弱性マイニング機能を備えたオープンソースの自動コード監査ツールです。これは PHP 言語で書かれており、PHP コードのセキュリティを静的に監査するために使用されます。
VCG (VisualCodeGrepper) は、C/C++、C#、VB、PHP、Java、PL/SQL をサポートする無料のコード セキュリティ監査ツールです。シンプルな機能で使いやすい辞書ベースの検出ツールです。
Fortify SCA (Static Code Analyzer) は、Fortify Software Company (HP が買収) によって開発された商用ソース コード監査ツールです。独自のデータ フロー分析テクノロジーを使用して、複数のレイヤーおよび言語にわたるコードの脆弱性を分析します。現在、すべての主流の開発言語をサポートしています。
この記事では、アプリケーション例の分析を組み合わせて、3 つのツールの使用法と特徴を紹介します。
0x02 RIPS
RIPS の主な機能は次のとおりです:
1) XSS、SQL インジェクション、ファイル漏洩、ローカル/リモート ファイルの組み込み、リモート コマンド実行、およびより多くの種類の脆弱性を検出できます。
2) スキャン結果の表示とデバッグ支援には 5 つのレベルのオプションがあります。
3) 脆弱なコード行をマークします。
4) 変数を強調表示します。
5) ユーザー定義関数の上にカーソルを置くと、関数呼び出しが表示されます。
6) 関数定義と呼び出しの間を柔軟にジャンプします。
7) すべてのユーザー定義関数 (定義と呼び出しを含む)、すべてのプログラム エントリ ポイント (ユーザー入力)、およびスキャンされたすべてのファイル (インクルード ファイルを含む) を詳細にリストします。
8) ソース コード ファイル、インクルード ファイル、関数、およびそれらの呼び出しを視覚的な図で表示します。
9) CURL を使用して、マウスを数回クリックするだけで、検出された脆弱性の EXP インスタンスを作成します。
10) 各脆弱性の説明、例、PoC、パッチ、セキュリティ機能を詳細にリストします。
11) 7 つの異なる構文強調表示モード。
12) トップダウンまたはボトムアップの方法を使用して、スキャン結果を遡及的に表示します。
13) PHP をサポートするローカルサーバーとブラウザーは、使用上のニーズを満たすことができます。
14) 通常の検索機能。
RIPS の最新バージョンは 0.55 です。ダウンロード リンクは次のとおりです:
https://sourceforge.net/projects/rips-scanner/
ダウンロードした zip ファイルを Web サーバー Web サイトのディレクトリに解凍します。ブラウザに Web サーバーのアドレスと対応するディレクトリを入力します。 RIPS ツールのユーザー インターフェイスは次のとおりです。
上部はすべての機能ボタンのメニューです。
スキャン タスクが完了すると、メニューに 4 つの新しいボタンが表示されます。これらのボタンは、スキャンされたファイル、ユーザー入力ポイント、スキャン ステータス情報、スキャンされた機能という 4 つのスキャン結果ウィンドウの表示/非表示を切り替えるために使用されます。
次に、RIPS の使用法を説明する簡単な例を見てみましょう。ダウンロード リンクは次のとおりです。
http://jsdx.down.chinaz.com/201603/webjoker_v2.2.0.zip
この PHP アプリケーション特定の Web サイトへのユーザーの訪問をカウントするには、プログラムのバックグラウンドでログインして詳細なアクセス情報を表示できます。ダウンロードしたプログラムを解凍し、RIPS の「パス/ファイル」オプションにプログラム解凍ディレクトリを入力し、他のオプションはデフォルトのままにし、「スキャン」ボタンをクリックしてスキャン タスクを開始します。
スキャンが完了したら、ウィンドウ メニューの 4 つのボタンをクリックしてタスクの詳細を表示します。
テキスト部分には、スキャンされた脆弱性の詳細が表示され、「すべて非表示」ボタンをクリックすると、各ファイルの詳細な脆弱性結果リストを表示/非表示にします。
脆弱性の 1 つについて詳しく見てみましょう。init.php のソース コードには SQL インジェクションの脆弱性があります。
フィルタリングされていない $procookie パラメータは、cheatcookie() 関数によって直接呼び出されます。 cheatcookie() 関数の上にカーソルを置くと、cheatcookie() 関数がどのように定義されているかが表示されます。
cheakcookie() 関数は main.php ファイルで定義されており、フィルターされていないパラメーターが実行のために SQL ステートメントに直接取り込まれていることがわかります。
脆弱性の詳細は、$procookie パラメータが $_COOKIE[count_admin] によって渡されることを示しています。init.php ソース コードのコンテキストから、このパラメータはバックグラウンド ログイン Cookie 値の検証用であることがわかります。 count_admin 値がデータベース内のデータと一致しない場合、検証は失敗します。
POST パッケージの Cookie の count_admin を「' or 1=1 #」に変更して、Cookie の検証をバイパスし、バックグラウンドに直接入力します。
0x03 VCG
VCG は、ユーザーがスキャンする必要のあるデータをカスタマイズできる辞書ベースの自動ソース コード スキャン ツールです。ソース コード内の潜在的に危険な関数とテキストをすべて迅速に特定できます。
VCG のダウンロード リンクは次のとおりです。
http://sourceforge.net/projects/visualcodegrepp/
ダウンロードした msi ファイルをダブルクリックしてインストールします。
各言語のスキャン設定ファイルは、[設定] -> [オプション] -> [ConfigFiles] で編集できます。
[設定] オプションをクリックし、スキャンするターゲット言語の種類を選択します。 [ファイル] -> [新しいターゲット ディレクトリ] オプションをクリックし、スキャンするソース コード ファイルが保存されているディレクトリを選択します。上記のアプリケーション インスタンスのストレージ ディレクトリを選択します。 [スキャン] -> [フル スキャン] オプションをクリックしてスキャンを開始します。
スキャン結果は、スキャンされたファイルのデータに関する統計をアイコンの形式で作成します。この機能は少し役に立ちません。 [結果] パネルと [概要テーブル] パネルに表示されるコンテンツに焦点を当てます。
[結果] パネルには、セキュリティ リスクのあるすべてのソース コードが表示され、右クリックして結果を並べ替えたりフィルターしたりできます。
[概要テーブル] パネルは、[結果] パネルの内容の概要表示です。
VCG は、辞書を照合することで、潜在的に危険なソース コードの断片を検出します。そのスキャン原理は比較的単純であり、その焦点は RIPS とは異なり、アプリケーションの脆弱性を深く調査することはありません。 VCG は、ソース コードのリスク関数を迅速に特定するための補助ツールとして使用できます。
0×04 Fortify SCA
Fortify SCA は商用ソフトウェアで、価格が比較的高価なので、試用用の初期バージョンしか見つかりませんでした。商用ソフトウェアなので詳しい使用方法のドキュメントが用意されており、参照するのに非常に便利です。いくつかの IDE プラグイン機能をサポートしており、インストール中にオプションがあります。
Fortify SCA のコード監査機能は、そのルール ベース ファイルに依存しており、更新されたルール ベースをダウンロードして、インストール ディレクトリ内の対応する場所に配置できます。 bin ファイルはインストール ディレクトリの下の Coreconfigrules フォルダーに配置され、xml ファイルは CoreconfigExternalMetadata フォルダーに配置されます (フォルダーが存在しない場合は、新しいフォルダーを作成します)。
AuditWorkbench を開き、[新しいプロジェクトの開始] -> [詳細スキャン] オプションをクリックして、監査タスクをすぐに開始します。監査する必要があるアプリケーション ルート ディレクトリを選択し、追加オプションで使用するルール ベースを選択し、監査ガイドで提示された 4 つの質問から対応するオプションを選択して、[スキャンの実行] をクリックします。
監査結果は 5 つのパネルで表示されます。
RIPS 監査結果と同じ SQL インジェクションの問題を見てみましょう。左側の問題をクリックすると、ソース コード パネルが問題が発生したソース コード行を自動的に見つけます。
分析追跡パネルには、詳細なデータ傾向が表示されます。 COOKIE から読み取る -> 変数 $procookie に代入 -> cheatCookie() 関数を取り込む -> 変数 $sql に代入する -> mysqli_query() 関数を取り込む
左側の各アイコンの意味については、ユーザーマニュアルをご覧ください。各行をクリックすると、対応するソース コード行が自動的に検索されます。同時に、問題監査パネルの図には、脆弱性の原因を直感的に示す、より鮮明なデータ フロー図が表示されます。
監査パネルの他のタブには、RIPS などのオープンソース ソフトウェアと比較して、脆弱性情報が詳細に表示されます。 「ツール」→「レポートの生成」機能では、ユーザーのニーズに応じて監査結果のレポートを生成することもできます。
0×05 概要
VCG は他の 2 つのツールとは異なり、辞書に基づいてスキャン機能を実装するシンプルなリスク関数スキャンおよび位置決めツールです。 RIPS と Fortify SCA は、ソース コードの脆弱性を静的に詳細に分析するための強力なツールであり、それぞれのテクノロジーを使用してアプリケーションの実行プロセスを追跡および分析し、詳細な脆弱性マイニング作業を実行します。 RIPS は導入と使用が簡単で、単純なアプリケーション機能の自動監査分析ツールとして使用できます。 Fortify SCA はより強力で、より複雑なアプリケーション自動分析を実行できます。実際の監査作業では、2 つのツールを組み合わせて使用して、互いの長所を学ぶことができます。
自動静的コード監査ツールは、コード監査の人件費を節約でき、コード監査の効率を向上させる重要な手段です。ただし、すべての脆弱性スキャン ツールと同様、自動化ツールは完全にインテリジェントではないことに注意する必要があります。誤検知率は依然として大きな問題です。したがって、レポートに示されている脆弱性は、実際に存在するかどうかについて監査人によるさらなる確認が必要です。さらに、自動化ツールには大きな制限があります。一般的な Web アプリケーションの脆弱性タイプのみをマイニングでき、Web 2.0 時代に出現したビジネス ロジックの脆弱性をマイニングすることはできません。したがって、経験豊富なコード監査人にとって、監査ツールはサポート的な役割を果たすだけであり、ツールを使用して自身の経験を組み合わせて、より深い脆弱性を掘り出すことになります。
* この記事は istr33 によって投稿されました。FreeBuf Hackers and Geeks (FreeBuf.COM) からのものであることを明記してください