UNIX系统的语义可观测性 - 一种基于C语言的轻量级系统探针,具备AI驱动的分析能力
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 仪表盘提供跨基础设施的实时安全监控。
### 多用户认证
企业级访问控制,包含三种角色:
| 角色 | 权限 |
|------|------|
| **管理员** | 完全访问:管理用户、查看审计日志、所有操作 |
| **操作员** | 确认事件、重置计数器、查看所有数据 |
| **查看者** | 只读访问仪表盘和数据 |
### 双因素认证 (TOTP)
使用行业标准的 TOTP 保护您的账户:
- 兼容 Google Authenticator、Authy、Microsoft Authenticator
- 通过二维码轻松配置
- 启用后每次登录均需验证
- 启用/禁用时发送邮件通知
### 个人 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 汇总 auditd 日志以进行语义安全分析。
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`),在保留模式检测能力的同时不暴露身份信息
- **无密码**:不会捕获命令行参数和敏感数据
- **仅进程名**:完整路径经过脱敏处理以保护隐私
## 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
To get a webhook URL:
完整设置说明请参阅 dashboard/README.md。
启用只读公开访问以展示您的仪表板:```bash Environment="DEMO_MODE=true"
在演示模式下:
- 无需登录,访客可直接进入仪表盘
- 只读访问(查看者角色)
- 管理功能被隐藏
- 个人资料/退出链接替换为 GitHub 链接
- 黄色横幅提示为演示模式
非常适合 LinkedIn 帖子、博客文章,或让潜在客户在部署前进行探索。
## Systemd 服务
用于生产部署:```bash
# Install
sudo ./install.sh
# Enable and start
sudo systemctl enable sentinel
sudo systemctl start sentinel
# Check status
sudo journalctl -u sentinel -f
| 功能 | 命令 | 描述 |
|---|---|---|
| 快速分析 | --quick | 人类可读的摘要 |
| 网络探测 | --network | 监听端口和连接 |
| 审计探测 | --audit | 安全事件(需要 root 权限) |
| 监视模式 | --watch --interval 60 | 持续监控 |
| 基线学习 | --learn | 将当前状态保存为“正常” |
| 审计基线学习 | --audit-learn | 学习正常安全模式 |
| 基线比较 | --baseline | 检测偏差 |
| JSON 输出 | --json | 用于 LLM/仪表板的完整指纹 |
| 彩色输出 | --color | 彩色终端输出 |
| 配置 | --config | 显示当前设置 |
彩色输出是自动检测的 (TTY) 并遵循 NO_COLOR 标准。
| 代码 | 含义 |
|---|---|
| 0 | 未检测到问题 |
| 1 | 警告(小问题) |
| 2 | 严重(僵尸进程、权限问题、异常端口、高风险安全事件) |
| 3 | 错误(探测失败) |
| 类别 | 数据 | 目的 |
|---|---|---|
| 系统 | 主机名、内核、运行时间、负载、内存 | 基本健康上下文 |
| 进程 | 带元数据的显著进程 | 检测僵尸、泄漏、卡死 |
| 配置 | 文件元数据 + SHA256 校验和 | 加密漂移检测 |
| 网络 | 监听器、连接、端口 | 服务监控 |
| 安全 | 认证失败、sudo 使用、文件访问 | 威胁检测 |
┌─────────────────────────────────────────────────────────────────┐ │ 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 包含一套全面的测试套件,拥有 128 多个单元测试,使用 cmocka 测试框架。
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
单元测试覆盖范围:
| 模块 | 测试数量 | 覆盖内容 |
|---|---|---|
| SHA256 | 10 | NIST 测试向量、边界情况 |
| Sanitize | 30 | 输入验证、注入防范 |
| Policy | 36 | 命令/路径允许/拒绝规则 |
| JSON Serialize | 11 | 输出格式化、转义处理 |
| Baseline | 11 | 学习模式、偏差检测 |
| Config | 9 | 配置解析 |
| Audit | 21 | 风险评分、事件分析 |
测试代码位于 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(可选,仅 Linux 下用于 `--audit` 标志)
## 项目结构```
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 - 拥有 30 年 UNIX 系统工程经验
"目标并非取代监控工具——而是为它们的数据增添智慧。"