mcpField
D
deploying-osquery-for-endpoint-monitoring

deploying-osquery-for-endpoint-monitoring

github.com/mukul975セキュリティ35.2k59 回インストール8 週間前に更新
リポジトリ

deploying-osquery-for-endpoint-monitoring について

osqueryを端末群に導入・運用するためのセキュリティチーム向けガイドです。SQLによる脅威ハンティング、定期クエリ、ログ設定、FleetDMでの一元管理を扱います。

主な機能

  1. 01複数OSへのosquery導入
  2. 02SQLによる端末状態の照会
  3. 03定期クエリとログの設定
  4. 04FleetDMによるフリート管理
  5. 05クエリ負荷とイベントテーブルの確認

活用シーン

  1. 01異なるOSの端末群へosqueryを展開
  2. 02ファイルレスプロセスや不審なポートの調査
  3. 03ソフトウェア、サービス、ポートの適合性確認
  4. 04結果ログを一元分析の仕組みに送信

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill deploying-osquery-for-endpoint-monitoring

インストール後、Claude Code で/deploying-osquery-for-endpoint-monitoringを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

エンドポイント監視のための Osquery のデプロイ

使用する場面

次のような場合にこのスキルを使用します。

  • Windows、macOS、Linux のエンドポイント全体に osquery をデプロイして、フリート全体の可視性を確保する
  • osquery の SQL インターフェースを使用して、脅威ハンティング用クエリを作成する
  • エンドポイントのコンプライアンス(インストール済みソフトウェア、開放ポート、実行中のサービス)を監視する
  • osquery データを SIEM または Kolide/Fleet と統合し、一元管理する

リアルタイムのアラートには使用しないでください(osquery は定期実行またはオンデマンドであり、リアルタイムには EDR を使用してください)。

