Velociraptorを使いこなす:数百台のLinuxサーバーでインシデント調査(DFIR)を支援する「監視の目」

Security tutorial - IT technology blog
Security tutorial - IT technology blog

午前2時の悪夢とDFIRに関する手痛い教訓

少し前のことですが、監視システムの警告が真っ赤になり、夜中に叩き起こされたことがありました。本番環境のサーバークラスターが執拗なSSHブルートフォース攻撃を受け、さらに悪いことに、侵入者が内部に入り込んでいたのです。その時の私の心拍数は、サーバー室の冷却ファンの音よりも速かったでしょう。問題は1台のサーバーだけではなく、同じ構成で動いている数十台のサーバーすべてに及んでいました。

「攻撃者はどんなコマンドを実行したのか?」「バックドアはどこに隠されているのか?」「被害を受けたサーバーは何台あるのか?」——これらを即座に把握する必要がありました。もし1台ずつSSHでログインしてhistoryを叩き、auth.logをチェックし、不審なファイルを探していたら、夜が明ける頃にはシステムは完全に破壊されていたでしょう。この苦い経験から、中央集中型のインシデント調査(DFIR)ツールの重要性を痛感しました。

デジタル証拠収集のアプローチ

1. 手動(SSH + スクリプト)

これは、エンジニアがキャリアの初期によく使う手法です。psnetstatlsofを使用したBashスクリプトを作成し、SCPでサーバーに配布して実行します。

  • メリット: 事前の準備が不要。
  • デメリット: サーバー台数が数十台になると極端に遅くなる。最も危険なのは、攻撃者がルート権限を奪取している場合、デジタル証拠が改ざん(tampering)されやすい点です。

2. SIEMやログ管理ツールの使用 (Wazuh, ELK)

WazuhやELKは、リアルタイムの監視や可視化には非常に優れています。

  • メリット: ログが集中管理され、変化を追いやすい。
  • デメリット: ディスク上の特定のファイルを深く調査したり、マルウェア分析のためにメモリダンプを取得したりすることは、一般的にSIEMの得意分野ではありません。また、膨大なログの保存コストも大きな壁となります。

3. Velociraptor – エンドポイントの可視化とフォレンジック

Velociraptorは、プロのインシデント対応(IR)担当者のために作られたツールです。VQL(Velociraptor Query Language)という言語を通じて、システムへの深いクエリを実行できます。

  • メリット: エージェントが非常に軽量(RAM使用量は約20〜30MB)。「このハッシュ値を持つファイルを探せ」といった命令を500台のサーバーに同時に出し、1分以内に結果を受け取ることができます。
  • デメリット: VQLに慣れるまでに時間がかかりますが、それに見合うだけの圧倒的な効果があります。

なぜVelociraptorがLinuxにおいて最適なのか?

私がVelociraptorを選ぶ理由は、その即応性にあります。インシデント発生時、ログがSIEMに同期されるのを待つ余裕はありません。このツールを使えば、本番環境のサーバーに負荷をかけることなく、インフラ全体で「ハンティング(脅威探索)」を即座に実行できます。

Velociraptorサーバーの構築手順

まず、管理用の中央サーバーを構築します。2 vCPU、4GB RAM程度のUbuntu 22.04 VPSがあれば、約500〜1000台のエージェントを管理するのに十分です。

ステップ1:バイナリのダウンロード

GitHubから最新バージョンを取得します。ここではlinux-amd64版を使用します:

wget https://github.com/Velocidex/velociraptor/releases/download/v0.72/velociraptor-v0.72-linux-amd64
chmod +x velociraptor-v0.72-linux-amd64
sudo mv velociraptor-v0.72-linux-amd64 /usr/local/bin/velociraptor

ステップ2:システム設定

以下のコマンドを実行して、設定作成ウィザードを起動します:

velociraptor config generate -i

注意すべきパラメータは、データ保存パス、UIポート(デフォルト8889)、およびエージェント用ポート(デフォルト8006)です。完了すると、server.config.yaml(厳重に保管)とclient.config.yaml(エージェントへのインストール用)の2つのファイルが生成されます。

ステップ3:Systemdサービスの設定

サーバーがシステム起動時に自動開始されるよう、サービスファイルを作成します:

sudo nano /etc/systemd/system/velociraptor.service

ファイルの内容は以下の通りです:

[Unit]
Description=Velociraptor Linux Server
After=network.target

[Service]
ExecStart=/usr/local/bin/velociraptor --config /etc/velociraptor/server.config.yaml server
Restart=always

[Install]
WantedBy=multi-user.target

以下のコマンドでサービスを有効化し、起動します:sudo systemctl enable --now velociraptor

ターゲットサーバーへのエージェントインストール

監視対象のサーバーにclient.config.yamlをコピーします。1台ずつ手動で行う代わりに、Ansibleを使用して一括で配布・設定するのが効率的です。

クイックインストール:

対象のサーバーでバイナリをダウンロードした後、以下のコマンドを実行するだけです:

sudo /usr/local/bin/velociraptor --config client.config.yaml client install

エージェントは自動的にダッシュボードに登録されます。すぐにサーバーリストに表示されるはずです。

実践:SSHブルートフォース攻撃の追跡

パスワード試行が行われている疑いがある場合、ログファイルを目視するのではなく、VQLを使用して攻撃回数の多い上位10件のIPを抽出します:

SELECT Count, User, IP FROM source(artifact="Linux.Ssh.AuthLogs") 
WHERE Message =~ "Failed password" 
GROUP BY IP 
ORDER BY Count DESC 
LIMIT 10

わずか2秒で「ブラックリスト」が作成でき、ファイアウォールでIPをブロックできます。また、100台のサーバーで/etc/passwdをチェックして不審なユーザーがいないか確認したい場合は、新しいHuntを作成し、アーティファクトLinux.Sys.Usersを選択するだけです。結果は一つのテーブルに集約され、照合が容易になります。

実体験からのまとめ

「火事」が起きてから消火器を探すのでは遅すぎます。Velociraptorを事前にインストールしておいても、システムリソースをほとんど消費しません(アイドル時のCPU使用率はほぼ0%)。しかし、いざという時には強力な救い手となります。パニックに陥る代わりに、ダッシュボードを開いて数行のVQLを書くだけで、戦況を完全に把握できます。皆さんが突然起こされることなく、安眠できる夜を過ごせるよう願っています!

Share: