端末隔離と既存セッションの確認
保全状況を確認してから、ws7の隔離状態とaliceの資格情報世代を更新します。状態表を再検索し、管理経路と既存セッションに残る影響を確認する方法を学びます。
説明
封じ込めでは、操作を要求したことと、対象に適用されたことを分けて確認します。端末を隔離しても、別サービスの既存セッションが残る場合があります。資格情報の更新とセッション失効も別の操作です。
保全状況を確認してから、ws7の隔離状態とaliceの資格情報世代を更新します。状態表を再検索し、管理経路と既存セッションに残る影響を確認する方法を学びます。
1保全済みの資料を確認する
preservedとhashは、取得済み資料の管理台帳です。実際のハッシュ照合結果は取得記録で確認します。
from oplab import *
db=connect(15)
show(db, 'SELECT保全済みの資料を確認する * FROM evidence ORDER BY id')ディスク、メモリー、セッションの記録を保全済みです。封じ込め操作によって失われる揮発情報を意識しつつ、被害抑止の緊急性も踏まえて順序を判断します。
2要求と適用の差を見る
requestedは要求済み、appliedは適用確認済みという固定状態です。
show(db, 'SELECT要求と適用の差を見る * FROM controls')隔離は要求されていますが適用確認が0です。操作画面の送信成功だけで隔離完了とは扱えません。
3適用確認の状態を更新する
対象ws7の適用状態を変更します。続く読み直しで保存結果を確認します。
show(db, 'UPDATE適用確認の状態を更新する controls SET applied=1 WHERE host="ws7" AND requested=1')1行を更新しました。この状態表は確認記録であり、次の通信試験結果と併せて評価します。
4業務経路と管理経路を照合する
適用状態と、時刻20の到達試験を並べます。
show(db, 'SELECT業務経路と管理経路を照合する c.host,c.applied,p.path,p.result FROM controls c JOIN probes p USING(host) WHERE p.t=20 ORDER BY p.path')業務経路はblocked、管理経路はallowedです。隔離によって調査経路まで失っていないことも確認します。
5資格情報を更新して残るセッションを見る
世代を更新します。セッションは独立した状態表なので、自動的には失効しません。
show(db, 'UPDATE資格情報を更新して残るセッションを見る credentials SET generation=2 WHERE user="alice"')資格情報は世代2になりました。更新の成功だけでは、以前に発行されたセッションが消えたことにはなりません。
6旧世代の有効セッションを探す
資格情報の現在世代と、セッション発行時の世代を比較します。
show(db, 'SELECT旧世代の有効セッションを探す s.id,s.user,s.issued_generation,c.generation,s.active FROM sessions s JOIN credentials c USING(user) WHERE s.active=1 AND s.issued_generation<c.generation')s1が残っています。端末隔離、資格情報更新、セッション失効をそれぞれ確認する必要があります。
7対象の既存セッションを失効する
aliceだけを対象に更新し、bobの状態が保たれているかは次の読戻しで確認します。
show(db, 'UPDATE対象の既存セッションを失効する sessions SET active=0 WHERE user="alice" AND active=1')s1の1件が対象です。全利用者をまとめて失効する操作より、今回の対象範囲を明示できます。
8失効後の状態を読み直す
要求を出しただけで終わらず、保存された状態を確認します。
show(db, 'SELECT失効後の状態を読み直す id,user,active FROM sessions ORDER BY id')s1は0、bobのs2は1です。封じ込めの対象と確認結果を対応付け、別経路の継続利用がないか監視を続けます。
まとめ
s1は0、bobのs2は1です。封じ込めの対象と確認結果を対応付け、別経路の継続利用がないか監視を続けます。
表示された証拠IDと検索条件を残すと、調査結果を元の記録までたどれます。
操作履歴と解説を振り返れます。
Python 3.15 / SQLite・固定の調査記録
from oplab import *
db=connect(15)
show(db, 'SELECT * FROM evidence ORDER BY id')id | kind | preserved | hash e1 | disk | 1 | h7 e2 | memory | 1 | h8 e3 | sessions | 1 | h9
show(db, 'SELECT * FROM controls')host | requested | applied | management_allowed ws7 | 1 | 0 | 1
show(db, 'UPDATE controls SET applied=1 WHERE host="ws7" AND requested=1')changed: 1
show(db, 'SELECT c.host,c.applied,p.path,p.result FROM controls c JOIN probes p USING(host) WHERE p.t=20 ORDER BY p.path')host | applied | path | result ws7 | 1 | business | blocked ws7 | 1 | management | allowed
show(db, 'UPDATE credentials SET generation=2 WHERE user="alice"')changed: 1
show(db, 'SELECT s.id,s.user,s.issued_generation,c.generation,s.active FROM sessions s JOIN credentials c USING(user) WHERE s.active=1 AND s.issued_generation<c.generation')id | user | issued_generation | generation | active s1 | alice | 1 | 2 | 1
show(db, 'UPDATE sessions SET active=0 WHERE user="alice" AND active=1')changed: 1
show(db, 'SELECT id,user,active FROM sessions ORDER BY id')id | user | active s1 | alice | 0 s2 | bob | 1
演習完了