バックアップ漏えいの追跡と修正

LinuxBeginner
オンラインで実践に進む

はじめに

Northstar のサポートサイトでは、ヘルプページと許可されたダウンロードを提供しています。不審なアーカイブのダウンロードから、社内用バックアップが誤って公開ファイルと同じ場所に保存された可能性が浮上しました。あなたはサイトの保守権限を持つ当番エンジニアです。

リクエストを追跡し、URL と Web サーバー内のファイルを対応付け、バックアップを非公開の保管先へ移して、サポートサイトが引き続き動作することを確認します。基本的なターミナル操作の知識があれば十分です。HTTP ステータスコードと Web ルートの対応関係は、このラボで説明します。データと通信はすべて模擬的なものです。

不審なダウンロードを調査する

このステップでは、不審なダウンロードを追跡してアーカイブを取得し、社内データが含まれているか調べます。

環境は準備済みです。Workstation はクライアント用ターミナルで、現在のディレクトリは /home/labex/project です。Web Server はサイトのサーバーに接続済みの保守用ターミナルです。指示に従ってタブを切り替えてください。Topology は両者の関係とサイトの現在の到達性を表示します。

Topology を開いてクライアントとサーバーの位置を確認し、Workstation に戻ります。ステータスが示すのはホームページが応答するかどうかであり、非公開ファイルが保護されているかどうかではありません。

Workstation と Web Server のトポロジー

通常のアクセスを確認する

Workstation を使います。curl は HTTP リクエストを送信し、レスポンスを表示します。-sS は進捗表示を隠しますが、接続エラーは表示します。127.0.0.1:8081 は Workstation からアクセスできるサイトのエンドポイントです。127.0.0.1 はローカルマシンを意味します。Web Server では、同じアドレスは Workstation ではなくサーバー自身を指します。

curl -sS http://127.0.0.1:8081/

レスポンスには Northstar Support と、ヘルプや製品ガイドへのリンクが含まれます。公開ディレクトリ、つまり Web ルートとは、サーバーが URL 経由で内容を公開するファイルシステム上のディレクトリです。

製品ガイドは意図的に公開されています。変更を加える前に取得します。

curl -sS http://127.0.0.1:8081/downloads/product-guide.txt

最初の行は Northstar Product Guide です。/downloads/public-examples.tar の許可されたサンプルダウンロードも公開リソースです。アーカイブらしい名前でも、引き続き利用できる必要があります。

ダウンロードを追跡する

Web Server に切り替えます。cat はテキストファイルを表示します。

cat /var/log/nginx/site-access.log

Nginx はこれらのリクエストを処理する Web サーバーです。アクセスログの各行には、クライアントアドレス、時刻、リクエスト、ステータスコード、レスポンスのバイト数、ユーザーエージェントが記録されます。GET はリソースを要求します。ユーザーエージェントは、リクエスト元のソフトウェアを示します。200 はサーバーが正常なレスポンスを返したこと、404 は要求されたリソースが見つからなかったことを意味します。ネットワーク転送によって記録されるクライアントアドレスが変わる場合があるため、特定の人物を識別できるとは考えないでください。TopologyHealth/1.0 のエントリーは、環境ビュー自身によるヘルスチェックです。

/admin などへの失敗したリクエストと、その後の /backups/support-backup.tar への成功したリクエストを探します。指定した文字列に一致する行を表示する grep で、ログを絞り込みます。

grep 'support-backup.tar' /var/log/nginx/site-access.log

一致する行には GET /backups/support-backup.tar とステータス 200 が含まれるはずです。ダウンロードを示唆していますが、社内データの公開と判断するにはレスポンスを調べる必要があります。例えば、該当行の変動しないフィールドは次のようになります。

... "GET /backups/support-backup.tar HTTP/1.1" 200 10240 ... "ExternalClient/1.0"

アドレスとタイムスタンプは変わります。有用な手掛かりは、パス、成功したレスポンス、アーカイブの内容です。

