暫定対策とパッチ適用の確認
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・固定の調査記録
from oplab import *
db=connect(13)
show(db, 'SELECT * FROM policy ORDER BY source')asset | source | allowed web7 | internet | 1 web7 | monitor | 1
show(db, 'UPDATE policy SET allowed=0 WHERE asset="web7" AND source="internet"')changed: 1
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
show(db, 'UPDATE assets SET revision="r2" WHERE id="web7" AND revision="r1"')changed: 1
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
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
演習完了