
Семантическая наблюдаемость для UNIX-систем — легковесный системный зонд на C с анализом на основе ИИ
Семантическая наблюдаемость для UNIX-систем
Легкий, портативный системный пробник, написанный на C, который захватывает «системные отпечатки» для AI-анализа неочевидных рисков. Включает интеграцию с auditd, объяснимую оценку рисков и живую веб-панель с корпоративной многоуровневой аутентификацией.
Живая демонстрация: sentinel.speytech.com



| Настройка | Вход |
|---|---|
![]() | ![]() |




v0.5.x: Сводка по безопасности, sparkline тренда рисков, индикатор обучения, объяснимые факторы риска, оповещения по email, история событий
v0.4.0: Интеграция с auditd, обнаружение подбора паролей, хеширование имен пользователей с сохранением конфиденциальности, привязка к процессам, оценка рисков
v0.3.0: Веб-панель, 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
## Возможности панели управления
Веб-панель предоставляет мониторинг безопасности в реальном времени по всей вашей инфраструктуре.
### Многопользовательская аутентификация
Контроль доступа корпоративного уровня с тремя ролями:
| Роль | Разрешения |
|------|-------------|
| **Администратор** | Полный доступ: управление пользователями, просмотр журналов аудита, все операции |
| **Оператор** | Подтверждение событий, сброс счетчиков, просмотр всех данных |
| **Наблюдатель** | Доступ только для чтения к панелям и данным |
### Двухфакторная аутентификация (TOTP)
Защитите свою учетную запись с помощью отраслевого стандарта TOTP:
- Работает с Google Authenticator, Authy, Microsoft Authenticator
- Настройка по QR-коду для простой конфигурации
- Требуется при каждом входе, если включено
- Уведомления по электронной почте при включении/отключении
### Персональные API-ключи
Каждый пользователь может создавать свои собственные API-ключи для автоматизации:
- Именованные ключи (например, "CI/CD Pipeline", "Monitoring Script")
- Опциональные даты истечения срока действия
- Включение/отключение без удаления
- Отслеживание последнего использования
- Ключи наследуют разрешения роли пользователя```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 часа – мгновенно видно, улучшается ситуация или ухудшается.
Автоматические уведомления по email и/или 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 Output```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`), что позволяет обнаруживать шаблоны без раскрытия личностей
- **Без паролей**: Аргументы команд и конфиденциальные данные никогда не захватываются
- **Только имена процессов**: Полные пути очищаются для конфиденциальности
## Веб-панель
C-Sentinel включает веб-панель для мониторинга нескольких хостов в реальном времени.
### Функции
- **Многофакторная аутентификация пользователей** – управление доступом на основе ролей
- **Двухфакторная аутентификация** – TOTP с настройкой QR-кода
- **Личные API-ключи** – ключи автоматизации для каждого пользователя
- **Журнал аудита администратора** – полная история действий
- **Управление сессиями** – контроль активных сессий
- **Сводка состояния безопасности** – статус системы на простом языке
- **Спарклайн тренда риска** – визуальная история за 24 часа
- **Объяснимые факторы риска** – знайте *почему* оценка такая, какая она есть
- **Индикатор обучения** – прогресс калибровки базовой линии
- **История событий** – временная шкала с подтверждением
- **Email-оповещения** – проактивные уведомления
- **Мониторинг в реальном времени** – все хосты с одного взгляда
- **Исторические графики** – память и нагрузка за 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 service или environment:```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
Чтобы получить 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 включает в себя комплексный набор тестов, состоящий из 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
Модульные тесты охватывают:
Тесты находятся в 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); }
Добавьте новые тестовые файлы в переменную `TEST_SOURCES` в Makefile.
## Поддержка платформ
| Платформа | Сборка | Зонд процесса | Сетевой зонд | Аудит |
|----------|-------|---------------|---------------|-------|
| 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 |
### Требования
- GCC или Clang с поддержкой C99
- GNU Make (gmake на BSD)
- Поддерживаемые платформы:
- 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-систем
"Цель не в том, чтобы заменить инструменты мониторинга, а в том, чтобы добавить мудрости к их данным."
| Полностью откалибровано |
| Функция | Команда | Описание |
|---|
| Быстрый анализ | --quick | Сводка в читаемом виде |
| Сетевое сканирование | --network | Слушающие порты и соединения |
| Аудит | --audit | События безопасности (требует root) |
| Режим наблюдения | --watch --interval 60 | Непрерывный мониторинг |
| Обучение базовой линии | --learn | Сохранить текущее состояние как "normal" |
| База аудита | --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 | Оценка рисков, анализ событий |