最近、Python コードのスキャンを行う依頼がありました。以前は Fortify を使って Java クラスのコードをスキャンしたことがありましたが、Python クラスのコードスキャンをサポートしているものを探しました。通常の方法とは異なるため、プロセスを記録します。
一、前期準備#
- Fortify Static Code Analyzer (SCA):Windows 232.2 バージョン。
- VS Code のインストール
- Fortify VSC プラグインのインストール:
- VS Code を開く。
- 拡張機能ビューに移動 (ショートカットキー
Ctrl+Shift+X)。 - "Fortify" を検索し、"Fortify VSC" プラグインを見つけてインストールします。

二、Fortify VSC プラグインの設定#
VS Code で Fortify プラグインのインターフェースを開きます(通常は左側のアクティブバーに Fortify アイコンがあります)。表示は以下のようになります。
最初の部分は無視して、Static Code Analyzer executable path ビューに切り替えます。

2.1 SCA 実行ファイルパスの設定#

- フィールド:
Static Code Analyzer executable path - 説明:
sourceanalyzer.exeのパスを指定します。 - 設定:
- 推奨: Fortify SCA の
binディレクトリをシステム環境変数Pathに追加している場合、ここにsourceanalyzerと入力するだけで済みます。
- 推奨: Fortify SCA の

- **代替:** 上記の方法が機能しない場合、右側の`Browse...`ボタンをクリックしてFortify SCAのインストールディレクトリに移動し、`bin`フォルダーを見つけて`sourceanalyzer.exe`を選択します。
* **例のパス:** `C:\Program Files\Fortify\Fortify_SCA_and_Apps_<バージョン番号>\bin\sourceanalyzer.exe`
基本的な設定は完了しました。残りは vscode でスキャンするディレクトリを開き、Fortify プラグインのボタンをクリックするだけで自動的に入力されます。
2.2 ビルド ID の設定#
- フィールド:
Build ID - 説明: 今回のスキャンタスクに一意の識別子を設定します。
2.3 スキャン結果出力パス (FPR) の設定#
- フィールド:
Scan results location (FPR) - 説明: スキャン結果ファイル(
.fprファイル)の保存パスとファイル名を指定します。Fortify Audit Workbench はこのファイルを使用します。デフォルトではコードベースのルートディレクトリフォルダーにこのファイルが保存されます。
2.4 ログパスの設定#
- フィールド:
Log location - 説明: SCA スキャンのログファイルパス。
- 設定: 通常はデフォルトのままで大丈夫です。右側の
Openボタンをクリックしてログを確認できます。
2.5 オプションの設定 (Python 特有)#
- フィールド:
Add translation options - 説明: Python コードに対して、ここで Python のバージョンと依存ライブラリのパスを指定する必要があります。
- 設定:
Add translation optionsチェックボックスをオンにします。- チェックを入れた後に表示されるテキストボックスに、以下のパラメータを入力します。Python 環境に応じてパスを調整してください。
- まず、コマンドラインで
python3 -c "import sys; print(sys.path)"を実行して取得した Python モジュール検索パスを確認します。私の環境では以下のようになります:
- まず、コマンドラインで
['', 'D:\\Scoop\\apps\\python311\\current\\python311.zip', 'D:\\Scoop\\apps\\python311\\current\\DLLs', 'D:\\Scoop\\apps\\python311\\current\\Lib', 'D:\\Scoop\\apps\\python311\\current', 'D:\\Scoop\\apps\\python311\\current\\Lib\\site-packages', 'D:\\Scoop\\apps\\python311\\current\\Lib\\site-packages\\win32', 'D:\\Scoop\\apps\\python311\\current\\Lib\\site-packages\\win32\\lib', 'D:\\Scoop\\apps\\python311\\current\\Lib\\site-packages\\Pythonwin']
* したがって、Fortifyプラグインには以下のように入力する必要があります:
-python-version 3 -python-path "D:\Scoop\apps\python311\current\DLLs;D:\Scoop\apps\python311\current\Lib;D:\Scoop\apps\python311\current\Lib\site-packages"
+ `-python-version 3`:Pythonのバージョンを3に指定します。
+ `-python-path "..."`:Pythonが標準ライブラリとサードパーティライブラリを探すパスを列挙し、セミコロン`;`で区切ります。これらのパスは`sys.path`の出力から来ています。
2.6 その他のオプション (任意)#
Add scan options:SCA スキャンフェーズの追加パラメータを追加するために使用され、通常はデフォルトのままで大丈夫です。Update security content:最新の脆弱性検出ルールを使用します。
三、スキャンの実行#
- 上記のすべての設定が完了したら、Fortify VSC プラグインインターフェースの下部にある
Scanボタンをクリックします。 - スキャンプロセスはバックグラウンドで実行されます。VS Code の
OUTPUTパネルまたはターミナルでスキャンの進行状況と詳細なログを確認できます。
五、スキャン結果の確認#
- スキャンが完了すると、
Scan results location (FPR)で指定されたパスに.fprファイル(例:python_results.fpr)が生成されます。 - Fortify Audit Workbenchクライアントアプリケーションを開きます。
- "File" -> "Open Project" をクリックし、生成された
.fprファイルを選択します。 - Audit Workbench では、スキャンされたセキュリティ脆弱性、脆弱性の種類、深刻度、影響を受けるコード行、データフロー分析、および修正提案を詳細に確認できます。
