閉域網で調査し持ち出し用の要約を作る
目標
インターネットがなく、パッケージのインストールもできないPodの中で、障害の原因を見つけ出し、その結果をネットワークの外に持ち出せる形にして、持ち出し申請書まで書きます。
なぜ重要なのか
このPodは、エアギャップ環境を真似ているのではなく、実際にエアギャップ環境です。curlは外に出られず、pip installは失敗します。そのため、ここで学ぶのはコツではなく順序です。持っているものの一覧を先に作り、ないという事実を終了コードで固定し、異なる2つの記録を時間軸に置いて原因を絞り込みます。そして、外に持ち出すものは、原本を消してではなく、空のファイルから選んで詰めて作ります。消して作ると必ず1つ残り、残った1つは、何度読み直しても見えません。
ステップ
python3で/root/airgap/app.log(600行)と/root/airgap/change.log(4行)を作ります。シードが固定された生成スクリプトをそのまま使ってください。curlとpip3 installを実際に実行して終了コードを確認し、使えるツールを8個以上数えて、/root/airgap/offline.txtに書きます。/root/airgap/triage.txtに、全体の行数、ERROR行の数、最初のエラー時刻、最も多いerrコード、構成変更時刻(17:42)より前のエラー数を書きます。/root/airgap/cause.txtに、事件直前の変更の識別子・項目・変更前の値・変更後の値、変更と最初のエラーの間隔(分)、エラー行から書き写した根拠を書きます。/root/airgap/sensitive.txtに、アカウント・社員番号・ホスト名・内部IP・連絡先・作業者識別子の一意な個数を書きます。/root/airgap/release/summary.txtに持ち出し用の要約を書きます。8行以上40行以下で、判断に必要な事実だけを入れます。/root/airgap/forbidden.txtに、原本から抽出した禁止トークンの一覧を作り、要約と突き合わせた結果を/root/airgap/release/selfcheck.txtに書きます。/root/airgap/release/request.mdに、6つの節からなる持ち出し申請書を書き、/root/airgap/release/summary.sha256で完全性を付けます。
参考
- ログから種類別に抽出するときは、
grep -oEとsort -uが基本です。 - 突き合わせは、
grep -oFf 목록파일 대상파일(プレースホルダーは一覧ファイルと対象ファイルです)で行います。-Fを外すと、一覧のドットが任意の1文字になり、見当違いの場所が引っかかります。 - よくある間違い1: 要約を、原本から消しながら作ってしまうことです。必ず1つ残ります。
- よくある間違い2: 禁止トークンの一覧を、持ち出しディレクトリに一緒に置いてしまうことです。そのファイルが最も危険なファイルです。
- よくある間違い3: 要約を直したあと、ハッシュを取り直さないことです。審査を受けたファイルと出ていくファイルが違ってしまいます。
調査対象をネットワークの中で作る
python3で/root/airgap/app.log(600行)と/root/airgap/change.log(4行)を作ります。シードが固定された生成スクリプトをそのまま使ってください。
外から取ってくるサンプルがないので、python3で自分で作ります。乱数のシードが固定されていてはじめて、全員が同じ事件を見て、互いの判断を突き合わせられます。
エアギャップ環境であるという事実を証拠で固定する
curlとpip3 installを実際に実行して終了コードを確認し、使えるツールを8個以上数えて、/root/airgap/offline.txtに書きます。
curlとpipを実際に1回ずつ実行して、終了コードを書いてください。ツールの一覧は、command -vで実際にあるものだけを書きます。ない道具を書いた一覧は、次の人を欺きます。
事件の区間を確定する
/root/airgap/triage.txtに、全体の行数、ERROR行の数、最初のエラー時刻、最も多いerrコード、構成変更時刻(17:42)より前のエラー数を書きます。
全体の行数、ERROR行の数、最初のエラー時刻、最も多いerrコード、そして構成変更時刻(17:42)より前の区間のエラー数を数えます。最後の数字が、変更を原因として指し示せるかどうかを分けます。
2つのログを時間でつないで原因を指し示す
/root/airgap/cause.txtに、事件直前の変更の識別子・項目・変更前の値・変更後の値、変更と最初のエラーの間隔(分)、エラー行から書き写した根拠を書きます。
change.logから事件直前の変更を探し、その時刻と最初のエラー時刻の間隔を分で計算してください。根拠は推測ではなく、エラー行が直接教えてくれる値から取ります。
持ち出し審査の対象を種類別に数える
/root/airgap/sensitive.txtに、アカウント・社員番号・ホスト名・内部IP・連絡先・作業者識別子の一意な個数を書きます。
出現回数ではなく、一意な値の個数です。そして、審査の対象はapp.logだけではありません。change.logにも、1つの種類が隠れています。
持ち出し用の要約を作る
/root/airgap/release/summary.txtに持ち出し用の要約を書きます。8行以上40行以下で、判断に必要な事実だけを入れます。
原本を開いて消していかないでください。空のファイルから始めて、判断に必要な事実だけを書き写せば、書き写さなかったものは、そもそも存在しません。40行を超えたら、要約ではありません。
禁止トークンの一覧で自己検証する
/root/airgap/forbidden.txtに、原本から抽出した禁止トークンの一覧を作り、要約と突き合わせた結果を/root/airgap/release/selfcheck.txtに書きます。
6種類を、app.logとchange.logの両方から抽出して、sort -uでまとめます。突き合わせは、grepの-F(固定文字列)と-f(一覧ファイル)で行います。そして、この一覧は持ち出しディレクトリに置きません。
持ち出し申請書と完全性を付ける
/root/airgap/release/request.mdに、6つの節からなる持ち出し申請書を書き、/root/airgap/release/summary.sha256で完全性を付けます。
6つの節が必要です。完全性の節には、要約のSHA-256を書き、同じ値をハッシュファイルとしても残します。要約を1文字でも直したら、両方を計算し直さなければなりません。