1. 導入:なぜセキュリティ静的解析(SAST)が必要なのか
開発の現場で「リリース直前のセキュリティチェックで脆弱性が見つかり、修正に追われる」という経験はありませんか?SAST(Static Application Security Testing)を導入すれば、コードを書いているその瞬間に脆弱性を検知できます。これにより、手遅れになる前の「早期発見」が可能になり、開発の手戻りを大幅に減らすことができます。
2. 基礎知識:SASTとは何か
SASTとは、プログラムを実行せずにソースコードを解析して、脆弱性を見つける手法です。
抽象構文木(AST):コードをコンピュータが理解しやすい木構造に変換したもの。
データフロー解析:入力値(ユーザーからの値など)が、どの関数を経由して危険な場所(データベース操作など)に届くかを追跡する仕組み。
これらを利用することで、単なる構文チェックツール(Lint)とは異なり、プログラムの文脈を理解した高度なセキュリティ診断が可能になります。
3. 実装/解決策:Semgrepで脆弱性を検知する
今回は、設定が非常に簡単で高速なSemgrepを使った導入手順を解説します。
1. インストール:pipを使って簡単にインストールできます。
2. ルールの選択:Semgrepには、SQLインジェクションやXSSを防ぐための公式ルールが用意されています。
3. スキャン実行:コマンド一つでディレクトリ全体をチェックします。
4. サンプルプログラム:Semgrepスキャン設定(semgrep.yml)
以下の設定ファイルを作成し、プロジェクトのルートディレクトリに配置してください。これだけで、一般的な危険なコードパターンを自動で検出できます。
rules:
- id: detect-sql-injection
# 危険なSQL実行パターンを定義します
patterns:
- pattern: db.execute(“… ” + $VAR + ” …”)
message: “SQLインジェクションの危険性があります。文字列結合ではなくパラメータ化クエリを使用してください。”
languages: [python]
severity: ERROR
ターミナルで以下を実行するだけでスキャンできます
semgrep –config=semgrep.yml .
5. 応用・注意点:現場で使いこなすコツ
SASTを導入する際、最も陥りやすい罠が「大量の誤検知(False Positive)による疲弊」です。
注意点1:ルールを絞り込む
最初から全てをチェックしようとせず、まずは「SQLインジェクション」や「機密情報のハードコーディング」など、致命的なものだけに絞って運用を開始しましょう。
注意点2:CI/CDパイプラインへの組み込み
GitHub ActionsなどのCIツールに組み込み、プルリクエストを作成したタイミングで自動実行されるようにしましょう。これにより、チーム全員が「脆弱性を含まないコード」を意識する文化が自然と醸成されます。
SASTは、エンジニアの「うっかり」を補佐してくれる強力な味方です。ぜひ今日からプロジェクトに導入してみてください。

コメント