baseline-security-audit について
Baseline Security Audit Skillは、コードベースの一般的な脆弱性や設定上の問題を調べるスキルです。基礎的なセキュリティ監査と修正追跡に使え、19分野の検査、影響度と悪用可能性に基づく評価、確認後のJira課題作成に対応します。
主な機能
- 01シークレット、依存関係、サプライチェーンを検査
- 02インジェクション、認可、入出力処理を確認
- 03ログ、暗号、TLS、セキュリティヘッダーを点検
- 04一貫した重大度基準で所見を評価
- 05ユーザー確認後にJira課題を作成
活用シーン
- 01コードベースの基礎的なセキュリティ監査
- 02実行するセキュリティ検査の選択
- 03確認済みの所見をJira課題として追跡
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ enigmatry/ agent-skills --skill baseline-security-auditインストール後、Claude Code で/baseline-security-auditを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/authentication_security.mdcode_minification.mdcode_quality.mdcookie_storage_security.mdcryptography_security.mddata_minimization.mddatabase_field_encryption.mdexception_handling.mdhttp_verb_whitelisting.mdidor.mdinput_validation.mdlogging.mdoutput_encoding.mdpackages.mdsecrets.mdsecurity_headers.mdsensitive_query_strings.mdsql_injection.mdssl_tls_configuration.md詳細
ベースラインセキュリティ監査スキル
概要
このスキルは、一般的なセキュリティ上の脆弱性や設定ミスを分析し、コードベースの包括的なベースラインセキュリティ監査を実施します。ユーザーの確認後、選択された検出結果を追跡および修正するための Jira ストーリーを作成できます。
このスキルの機能
このスキルでは、以下のセキュリティチェックを実行します(各チェックの詳しいガイダンスは references フォルダーにあります)。
-
シークレットと認証情報 - ハードコードされたシークレット、認証情報、API キーをスキャンし、環境ごとに認証情報が異なることを確認します
- references/secrets.md を参照してください
-
パッケージのセキュリティ - 既知の脆弱性がある依存関係、サポートが終了したランタイム、サプライチェーン管理をチェックします
- references/packages.md を参照してください
-
SQL インジェクション - データベースクエリにおける SQL インジェクションの脆弱性を特定します
- references/sql_injection.md を参照してください
-
例外処理 - 例外の詳細をレスポンスに含めず、ログに記録するためのエラー処理を確認します
- references/exception_handling.md を参照してください
-
ログのセキュリティ - ログの出力先、レベル、監査ログの分離、およびログにシークレットや個人を特定できる情報(PII)が含まれていないことを検証します
- references/logging.md を参照してください
-
機密情報を含むクエリ文字列 - URL のクエリパラメーターや URL ログに機密データが含まれていないかチェックします
- references/sensitive_query_strings.md を参照してください
-
IDOR(安全でない直接オブジェクト参照) - オブジェクトレベルおよび機能レベルの認可チェックを分析します
- references/idor.md を参照してください
-
出力エンコーディング - XSS を防ぐためのエンコーディングとサニタイズを検証します
- references/output_encoding.md を参照してください
-
入力検証 - 一括割り当てやパストラバーサルを含め、ユーザー入力がサーバー側で検証されていることを確認します
- references/input_validation.md を参照してください
-
コードの圧縮 - 本番ビルドでソースマップやデバッグコードが公開されないことを検証します
- references/code_minification.md を参照してください
-
データ最小化 - API やフロントエンドを通じた不要なデータの露出、および機密データの不要な保存を特定します(GDPR)
- references/data_minimization.md を参照してください
-
Cookie とストレージのセキュリティ - Cookie フラグと、ブラウザーにおける機密データの保存を検証します
- references/cookie_storage_security.md を参照してください
-
暗号化のセキュリティ - 強力なアルゴリズム、鍵管理、パスワードハッシュ化を確認します
- references/cryptography_security.md を参照してください
-
セキュリティヘッダー - レスポンスのセキュリティヘッダー(CSP、HSTS、Permissions-Policy など)と、バージョンが開示されるヘッダーの削除をチェックします
- references/security_headers.md を参照してください
-
HTTP メソッドの許可リスト - アプリケーションで使用する HTTP メソッドのみが許可されていることを確認します
- references/http_verb_whitelisting.md を参照してください
-
SSL/TLS の設定 - TLS プロトコル、暗号スイート、証明書、コードレベルの TLS 設定を検証します
- references/ssl_tls_configuration.md を参照してください
-
データベースフィールドの暗号化 - 機密列が列レベルまたはアプリケーションレベルで暗号化されていることを検証します
- references/database_field_encryption.md を参照してください
-
コード品質 - ビルド警告、セキュリティアナライザー、SonarQube のセキュリティ評価を確認します
- references/code_quality.md を参照してください
-
認証のセキュリティ - Authorization Code + PKCE を使用する OpenID Connect、デフォルトでの認可、Development 環境に限定された Swagger、トークンの有効期間、パスワードポリシーを検証します
- references/authentication_security.md を参照してください
各チェックでは、以下を提示します。
- 検索対象となる具体的なパターン
- 特定すべき危険な兆候
- 以下の単一の重大度スケールに基づく検出結果
- 修正ガイダンス
- コード例
重大度の尺度
すべてのリファレンスファイルで、調査結果を以下の尺度で評価します。評価は影響度と悪用可能性に基づいて行い、入力を提供した人物や影響を受ける環境によって決めてはいけません。管理者が提供した入力であっても、重大度を中以上とし、テナント間またはユーザー間に及ぶ影響は、少なくとも高とします。
| 重大度 | 定義 | 典型的な例 |
|---|---|---|
| 致命的 | 認証されていない入力または低権限の入力から現在悪用可能であり、深刻な影響がある | ソース、設定、ログ内のシークレットまたは認証情報。ユーザー入力から到達可能なインジェクション。認証のバイパス。CVSS 9.0+。CVV または PAN が平文で保存されている。シークレットを保護する暗号が破損している、または独自実装である |
| 高 | 認証済み入力で悪用可能、機密データを露出する、または中核となる制御が欠如している | エンドポイントの認可が欠如している。HTTP レスポンスにスタックトレースまたは例外の詳細が含まれる。TLS 1.0/1.1 が有効。HSTS が設定されていない。認証されていない CBC データがクライアントに渡される。CVSS 7.0–8.9。PII または特別なカテゴリのデータがペイロードとしてログに記録される。ランタイムがサポート終了後も使用されている |
| 中 | 多層防御の欠落、または悪用に別の脆弱性を必要とする設定ミス | セキュリティヘッダーが欠如している。セキュリティアナライザーが有効になっていない。SonarQube の未レビューのセキュリティ問題。CVSS 4.0–6.9。本番環境での詳細なログ記録。証明書の自動更新がない |
| 低 | 衛生面または情報提供に関するもので、それ単独では現実的な悪用経路がない | SameSite が明示されていない。HSTS の preload がない。環境間で共有される公開識別子。耐量子計算機暗号への対応準備。ドキュメントの不備。CVSS 4.0 未満 |
SECURE / PARTIALLY SECURE / INSECURE、IMPLEMENTED / PARTIAL / NOT、EXCESSIVE / MODERATE / MINIMAL などのステータス表記は重大度ではありません。リファレンスファイルで評価に使用されている場合でも、報告するすべての調査結果には、上記4段階の重大度のいずれかを付与します。
すべての調査結果に次の情報を記載してください: 重大度 · チェック番号と名称 · 場所(ファイル:行、ヘッダー、またはライブ URL) · 発見した内容 · 修正方法 · OWASP Top 10:2025 カテゴリー(以下のマッピングに基づく)。
標準への対応付け
各検出事項に、そのチェックの OWASP Top 10:2025 カテゴリーと ASVS 5.0 の章をタグ付けします。
| # | チェック | OWASP Top 10:2025 | ASVS 5.0 |
|---|---|---|---|
| 1 | シークレットと認証情報 | A02 Security Misconfiguration | V13 Configuration |
| 2 | パッケージセキュリティ | A03 Software Supply Chain Failures | V15 Secure Coding and Architecture |
| 3 | SQL インジェクション | A05 Injection | V1 Encoding and Sanitization |
| 4 | 例外処理 | A10 Mishandling of Exceptional Conditions | V16 Security Logging and Error Handling |
| 5 | ロギングセキュリティ | A09 Security Logging and Alerting Failures | V16 Security Logging and Error Handling, V14 Data Protection |
| 6 | 機密性の高いクエリ文字列 | A04 Cryptographic Failures (data exposure) | V14 Data Protection |
| 7 | IDOR(安全でない直接オブジェクト参照) | A01 Broken Access Control | V8 Authorization |
| 8 | 出力エンコーディング | A05 Injection | V1 Encoding and Sanitization, V3 Web Frontend Security |
| 9 | 入力検証 | A05 Injection, A06 Insecure Design | V2 Validation and Business Logic |
| 10 | コードの最小化 | A02 Security Misconfiguration | V13 Configuration, V3 Web Frontend Security |
| 11 | データの最小化 | A04 Cryptographic Failures, A06 Insecure Design | V14 Data Protection |
| 12 | Cookie とストレージのセキュリティ | A02 Security Misconfiguration, A07 Authentication Failures | V7 Session Management, V3 Web Frontend Security |
| 13 | 暗号化セキュリティ | A04 Cryptographic Failures | V11 Cryptography |
| 14 | セキュリティヘッダー | A02 Security Misconfiguration | V3 Web Frontend Security, V13 Configuration |
| 15 | HTTP メソッドのホワイトリスト化 | A02 Security Misconfiguration | V4 API and Web Service, V13 Configuration |
| 16 | SSL/TLS の設定 | A04 Cryptographic Failures, A02 Security Misconfiguration | V12 Secure Communication |
| 17 | データベースフィールドの暗号化 | A04 Cryptographic Failures | V14 Data Protection, V11 Cryptography |
| 18 | コード品質 | A03 Software Supply Chain Failures, A06 Insecure Design | V15 Secure Coding and Architecture |
| 19 | 認証セキュリティ | A07 Authentication Failures, A01 Broken Access Control | V6 Authentication, V8 Authorization, V10 OAuth and OIDC |
出典:https://owasp.org/Top10/2025/ , https://github.com/OWASP/ASVS/tree/v5.0.0
使用方法
セキュリティ監査を依頼して、このスキルを呼び出します。
- 「ベースラインのセキュリティ監査を実施してください」
- 「コードベースにセキュリティ上の問題がないか確認してください」
- 「このプロジェクトのセキュリティチェックを実行してください」
実行フロー
ステップ 0 — 実行するチェックを選択する(最初に一度だけ質問)
ほかの作業を始める前に、実行可能なチェックの一覧をすべて提示し、どれを実行するかユーザーに尋ねます。
"実行するセキュリティチェックを選択してください。
# チェック 1 シークレットと認証情報 2 パッケージセキュリティ 3 SQL インジェクション 4 例外処理 5 ログのセキュリティ 6 機密情報を含むクエリ文字列 7 IDOR(安全でない直接オブジェクト参照) 8 出力エンコーディング 9 入力検証 10 コードの最小化 11 データの最小化 12 Cookie とストレージのセキュリティ 13 暗号化のセキュリティ 14 セキュリティヘッダー 15 HTTP メソッドのホワイトリスト化 16 SSL/TLS の設定 17 データベースフィールドの暗号化 18 コード品質 19 認証のセキュリティ すべてのチェックを実行するには
allと返信するか、特定のチェックだけを実行するには番号をカンマ区切りで指定してください(例:1, 3, 5)。"
選択されたチェック番号を SELECTED_CHECKS として保存します。選択されたチェックのみを実行し、報告し、Jira ストーリーを作成します。
監査中に再度質問してはいけません。
SELECTED_CHECKS に 14(セキュリティヘッダー) または 16(SSL/TLS の設定) が含まれている場合、あるいは all が選択された場合は、チェックの選択直後に本番 URL をユーザーに尋ねます。
"チェック 14 および/または 16 には、稼働中の URL が必要です。本番 URL を教えてください。(空欄の場合は、稼働環境の検査を省略して静的解析に切り替えます)"
回答を PRODUCTION_URL として保存します。ユーザーが空欄のままにした場合は、PRODUCTION_URL を空に設定し、両方のチェックで静的解析を実施します。
監査中にこの URL を再度尋ねてはいけません。
ステップ 0b — ホスティングモデルを特定する(チェック実行前に一度だけ)
チェック 10、12、14、15、16 はアプリケーションの実行場所によって異なります。web.config が有効なのは IIS および Windows 上の Azure App Service のみだからです。チェックを実行する前に、リポジトリの証拠から HOSTING_MODEL を特定します。証拠が矛盾している場合、または存在しない場合に限り、ユーザーに一度だけ尋ねます。
HOSTING_MODEL | 証拠 | チェックへの影響 |
|---|---|---|
iis | <aspNetCore> または <system.webServer> を含む web.config、linuxFxVersion のない Bicep Microsoft.Web/sites、IIS または Windows App Service にデプロイするパイプライン | web.config の各セクション(customHeaders、requestFiltering、removeServerHeader、httpErrors)が適用されます |
linux | Dockerfile、Bicep の linuxFxVersion、kind: 'app,linux'、AKS または Container Apps のマニフェスト、Kestrel が直接公開されている | web.config は無視されます。同等の設定はミドルウェア(UseHsts、セキュリティヘッダーミドルウェア、メソッドフィルタリング)およびコンテナーまたはプラットフォームの設定で行います。不足している web.config のエントリを報告してはいけません |
edge(いずれかと組み合わせる修飾子) | Bicep Microsoft.Cdn/profiles(Front Door)、Microsoft.Network/applicationGateways、またはアプリケーションの前段にあるリバースプロキシ | ヘッダー、TLS ポリシー、メソッドフィルタリングはエッジで設定または削除される場合があります。PRODUCTION_URL が利用可能な場合、稼働環境のレスポンスを正とし、UseForwardedHeaders を設定する必要があります |
結果を HOSTING_MODEL として保存し、再度尋ねてはいけません。
Jira 連携
ステップ 1 — Jira プロジェクトコードを取得する(最初に一度だけ質問)
選択されたチェックを確認した後、ユーザーに一度だけ、次のとおり尋ねます。
"セキュリティストーリーを作成する Jira プロジェクトコードを教えてください。(例:
SEC、PROJ)"
回答を JIRA_PROJECT_CODE として保存し、その後のすべてのストーリー作成呼び出しで再利用します。
監査中に再度尋ねてはいけません。
ステップ 2 — Jira の優先度マッピング
すべての検出事項には、重大度スケールのセクションにある 4 段階の重大度のいずれかがすでに設定されています。以下のとおり、Jira の優先度にマッピングします(優先度名は対象の Jira プロジェクトのスキームと照合してください。スキームによっては Normal ではなく Medium が使用されます)。
| 重大度 | Jira の優先度 |
|---|---|
| Critical | Highest |
| High | High |
| Medium | Normal |
| Low | Low |
ステップ 3 — すべての検出事項を提示し、Jira に送信する項目を尋ねる
選択されたすべてのチェックが完了したら、すべての検出事項をまとめた番号付きの表を出力します。各チェックは異なるトピックを対象としているため、設定は必ず 1 つのチェックのみに報告します。同じファイルと行が 2 回挙がった場合は、そのトピックを対象とするチェックの検出事項を残し、もう一方を削除します。
| # | チェック | 検出事項 | 場所 | 重大度 | OWASP 2025 |
|---|---|---|---|---|---|
| 1 | 1 Secrets and Credentials | ハードコードされた API キー | src/Api/appsettings.json:14 | Critical | A02 |
| 2 | ... | ... | ... | ... | ... |
次に、ユーザーに一度だけ尋ねます。
「Jira ストーリーとして作成する検出事項を選んでください。 すべての検出事項のストーリーを作成するには
all、番号をカンマ区切りで指定するには(例:1, 3, 5)、Jira への作成をスキップするにはnoneと返信してください。」
回答を受け取る前に Jira ストーリーを作成してはいけません。
ステップ 4 — 選択した各検出項目について Jira ストーリーを作成する
パッケージセキュリティ — 特別な統合ルール: パッケージごとに 1 件のストーリーを作成する代わりに、npm の検出項目をすべて 1 件のストーリーに、NuGet の検出項目をすべて 1 件のストーリーに統合します(このチェックで作成するストーリーは最大 2 件です)。統合したストーリーの説明に、影響を受けるすべてのパッケージ、現在のバージョン、推奨バージョン、CVE、リスクレベルを記載します。統合したストーリーには、個々の検出項目のうち最も高い優先度を適用します。パッケージエコシステムに検出項目がない場合は、そのストーリーを作成しません。
最初のストーリーを作成する前に、getAccessibleAtlassianResources を 1 回呼び出し、返された cloud id を CLOUD_ID として保存します。以下のすべての Jira 呼び出しでこの値が必要です。
ユーザーが選択した検出項目ごとに、createJiraIssue ツールを使って次のフィールドを指定し、Jira ストーリーを 1 件作成します。
| フィールド | 値 |
|---|---|
cloudId | CLOUD_ID |
projectKey | JIRA_PROJECT_CODE(上で取得済み) |
issueTypeName | Story |
summary | [Security Audit] <Check Name>: <short finding title> |
description | 検出箇所(ファイルと行番号)、問題の説明、修正手順、および OWASP Top 10:2025: <category> の行(Markdown) |
additional_fields | {"labels": ["BaselineSecurity"], "priority": {"name": "<mapped priority>"}} — ラベルと優先度はこのオブジェクトでのみ指定できます |
summary の例: [Security Audit] Secrets Management: Hardcoded API key in appsettings.json
createJiraIssue の呼び出しが成功するたびに:
- 作成されたストーリーキーを監査結果にインラインで表示します。例:(→ 作成済み PROJ-42)
createIssueLinkを呼び出して、新しいストーリーをこのプロジェクトの ETL プロジェクトストーリーに関連付けます:cloudId:CLOUD_IDtype:"Relates"inwardIssue:新しく作成したストーリーキー(例:YES-42)outwardIssue:ETL プロジェクトストーリーキー(例:ETL-2879)
最初のリンクを作成する前に、searchJiraIssuesUsingJql(cloudId = CLOUD_ID)を使って ETL ストーリーを 1 回検索します。たとえば、project = ETL AND summary ~ "<current project name>" AND summary ~ "Baseline security" のように検索します。一致する課題が複数ある場合、または見つからない場合は、候補を表示してユーザーにキーを尋ねます。キーを ETL_STORY_KEY として保存し、再検索しないでください。
⚠️ これには
customfield_10014(Epic Link)を 使用しないでください。このフィールドで指定できるのは Epic のみです。 ETL ストーリーは Epic ではなく Story です。代わりにcreateIssueLinkを使用してください。
ステップ 5 — 最終サマリーテーブル
選択したストーリーをすべて作成した後、統合テーブルを出力します:
| Story Key | Check | Summary | Priority |
|---|---|---|---|
| PROJ-42 | Secrets Management | appsettings.json 内のハードコードされた API キー | High |
| ... | ... | ... | ... |
ユーザーが none と返信した場合は、ストーリーを作成せず、このテーブルも省略してください。