従来の脆弱性診断は年1〜2回の「点検型」が主流でした。S³は Scan → Solve → Secure の3プロセスを統合し、セキュリティを「常時維持する状態」に転換する新しいモデルです。
月額サブスクリプションで予算を平常化し、監査や経営層への説明で「現在の安全状態」を即答できます。
コードを200行ごとのチャンクに分割し、ベクトルDB(ChromaDB)に蓄積された脆弱性ナレッジと照合した上で、LLMが文脈を理解して分析します。
以下の国際基準・データベースに基づいて脆弱性を検出します。
診断エンジンは複数のLLMプロバイダーに対応。用途やコストに応じて切り替え可能です。
Ollama連携により、機密コードを外部に送信せずオンプレミスで完結する運用も可能です。
従来のセキュリティ診断では、専門エンジニアが数週間かけて手動でレビューしていました。S³のAI診断は数分で数千行のコードを分析し、検出結果にCWE-ID・OWASP分類・攻撃ベクタ・修正コード例を自動付与します。
人手の診断を置き換えるのではなく、補完する位置づけです。シナリオ診断との併用を推奨しています。
コード内のimport文を解析し、使用しているライブラリに既知の脆弱性(CVE)がないか自動チェックします。
コードと脆弱性ナレッジの意味的照合に OpenAI text-embedding-3-small(1536次元)を使用。ドキュメントはtiktoken encoderベースの RecursiveCharacterTextSplitter で chunk_size=512 / overlap=64 トークンに分割後、埋め込みベクトルを生成してChromaDBに格納します。
フィードデータは batch_size=50 で一括embedding → 一括INSERT。NVDの9,500+エントリでも安定動作するよう設計。
SmartContextBuilder が以下の順で検索を実行し、重複排除 + 鮮度ソートで最適なコンテキストを構築します。
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 に下げて再検索)
ベクトル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 + セマンティック検索フォールバックで対応。
コードを 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}]}
言語別の正規表現で import/require/use文を静的解析。トップレベルパッケージ名を抽出後、標準ライブラリ(Python: 50+モジュール、Go: 20+プレフィックス)を除外。
抽出したパッケージ名で "{pkg} security vulnerability advisory CVE" クエリを生成し、ChromaDBにセマンティック検索。ドキュメント内容にパッケージ名が含まれるもののみ採用(精度優先のpost-filter)。
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 環境変数が未設定の場合は認証をバイパス(デモモード)。設定すれば即座に認証が有効化。
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
コードをスキャン
ファイル/フォルダをドラッグ&ドロップ
または クリックしてファイルを選択