
UNIXシステム向けセマンティックオブザーバビリティ - AI搭載分析を備えた軽量Cベースのシステムプローバー
UNIXシステムのためのセマンティック観測可能性
Cで書かれた軽量でポータブルなシステムプローバーで、AI支援による非自明なリスク分析のための「システムフィンガープリント」を取得します。auditd統合、説明可能なリスクスコアリング、エンタープライズグレードのマルチユーザー認証を備えたライブWebダッシュボードを特徴としています。
ライブデモ: sentinel.speytech.com



| 設定 | ログイン |
|---|---|
![]() | ![]() |




v0.5.x: セキュリティ態勢の要約、リスク傾向スパークライン、学習インジケーター、説明可能なリスク要因、メールアラート、イベント履歴
v0.4.0: Auditd統合、ブルートフォース検出、プライバシー保護ユーザー名ハッシュ、プロセス属性、リスクスコアリング
v0.3.0: Webダッシュボード、SHA256チェックサム、systemdサービス、ベースライン学習、ネットワークプローブ、ウォッチモード
Dynatrace、Datadog、Prometheusなどの最新の観測可能性ツールは、メトリクス収集としきい値アラートに優れています。しかし、それらが答えるのは狭い質問です: 「このメトリクスは期待値の範囲外か?」
それらは以下に苦手としています:
C-Sentinelは異なるアプローチを取ります: セキュリティイベントを含む包括的なシステムフィンガープリントを取得し、LLM推論を使用して「機械の中の幽霊」を特定します。
git clone https://github.com/williamofai/c-sentinel.git cd c-sentinel make
./bin/sentinel --quick --network
sudo ./bin/sentinel --quick --network --audit
./bin/sentinel --learn --network
sudo ./bin/sentinel --watch --interval 300 --network --audit
## ダッシュボードの機能
Webダッシュボードは、インフラ全体のリアルタイムのセキュリティ監視を提供します。
### マルチユーザー認証
エンタープライズグレードのアクセス制御を3つの役割で提供:
| 役割 | 権限 |
|------|-------------|
| **管理者** | フルアクセス:ユーザー管理、監査ログの表示、すべての操作 |
| **オペレーター** | イベントの確認、カウンターのリセット、すべてのデータの表示 |
| **閲覧者** | ダッシュボードとデータへの読み取り専用アクセス |
### 二要素認証 (TOTP)
業界標準のTOTPでアカウントを保護:
- Google Authenticator、Authy、Microsoft Authenticatorに対応
- QRコード設定で簡単に構成可能
- 有効時は毎回のログインに必須
- 有効化/無効化時にメール通知
### 個人用APIキー
各ユーザーは自動化のために自分のAPIキーを作成可能:
- 名前付きキー (例: "CI/CDパイプライン", "監視スクリプト")
- オプションの有効期限
- 削除せずに有効化/無効化
- 最終使用日時の追跡
- キーはユーザーの役割権限を継承```bash
# Use your personal API key
curl -X POST https://sentinel.example.com/api/ingest \
-H "Content-Type: application/json" \
-H "X-API-Key: sk_your_personal_key" \
-d @fingerprint.json
すべてのユーザーアクションをコンプライアンスおよびセキュリティのために追跡:
アクティブなセッションの完全な可視性:
システムのセキュリティステータスを平易な英語で説明:
「このシステムにセキュリティ上の懸念はありません。認証パターンは正常で、失敗は検出されていません。権限昇格の活動は検出されていません。全体的な態勢:健全。」
すべてのリスクスコアには、その理由を説明する要因が含まれています:
| 要因 | 重み |
|---|---|
| 認証失敗10回(ベースライン比200%超過 - 高) | +30 |
| ブルートフォース攻撃パターン検出 | +10 |
| 機密ファイル2件アクセス | +4 |
| 合計 | 44 |
システムは環境の「正常」を学習します:
| サンプル数 | ステータス | 意味 |
|---|---|---|
| < 10 | 🧠 学習中 | 初期ベースライン構築中 |
| 10-50 | 🧠 キャリブレーション中 | 正常パターンを精緻化中 |
| > 50 | (非表示) | 完全にキャリブレーション済み |
24時間のリスクスコア履歴を示すミニチャート - 状況が改善しているか悪化しているかを即座に把握できます。
以下の場合にメールおよび/またはSlackで自動通知:
Slackアラートには、色分けされた重要度、クリック可能なダッシュボードリンク、構造化されたリスク要因の詳細を含むリッチフォーマットが含まれます。
C-Sentinelは、監査ログを要約して意味的なセキュリティ分析を行います。
Hostname: axioma-validator Uptime: 14.5 days Load: 0.02 0.04 0.00 Memory: 49.2% used Processes: 120 total
Potential Issues: Zombie processes: 0 High FD processes: 1 Long-running (>7d): 95 Config permission issues: 0
Network: Listening ports: 26 Established connections: 14 Unusual ports: 12 ⚠
Security (audit): Auth failures: 6 ⚠ BRUTE FORCE PATTERN DETECTED Sudo commands: 81 Sensitive file access: 2 - /etc/passwd by touch - /etc/shadow by touch ⚠
Risk: high (score: 25)
### JSON 出力```json
{
"audit_summary": {
"enabled": true,
"period_seconds": 300,
"authentication": {
"failures": 6,
"failure_users_hashed": ["user_c4c5", "user_b91b"],
"brute_force_detected": true
},
"privilege_escalation": {
"sudo_count": 81,
"sudo_baseline_avg": 12.5,
"sudo_deviation_pct": 548.0,
"su_count": 5
},
"file_integrity": {
"sensitive_file_access": [
{
"path": "/etc/shadow",
"access": "write",
"count": 2,
"process": "touch",
"process_chain": ["touch", "bash", "sshd"],
"suspicious": true
}
]
},
"learning": {
"sample_count": 42,
"confidence": "medium"
},
"risk_factors": [
{"reason": "6 auth failures (200% above baseline - high)", "weight": 18},
{"reason": "Brute force attack pattern detected", "weight": 10}
],
"risk_score": 25,
"risk_level": "high"
}
}
最良の結果を得るには、機密ファイルに対する監査ルールを追加してください:```bash
sudo auditctl -w /etc/passwd -p wa -k identity sudo auditctl -w /etc/shadow -p wa -k identity sudo auditctl -w /etc/sudoers -p wa -k priv_esc sudo auditctl -w /var/log/lastlog -p wa -k auth
### プライバシー機能
- **ユーザーネームハッシュ化**: 失敗したログインユーザー名はハッシュ化されます(例:`user_c4c5`)。パターン検出を保持しつつ、IDを公開しません。
- **パスワードなし**: コマンド引数や機密データは決してキャプチャされません。
- **プロセス名のみ**: フルパスはプライバシーのためにサニタイズされます。
## Webダッシュボード
C-Sentinelには、複数のホストをリアルタイムで監視するためのWebダッシュボードが含まれています。
### 機能
- **マルチユーザー認証** - ロールベースのアクセス制御
- **二要素認証** - QRコード設定によるTOTP
- **パーソナルAPIキー** - ユーザーごとの自動化キー
- **管理者監査ログ** - 完全なアクション履歴
- **セッション管理** - アクティブセッションの制御
- **セキュリティ態勢サマリー** - 平易な英語によるシステムステータス
- **リスクトレンドスパークライン** - 24時間のビジュアル履歴
- **説明可能なリスク要因** - スコアが*なぜ*その値かを知る
- **学習インジケーター** - ベースライン調整の進捗状況
- **イベント履歴** - 承認機能付きタイムライン
- **メールアラート** - プロアクティブな通知
- **リアルタイム監視** - すべてのホストを一目で
- **履歴チャート** - 24時間のメモリと負荷
- **ネットワークビュー** - すべてのリスニングポートと接続
- **設定追跡** - 監視ファイルのSHA256チェックサム
### クイックセットアップ```bash
# Install dashboard
cd dashboard
sudo ./install-dashboard.sh
# Run database migration
sudo -u postgres psql -d sentinel -f migrate.sql
# Install 2FA dependencies (optional)
sudo /opt/sentinel-dashboard/venv/bin/pip install pyotp qrcode pillow
# Configure agent to report (with audit)
*/5 * * * * sudo /usr/local/bin/sentinel --json --network --audit | curl -s -X POST \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d @- https://your-dashboard.com/api/ingest
systemdサービスまたは環境に追加してください:```bash ALERT_EMAIL_ENABLED=true ALERT_SMTP_HOST=smtp.gmail.com ALERT_SMTP_PORT=587 ALERT_SMTP_USER=[email protected] ALERT_SMTP_PASS=your-app-password ALERT_FROM=[email protected] ALERT_TO=[email protected] ALERT_COOLDOWN_MINS=60
### Slack Webhook 設定```bash
ALERT_SLACK_ENABLED=true
ALERT_SLACK_WEBHOOK=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
ALERT_SLACK_CHANNEL=#security-alerts # Optional - override default webhook channel
ALERT_SLACK_USERNAME=C-Sentinel # Optional - bot display name
Webhook URLを取得するには:
完全なセットアップ手順は dashboard/README.md を参照してください。
ダッシュボードを公開するための読み取り専用アクセスを有効にします:```bash Environment="DEMO_MODE=true"
デモモード:
- ログイン不要 - 訪問者は直接ダッシュボードへ
- 読み取り専用アクセス(ビューアロール)
- 管理機能は非表示
- プロフィール/ログアウトリンクはGitHubリンクに置き換え
- 黄色いバナーでデモモードを表示
LinkedInの投稿、ブログ記事、またはデプロイ前に見込み客に探索させるのに最適です。
## Systemd Service
本番環境でのデプロイ用:```bash
# Install
sudo ./install.sh
# Enable and start
sudo systemctl enable sentinel
sudo systemctl start sentinel
# Check status
sudo journalctl -u sentinel -f
カラー出力は自動検出(TTY)され、NO_COLOR標準に従います。
| コード | 意味 |
|---|---|
| 0 | 問題なし |
| 1 | 警告(軽微な問題) |
| 2 | 重大(ゾンビ、権限問題、異常なポート、高リスクセキュリティイベント) |
| 3 | エラー(プローブ失敗) |
┌─────────────────────────────────────────────────────────────────┐ │ Web Dashboard │ │ • Multi-user auth (RBAC) • Two-factor authentication │ │ • Personal API keys • Session management │ │ • Admin audit log • Email & Slack alerts │ │ • Security posture summary • Risk trend sparkline │ │ • Explainable risk factors • Event history timeline │ │ • Multi-host view • Historical charts │ └─────────────────────────────────────────────────────────────────┘ ▲ │ JSON via HTTP POST │ ┌─────────────────────────────────────────────────────────────────┐ │ C Foundation (99KB) │ │ • /proc parsing • SHA256 checksums │ │ • Process analysis • Drift detection │ │ • Network probing • Baseline learning │ │ • Auditd parsing • Risk scoring │ │ • Process chains • Anomaly detection │ └─────────────────────────────────────────────────────────────────┘
### なぜCなのか?
| 懸念事項 | Python | C |
|---------|--------|---|
| **依存関係** | Pythonランタイムが必要(約100MB) | 静的バイナリ(約99KB) |
| **起動時間** | インタプリタ起動に約500ms | 約1ms |
| **メモリ** | ベースライン約30MB | 2MB未満 |
| **移植性** | 対応するPythonバージョンが必要 | 任意のPOSIXシステムで動作 |
## ビルド```bash
make # Release build
make DEBUG=1 # Debug build with symbols
make test # Run all tests (unit + integration)
make install # Install to /usr/local/bin
C-Sentinelは、cmocka テストフレームワークを使用した128以上の単体テストを含む包括的なテストスイートを備えています。
Debian/Ubuntu:```bash sudo apt-get install libcmocka-dev
**Fedora/RHEL/CentOS:**```bash
sudo dnf install libcmocka-devel
macOS (Homebrew):```bash brew install cmocka
**FreeBSD:**```bash
sudo pkg install cmocka
OpenBSD:```bash doas pkg_add cmocka
### テストの実行```bash
make test # Run all tests (unit + integration)
make unit-test # Run unit tests only (requires cmocka)
make integration-test # Run integration/smoke tests only
make coverage # Run tests with gcov coverage report
make check-cmocka # Verify cmocka is installed correctly
単体テストは以下をカバーします:
テストは tests/src/ にあり、cmockaの規約に従います:```c
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include "test_helpers.h"
static void test_example(void **state) { (void)state; assert_int_equal(1 + 1, 2); }
int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_example), }; return cmocka_run_group_tests(tests, NULL, NULL); }
新しいテストファイルをMakefileの`TEST_SOURCES`変数に追加します。
## プラットフォームサポート
| プラットフォーム | ビルド | プロセスプローブ | ネットワークプローブ | 監査 |
|----------|-------|---------------|---------------|-------|
| Linux | ✅ | ✅ /proc | ✅ /proc/net | ✅ auditd |
| macOS | ✅ | ✅ libproc | ✅ netstat | ❌ N/A |
| FreeBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
| OpenBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
| NetBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
| DragonFlyBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
### 要件
- C99対応のGCCまたはClang
- GNU Make(BSDではgmake)
- サポート対象プラットフォーム:
- Linux(カーネル3.x+)
- macOS(10.12+)
- FreeBSD(12+)
- OpenBSD(7.x)
- NetBSD(9.x)
- DragonFlyBSD(6.x)
- auditd(オプション、`--audit`フラグはLinuxのみ)
## プロジェクト構造```
c-sentinel/
├── include/
│ ├── sentinel.h # Core data structures
│ └── audit.h # Audit integration types
├── src/
│ ├── main.c # CLI entry point
│ ├── prober.c # System probing (/proc)
│ ├── net_probe.c # Network probing
│ ├── audit.c # Auditd log parsing
│ ├── audit_json.c # Audit JSON serialisation
│ ├── process_chain.c # Process ancestry walking
│ ├── baseline.c # Baseline learning
│ ├── sha256.c # Pure C SHA256
│ └── ...
├── dashboard/ # Flask web dashboard
├── deploy/ # Systemd service files
└── docs/
├── AUDIT_SPEC.md # Audit integration design
└── DESIGN_DECISIONS.md
MITライセンス - 詳細はLICENSEを参照してください。
William Murray - UNIXシステムエンジニアリング30年
「目標は監視ツールを置き換えることではなく、そのデータに知恵を加えることです。」
| 機能 | コマンド | 説明 |
|---|
| クイック分析 | --quick | 人間が読める概要 |
| ネットワークプローブ | --network | リッスンポートと接続 |
| 監査プローブ | --audit | セキュリティイベント(root権限が必要) |
| ウォッチモード | --watch --interval 60 | 継続監視 |
| ベースライン学習 | --learn | 現在の状態を「正常」として保存 |
| 監査ベースライン | --audit-learn | 正常なセキュリティパターンを学習 |
| ベースライン比較 | --baseline | 逸脱を検出 |
| JSON出力 | --json | LLM/ダッシュボード向けの完全なフィンガープリント |
| カラー出力 | --color | 色付きターミナル出力 |
| 設定 | --config | 現在の設定を表示 |
| カテゴリ | データ | 目的 |
|---|
| システム | ホスト名、カーネル、稼働時間、負荷、メモリ | 基本的なヘルスコンテキスト |
| プロセス | メタデータ付きの注目プロセス | ゾンビ、リーク、スタック検出 |
| 設定ファイル | ファイルメタデータ + SHA256チェックサム | 暗号ドリフト検出 |
| ネットワーク | リスナー、接続、ポート | サービス監視 |
| セキュリティ | 認証失敗、sudo使用、ファイルアクセス | 脅威検出 |
| モジュール | テスト数 | カバレッジ |
|---|
| SHA256 | 10 | NISTテストベクトル、エッジケース |
| Sanitize | 30 | 入力検証、インジェクション防止 |
| Policy | 36 | コマンド/パス許可・拒否ルール |
| JSON Serialize | 11 | 出力フォーマット、エスケープ |
| Baseline | 11 | 学習モード、逸脱検出 |
| Config | 9 | 設定解析 |
| Audit | 21 | リスクスコアリング、イベント分析 |