固定構成の脆弱性対応と引き継ぎ
目標
認証を受けた構成で上げられない脆弱性を判定して、緩和の根拠を文書として残したあと、夜間作業ログの監査違反を見つけ出し、次の人がインターネットなしで読んで従える引き継ぎパッケージを完成させます。
なぜ重要なのか
認証を受けた構成は、最新のパッチを適用した瞬間に、認証を受けたその構成ではなくなり、再認証には数か月かかります。そのため、ここでは脆弱性への対応が、アップデートではなく緩和措置と文書化で終わることがよくあります。緩和は、バージョン番号がそのままなので、外から見ると何もしなかったことと区別がつかず、判断したという事実を残すこと自体が仕事になります。監査証跡も同じ性質です。事故のあとに探すものではなく、作業の前に残るようにしておくものであり、残していないものは、どれだけうまく探しても出てきません。
ステップ
python3で/root/handover/に、baseline.json(構成10件)、advisories.json(アドバイザリ8件)、worklog.csv(作業14件)、window.txtを作ります。/root/handover/impact.csvに、アドバイザリごとの影響の有無を判定して書きます。バージョンはドットで区切って、数字で比較してください。/root/handover/mitigation.mdに、影響のある項目の措置の区分・根拠・再評価の時点を、表で書きます。/root/handover/freeze.txtに、認証番号、構成リストのSHA-256、固定・変更可能な構成の数、固定なのに影響を受ける構成の数を書きます。/root/handover/audit-noapproval.csvに、承認記録なしで実行された作業を、元の行そのままで抽出します。/root/handover/audit-selfapproved.csvに、実行者と承認者が同じ作業を抽出します。/root/handover/audit-window.csvに作業ウィンドウ外の作業を抽出し、/root/handover/audit-summary.txtに、3つの件数と、重複を除いた実際の違反作業数を書きます。/root/handover/runbook.mdに、7つの節からなる引き継ぎ手順書を書きます。/root/handover/HANDOVER.sha256と/root/handover/index.mdで、パッケージを閉じます。
参考
- JSONは
jqで、バージョン比較と表作りはpython3で行うほうが安全です。 - ISO 8601の時刻は桁数が固定なので、文字列比較がそのまま時間の比較です。
awkで、そのまま不等号を使えます。 - よくある間違い1: バージョンを文字列で比較してしまうことです。
16.2が16.10より大きく見えます。 - よくある間違い2: 3つの違反件数を単純に足して、違反作業数として報告してしまうことです。ない事故を作って報告することになります。
- よくある間違い3: 成果物を直したあと、
HANDOVER.sha256を取り直さないことです。マニフェストは最後に取ります。
構成・アドバイザリ・作業ログを作る
python3で/root/handover/に、baseline.json(構成10件)、advisories.json(アドバイザリ8件)、worklog.csv(作業14件)、window.txtを作ります。
python3でbaseline.json、advisories.json、worklog.csv、window.txtの4つを作ります。値が固定されていてはじめて、互いの判定を突き合わせられるので、生成スクリプトをそのまま使ってください。
構成とアドバイザリを突き合わせて影響を判定する
/root/handover/impact.csvに、アドバイザリごとの影響の有無を判定して書きます。バージョンはドットで区切って、数字で比較してください。
バージョンを文字列で比較すると、16.2が16.10より大きく見え、3.12.3が3.9.20より小さく見えます。ドットで区切って数字で比較してください。インストールされていない構成は、影響なしです。
緩和措置と根拠の表を書く
/root/handover/mitigation.mdに、影響のある項目の措置の区分・根拠・再評価の時点を、表で書きます。
影響のある項目だけを表に載せます。認証済み構成に縛られた構成は、措置の区分が緩和で、根拠として認証番号が必要です。構成の外のものは、パッチです。すべての行に再評価の日付を付けてください。
構成リストを凍結する
/root/handover/freeze.txtに、認証番号、構成リストのSHA-256、固定・変更可能な構成の数、固定なのに影響を受ける構成の数を書きます。
構成リストファイルのSHA-256を記録しておけば、リストが静かに変わることを防げます。frozen_affectedは、影響を受けていて、かつバージョンを上げられない構成の数です。
承認なしで実行された作業を探す
/root/handover/audit-noapproval.csvに、承認記録なしで実行された作業を、元の行そのままで抽出します。
approver列がハイフンか空の行です。元の行をそのまま移してください。要約すると、あとで元と突き合わせられません。
2人統制が壊れた作業を探す
/root/handover/audit-selfapproved.csvに、実行者と承認者が同じ作業を抽出します。
operatorとapproverが同じ行です。承認欄がハイフンの行は、ここではなく前のステップに入ります。2つを混ぜると、両方の一覧が間違います。
作業ウィンドウ外の作業と実際の違反数を数える
/root/handover/audit-window.csvに作業ウィンドウ外の作業を抽出し、/root/handover/audit-summary.txtに、3つの件数と、重複を除いた実際の違反作業数を書きます。
ウィンドウは、window.txtの開始を含み、終了は含みません。そして、3つの違反の合計は、違反作業数ではありません。1つの作業が2つを同時に破ることがあるので、seqで重複を除いてください。
引き継ぎ手順書を書く
/root/handover/runbook.mdに、7つの節からなる引き継ぎ手順書を書きます。
7つの節が必要です。本文に外部リンクを使わず、画面キャプチャを指し示さず、人の名前の代わりに役割で書いてください。コマンドは、コードブロックで、実際に打てるように書きます。
引き継ぎパッケージを束ねる
/root/handover/HANDOVER.sha256と/root/handover/index.mdで、パッケージを閉じます。
成果物8個のハッシュ一覧を作り、何が何なのかを教える一覧文書を付けます。一覧文書そのものは、マニフェストに入れません。表紙は、パッケージの中身ではありません。