はじめに — セキュリティ保証と OSINT の探索
公開されている SafeBase ポータル は同時に二つの対象者にサービスを提供します:
- セキュリティ体制の証明を必要とする見込み顧客
- セキュリティ研究者(ブルーチームおよびレッドチーム)
各 グリーンチェックマーク は(おそらく)現在存在するコントロールを示しており、チェックマークが欠けている箇所は、存在しないものへの同様に明確なヒントとなります。
この検出手法が行うこと
本記事で説明するアプローチは以下を実行します:
- Nuclei のヘッドレスモード を使用して HTML ボディから各コントロールのタイトルを直接 収集 する
- 単一の正規表現ベースのテンプレートを通じてそれらのタイトルを機械可読な検出結果に 正規化 する
- 内部セキュリティコントロールの JSON/CLI マッチングを 出力 する
なぜこのデータを収集するのか?
以下のようなコンプライアンスフレームワーク:
- ISO 27001
- SOC 2
- PCI-DSS
- 地域のプライバシー規制
…はセキュリティコントロールが導入され機能していることの 証拠 を要求します。
SafeBase は、無数のメールのやり取りや文書要求の必要性を排除することでこれを簡素化します。
自社の Trust Centre をスクレイピングする理由は?
自分で構築した場合でも、十分な理由があります:
継続的な保証
監査人はリアルタイムの継続的な証拠をますます期待するようになっています変更の検出
コントロール名、グループ化、またはポリシーはアップデートや買収後に変更される可能性がありますサードパーティへのマッピング
JSON 出力により NIST 800-53 などのフレームワークへのマッピングが可能になります
ブルーチーム vs. レッドチームの価値
| チーム | メリット |
|---|---|
| ブルーチーム | 公開されている主張が正確であり続けることを確保する |
| レッドチーム | 内部コントロールライブラリとの比較によりギャップを特定する |
検出
手動レビューは機能しますが、スケールしません。
代わりに、このアプローチは YAML テンプレートで動作する高速スキャンツールである ProjectDiscovery / Nuclei を使用します。
なぜ Nuclei なのか?
- テンプレート駆動の検出
- 高速スキャン
- 容易にカスタマイズ可能
- 大規模な自動化に最適
Matchers
テンプレートには 70 個の matcher が含まれています。
正規表現 Matcher の例
- type: regex
name: firewall
regex: ['(?i)Firewall(?:[\s\S]{0,600}?data-testid="enabled")?']
- type: regex
name: incident-response-policy
regex: ['(?i)Incident\s+Response\s+Policy(?:[\s\S]{0,600}?data-testid="enabled")?']
使用している正規表現テクニック
| 問題 | 対処法 |
|---|---|
| 大文字・小文字の違い | (?i) フラグ |
| スペース・改行の混在 | \s+ |
| タイトルとアイコン間の不明な空白 | [\s\S]{0,600}? |
誤検知の排除
DSL matcher により精度を高めます:
- type: dsl
name: names
dsl:
- 'status_code == 200'
- 'contains_any(body, "Powered by SafeBase")'
condition: and
確認内容
両方の条件が真でなければなりません:
- レスポンスのステータスコードが 200
- HTML に "Powered by SafeBase" が含まれている
Cloudflare WAF のバイパス
ほとんどの SafeBase ポータルは Cloudflare WAF の背後に位置しており、スクレイピングの試みをブロックします。
解決策:ヘッドレスモード
Nuclei の ヘッドレス Chromium 実行を使用することで:
- JavaScript チャレンジを実行する
- Cloudflare Managed Challenge をバイパスする
- 動的コンテンツをレンダリングする
ヘッドレス設定
headless:
- steps:
- action: navigate
args:
url: "{{BaseURL}}"
- action: sleep
args:
duration: 1s
詳細説明
navigate
Chromium を起動してターゲット URL を読み込むsleep (1s)
以下を可能にします:- JavaScript の実行
- Cookie の設定
- ページの完全なレンダリング
HTML が不完全に見える場合は遅延を増やしてください。
トラブルシューティング
結果が欠けている場合:
- IP がブロックされている可能性があります
- 必要に応じてプロキシを使用してください
大規模スキャン
1. ターゲットリストの構築
# domains.txt
https://trust.gitlab.com
https://security.projectdiscovery.io
https://trust.your-vendor-here.com
以下も含めることができます:
- サブドメイン
- クロールされたエンドポイント
2. 並列処理で Nuclei を実行する
nuclei \
-t safebase-checks-enabled.yaml \
-headless \
-l matches.txt \
-c 50 \
-o safebase-scan.json
主要フラグ
| フラグ | 目的 |
|---|---|
-l |
入力ファイル |
-c 50 |
並列ブラウザ(リソース集約型) |
-o |
出力ファイル |
出力オプション
- JSON
- CSV
- Stdout
結果を以下に転送することができます:
- S3
- Slack
- SIEM
テンプレートリポジトリ
https://github.com/rxerium/internal-security-detect
3. CI/CD による自動化
GitHub Actions の例
jobs:
safebase-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
nuclei -t safebase-checks-enabled.yaml -headless -l domains.txt -c 50 -o results.json
- name: Upload artefact
uses: actions/upload-artifact@v4
with:
name: safebase-results
path: results.json
最後に
この技術は SafeBase を使用している組織に限定されますが、強力なコンセプトを示しています:
パッシブな OSINT はコンプライアンス、保証、そして検出と交差することができます。
公開されているトラストポータルを活用することで、研究者は以下を実現できます:
- コントロールフレームワークの分析
- セキュリティ主張の検証
- 変更の自動検出
…これらすべてが 認証やシステムへの直接アクセスなしに 可能です。