Osqueryは、オープンソースのオペレーティングシステムの監視、クエリ、および分析ソフトウェアです。 Facebookによって作成され、SQLベースのクエリを使用してクエリできる高性能のリレーショナルデータベースとしてオペレーティングシステムを公開します。
Osqueryはマルチプラットフォームソフトウェアであり、Linux、Windows、MacOS、およびFreeBSDにインストールできます。 Osqueryを使用すると、SQLベースのクエリを使用して、オペレーティングシステムのプロファイル、パフォーマンス、セキュリティ、その他多くの指標を調べることができます。
このチュートリアルでは、LinuxディストリビューションUbuntu 18.04LTSおよびCentOS7にosqueryをインストールする方法を示します。osqueryをインストールし、「osqueryi」インタラクティブモードの使用方法と、osqueryを使用してライブシステムを監視する方法を学習します。
- Linux OS(Ubuntu18.04またはCentOS7)
- root権限
- Linuxオペレーティングシステムにosqueryをインストールする
- osqueryiインタラクティブモードの基本的な使用法
- osqueryを使用した監視システム
osqueryは、プラットフォームごとに独自のリポジトリを提供します。このステップでは、公式のosqueryリポジトリからosqueryパッケージをインストールします。
osqueryキーを追加します。
export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY
Ubuntuにosqueryパッケージをインストールします。
sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
sudo apt install osquery -y
CentOSの場合
osqueryキーを追加します。
curl -L https://pkg.osquery.io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery
CentOS7にosqueryパッケージをインストールします。
sudo yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo
sudo yum-config-manager --enable osquery-s3-rpm
sudo yum install osquery
すべてのパッケージがインストールされるのを待ちます。
osqueryは、osqueryiとosquerydの2つの主要なインターフェイスをユーザーに提供します。
osqueryiは、osqueryインタラクティブクエリコンソールです。これは、MySQLの「mysql」コマンドシェルやPostgreSQLデータベースの「psql」シェルに似ています。
このステップでは、「osqueryi」インタラクティブモードの基本的な使用法を学習します。
サーバーターミナルで「osqueryi」コマンドを入力すると、osqueryインタラクティブコンソールモードが表示されます。
osqueryi
次に、osqueryiコンソールモードの基本的なコマンドについて学習します。
インタラクティブモードosqueryiで使用可能なすべての基本的なコマンドを表示します。
.help
現在のosqueryの構成と設定を表示します。
.show
Osqueryは、クエリ結果を表示するための複数の表示モードを提供します。デフォルトのモードは「きれいな」モードです。
次に、クエリ結果の表示モードを変更します。このガイドでは、「行」モードを使用します。
.mode csv
.mode list
.mode column
.mode line
.mode pretty
Osqueryは、オペレーティングシステムをリレーショナルデータベースシステムとして公開します。システムに関するすべての情報はosqueryテーブルに保存され、使用可能なすべてのテーブルをクエリすることでシステム情報全体を調べることができます。
osqueryで使用可能なすべてのテーブルのリストを取得するには、以下のコマンドを実行します。
.tables
osqueryシステムで使用可能なすべてのテーブルがわかったら、列を確認します。
次のコマンドを使用して、テーブルのスキーマ(列、タイプ)を取得します。
.schema users
.schema processes
そして、テーブルのすべてのスキーマ列を取得します。
このステップでは、osqueryを使用してライブLinuxシステムを監視します。 osqueryiインタラクティブモードを介して、システムプロファイル情報、ユーザー、ネットワークインターフェイスなどを監視します。
システムハードウェアの詳細を表示します。
SELECT * FROM system_info;
SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;
OSバージョンを取得
osバージョン、プラットフォーム、osパッチ、コード名など、現在のオペレーティングシステム情報を表示します。
SELECT * FROM os_version;
システムのカーネル情報を確認するために、osqueryはテーブル「kernel_info」と「kernel_modules」を提供します。
システムで使用されているカーネルを表示します。
SELECT * FROM kernel_info;
システムにロードされているすべてのカーネルモジュールを表示します。
SELECT * FROM kernel_modules LIMIT 5;
osqueryは、LinuxUbuntuとCentOSの両方にリポジトリとインストール済みパッケージをチェックするためのテーブルを提供します。
-Ubuntuの場合
Ubuntuでは、「apt_sources」を介して利用可能なリポジトリを確認し、「deb_packages」を介してインストールされたパッケージを確認できます。
利用可能なすべてのUbuntuリポジトリを確認してください。
SELECT * FROM apt_sources;
SELECT name, base_uri, release, maintainer, components FROM apt_sources ORDER BY name;
deb_packagesテーブルを使用してインストールされたすべてのパッケージを確認します。
SELECT * FROM deb_packages;
パッケージの名前とバージョンのみを表示します。
SELECT name, version FROM deb_packages ORDER BY name;
特定のパッケージについては、名前フィルターを追加します。
SELECT name, version FROM deb_packages WHERE name="nginx";
-CentOSの場合
CentOSでは、「yum_sources」を介して利用可能なリポジトリを確認し、「rpm_packages」を介してインストールされたパッケージを確認できます。
利用可能なすべてのCentOSリポジトリを確認してください。
SELECT * FROM yum_sources;
SELECT name, baseurl, enabled FROM yum_sources;
「有効」フィルターを追加して、有効なリポジトリを確認します。
SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;
rpm_packagesテーブルを使用してインストールされているすべてのパッケージを確認してください。
SELECT * FROM rpm_packages;
SELECT name, version FROM rpm_packages ORDER BY name;
特定のパッケージ名については、名前フィルターを追加します。
SELECT name, version FROM rpm_packages WHERE name="firewalld";
マウントテーブルを使用して、空きiノード、フラグ、タイプなど、システムドライブに関するすべての詳細を確認できます。
システムによってマウントされているすべてのディスクを確認してください。
SELECT * FROM mounts;
SELECT device, path, type, inodes_free, flags FROM mounts;
特定のタイプのデバイス用。
SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="ext4";
SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";
システムメモリをバイト単位でチェックしています。
SELECT * FROM memory_info;
'interface_addresses'を使用してネットワークアドレスを確認します。
SELECT * FROM interface_addresses;
'interface_details'を使用してネットワークインターフェースの詳細を確認します。
SELECT * FROM interface_details;
SELECT interface, mac, ipackets, opackets, ibytes, obytes FROM interface_details;
サーバーの稼働時間を確認しています。
SELECT * FROM uptime;
osqeryは、システムユーザーをチェックするための詳細テーブルを提供します。 'users'テーブルを使用してシステム上のすべてのユーザーをチェックし、'last'テーブルを使用してユーザーの最後のログインをチェックし、'logged_in_users'を使用してアクティブなシェルでログインしたユーザーを取得できます。
サーバーで使用可能なすべてのユーザーを確認するには、「users」テーブルを使用します。
SELECT * FROM users;
通常のユーザーの場合、uidを「>=1000」に指定できます。
SELECT * FROM users WHERE uid>=1000;
最終ログインユーザーを確認するには、「last」テーブルを使用します。
SELECT * FROM last;
通常のユーザーの場合は、「type」を「7」に入力します。
SELECT username, time, host FROM last WHERE type=7;
アクティブなシェルでログインしているユーザーを確認するには、「logged_in_users」テーブルを使用します。
SELECT * FROM logged_in_users;
IPテーブルファイアウォール情報
'tables'テーブルを使用すると、チェーン、ポリシー、src / dst IP、ポートなど、ファイアウォールで使用可能なすべてのルールを確認できます。
すべてのiptablesルールを表示します。
SELECT * FROM iptables;
以下のカスタムクエリを使用してルールを指定します。
SELECT chain, policy, src_ip, dst_ip FROM iptables WHERE chain="POSTROUTING" order by src_ip;
'processes'テーブルを使用して、すべてのアプリケーションプロセスを確認できます。 pid、name、path、commandなどのプロセスに関する詳細情報を提供します。
実行中のすべてのアプリをチェックするための基本的なプロセスクエリ。
SELECT * FROM processes;
pidなど、パス、およびコマンドの列を指定します。
SELECT pid, name, path, cmdline FROM processes;
'crontab'テーブルを使用して、使用可能なcronジョブとスクリプト実行時間を確認してください。
SELECT * FROM crontab;
SUIDバイナリファイル
SUID(実行時に所有者ユーザーIDを設定)は、ファイルおよびほとんどの場合バイナリ実行可能ファイルに付与される特殊なタイプのファイル権限です。
利用可能なすべてのバイナリファイルを確認してください。
SELECT * FROM suid_bin;
ユーザー名とグループ名を指定します。
SELECT * FROM suid_bin WHERE username="root" AND groupname="nobody" order by path;
上記はすべて、osqueryを使用した基本的なLinuxシステムの監視です。