問合せについて

クラウド・ガード問合せでは、リソースの状態に関する情報を取得するための問合せを作成できます。過去の問合せの再実行、お気に入りの問合せの保存、オンデマンド問合せの作成を行うことができます。

内部でOSQueryを実行するインスタンス・セキュリティは、SQLiteで認識されるSQL問合せをサポートします。これらのSQL問合せでは、脅威の検出、検出または一般的な操作監視について、ホストをほぼリアルタイムで検査できます。

問合せを1回実行するか、すでに実行した問合せをスケジュール済問合せに変換して、定義済の頻度で実行し、結果をOCIロギング・サービスに送信して、クラウド・ガードの問題を作成したり、情報を3P SIEMにエクスポートできます。また、すでに実行されているクエリーを再実行できます。

オンデマンド問合せ

オンデマンド問合せまたはカスタム問合せは、SQLite準拠のSQL問合せを使用するOSQueryを使用して記述された個別問合せです。問合せは、ターゲット全体でインスタンス・セキュリティによって実行されます。

オンデマンド問合せを単一インスタンスで実行し、結果をフリート全体で実行する前に検証できます。

クエリーを再実行し、再度実行するためのお気に入りとして保存することができます。

ノート

問合せを作成および使用するときに注意する必要がある点は次のとおりです。
  • 問合せの本番環境を実行すると、CPUおよびメモリー・リソースが影響を受ける可能性があるため、次のことが可能です。
    • 問合せへのアクセス権を持つユーザー・グループを制限します。
    • フリート全体で実行する前に、単一インスタンスで問合せをテストします。

スケジュール済問合せ

スケジュール済問合せは、以前に実行した問合せから作成され、フリート全体で定期的に実行されるようになり、後処理の生の結果を収集できます。問合せを選択し、実行するターゲットを選択し、実行する頻度を設定し、結果を記録するようにロギング・サービスを構成します。

OSqueryについて

問合せは、OSquery SQL言語を使用して構築されたSQLite理解可能なSQLです。

OSqueryは、高パフォーマンスのオープン・ソースのマルチ・プラットフォーム・ホスト・エージェントで、フリートに対する可視性とインサイトを得ることができます。OSから独立してデータを収集および正規化すると同時に、インフラストラクチャ全体の可視性を高めることができます。OSqueryは、実行中のすべてのプロセスおよびネットワーク接続のリアルタイム・ビューを提供することで、脅威の狩猟、フォレンジックおよび侵入の検出を行うセキュリティ・チームを支援します。OSqueryには、実行中のプロセスからロードされたカーネル拡張までのすべてをカバーする数百の表からのサポートが付属しています。

OSqueryの開始

適切なデータを収集するには、適切な質問をする必要があります。始めるにあたっては、データの場所を知って、それを求める方法を知る必要があります。正しい質問をする唯一の方法は、尋ねる方法を理解することであり、スキーマを知ることに戻ります。

スキーマhttps://osquery.io/schema/5.5.1/を理解します。

2024年5月7日現在、スキーマには274個の表があります。次のことを除き、すべての表を使用できます。

  • 名前が_eventsの表。
  • YARAサポートが必要なテーブル。
  • curl表およびcarves表。

問合せのベスト・プラクティス

次のベスト・プラクティスに従います:

  • 読みやすいようにクエリーを書式設定し、シンプルに保ちます。
  • 結合およびサブ検索を慎重に使用してください。
  • 収集する情報を定義し、その情報に対するクエリーの範囲を指定します。

    たとえば、インスタンス上で大量のリソースを消費するプロセスの実行に関心がある場合は、次のように記述できます。

    SELECT * from processes

    大量のデータを生成しますが、そのほとんどは不要です。

    必要な列のみを選択し、順序と制限を設定することをお薦めします。

    次に、メモリー消費による上位10プロセスについて、適切にフォーマットされた表を取得する例を示します。

    SELECT pid, name, ROUND((total_size * '10e-7'), 2) AS memory_used FROM processes ORDER BY total_size DESC LIMIT 10;

問合せパック

OSquery問合せパックは、コンプライアンスや脆弱性管理など、タイプ別に編成された問合せの事前構築済セットまたはカスタム・セットです。問合せパックを使用すると、一連の問合せに対してシステムがどのように応答するかを理解し、必要に応じて問合せを環境に合せて調整できます。

問合せパックの詳細は、osquery.readthedocs.ioの問合せパックを参照してください。

GitHub、https://github.com/osquery/osquery/tree/master/packsなどで、有用な問合せパックをオンラインで見つけることができます。

問合せの例

まず、SELECT * FROMユーザーやSELECT * FROM processed LIMIT 10などの基本的なローカル問合せを実行して、表の動作を学習します。

また、起動と実行に役立つ、推奨される問合せのリストをまとめました。

  1. ユーザー(users): マシンに存在するすべてのローカル・ユーザー・アカウントを検索します。

    Linux (Ubuntu):

    SELECT * FROM users WHERE gid < 65534 AND uid >= 1000;
    ノート

    uid 1000は、ユーザーが通常Linuxで起動する場所です

    Linux: この問合せでは、実際のログイン・シェル(bin/falseまたはbin/trueではなく)を持つすべてのユーザーが検索され、/usr/bin/false/bin/falseなど、様々な場所に存在することが許可されます。

    SELECT * FROM users WHERE shell NOT LIKE '%false' AND shell NOT LIKE '%true';
  2. プロセス・オープン・ソケット(process_open_sockets): Web接続以外のネットワーク接続を作成するプロセスを検索します。
    SELECT s.pid, p.name, local_address, remote_address, family, protocol, local_port, remote_port FROM process_open_sockets s JOIN processes p ON s.pid = p.pid WHERE remote_port NOT IN (80, 443) AND local_port NOT IN (0) AND family = 2;
  3. リスニング・ポート(listening_ports): システムのオープン・ポートを検索します。
    SELECT DISTINCT p.pid, p.name, l.port FROM listening_ports AS l JOIN processes as p ON l.pid = p.pid WHERE l.address = '0.0.0.0';
  4. ログイン・ユーザー(logged_in_users): システムに現在ログインしているユーザーが表示されます。
    SELECT liu.*, p.name, p.cmdline, p.cwd, p.root FROM logged_in_users liu, processes p WHERE liu.pid = p.pid;
  5. ファイル(file): ディスク上の指定されたファイルに関する情報を返します。次の問合せでは、すべてのユーザーのすべてのファイルが検索されます フォルダの深さを1レベルにダウンロードします。

    Linux:

    SELECT file.path, users.username AS owner, groups.groupname AS groups, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) JOIN groups USING (gid) WHERE path LIKE '/home/%/Downloads/%%' ORDER BY last_mod DESC;

    Windows:

    SELECT file.path, users.username AS owner, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) WHERE path LIKE 'c:\Users\%\Downloads\%%' ORDER BY last_mod DESC;