S3
Security as a State
Scan
AI脆弱性診断
Solve
修正・実装
Secure
継続監視
S³ とは?

従来の脆弱性診断は年1〜2回の「点検型」が主流でした。S³は Scan → Solve → Secure の3プロセスを統合し、セキュリティを「常時維持する状態」に転換する新しいモデルです。

月額サブスクリプションで予算を平常化し、監査や経営層への説明で「現在の安全状態」を即答できます。

AI診断の仕組み

コードを200行ごとのチャンクに分割し、ベクトルDB(ChromaDB)に蓄積された脆弱性ナレッジと照合した上で、LLMが文脈を理解して分析します。

コード入力 チャンク分割 脆弱性DB照合 LLM分析 レポート
検出基準

以下の国際基準・データベースに基づいて脆弱性を検出します。

OWASP Top 10 CWE/SANS Top 25 NIST SP 800-218 NVD (CVE) GitHub Advisory Semgrep Rules
マルチLLM対応

診断エンジンは複数のLLMプロバイダーに対応。用途やコストに応じて切り替え可能です。

OpenAI (GPT-4o) Anthropic (Claude) Google (Gemini) Ollama (オンプレLLM)

Ollama連携により、機密コードを外部に送信せずオンプレミスで完結する運用も可能です。

人手の診断との違い

従来のセキュリティ診断では、専門エンジニアが数週間かけて手動でレビューしていました。S³のAI診断は数分で数千行のコードを分析し、検出結果にCWE-ID・OWASP分類・攻撃ベクタ・修正コード例を自動付与します。

人手の診断を置き換えるのではなく、補完する位置づけです。シナリオ診断との併用を推奨しています。

依存ライブラリチェック

コード内のimport文を解析し、使用しているライブラリに既知の脆弱性(CVE)がないか自動チェックします。

Python JavaScript/TypeScript Java Go Ruby PHP Rust
Embedding Pipeline

コードと脆弱性ナレッジの意味的照合に OpenAI text-embedding-3-small(1536次元)を使用。ドキュメントはtiktoken encoderベースの RecursiveCharacterTextSplitterchunk_size=512 / overlap=64 トークンに分割後、埋め込みベクトルを生成してChromaDBに格納します。

フィードデータは batch_size=50 で一括embedding → 一括INSERT。NVDの9,500+エントリでも安定動作するよう設計。

Vector Search Strategy(5段階)

SmartContextBuilder が以下の順で検索を実行し、重複排除 + 鮮度ソートで最適なコンテキストを構築します。

1 言語フィルタ付きセマンティック検索(where: {languages: {$eq: "python"}}
2 CWEフィード検索(where: {source_type: {$eq: "cwe"}}
3 Semgrepルール検索 + 言語post-filter
4 OWASP/NISTナレッジベース(フィルタなし、score_threshold=0.6
5 フォールバック(閾値を 0.3 に下げて再検索)
ChromaDB / HNSW

ベクトルDBに ChromaDB(LangChain Chroma wrapper)を採用。近似最近傍探索アルゴリズムは HNSW(Hierarchical Navigable Small World)、距離関数は cosine similarity

コレクション名: sentence_transformer_collection
メタデータスキーマ: source_type, source_id, cwe_ids, languages, severity, cvss_score, freshness

ChromaDBの where 句は $contains非対応($eq/$ne/$gt/$gte/$lt/$lte/$in/$ninのみ)。言語フィルタは$eq + セマンティック検索フォールバックで対応。

LLM Review Protocol

コードを 200行/チャンク に分割し、各チャンクに対してベクトル検索で取得した関連ナレッジをコンテキストとして付与。システムプロンプトで OWASP ASVS / NIST SP 800-218 / CWE SANS Top 25 の観点を指定。

LLMパラメータ: temperature=0.2 / response_format=json_object
出力スキーマ: {has_vulnerability, vulnerabilities[{type, severity, line_number, vulnerable_code, description, recommendation, cwe_id, owasp_category, attack_vector}]}

Dependency Checker

言語別の正規表現で import/require/use文を静的解析。トップレベルパッケージ名を抽出後、標準ライブラリ(Python: 50+モジュール、Go: 20+プレフィックス)を除外。

抽出したパッケージ名で "{pkg} security vulnerability advisory CVE" クエリを生成し、ChromaDBにセマンティック検索。ドキュメント内容にパッケージ名が含まれるもののみ採用(精度優先のpost-filter)。

Feed Normalizer

5つのフィード(NVD/GitHub Advisory/OSV/CWE/Semgrep)から取得したデータを VulnEntry データクラスに正規化。各エントリをMarkdownに変換後、tiktokenベースでチャンク分割 → メタデータ付きでChromaDBに格納。

VulnEntry スキーマ:
title, description, source_type, source_id, cwe_ids[], languages[], severity, cvss_score, affected_packages[], references[], published_at, code_examples[{bad, good}]

暗号化・認証

APIキー・PATは Fernet暗号化(AES-128-CBC + HMAC-SHA256)でSQLiteに保存。暗号化キーは環境変数 ENCRYPTION_KEY から取得。

API認証は Bearer Token方式。ADMIN_TOKEN 環境変数が未設定の場合は認証をバイパス(デモモード)。設定すれば即座に認証が有効化。

Infrastructure

Runtime: Python 3.9 / Flask / gunicorn (workers=2, threads=4, timeout=300s)
Vector DB: ChromaDB (HNSW, cosine, persist_directory)
RDBMS: SQLite × 2(scan.db: リポジトリ・スキャン履歴・脆弱性 / settings.db: 設定・フィードステータス・使用量ログ)
Embedding: OpenAI text-embedding-3-small (1536dim)
Process: systemd (s3-app.service) + nginx reverse proxy
Deploy: rsync over SSH / zero-downtime restart

コードをスキャン

📁

ファイル/フォルダをドラッグ&ドロップ

または クリックしてファイルを選択

対応ファイル形式

PHP JavaScript TypeScript Python Java Go Ruby C/C++ C# Swift Kotlin Rust

検出可能な脆弱性

💉
SQL Injection
📜
XSS
🔓
認証・認可
🔐
暗号化
Command Injection
📂
Path Traversal