一覧OP-15-1 · 封じ込め・復旧・報告

端末隔離と既存セッションの確認

保全状況を確認してから、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・固定の調査記録

1
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
2
show(db, 'SELECT * FROM controls')
host | requested | applied | management_allowed
ws7 | 1 | 0 | 1
3
show(db, 'UPDATE controls SET applied=1 WHERE host="ws7" AND requested=1')
changed: 1
4
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
5
show(db, 'UPDATE credentials SET generation=2 WHERE user="alice"')
changed: 1
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')
id | user | issued_generation | generation | active
s1 | alice | 1 | 2 | 1
7
show(db, 'UPDATE sessions SET active=0 WHERE user="alice" AND active=1')
changed: 1
8
show(db, 'SELECT id,user,active FROM sessions ORDER BY id')
id | user | active
s1 | alice | 0
s2 | bob | 1

演習完了