前提条件

  • 対象 OS 用の Osquery パッケージ(https://osquery.io/downloads)
  • エンタープライズデプロイ用のフリート管理サーバー(Kolide Fleet または FleetDM)
  • エージェントとサーバー間の安全な通信に使用する TLS 証明書
  • osquery の結果ログ用のログ集約パイプライン(Filebeat、Fluentd)

ワークフロー

ステップ 1:Osquery をインストールする
# Ubuntu/Debian
export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $OSQUERY_KEY
add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
apt-get update && apt-get install osquery -y

# Windows (MSI)
# Download from https://osquery.io/downloads/official
msiexec /i osquery-5.12.1.msi /quiet

# macOS
brew install osquery
ステップ 2:Osquery を設定する
// /etc/osquery/osquery.conf (Linux/macOS) or C:\ProgramData\osquery\osquery.conf
{
  "options": {
    "config_plugin": "filesystem",
    "logger_plugin": "filesystem",
    "logger_path": "/var/log/osquery",
    "disable_logging": "false",
    "schedule_splay_percent": "10",
    "events_expiry": "3600",
    "verbose": "false",
    "worker_threads": "2",
    "enable_monitor": "true",
    "disable_events": "false",
    "disable_audit": "false",
    "audit_allow_config": "true",
    "host_identifier": "hostname",
    "enable_syslog": "true"
  },
  "schedule": {
    "process_monitor": {
      "query": "SELECT pid, name, path, cmdline, uid, parent FROM processes WHERE on_disk = 0;",
      "interval": 300,
      "description": "Detect processes running without on-disk binary (fileless)"
    },
    "listening_ports": {
      "query": "SELECT DISTINCT p.name, p.path, lp.port, lp.protocol, lp.address FROM listening_ports lp JOIN processes p ON lp.pid = p.pid WHERE lp.port != 0;",
      "interval": 600,
      "description": "Monitor listening network ports"
    },
    "persistence_check": {
      "query": "SELECT name, path, source FROM startup_items;",
      "interval": 3600,
      "description": "Monitor persistence mechanisms"
    },
    "installed_packages": {
      "query": "SELECT name, version, source FROM deb_packages;",
      "interval": 86400,
      "description": "Daily software inventory"
    },
    "users_and_groups": {
      "query": "SELECT u.username, u.uid, u.gid, u.shell, u.directory FROM users u WHERE u.uid >= 1000;",
      "interval": 3600
    },
    "crontab_monitor": {
      "query": "SELECT * FROM crontab;",
      "interval": 3600,
      "description": "Monitor scheduled tasks"
    },
    "suid_binaries": {
      "query": "SELECT path, username, permissions FROM suid_bin;",
      "interval": 86400,
      "description": "Detect SUID binaries"
    }
  },
  "packs": {
    "incident-response": "/usr/share/osquery/packs/incident-response.conf",
    "ossec-rootkit": "/usr/share/osquery/packs/ossec-rootkit.conf",
    "vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
  }
}
ステップ 3:脅威ハンティング用クエリ
-- Detect processes with no on-disk binary (potential fileless malware)
SELECT pid, name, path, cmdline FROM processes WHERE on_disk = 0;

-- Find listening ports not associated with known services
SELECT lp.port, lp.protocol, p.name, p.path
FROM listening_ports lp JOIN processes p ON lp.pid = p.pid
WHERE lp.port NOT IN (22, 80, 443, 3306, 5432);

-- Detect unauthorized SSH keys
SELECT * FROM authorized_keys WHERE NOT key LIKE '%admin-team%';

-- Find recently modified system binaries
SELECT path, mtime, size FROM file
WHERE path LIKE '/usr/bin/%' AND mtime > (strftime('%s', 'now') - 86400);

-- Detect processes connecting to external IPs
SELECT DISTINCT p.name, p.path, pn.remote_address, pn.remote_port
FROM process_open_sockets pn JOIN processes p ON pn.pid = p.pid
WHERE pn.remote_address NOT LIKE '10.%'
  AND pn.remote_address NOT LIKE '172.16.%'
  AND pn.remote_address NOT LIKE '192.168.%'
  AND pn.remote_address != '127.0.0.1'
  AND pn.remote_address != '0.0.0.0';

-- Windows: Detect unsigned running executables
SELECT p.name, p.path, a.result AS signature_status
FROM processes p JOIN authenticode a ON p.path = a.path
WHERE a.result != 'trusted';
ステップ 4:一元管理のために FleetDM をデプロイする
# FleetDM provides centralized osquery management
# Deploy FleetDM server, configure agents to report to it
# Agents use TLS enrollment and config from Fleet

# Agent configuration for Fleet:
# --tls_hostname=fleet.corp.com
# --tls_server_certs=/etc/osquery/fleet.pem
# --enroll_secret_path=/etc/osquery/enroll_secret

主な概念

用語定義
OsqueryOS の状態をクエリ可能な SQL テーブルとして公開する、オープンソースのエンドポイントエージェント
スケジュール定義された間隔で実行され、結果を記録する定期クエリ
パック特定のユースケース(IR、コンプライアンス)向けにまとめられた、関連クエリのコレクション
FleetDMオープンソースの osquery フリート管理プラットフォーム
差分結果Osquery はクエリ実行間の変更のみをログに記録し、データ量を削減します

ツールとシステム

  • Osquery: https://osquery.io/ - エンドポイント可視化エージェント
  • FleetDM: https://fleetdm.com/ - フリートの一元管理
  • Kolide: Slack と統合されたクラウドベースの osquery 管理
  • osquery-go: osquery 拡張機能用の Go クライアントライブラリ

よくある落とし穴

  • クエリのパフォーマンス:大規模なテーブルスキャンを伴う複雑なクエリは、エンドポイントのパフォーマンスに影響します。WHERE 句を使用し、EXPLAIN でクエリのコストをテストしてください。
  • スケジュール間隔が短すぎる:負荷の高いクエリを 60 秒ごとに実行すると、CPU 使用率が急上昇します。ほとんどのクエリでは 300~3600 秒の間隔を使用してください。
  • 差分モードを使用していない:差分ログを使用しない場合、osquery は各間隔で全結果をログに記録します。差分モードでは変更のみが記録されます。
  • イベントテーブルがない:一部の osquery テーブルではイベントフレームワークを有効にする必要があります(process_events、socket_events)。--disable_events=false で有効にしてください。

コメント