docs

インストールと実行

5 分で URSUS を起動し、最初のアラートを観測する

仮想マシン上での実行を推奨します

URSUS の sensor は netlink ソケットへのバインドや /proc 経由の プロセス情報読み取りで root 権限を要求します。学習用途として お使いのホスト OS には影響を出したくないので、Parrot OS / Kali / Ubuntu 等の 仮想マシンを用意してそこで実行するのがおすすめです。

動作環境

システム要件

  • OS: Linux (x86_64 / arm64) ※サービスの常駐に systemd を使用します
  • Kernel: 3.10 以上(プロセス監視用の cn_proc netlink サポート必須)
  • Python: 3.11 以上
  • 依存ツール: curl, python3-venv などの基本パッケージ
  • 実行権限: root 権限(sudo 実行可能であること)

推奨スペック

厳密な要求性能は未検証ですが、検証用の軽量仮想マシン(VM)でも十分に動作します。

1. インストール

# リポジトリ取得
$ git clone https://github.com/akinosora501/ursus-micro-edr.git
$ cd ursus-micro-edr/

# 実行権限の付与
$ chmod +x scripts/*.sh

# インストーラの実行
$ sudo ./scripts/install.sh

インストーラは /opt/ursus にソースをコピーし、システムユーザーの作成、 仮想環境の構築、および systemd ユニットの登録を自動で行います。

2. サービスの起動

# サービスの開始
$ sudo /opt/ursus/scripts/start.sh

# 自動起動の有効化
$ sudo systemctl enable ursus-sensor ursus-detector ursus-ui

# ログの確認 (リアルタイム表示)
$ journalctl -u ursus-sensor -u ursus-detector -u ursus-ui -f

start.sh を実行すると、sensor, detector, ui の 3 つのサービスが systemd 配下でバックグラウンド起動します。 起動後にブラウザで http://127.0.0.1:8080/ にアクセスするとダッシュボードが表示されます。

標準の systemctl コマンドも使用可能です

スクリプトを使わずに、標準のコマンドで個別に操作することもできます:
sudo systemctl start ursus-sensor ursus-detector ursus-ui

ログの読み方

ログは JSON 形式で出力されます。sensor が起動し、各コレクタ(process, file, network, auth) が "started" を出力していることを確認してください。

3. config.yml の確認

インストール先の /opt/ursus/config.yml がシステムの設定ファイルになります。 学習用途ではデフォルトのままで動作するように構成されています。

database:
  path: ./data/edr.db          # SQLite ファイルパス
  retention_days: 3            # 古いイベントの自動削除日数

sensor:
  hostname: auto
  process: { enabled: true }
  file:
    enabled: true
    watch_paths: [/etc, /tmp, /var/tmp, /home]
    exclude_patterns: ["*.swp", "*~", "*/.cache/*"]
    modify_debounce_sec: 2.0
  network:
    enabled: true
    poll_interval_sec: 2.0
    established_debounce_sec: 5.0
  auth:
    enabled: true
    journal_units: [ssh.service, sshd.service]
    journal_comms: [sudo]

detector:
  enabled: true
  poll_interval_sec: 1.0
  rules_dir: ./rules
  response:
    dry_run: true              # 既定で全レスポンス dry-run
    allowed_actions: [alert]

ui:
  bind_host: 127.0.0.1         # ループバック固定(外部公開禁止)
  bind_port: 8080

4. サービスの停止

一時的に監視を停止したい場合は、stop.sh を使用します。

# サービスの一時停止
$ sudo /opt/ursus/scripts/stop.sh

5. アンインストール

URSUS をシステムから削除するには、uninstall.sh を使用します。

# アンインストール (コードのみ削除。データは保持)
$ sudo /opt/ursus/scripts/uninstall.sh

# 完全削除 (データや DB、ursus ユーザーも含めて全削除)
$ sudo /opt/ursus/scripts/uninstall.sh --purge
アンインストール後の注意

uninstall.sh でサービス定義だけを削除した場合、 data/ ディレクトリと SQLite DB はそのまま残ります。 次回 install.sh を実行したときは、既存の DB に上書きされるため 検知ルールやアラート履歴は維持されます。

完全に初期状態に戻したい場合は、手動で data/ を削除するか、uninstall.sh --purge を実行してください。

6. 最初のアラートを発火させる

URSUS には rules/ 配下に予めデフォルトルールセットが用意されています。 そのうち R010(sudo 経由での悪意あるコマンド実行)を試してみます。

# ターミナルで以下を実行
$ sudo chmod u+s /bin/bash

数秒後、UI の /alerts ページに R010 — sudo 経由での悪意あるコマンド実行 のアラートが表示されているはずです。アラート行をクリックすると詳細画面に飛び、 発火したコマンドラインや前後のプロセスコンテキストが見られます。

これで何が起きたか
  1. bash プロセスが起動 → cn_proc netlink がカーネルから sensor に届く
  2. sensor が events 表に process_name=bash, cmdline="..." を INSERT
  3. detector が次のポーリングで新しい event を SELECT
  4. R004 ルールの condition (cmdline regex "(curl|wget).+\\|\\s*(sh|bash)") にマッチ
  5. alerts 表に INSERT、response_log に "alert" 動作を dry_run で記録
  6. UI がブラウザに表示

次のステップ