バックアップの公開を確認する

Workstation に戻ります。-o はレスポンスを表示せず、指定したファイルに保存します。

curl -sS -o /home/labex/project/support-backup.tar http://127.0.0.1:8081/backups/support-backup.tar

tar はアーカイブファイルを読み取ります。-t はメンバー一覧を表示し、-f はアーカイブを指定します。

tar -tf /home/labex/project/support-backup.tar

internal-customers.txt が表示されるはずです。-x はメンバーを展開し、-O は展開したファイルを作らずに内容をターミナルへ出力します。

tar -xOf /home/labex/project/support-backup.tar internal-customers.txt

内容は INTERNAL ONLY で始まり、模擬顧客レコードを記述しています。これで、正常なレスポンスに含まれていたのが許可された公開アーカイブではなく、社内データであったと確認できます。

バックアップを非公開の保管先へ移す

このステップでは、保守用に内容を残しながら、社内用バックアップを公開サイトから取り除きます。Web Server で公開ファイルを見つけ、修正します。

公開ファイルを見つける

Web Server に切り替え、サイトの設定を読みます。

cat /etc/nginx/conf.d/default.conf

root /srv/site; は /backups/support-backup.tar を /srv/site/backups/support-backup.tar に対応付けます。autoindex off; はディレクトリ一覧の表示を無効にしますが、既知のファイル名への直接アクセスは遮断しません。リンクされていないファイルも非公開とは限りません。

-l オプションは、サイズ、所有者、アクセス権を含む詳細な一覧を表示します。公開ファイルを確認します。

ls -l /srv/site/backups/support-backup.tar

表示されたパスから、アーカイブが設定済みの Web ルート配下にあることが確認できます。

サイトの外にバックアップを残す

非公開ディレクトリ /srv/private-backups は、すでに /srv/site の外に用意されています。この対象コンテナー内では保守権限があります。mv は内容を保ったままファイルを移動します。

mv /srv/site/backups/support-backup.tar /srv/private-backups/support-backup.tar

サイトは通常の公開ディレクトリの対応関係では、このファイルを配信できなくなります。削除するのではなく、権限のある保守作業のためにバックアップを残せます。サーバー設定ではなくファイルの場所を変えたため、Nginx の再読み込みは不要です。

Web Server から非公開のコピーを引き続き読めることを確認します。

tar -xOf /srv/private-backups/support-backup.tar internal-customers.txt

同じ社内用テストレコードが表示されるはずです。

機密性とサイトの可用性を検証する

このステップでは、修正後のアクセス境界をテストし、正規の公開リソースが引き続き利用できることを確認します。

Workstation に戻ります。-o /dev/null はレスポンス本文を破棄し、-w は指定したレスポンス情報を表示します。%{http_code} は HTTP ステータスを選び、\n は改行を追加します。

curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/backups/support-backup.tar

期待する結果は 404 です。この curl コマンド自体は正常終了します。HTTP エラーレスポンスと接続失敗は別のものです。サーバーを停止すると、コースの可用性チェックに失敗します。

同じ方法で、通常のページと許可されたダウンロードを確認します。

curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/help.html
curl -sS http://127.0.0.1:8081/downloads/product-guide.txt
curl -sS -o /home/labex/project/public-examples.tar http://127.0.0.1:8081/downloads/public-examples.tar
tar -xOf /home/labex/project/public-examples.tar example.txt

ページは 200 を返します。ガイドは Northstar Product Guide で始まり、サンプルアーカイブのメンバーには Public support examples. が含まれます。Topology の Website reachable はホームページが応答することを示すだけで、漏えいの修正を示すものではありません。最終チェックでは、機密性と可用性を別々に検証します。

まとめ

公開ダウンロードからサーバー上のファイルを特定し、社内データを Web ルートの外へ移動しました。また、非公開ファイルのダウンロードは失敗し、公開サービスは引き続き動作することを検証しました。