セキュリティ Beta

セキュリティツールでアプリケーションをスキャンして脆弱性診断ができます。静的解析・動的テスト・テイント解析・AI監査など、アーキテクチャを理解した専用ツールが多方面から解析するため、汎用ツールでは難しい脆弱性も検知します。

インストール

bear/securityをインストールします。

composer require --dev bear/security

スキャンツール

ツール 機能 使用タイミング
SAST1 静的解析でコード内の危険なパターンを検出 開発中
DAST2 動的解析でアプリに攻撃リクエストを送信 デプロイ前
AI Auditor AIがコードをレビュー コードレビュー時
Psalm Plugin ユーザー入力の流れを追跡 開発中

設計方針: Recall優先

セキュリティスキャナーには従来、Precision優先(確実なものだけ報告)とRecall優先(疑わしいものも報告)があり、トレードオフの関係にありました。

BEAR.SecurityはRecall優先を採用しています。脆弱性の見逃し(False Negative)は致命的ですが、偽陽性(False Positive)は確認すれば除外できるからです。偽陽性の確認をAIエージェントが代行できる今、この戦略はより効果的です。

推奨ワークフロー

# 1. SASTでパターンベースの脆弱性を検出
./vendor/bin/bear.security-scan src

# 2. 結果を確認し、脆弱性を修正
# 偽陽性には @security-ignore コメントを付与(下記例参照)

# 3. AI Auditorでビジネスロジックの問題を検出
./vendor/bin/bear-security-audit src

# 4. 検出された問題を確認・修正

偽陽性の抑制例:

$path = $this->buildPath($id); // @security-ignore PATH_TRAVERSAL_FILE_OPS: $id is validated integer from router

@security-ignoreを付与すると次回スキャンから抑制されます。

SAST

ソースコードをスキャンして危険なパターンを検出します。AIエージェント(Claude Code等)から実行し、検出結果の確認もAIに任せることを推奨します。

./vendor/bin/bear.security-scan src

14種類の脆弱性を検出:

カテゴリ
インジェクション SQLインジェクション、コマンドインジェクション、XSS
アクセス制御 パストラバーサル、オープンリダイレクト
暗号 弱いハッシュアルゴリズム、ハードコードされた秘密鍵
データ保護 安全でないデシリアライゼーション、XXE
セッション セッション固定、CSRF
ネットワーク SSRF、リモートファイルインクルージョン

各脆弱性の詳細は脆弱性リファレンスを参照してください。

DAST

実行中のアプリケーションに攻撃ペイロードを送信して脆弱性をテストします:

./vendor/bin/bear-security-dast 'MyVendor\MyApp' prod-app /path/to/app

テスト内容:

テスト 送信内容
SQLインジェクション ' OR '1'='1, ; DROP TABLE
XSS <script>alert(1)</script>
コマンドインジェクション ; ls -la, \| cat /etc/passwd
パストラバーサル ../../../etc/passwd
セキュリティヘッダー 欠落ヘッダーのチェック

AI Auditor

パターンマッチングでは検出できないセキュリティ問題をClaude AIが検出します:

# 方法1: APIキー
export ANTHROPIC_API_KEY=sk-ant-...
./vendor/bin/bear-security-audit src

# 方法2: Claude CLI(Maxプラン - APIキー不要)
claude auth login
./vendor/bin/bear-security-audit src
問題 説明
IDOR 認可チェックなしで他ユーザーのデータにアクセス
マスアサインメント 未検証のフィールドを更新で受け入れ
レースコンディション チェック時と使用時の競合
ビジネスロジック アプリケーション固有のセキュリティ欠陥

Psalm Plugin(テイント解析)

テイント解析は、ユーザー入力を汚染された変数とマークし、その汚染がコード内をどう伝播するかを追跡する静的解析手法です。汚染されたデータが適切なサニタイズなしにSQLクエリやHTML出力に到達した場合、脆弱性として報告します。

セットアップ

psalm.xmlにプラグインとスタブを追加:

<?xml version="1.0"?>
<psalm
    xmlns="https://getpsalm.org/schema/config"
    errorLevel="1"
>
    <projectFiles>
        <directory name="src"/>
    </projectFiles>
    <stubs>
        <file name="vendor/bear/security/stubs/AuraSql.phpstub"/>
        <file name="vendor/bear/security/stubs/PDO.phpstub"/>
        <file name="vendor/bear/security/stubs/Qiq.phpstub"/>
    </stubs>
    <plugins>
        <pluginClass class="BEAR\Security\Psalm\ResourceTaintPlugin">
            <targets>
                <target>Page</target>
                <target>App</target>
            </targets>
        </pluginClass>
    </plugins>
</psalm>

targetsで外部入力を受け取るリソースを指定します。htmlコンテキストでWebページを提供する場合はPageapiコンテキストでAPIを提供する場合はAppを指定します。

スタブ

スタブはサードパーティライブラリにテイントアノテーションを提供します:

スタブ 目的
AuraSql.phpstub SQLクエリメソッドをテイントシンクとしてマーク
PDO.phpstub PDOメソッドをテイントシンクとしてマーク
Qiq.phpstub テンプレート出力をテイントシンクとしてマーク

実行

テイント解析を実行:

./vendor/bin/psalm --taint-analysis

composer.jsonに便利スクリプトを追加:

{
    "scripts": {
        "security": "./vendor/bin/bear.security-scan src",
        "taint": "./vendor/bin/psalm --taint-analysis 2>&1 | grep -E 'Tainted' || true"
    },
    "scripts-descriptions": {
        "security": "Run SAST security scan",
        "taint": "Run Psalm taint analysis"
    }
}

以下で実行:

composer security
composer taint

GitHub Actions

CIパイプラインにセキュリティスキャンを追加できます:

cp vendor/bear/security/workflows/security-sast.yml .github/workflows/

このワークフローはプッシュとプルリクエストごとに実行されます:

ジョブ 機能
SAST Scan コードをスキャンしてGitHub Securityタブに結果をアップロード
Psalm Taint ユーザー入力の流れを追跡してGitHub Securityタブに結果をアップロード

結果はリポジトリの Security > Code scanning セクションに表示されます。

推奨手順: 初回はAIエージェントからスキャンを実行し、偽陽性に @security-ignore を付与してからCIを有効にしてください。

アーキテクチャとセキュリティ

BEAR.Sundayのアーキテクチャがセキュリティスキャンをより効果的にします:

  • 明確なエントリーポイント: すべてのエンドポイントはonGetonPostメソッドを持つResourceObjectです。スキャナーはすべての入力を特定してデータフローを追跡できます。

  • 隠れたマジックがない: 依存関係はコンストラクタインジェクションで明示的です。スキャナーは完全なコードパスを解析できます。

  • フレームワークを理解するAI: AI AuditorはBEAR.Sundayのパターンを理解し、一般的な脆弱性だけでなくビジネスロジックの欠陥も検出できます。

AIエージェント用プロンプト

AIコーディングアシスタントでbear/securityをセットアップするには、このプロンプトを使用してください:

Follow the setup instructions at:
https://raw.githubusercontent.com/bearsunday/BEAR.Skills/1.x/.claude/skills/bear-security-setup/SKILL.md
  1. Static Application Security Testing 

  2. Dynamic Application Security Testing