Multi‑lens code security audit

一度で、見落とさない。
多角監査のコードセキュリティ診断。

1つの視点で診れば、必ず抜けが出る。sec-audit は 6 つの異なる視点でソースコードを多角的に監査し、単独の視点では見えない脆弱性まで拾い切ります。見つけた脆弱性には 再現コード(PoC) と 回帰テスト を添付し、どこまで診たかをレポートで明示します。監査は当社が実施し、御社と協働で、当社の手法でベストを尽くして洗い出します。

6視点多角監査
PoC+テスト各脆弱性に添付
国際標準OWASP ASVS / CWE / CVSS 準拠
sec-audit 診断ダッシュボード:アップロードした案件の一覧と進行フェーズ
当社が運用する診断基盤の画面。お客様の操作は不要で、進行と結果はレポートでご報告します。
§ 01 — THE PROBLEM

「診てもらった。でも、本当に大丈夫?」

脆弱性診断を受けても、現場にはこんな不安が残りがちです。

抜け漏れの不安

“全部見た”証拠がない

レポートに載るのは「見つかったもの」だけ。見ていない箇所・残っているリスクが分からず、安心の根拠にならない。

単一視点の限界

1回の監査では抜ける

自動スキャナも1回のAI監査も、得意な観点しか拾えない。認可漏れ・業務ロジック・設定の穴は視点を変えないと見えない。

動けない指摘

再現コードが無い

「XSSの可能性あり」と言われても、再現手順もPoCも無ければ、開発チームは着手も検証もできない。

場当たりな重大度

優先順位が曖昧

重大度の付け方に一貫性がなく、どれから直すべきかが判断できない。経営層への説明もしづらい。

再発

直しても再び埋め込まれる

修正しても回帰テストが無ければ、次のリリースで同じ穴が復活する。恒久対策にならない。

属人性

診断者によってブレる

担当者の経験値で結果が変わる。同じコードでも、いつ・誰が診るかで見つかるものが違う。

§ 02 — なぜ従来手法だと漏れるのか

同じコードでも、“見る角度”で見つかるものが変わる。

脆弱性は種類ごとに「見えやすい角度」が違います。データフローを追う視点でしか見えない穴、業務フローを辿らないと気づけない認可漏れ、設定・依存関係を洗わないと出てこないリスク。1つの視点に固定すると、その視点の死角がまるごと抜けます。

1視点では拾えるのは氷山の一角
6視点の重ね合わせで死角を相互に埋める
単一視点 6視点(多角監査) › 包括レビュー のみ データフロー・脅威・ASVS・危険操作・業務・包括
同じコードでも、視点の数で見つかる脆弱性の量がこれだけ変わる(イメージ)
発見できた脆弱性見えていない脆弱性
§ 03 — HOW IT WORKS

6つの視点で診て、束ねて、証拠を付ける。

sec-audit はコードベースを、意図的に視点の異なる 6 つのレンズで独立に監査します。各レンズの発見を突き合わせて重複を統合し、1つの優越版リストにまとめます。

LENS 1

データフロー

入力(信頼できない値)から危険な処理まで、データの流れを追跡。

LENS 2

脅威モデル

信頼境界ごとに、なりすまし・改ざん・情報漏洩などの脅威を当てる。

LENS 3

国際標準(ASVS)

OWASP ASVS の検証要件を章ごとに判定し、網羅チェックの台帳を作る。

LENS 4

危険操作の分類

SQL実行・コマンド実行・ファイル操作・外部通信など、危険な処理を種類別に総ざらい。

LENS 5

業務フロー

ログイン・権限・課金など、業務の流れに沿って認可漏れやなりすましを検出。

LENS 6

包括レビュー

OWASP Top 10 全般を横断で確認するベースラインの視点。

アップロード→ 攻撃面の洗い出し→ 6視点で多角監査→ 重複を統合→ PoC+テスト生成→ レポート一式
診断完了画面:フェーズ進行・成果物一覧・発見脆弱性のサマリー
診断完了画面 — フェーズ進行、成果物一覧、発見脆弱性のサマリーを1画面で確認
§ 04 — どこまで診たか、を示す

「見つけた数」だけでなく、「網羅の度合い」を報告します。

