Windows サービスの監査
監査とは、マシンにあるものの一覧ではありません。マシンにあるものと、あるはずだったものとの差です。標準の Windows には、後半を記録するものが何もありません。
3 つの質問と、それに答えるもの
このマシンが構築されてから、何が変わったか。
デプロイ時に取ったスナップショットと、今夜のマシンとの差分です。構成は、単に開始や停止をしただけのものとは分けて報告されるので、誰かが変更した 1 つのスタートアップの種類が、たまたま実行されている 40 個のサービスの下に埋もれません。
bws snapshot diff baseline.json --live
ステージング環境は、なぜ本番環境と違うのか。
それぞれでスナップショットを取り、2 つのファイルの差分を取ります。どこでも、どちらのマシンもその場に必要ありません。ファイルには、マシン名と、取得したアカウントが入っています。
bws snapshot diff staging.json production.json
ここにあるべきでないものは何か。
見る価値のある形を見つけるクエリです。実行ファイルがなくなったサービス、署名のないもの、無効なのに実行されているもの、デバッグ権限を要求するもの。
file:missing, signed:no, mismatch:running
夜間実行の形
# マシンが稼働を開始する日
bws snapshot create C:\baselines\web01.json --note "after the build"
# 毎晩、スケジュールされたタスクから
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - 構成のドリフトなし
# 5 - 構成がドリフトした。drift.json に内容が書かれる
# 3 - 実行されたが、すべてを読み取れなかった。そのため答えは部分的
終了コード 5 があることで、これは誰も読まないレポートではなく、監査になります。タスクはマシンがドリフトするまで静かで、ドリフトした夜に誰かが呼び出されます。
ベースラインは、昇格したセッションから取得してください。管理者権限がないと、マネージャーが一覧するエントリは少なくなり、一覧したもののうち拒否されるものが増えます。スナップショットには、取得したアカウントが管理者だったかどうかが記録されるので、誰も削除していないエントリが削除されたと報告する代わりに、比較がそのことを伝えられます。それでも、マシンの半分が欠けたベースラインは、マシンの半分が欠けたベースラインのままです。
スナップショットは証拠としてどれだけの価値があるか
- 1 行に 1 フィールドの JSON です。そのため、リポジトリに入れることができ、
git diffで読めます。このツールを持たない監査人でもファイルを読めますし、バージョン管理システムはいつという問いにすでに答えています。 - スナップインが一度も表示しなかったものが入っています。起動パスと引数、ファイルのハッシュと署名者、双方向の依存関係、トリガー、必要な特権、SID の種類、セキュリティ記述子です。
- 読み取れなかったものを、読み取れなかったと伝えます。このセッションに権限がなかったフィールドは、空ではなく読み取れなかったものとして記録されます。そのため、あとで行う比較で、黙って変更なしとせずに not compared と言えます。
- マシン全体の記述です。それに応じて保管してください。保存先ディレクトリがすでに持っているアクセス許可のまま書き込まれ、ツールは何も絞り込みません。