一覧OP-13-2 · 脆弱性管理と是正の優先順位

暫定対策とパッチ適用の確認

web7の固定状態表に対して、インターネット向け許可と稼働版を更新します。更新後の値を再検索し、通信制限と恒久是正を別の完了条件として扱う方法を学びます。

説明

暫定措置で外部経路を止めても、脆弱な版そのものが修正されたとは限りません。業務上必要な監視を残しながら経路を制限し、その後に修正版、動作確認、例外期限を確認します。

web7の固定状態表に対して、インターネット向け許可と稼働版を更新します。更新後の値を再検索し、通信制限と恒久是正を別の完了条件として扱う方法を学びます。

1対策前の経路を確認する

policyは教材で用いる経路別の許可状態です。1が許可、0が拒否です。

from oplab import * db=connect(13) show(db, 'SELECT対策前の経路を確認する * FROM policy ORDER BY source')

internetとmonitorが許可されています。暫定措置では、監視経路を残すかも含めて変更対象を定めます。

2外部向け許可を変更する

WHEREでweb7のinternetだけを対象にします。

show(db, 'UPDATE外部向け許可を変更する policy SET allowed=0 WHERE asset="web7" AND source="internet"')

変更された行は1件です。行数だけで意図どおりの状態になったとは判断せず、次に保存後の値を確認します。

3監視経路と対象版を確認する

許可状態と稼働版を同じ結果に並べます。

show(db, 'SELECT監視経路と対象版を確認する p.source,p.allowed,a.revision FROM policy p JOIN assets a ON p.asset=a.id ORDER BY p.source')

internetは0、monitorは1ですが、版はr1のままです。経路制限の完了と、脆弱な版の解消を分けて扱えます。

4修正版へ更新する

対象資産と変更前の版を条件に含めます。

show(db, 'UPDATE修正版へ更新する assets SET revision="r2" WHERE id="web7" AND revision="r1"')

1件をr2へ変更しました。実際の是正では展開結果だけでなく、実行中の版や再起動の反映も確認します。

5修正版の動作確認を照合する

試験対象の版が現在の版と一致する記録を結合します。

show(db, 'SELECT修正版の動作確認を照合する a.id,a.revision,t.test,t.result FROM assets a JOIN tests t ON a.id=t.asset AND a.revision=t.revision WHERE a.id="web7"')

r2のregressionがokです。r1のhealthだけを根拠に、更新後も動作したと判断する誤りを避けます。

6例外期限と残っている制限を読む

時刻30では期限切れという条件で例外を評価します。

show(db, 'SELECT例外期限と残っている制限を読む x.id,x.expires,x.expires>30 AS still_valid,p.source,p.allowed FROM exceptions x JOIN policy p ON x.asset=p.asset WHERE x.asset="web7" ORDER BY p.source')

例外は期限切れで、internetの制限は残っています。修正、試験、例外の終了、経路を戻す判断をそれぞれ確認して閉じます。

まとめ

例外は期限切れで、internetの制限は残っています。修正、試験、例外の終了、経路を戻す判断をそれぞれ確認して閉じます。

表示された証拠IDと検索条件を残すと、調査結果を元の記録までたどれます。

操作履歴と解説を振り返れます。

Python 3.15 / SQLite・固定の調査記録

1
from oplab import * db=connect(13) show(db, 'SELECT * FROM policy ORDER BY source')
asset | source | allowed
web7 | internet | 1
web7 | monitor | 1
2
show(db, 'UPDATE policy SET allowed=0 WHERE asset="web7" AND source="internet"')
changed: 1
3
show(db, 'SELECT p.source,p.allowed,a.revision FROM policy p JOIN assets a ON p.asset=a.id ORDER BY p.source')
source | allowed | revision
internet | 0 | r1
monitor | 1 | r1
4
show(db, 'UPDATE assets SET revision="r2" WHERE id="web7" AND revision="r1"')
changed: 1
5
show(db, 'SELECT a.id,a.revision,t.test,t.result FROM assets a JOIN tests t ON a.id=t.asset AND a.revision=t.revision WHERE a.id="web7"')
id | revision | test | result
web7 | r2 | regression | ok
6
show(db, 'SELECT x.id,x.expires,x.expires>30 AS still_valid,p.source,p.allowed FROM exceptions x JOIN policy p ON x.asset=p.asset WHERE x.asset="web7" ORDER BY p.source')
id | expires | still_valid | source | allowed
x1 | 30 | 0 | internet | 0
x1 | 30 | 0 | monitor | 1

演習完了