多くの診断は「見つかったもの」しか示しません。sec-audit は、国際基準の主要項目をどこまで確認できたか、まだ確認しきれていない領域はどこか、までをレポートに明記します。安心の根拠を、数と証拠で示すためです。

網羅チェック

国際基準の主要項目を確認

OWASP ASVS の検証要件を一つずつ「合格/不合格/該当なし」で判定。何を見て、どこが健全だったかが台帳で残ります。

正直な余白

残る領域も隠さず報告

静的解析では確認しきれない箇所(実行時設定・実際の値など)を「確認できていない領域」として正直に明示し、次の一手(動的検証)を提案します。

再監査で改善を測る

前回との差分が見える

修正後に再診断すれば、網羅度と残存リスクの改善を数値で比較できます。継続的な品質ゲートとして使えます。

国際基準(OWASP ASVS)主要項目の網羅チェック — 診断サンプル
認証
セッション管理
アクセス制御
入力検証・エンコード
暗号
エラー処理・ログ
データ保護
ファイル・リソース
設定
確認済み(合格) 要対応を検出 確認できていない領域
※ 表示値は匿名サンプルの診断結果です。「確認できていない領域」は動的検証で補完を推奨。
§ 05 — 成果物サンプル

実際の診断アウトプット(匿名サンプル)

以下は、ある Web アプリを実際に診断した結果の抜粋です。対象・固有情報はすべて匿名化しています

対象

匿名サンプル:Flask 製ドキュメント管理 Web アプリ(約 8 千行)

ソースコードを 6 視点で多角監査。単一視点の監査では 10 件前後の見込みに対し、30 件の脆弱性を発見しました。

30発見した脆弱性(Critical 1/High 13/Medium 12/Low 4)
約3倍単一視点の監査に対する発見数
全件CVSS スコア・修正優先度つき

重大度ヒートマップ

重大度件数代表的な問題
CRITICAL1認証が実質無効化されていた保護エンドポイント群
HIGH13SSRF、XSS(×3)、機密情報の平文保存、過剰なCORS、未認証ファイルアクセス(×3)、依存関係の既知脆弱性、サービス不能(×2)ほか
MEDIUM12パストラバーサル、アカウントロックアウト未実装、入力の未検証、ログ改ざん、アップロードサイズ無制限ほか
LOW4タイミング差による情報推測、エラー情報の過剰開示、外部リソースの完全性未検証ほか

個別レポートの例(代表 5 件)

30 件すべてに同じ粒度のレポートを付けます。以下はその代表 5 件(すべて匿名化済み)。各件に 該当コード・修正案・再現コード(PoC)・回帰テストが付きます。

F-001CRITICAL CWE-284 ・ CVSS 4.0 = 9.1

認証デコレータの適用順序ミスによる認証バイパス(5 エンドポイント)

検出した視点:包括・データフロー・脅威モデル・ASVS・危険操作・業務フロー(6視点)

認証装飾(デコレータ)の記述順が誤っており、5 つの「認証必須」エンドポイントに認証が実際には一切適用されていない状態でした。未認証の攻撃者が、本来保護されているはずのファイルのアップロード・取得を自由に実行できます。

影響: 機密ファイルの窃取・任意ファイル投入(保存型 XSS の起点にもなり得る)。 修正: 該当 5 箇所の順序を入れ替えるだけ(5 行で即時対応可能)。

修正案(Before / After)
# Before(脆弱): 認証装飾が route より上 → 実際には未適用
@login_required
@app.route('/files/<name>')
def download(name): ...

# After(修正): 順序を入れ替えるだけ
@app.route('/files/<name>')
@login_required
def download(name): ...
✔ 再現手順✔ コード証跡✔ 修正案✔ PoC✔ 回帰テスト
F-002HIGH CWE-918 ・ CVSS 4.0 = 8.7

外部 URL 取得機能の SSRF(内部ネットワーク到達可能)

検出した視点:包括・データフロー・脅威モデル・危険操作・業務フロー(5視点)

URL 取り込み機能が、受け取った URL をスキーム検証・ホスト制限・タイムアウトなしで取得します。認証済みユーザーが内部サービスやクラウドのメタデータ(IAM 認証情報)へ到達でき、内部 API のスキャンや認証情報の窃取が可能です。

