SQLライクなOS分析/監視ツール Osquery

Blog Single

SQLライクなクエリを発行してOSの状態を確認できるFacebook発ツール「Osquery」をご紹介。
簡単かつ容易にOSのプロセス情報等の収集/解析ができる優れもの。これは一見の価値アリ。

■概要とインストール

公式サイト | Osquery

やれることとしては基本的には以下2点

  • SQLライクなクエリ発行で、OS(マシン)状態を確認する
  • デーモンによるSQLライクなクエリを定時発行、ログに出力

Githubページ でも以下の様な説明があります。

osqueryは、OS X / macOS、Windows、およびLinux用のオペレーティングシステム計測フレームワークです。これらのツールは、低レベルのオペレーティングシステムの分析と監視を、実用的で直感的に実行します。

ちなみにLinux Security Toolsで現在9番目に紹介されているツールです。

Linux Security Tools

linux-security-tools1
linux-security-tools2

ってことでインストールしてみる。
今回はサーバーを用意するのもアレだったので自macに入れてみる。
インストールは簡単。

$ brew update
$ brew install osquery

ちなみにMac以外にもWindowsは勿論のことLinux(RHEL系、Debian系)も対応。さすがFacebookというべきか、ドキュメントもかなりしっかりしています。

ドキュメント

■早速実践

まずはosqueryiというコンソールを立ち上げ

$ osqueryi

すると対話モードが開始されるので…..
早速クエリ打ち込み。今回は最近ログインしたユーザー情報を確認できるコマンド
【last】コマンドを対象に打ってみる。

$ osquery> SELECT * FROM last;
+----------------+---------+-------+------+------------+------+
| username | tty | pid | type | time | host |
+----------------+---------+-------+------+------------+------+
| daiki-yamamoto | ttys003 | 20317 | 7 | 1517827465 | |
| daiki-yamamoto | ttys003 | 17637 | 8 | 1517816674 | |
| daiki-yamamoto | ttys004 | 17779 | 7 | 1517816738 | |
| daiki-yamamoto | ttys003 | 17637 | 7 | 1517816674 | |
| daiki-yamamoto | ttys002 | 17256 | 7 | 1517816622 | |
| daiki-yamamoto | ttys001 | 1373 | 7 | 1517543199 | |
| daiki-yamamoto | console | 102 | 7 | 1517532682 | |
| | | 1 | 2 | 1517532645 | |
| | | 0 | 11 | 1517532612 | |
| daiki-yamamoto | console | 102 | 8 | 1517532612 | |
| daiki-yamamoto | console | 102 | 7 | 1517482279 | |
| | | 1 | 2 | 1517482241 | |
| | | 0 | 11 | 1517482223 | |
| daiki-yamamoto | console | 101 | 8 | 1517482220 | |
| daiki-yamamoto | console | 101 | 7 | 1517481718 | |
| | | 1 | 2 | 1517481524 | |
+----------------+---------+-------+------+------------+------+

こんな感じで自分しかログインしていないので当たり前の情報が出ました。
SQLライクなのでLIMIT文も使えます。

$ osquery> SELECT * FROM last LIMIT 3;
+----------------+---------+-------+------+------------+------+
| username | tty | pid | type | time | host |
+----------------+---------+-------+------+------------+------+
| daiki-yamamoto | ttys003 | 20317 | 7 | 1517827465 | |
| daiki-yamamoto | ttys003 | 17637 | 8 | 1517816674 | |
| daiki-yamamoto | ttys004 | 17779 | 7 | 1517816738 | |
+----------------+---------+-------+------+------------+------+

その他にもchromeの拡張なんてのもわかる。

$ osquery> SELECT name, version FROM chrome_extensions LIMIT 3;
+-----------------------------------+---------+
| name | version |
+-----------------------------------+---------+
| Slides | 0.10 |
| Restlet Client - REST API Testing | 2.14.0 |
| Docs | 0.10 |
+-----------------------------------+---------+

他にも対象となるものが色々ありますが、以下で確認できます。

対象Schema

■デーモン化して定期処理

osqueryはデーモン化してスケジューラーとして定期バッチのようにログを収集することも可能です。
Linuxの場合は以下に配置Json形式で配置してserviceを起動するだけ。わかりやすい。

$ vim /etc/osquery/osquery.conf
{
"schedule": {
"last": {
"query": "SELECT * FROM last",
"interval": 60
}
}
}
$ service osqueryd restart

他にも色々と設定があるので以下参照。どれも記法が分かりやすく複雑な設定が少ない。

Configuration | osquery

■まとめ

ざっと説明しましたが、動作もキビキビしており、普段SQLに慣れ親しんでいると非常に簡単でした。さすがFacebook。実際Facebookも利用しているとのこと。
セキュリティ問題をはじめサーバー監視は日々複雑かつ煩雑になりがちです。
そんな手助けになるツールではないでしょうか。思ったより便利だったので是非ともご活用あれ。

あ、ちなみに↓のようにサブクエリは勿論のことJOINやらDISTINCT等も使えました。素晴らしい(・∀・)!

$ osquery> SELECT * FROM last
...> WHERE username = "root"
...> AND time > (( SELECT unix_time FROM time ) - 3600 );
Posted by YamamotoDaiki
映画をこよなく愛するFOX HOUND古株エンジニア。 PHPから始まり今ではnodeJSやらSwift、Solidityなど色々な言語に触る機会が多し。

Other Posts: