Osqueryは、Facebookによって開発されたオープンソースのセキュリティ脅威監視ツールです。これは、システムバージョン、カーネル情報、実行中のプロセス、メモリ情報、リスニングポート、ログインユーザーなどのシステム情報を照会するために使用されます。 Osqueryは、システム管理者がさまざまなタイプの脅威を識別、調査、および排除するためのSQLクエリを作成するのに役立ちます。 Windows、Linux、FreeBSD、macOSなどのいくつかのオペレーティングシステムをサポートしています。
この投稿では、Ubuntu20.04にOsqueryをインストールして使用する方法について説明します。
前提条件
- Atlantic.Netクラウドプラットフォーム上のUbuntu20.04サーバー
- サーバーで構成されているrootパスワード
ステップ1-Atlantic.Netクラウドサーバーを作成する
まず、Atlantic.Netクラウドサーバーにログインします。 2GB以上のRAMを搭載したオペレーティングシステムとしてUbuntu20.04を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。
Ubuntu 20.04サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。
apt-get update -y
ステップ2–Osqueryをインストールする
まず、次のコマンドを使用して必要な依存関係をインストールします。
apt-get install gnupg2 software-properties-common wget unzip -y
次に、次のコマンドを使用してOsqueryGPGキーを追加します。
export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY
次に、次のコマンドを使用してOsqueryリポジトリをAPTに追加します。
add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
リポジトリが追加されたら、リポジトリを更新し、次のコマンドを使用してOsqueryをインストールします。
apt-get update -y apt-get install osquery -y
ステップ3–Osqueryコンソールに接続する
Osqueryは、クエリを実行し、オペレーティングシステムの現在の状態を調査するためのインタラクティブなシェルを提供します。
次のコマンドを使用して、Osqueryシェルに接続できます。
osqueryi
接続すると、次の出力が表示されます。
Using a virtual database. Need help, type '.help' osquery>
次に、次のコマンドを使用してOsqueryのデフォルト設定を表示します。
osquery> .show
次の出力が表示されます。
osquery - being built, with love. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ osquery 4.9.0 using SQLite 3.35.5 General settings: Flagfile: Config: filesystem (/etc/osquery/osquery.conf) Logger: filesystem (/var/log/osquery/) Distributed: tls Database: ephemeral Extensions: core Socket: /root/.osquery/shell.em Shell settings: echo: off headers: on mode: pretty nullvalue: "" output: stdout separator: "|" width: Non-default flags/options: database_path: /root/.osquery/shell.db disable_database: true disable_events: true disable_logging: true disable_watchdog: true extensions_socket: /root/.osquery/shell.em hash_delay: 0 logtostderr: true stderrthreshold: 0
Osqueryには、クエリに使用できるテーブルがたくさんあります。次のコマンドでそれらを一覧表示できます:
osquery> .tables
サンプル出力:
=> acpi_tables => apparmor_events => apparmor_profiles => apt_sources => arp_cache => atom_packages => augeas => authorized_keys => azure_instance_metadata => azure_instance_tags => block_devices => bpf_process_events => bpf_socket_events => carbon_black_info => carves => chrome_extension_content_scripts => chrome_extensions => cpu_time => cpuid => crontab => curl => curl_certificate => deb_packages => device_file => device_hash => device_partitions => disk_encryption => dns_resolvers => docker_container_fs_changes => docker_container_labels => docker_container_mounts => docker_container_networks => docker_container_ports
Osqueryには、クエリ出力を表示するためのいくつかのモードがあります。ここでは、ラインモードを使用して出力を表示します。
ラインモードを設定するには、次のコマンドを実行します。
osquery> .mode line
ステップ4–Osqueryの使用方法
実行中のオペレーティングシステムに関する情報を取得するには、次を実行します。
osquery> SELECT * FROM system_info;
サンプル出力:
hostname = ubuntu2004 uuid = a83cffe2-50f4-4fea-9ef4-423853fdc122 cpu_type = x86_64 cpu_subtype = 6 cpu_brand = QEMU Virtual CPU version 2.5+ cpu_physical_cores = 1 cpu_logical_cores = 1 cpu_microcode = 0x1 physical_memory = 2084278272 hardware_vendor = QEMU hardware_model = Standard PC (i440FX + PIIX, 1996) hardware_version = pc-i440fx-bionic hardware_serial = board_vendor = board_model = board_version = board_serial = computer_name = ubuntu2004 local_hostname = ubuntu2004
システム情報出力をフィルタリングするには、次のコマンドを実行します。
osquery> SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;
サンプル出力:
hostname = ubuntu2004 cpu_type = x86_64 physical_memory = 2084278272 hardware_vendor = QEMU hardware_model = Standard PC (i440FX + PIIX, 1996)
オペレーティングシステムのバージョンを表示するには、次を実行します:
osquery> SELECT * FROM os_version;
サンプル出力:
name = Ubuntu version = 20.04 LTS (Focal Fossa) major = 20 minor = 4 patch = 0 build = platform = ubuntu platform_like = debian codename = focal arch = x86_64
カーネル情報を表示するには、次のコマンドを実行します:
osquery> SELECT * FROM kernel_info;
サンプル出力:
version = 5.4.0-29-generic arguments = ro net.ifnames=0 biosdevname=0 console=ttyS0 console=tty0 path = /boot/vmlinuz-5.4.0-29-generic device = UUID=29a0b164-1ba1-45a7-b23a-cdb98f23edbc
サービス名とPIDを含むすべてのリスニングポートを表示するには、次のコマンドを実行します。
osquery> SELECT DISTINCT processes.name, listening_ports.port, processes.pid FROM listening_ports JOIN processes USING (pid) WHERE listening_ports.address = '0.0.0.0';
サンプル出力:
name = unbound port = 53 pid = 3407 name = sshd port = 22 pid = 649 name = unbound port = 953 pid = 3407 name = darkstat port = 666 pid = 6100 name = darkstat port = 667 pid = 6109 name = apt-cacher-ng port = 3142 pid = 4071 name = ntpd port = 123 pid = 483
Apacheパッケージの情報を表示するには、次のコマンドを実行します。
osquery> SELECT name, version FROM deb_packages WHERE name="apache2";
サンプル出力:
+---------+-------------------+ | name | version | +---------+-------------------+ | apache2 | 2.4.41-4ubuntu3.4 | +---------+-------------------+
システムメモリ情報を表示するには、次を実行します。
osquery> SELECT * FROM memory_info;
サンプル出力:
+--------------+-------------+----------+-----------+-------------+-----------+-----------+------------+-----------+ | memory_total | memory_free | buffers | cached | swap_cached | active | inactive | swap_total | swap_free | +--------------+-------------+----------+-----------+-------------+-----------+-----------+------------+-----------+ | 2084278272 | 1358233600 | 44519424 | 520896512 | 0 | 406622208 | 222449664 | 495411200 | 495411200 | +--------------+-------------+----------+-----------+-------------+-----------+-----------+------------+-----------+
すべてのネットワークインターフェースの情報を表示するには、次のコマンドを実行します。
osquery> SELECT * FROM interface_addresses;
サンプル出力:
+-----------+-------------------------------+-----------------------------------------+---------------+----------------+---------+ | interface | address | mask | broadcast | point_to_point | type | +-----------+-------------------------------+-----------------------------------------+---------------+----------------+---------+ | lo | 127.0.0.1 | 255.0.0.0 | | 127.0.0.1 | unknown | | eth0 | 69.87.221.220 | 255.255.255.0 | 69.87.221.255 | | unknown | | lo | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | | | unknown | | eth0 | fe80::200:45ff:fe57:dddc%eth0 | ffff:ffff:ffff:ffff:: | | | unknown | +-----------+-------------------------------+-----------------------------------------+---------------+----------------+---------+
システムの稼働時間を確認するには、次のコマンドを実行します:
osquery> SELECT * FROM uptime;
サンプル出力:
+------+-------+---------+---------+---------------+ | days | hours | minutes | seconds | total_seconds | +------+-------+---------+---------+---------------+ | 0 | 1 | 55 | 5 | 6905 | +------+-------+---------+---------+---------------+
UIDが1000を超えるすべてのユーザーを一覧表示するには、次のコマンドを実行します。
osquery> SELECT * FROM users WHERE uid>=1000;
サンプル出力:
+-------+-------+------------+------------+----------+-------------+--------------+-------------------+------+ | uid | gid | uid_signed | gid_signed | username | description | directory | shell | uuid | +-------+-------+------------+------------+----------+-------------+--------------+-------------------+------+ | 65534 | 65534 | 65534 | 65534 | nobody | nobody | /nonexistent | /usr/sbin/nologin | | | 65534 | 65534 | 65534 | 65534 | nobody | nobody | / | /usr/sbin/nologin | | +-------+-------+------------+------------+----------+-------------+--------------+-------------------+------+
最後にログインしたユーザーを確認するには、次のコマンドを実行します:
osquery> SELECT * FROM last;
サンプル出力:
+----------+-------+------+------+------------+-----------------+ | username | tty | pid | type | time | host | +----------+-------+------+------+------------+-----------------+ | root | pts/0 | 1013 | 7 | 1629008887 | 106.213.193.155 | | root | pts/1 | 3372 | 7 | 1629010656 | 106.213.193.155 | | root | pts/2 | 4158 | 7 | 1629013021 | 106.213.193.155 | +----------+-------+------+------+------------+-----------------+
ログインしているすべてのユーザーを表示するには、次のコマンドを実行します:
osquery> SELECT * FROM logged_in_users;
サンプル出力:
+-----------+----------+------------+------------------+------------+------+ | type | user | tty | host | time | pid | +-----------+----------+------------+------------------+------------+------+ | boot_time | reboot | ~ | 5.4.0-29-generic | 1629008369 | 0 | | init | | /dev/tty1 | | 1629008378 | 491 | | init | | /dev/ttyS0 | | 1629008378 | 484 | | login | LOGIN | ttyS0 | | 1629008378 | 484 | | login | LOGIN | tty1 | | 1629008378 | 491 | | runlevel | runlevel | ~ | 5.4.0-29-generic | 1629008383 | 53 | | user | root | pts/0 | 106.213.193.155 | 1629008887 | 1013 | | user | root | pts/1 | 106.213.193.155 | 1629010656 | 3372 | | user | root | pts/2 | 106.213.193.155 | 1629013021 | 4158 | +-----------+----------+------------+------------------+------------+------+
結論
上記のガイドでは、SQLベースのクエリを実行してオペレーティングシステムからデータを取得するためにOsqueryをインストールして使用する方法を説明しました。これは、バックドア、マルウェア、ゾンビプロセスなどを見つけるための非常に便利で使いやすいツールです。今すぐAtlantic.NetからVPSでOsqueryを使い始めましょう!