影響: 内部 API・クラウド認証情報の漏洩。 修正: スキーム/内部 IP を弾く検証を追加し、リダイレクト禁止・タイムアウトを設定。

修正案(内部 IP・メタデータを遮断)
def is_safe_fetch_url(url):
    p = urlparse(url)
    if p.scheme not in {'http','https'}: return False
    ip = ipaddress.ip_address(socket.gethostbyname(p.hostname))
    if ip.is_private or ip.is_loopback or ip.is_link_local:
        return False        # 内部/クラウドメタデータを遮断
    return True

resp = requests.get(url, allow_redirects=False, timeout=10)
✔ 再現手順✔ コード証跡✔ 修正案✔ PoC(内部URL到達を実証)✔ 回帰テスト
F-003HIGH CWE-79 ・ CVSS 4.0 = 8.2

Markdown 描画時の XSS(サニタイズ不完全)

検出した視点:包括・データフロー・ASVS・危険操作・クライアント(5視点)

Markdown → HTML 描画のサニタイズが不完全で、閲覧者のブラウザで任意コードが実行され得ます。完全一致の <script> しか除去しないため <img onerror=…> がすり抜けます。バンドル済みの DOMPurify が使われていませんでした。

影響: セッション Cookie の窃取・なりすまし。 修正: 同梱済みの DOMPurify で描画前にサニタイズ。

コード証跡 → 修正案
// 脆弱: 完全一致の <script> だけ除去 → onerror 属性はすり抜ける
html = html.replace(/<script>/gi, '').replace(/<\/script>/gi, '');

// 修正: 同梱済みの DOMPurify を使用
return DOMPurify.sanitize(html, {
    FORBID_ATTR: ['onerror','onload','onclick'],
    FORBID_TAGS: ['script','iframe','object']
});
✔ 再現手順✔ コード証跡✔ 修正案✔ PoC(攻撃用 HTML)✔ 回帰テスト
F-004HIGH CWE-312 ・ CVSS 4.0 = 8.5

APIキー・パスワード・シークレットの平文保存

検出した視点:包括・脅威モデル・ASVS・危険操作・設定/依存(5視点)

設定ファイルにセッション鍵・外部 API キー・メール認証情報・利用者パスワードが平文で保存されていました。このファイルがリポジトリやバックアップに含まれる、または設定ミスで公開されるだけで、全認証情報が一括漏洩します。

影響: セッション偽造・外部サービスの乗っ取り・課金の悪用。 修正: 環境変数/シークレットマネージャへ移行し、設定ファイルを除外管理。

コード証跡(値はマスク)→ 修正方針
# config.yaml — 平文で保存されていた機密(値は伏せています)
secret_key:        "***"   # セッション偽造が可能
ai_api_key_a:      "***"   # 外部AIサービスの課金消費
ai_api_key_b:      "***"
mail_app_password: "***"   # メール送受信の乗っ取り
users.*.password:  "***"   # 利用者認証情報

# 修正: 環境変数へ移行し、設定ファイルはバージョン管理から除外
app.secret_key = os.environ["APP_SECRET_KEY"]
✔ 検知スクリプト(PoC)✔ 影響一覧✔ 移行手順✔ 回帰テスト
F-022HIGH CWE-306 ・ CVSS 4.0 = 7.3

一括処理エンドポイントの未認証アクセスによるサービス不能(DoS)

検出した視点:脅威モデル・業務フロー(2視点のみ)

重い一括処理エンドポイントに認証もレート制限もなく、未認証の攻撃者が繰り返し呼ぶだけで処理スレッドが無制限に起動し、CPU・メモリ・ファイルハンドルが枯渇してサービスが停止します。

影響: サービス全停止(可用性の喪失)。 修正: 認証・レート制限・多重起動ガードを追加。

コード証跡 → 修正案
# 脆弱: 認証なし・レート制限なし・スレッド上限なし
@app.route('/bulk-extract')        # ← 認証・レート制限なし
def bulk_extract():
    threading.Thread(target=extract_all).start()   # 無制限起動

