最近、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 では、スキャンされたセキュリティ脆弱性、脆弱性の種類、深刻度、影響を受けたコード行、データフロー分析、および修正提案を詳細に確認できます。