osquery を利用した情報管理ツールを試してみた

# 目的

ユーザが理解しやすい SQL でマシンの様々な情報を取得し、セキュリティ・監査・DevOps 等をサポートするツールとして osquery がある。
osquery は Facebook が開発しており、コードは GitHub 上で公開されている。
対応プラットフォームが Linux, Windows, macOS と幅広く、任意の環境に対して柔軟に導入できることも特徴の 1 つである。
osquery 単体ではインストールした 1 台のマシンに対してのみクエリを行うことが出来るが、複数のマシンに対して同時にクエリを行うことはできない。
このような課題を解決させたうえで取得した情報を管理するツールとして Kolide Fleet, osctrl, Zentral などがある。
今回はこれらのツールを実際にインストールし、動作を確認しつつ使用感を調査する。
ただし、本記事では osquery 単体での実行については割愛する。

# Kolide Fleet

- GitHub: https://github.com/kolide/fleet

実際の動作を確認するために OSS 版の Kolide Fleet をインストールし利用する。
Kolide Fleet 自体の開発は 2020 年に凍結されている。
ただ、今回の確認作業をオンプレミスの環境で行う際、Kolide Fleet は下記のサイト等参考にできるものが多く、構築が容易そうであった。
そのため、今回は Fleet の動作確認を Kolide Fleet で実施している。

https://knowledge.sakura.ad.jp/22230/

## 動作確認

ホーム画面では下記の画面が確認できる。

![fleet1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/f0e6ef41-b6e4-ce6c-f838-7bb391b75fd8.png)

クエリの実行は下記のようにできる。

![fleet3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/3a5056cb-60f4-c27d-8018-f9c936499e78.png)

## Fleet

- GitHub: https://github.com/fleetdm/fleet

Fleet は、何千台ものラップトップとサーバを備えた IT チームとセキュリティチームによって運用環境で実際に使用されており、いくつかの大規模な組織では 400,000 台以上のホストを展開・管理している。
Fleet はかつて Kolide 社が主導で開発していたが、2020 年にはリポジトリが凍結され、別の開発に移行した。
そこで、元々の Fleet を引き継いで開発を継続しているのが上記の GitHub URL に該当する。

# osctrl

- GitHub: https://github.com/jmpsec/osctrl

osctrl は、リモート API を TLS エンドポイントとして実装する、高速かつ効率的な osquery 管理ソリューションである。

osctrl を利用することで下記を実現できる。
- osquery を実行しているすべてのシステムを監視
- 登録されているすべてのノードに osquery 構成を迅速に配布
- すべてのステータスと結果のログを収集し、保存もしくは別のシステム (Splunk、ELK、Kafka、Graylog など) へ転送
- 選択した登録済みノードで準リアルタイムのオンデマンドクエリを実行
- 登録したノードからファイルまたはディレクトリを切り出す

osctrl は、スケーラブルで信頼性の高いソリューションとして機能するように設計されており、数百から数十万ノードのネットワークで使用されている。

インストール手順は下記を参考にできた。

https://osctrl.net/deployment/

## 動作確認

osctrl のダッシュボードは下記である。

![osctrl1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/df17b1cd-ed2d-bb2d-446c-54bc4c4cee94.png)

左のタブにある [enroll nodes] をクリックすることで、下記のように監視対象として登録するためのコマンドが表示される。
このコマンドを実行することでノードを登録でき、クエリの実行が可能となる。

![osctrl7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/d87bd312-4914-8221-35f0-7af509d90031.png)

登録されたノードは下記のように確認できる。

![osctrl8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/d691bf0a-9bef-96a4-9f8a-4906cf8f92e0.png)

左のタブにある [run query] をクリックすることで、クエリ実行用の画面が表示される。
osctrl は手動でクエリを入力できるだけでなく、kernel, file などの情報を取得するための基本的なクエリが準備されているため、簡易なクエリであれば入力することなく実行できる。

![osctrl9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/9974b1e5-39a3-bfeb-8e38-21c4b23def4a.png)

クエリを実行することで [query list] に実行したクエリの内容が登録される。

![osctrl10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/22beb4a1-3a4d-145b-3a3e-d7be20759f70.png)

クエリの実行結果は下記のように確認できる。

![osctrl11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/0fd8f3c4-6a60-1a20-faa9-f3375aa97519.png)

# Zentral

- GitHub: https://github.com/zentralopensource/zentral

システムイベントを収集、処理、監視し、インベントリにリンクするオープンソースハブである。
Jamf Protect, Munki, Osquery, Santa といったエージェントをサポートし、エージェントが生成するイベントを収集、正規化、処理できる。
Zentral を利用することで資産管理、エンドポイントセキュリティ、脅威検出といった問題を解決できる。

インストール手順は下記を参考にできた。

https://docs.zentral.io/en/latest/deployment/docker-compose/

## 動作確認

インストール後、ブラウザで確認すると下記のような画面を確認できた。

![zentral1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2735085/69f028f7-83ae-4346-beaf-8694b7eb7627.png)

Zentral は Munki, Osquery, Santa, Jamf など、管理しているエージェントから情報を取得・管理する。
これらのアプリケーションから取得した情報は左側のタブからそれぞれ確認できるようになっている。

詳しいアーキテクチャは下記ページで確認できた。

https://docs.zentral.io/en/latest/apps/inventory/

Zentral でも他ツールと同様に osquery を用いた情報取得を実施しようとしたが、うまくデバイス登録をすることができなかった。
Osquery > Configurations の中で Osquery デバイスの設定ができそうな箇所はある。
そこでリソースを作成後、記載されている Flags を osquery が動作しているマシンで指定して動作させたとしてもマシンが登録されなかった。
今回の記事で実施する調査はここまでとしたが、Zentral をうまく運用することができれば Munki, Santa, Jamf など、さまざまなオープンソースのハブとして利用できそうである。

# まとめ

今回は osquery で取得した情報を管理するためのツールとして Kolide Fleet, osctrl, Zentral を実際にインストールし、動作を確認してみた。
Zentral ではクエリの動作確認ができなかったが、Kolide Fleet や osctrl では様々なクエリを複数のマシンに対して一括で実行でき、その結果を確認することができた。
マシン払い出し時等に osquery を仕込むことで提供したマシンの OS 情報、インストールされているパッケージ情報等を自動的に一元管理できるようになると考えている。　
ただ、Kolide Fleet や Zentral は最終リリースから数年の月日が経過していることもあり、将来性を踏まえると不安が残る。
実運用に向けて何をどのようにするとよいかは別途考える必要があると考えている。
特に、後継である fleetdm/fleet であれば執筆当時である 2025 年 1 月現在も開発が続けられているため、次は fleetdm/fleet の動作も確認したいと考えている。