# 修正: 認証+レート制限+多重起動ガード
@app.route('/bulk-extract')
@login_required
@limiter.limit("2 per minute")
def bulk_extract(): ...
注目:この脆弱性は「脅威モデル」と「業務フロー」の 2 視点でしか見つかりませんでした。包括的なチェックだけでは見落とされる典型例で、多角監査の価値がそのまま表れています。
✔ 再現手順✔ コード証跡✔ 修正案✔ PoC(DoS 実証)✔ 回帰テスト
+ 経営層向けサマリー(1 ページ)

意思決定のための要約も同梱

技術レポートに加え、ビジネスリスク(データ漏洩・サービス不能・認証侵害)と「今週やるべき対応」を非技術者にも伝わる言葉でまとめた 1 ページを添付します。

個別レポート例:CWE・CVSS・検出視点・該当コード・再現手順
個別レポート例 — CWE・CVSS 4.0・検出した視点・該当コード・再現手順を1件ごとに収録
§ 06 — 提供物

診断を通じてお渡しするもの

「見つけて終わり」にしません。開発チームがそのまま直せて、再発を防げるところまでを一式でお渡しします。

01

脆弱性リスト

重大度・CVSS スコア・修正優先度つきの一覧。優越版の統合リスト。

02

個別レポート

1 脆弱性 = 1 ファイル。CWE 分類・再現手順・コード証跡・修正案(Before/After)を収録。

03

再現コード(PoC)

実際に脆弱性を発火させる再現スクリプト。攻撃が成立することを具体的に示す。

04

回帰テスト

脆弱コードで失敗し、修正後に通るテスト。CI に組み込めば再発を機械的に防げる。

05

網羅性レポート

国際基準のどこまでを確認したか、残る領域はどこか。安心の根拠を示す。

06

経営層向けサマリー

ビジネスリスクと対応ロードマップを 1 ページに。意思決定と説明に使える。

§ 07 — POSITIONING

他の手段と、何が違うのか。

単独のスキャナや 1 回のレビューでは埋められない「網羅の可視化」と「動ける証拠」を、両立させています。

観点手動ペンテスト自動スキャナ
(SAST/DAST)
単発のAI監査sec-audit
複数視点での多角監査担当者依存✕✕✔
どこまで診たかの可視化△✕✕✔
再現コード(PoC)添付✔✕まれ✔
回帰テスト添付✕✕✕✔
国際標準準拠(ASVS/CWE/CVSS)担当者依存△△✔
結果の再現性・一貫性低高中高
コスト・スピード高コスト速い速い速い
§ 08 — 拠って立つ基準

判断は、業界の共通言語に接地しています。

「独自基準だから安心」ではなく、世界で使われている標準に沿って診断・分類・採点します。だから結果を第三者にも説明できます。

検証要件

OWASP ASVS

Web アプリのセキュリティ検証要件のデファクト標準。何を満たすべきかの合否基準として使用。

脆弱性の分類

CWE

脆弱性の種類を標準タクソノミー(MITRE CWE)で分類。共通の語彙で整理。

重大度の採点

CVSS 4.0

再現可能・説明可能な重大度スコアリング。優先順位づけの根拠を明確化。

§ 09 — 適用シーン

こんな場面で効きます。

リリース前の最終チェック

本番公開前に、網羅の証跡つきで脆弱性を洗い出す。安心してローンチできる。

M&A・投資のデューデリ

買収・出資先のコード資産のセキュリティ健全性を、標準準拠のレポートで評価。

定期再監査

四半期ごとに再診断し、網羅度と残存リスクの改善を数値で追う。

内製開発の品質ゲート

回帰テストを CI に組み込み、同じ脆弱性の再発を機械的にブロック。

外部委託成果物の検収

受け入れ前に第三者視点でコードを多角監査し、指摘を具体的な証拠つきで返す。

インシデント後の点検

事故後に類似の穴が他に無いかを、視点を変えて総ざらいする。

§ 10 — SECURITY & TRUST

安全性・運用上の懸念への回答

機密保持

コードは隔離環境で扱う

お預かりしたコードを案件ごとに隔離した環境で当社が解析します(NDA・作業後削除)。診断は原則として静的解析(コードを読む)で完結し、外部への送信は行いません。

正直な限界表示

“分からない”を隠さない

静的解析では確認しきれない箇所(実行時設定・実際の値など)は「確認できていない領域」として明示。過大にも過小にも見せません。残存リスクゼロを保証するものではなく、当社の多角監査で網羅性を高め、その到達度を数値でお示しします。

誤検知への配慮

確度を明記する

裏取りが取れていない指摘には「確度:低」と明記。推測を確定のように書きません。

再現性

担当者に依存しない

標準に沿った手順で診断するため、いつ実施しても一貫した観点で網羅します。

§ 11 — ACADEMIC BACKING

診断手法を、学術プレプリントで公開しています

設計思想・評価手法・実証データを含み、第三者が方法論を検証できる形で記述しています。sec-audit の多角監査は、この研究成果に基づいています。

VSAT: Measurable-Completeness Multi-Lens LLM Auditing for Web Application Vulnerabilities

Hirashima, Daishiro(Toyo System Co., Ltd.) ・  Preprint ・  2026 ・  DOI: 10.5281/zenodo.21402202

複数の異なる視点(レンズ)で同一コードベースを監査し、その発見の重なり構造から「どこまで見つけ切れたか」を統計的に測る手法を定式化しました。ベンチマーク 3 アプリでの評価で、カテゴリ再現率 94.7〜100%、単一パス監査に対し 2.4〜3.4 倍の脆弱性発見を達成しています。

Zenodo preprint ・  https://zenodo.org/records/21402202
プレプリントを読む (PDF) ↗
§ 12 — FAQ

よくある質問

どんな言語・フレームワークに対応していますか?

主要な Web アプリのスタック(各種サーバーサイド言語・フレームワーク、フロントエンド)に対応します。対象の構成に応じて、どの視点を重点的に当てるかを調整します。詳細はお問い合わせください。

既存のペネトレーションテストと何が違いますか?

ペンテストは主に「稼働中のサービスを外から攻撃して試す」手法です。sec-audit は「ソースコードを複数視点で読み解く」手法で、網羅の可視化と、修正に直結する再現コード・回帰テストの提供が強みです。両者は補完関係にあり、重大な指摘の修正後に動的なペンテストで裏取りする流れを推奨しています。

動的な検証(実際に攻撃して確認)はしますか?

基本はソースコードの静的解析です。稼働中の URL をご提供いただける場合は、一部の再現コードを実環境で発火させる検証も検討中です。

網羅性の指標が低いと「危険」という意味ですか?

いいえ。網羅性は「まだ確認しきれていない領域がどれだけ残るか」を正直に示す指標で、攻撃面が多様なアプリほど自然に余白が大きくなります。危険度そのものではなく、「どこまで見たか/次に何を見るべきか」を判断するための地図とお考えください。

診断結果の秘密は守られますか?

はい。コードは案件ごとに隔離した環境で扱い、成果物の取り扱いも含めて機密保持を前提に運用します。具体的な条件はお問い合わせ時にご説明します。

どれくらいの規模のコードまで診られますか?

小規模なアプリから大規模なコードベースまで対応します。規模に応じて重点スコープを設定し、限られた時間で最大の網羅を得られるよう調整します。

料金体系を教えてください。

取り組みの範囲・期間に応じたお見積もり(準委任)です。対象コードの規模やスコープをうかがって算出します。まずはお問い合わせください。

どのような契約形態ですか?

準委任(専門サービスの提供)です。当社の知見と AI を用い、善管注意義務をもって御社に伴走し、ヒアリングを重ねながらご一緒に診断を進めます。特定の成果物の完成を保証する請負契約ではなく、取り組みの過程で生まれるレポート等を随時お渡しします。

§ 13 — ご依頼の流れ

当社が伴走する、準委任の進め方

成果物を一方的に納めるのではなく、御社に教えていただきながら、ご一緒に診断を進めます。当社は善管注意義務のもとで専門サービスを提供します(請負ではありません)。

お問い合わせ・NDA→ コードお預かり・スコープヒアリング→ 6視点で多角監査(当社が実施)→ 脆弱性リスト・PoC・テスト・網羅性レポートをお渡し→ (任意)修正後の再監査
§ 14 — CONTACT

あなたのコードは、本当に大丈夫ですか?
“どこまで見たか”まで、お渡しします。

まずは無料でご相談ください。対象・目的をうかがい、最適な診断範囲をご提案します。

お問い合わせ・無料相談