rmayen/halotrace

GitHub: rmayen/halotrace

一个轻量级防御性安全平台,用于接入 Linux SSH 认证日志,检测暴力破解和密码喷洒攻击,并将警报关联为可追踪的事件,供分析师在仪表板中进行分诊。

Stars: 0 | Forks: 0

# HaloTrace 用于分析 Linux 身份验证日志和安全事件的防御性网络威胁检测与事件响应平台。 HaloTrace 是一个教育性质的防御性安全项目,用于接入 Linux SSH 身份验证日志,检测可疑登录行为,将警报关联为事件,并为分析师提供一个用于分诊的小型 Web 仪表板。 它不能替代企业级的 SIEM、IDS、EDR 或事件响应平台。 ## 功能 - 根据源 IP 的重复登录失败进行 SSH 暴力破解检测。 - 根据单个源 IP 目标针对大量用户名的行为进行密码喷洒检测。 - 确定性的严重程度和置信度评分。 - 带有可配置冷却时间的重复警报抑制。 - 基于源 IP、主机、相近时间戳和重叠用户名的事件关联。 - 事件状态管理:待处理、调查中、已解决、误报。 - 分析师备注、状态历史和审计日志。 - 包含验证、过滤和安全错误响应的 REST API。 - 响应式原生 JavaScript 仪表板。 - 使用 SQLAlchemy 模型和实用索引的 SQLite 持久化。 - Docker、Docker Compose 和 GitHub Actions CI。 ## 技术栈 Python 3.12、FastAPI、SQLAlchemy、SQLite、Pydantic、Pytest、原生 JavaScript、HTML、CSS、Docker、Docker Compose 和 GitHub Actions。 ## 架构 ``` flowchart LR A[Linux auth.log text or upload] --> B[FastAPI ingestion API] B --> C[SSH auth log parser] C --> D[(Auth events)] C --> E[Detection engine] E --> F[Scoring and duplicate suppression] F --> G[(Alerts)] G --> H[Incident correlation] H --> I[(Incidents, notes, history, audit logs)] I --> J[REST API] G --> J J --> K[HaloTrace dashboard] ``` ## 安装 使用 Python 3.12。 ``` python3.12 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements.txt cp .env.example .env ``` 本地运行: ``` uvicorn app.main:app --reload ``` 打开 `http://127.0.0.1:8000`。 ## Docker ``` docker compose up --build ``` Compose 堆栈将 SQLite 数据库存储在 `halotrace-data` 卷中,并通过 `http://127.0.0.1:8000` 暴露仪表板。 加载经过处理的示例日志: ``` scripts/load_sample.sh ``` ## 配置 配置使用带有 `HALOTRACE_` 前缀的环境变量。 | 变量 | 默认值 | 用途 | | --- | --- | --- | | `HALOTRACE_DATABASE_URL` | `sqlite:///./halotrace.db` | SQLAlchemy 数据库 URL | | `HALOTRACE_MAX_UPLOAD_BYTES` | `1048576` | 最大上传日志大小 | | `HALOTRACE_MAX_TEXT_BYTES` | `262144` | 最大直接文本提交大小 | | `HALOTRACE_INGEST_RATE_LIMIT` | `20` | 每个客户端每分钟的接入请求 | | `HALOTRACE_DETECTION_WINDOW_SECONDS` | `300` | 检测时间窗口 | | `HALOTRACE_FAILURE_THRESHOLD` | `5` | 暴力破解警报的登录失败阈值 | | `HALOTRACE_SPRAY_USER_THRESHOLD` | `5` | 密码喷洒警报的不同用户名阈值 | | `HALOTRACE_ALERT_COOLDOWN_SECONDS` | `900` | 重复抑制冷却时间 | 数据库在应用程序启动时通过 `Base.metadata.create_all()` 进行初始化。在第一个版本中刻意省略了数据库迁移,以保持教育环境的轻量化;在针对长期运行的生产数据运行此操作之前,请添加 Alembic。 ## API 概述 - `GET /api/health` - `POST /api/ingest/text` - `POST /api/ingest/upload` - `GET /api/alerts` - `GET /api/alerts/{alert_id}` - `GET /api/incidents` - `GET /api/incidents/{incident_id}` - `PATCH /api/incidents/{incident_id}/status` - `POST /api/incidents/{incident_id}/notes` 警报和事件列表端点支持严重程度、源 IP、搜索和时间过滤器。事件列表还支持状态过滤。 ## 检测逻辑 HaloTrace 解析常见的 `sshd` syslog 风格的日志行,以获取密码失败、无效用户、接受的登录、用户名、源 IP、时间戳和主机名。不支持和格式错误的行将被安全地忽略。 暴力破解规则:一个源 IP 在 `HALOTRACE_DETECTION_WINDOW_SECONDS` 内对一台主机产生至少 `HALOTRACE_FAILURE_THRESHOLD` 次失败的 SSH 登录。可能存在多个用户名,但如果每个事件都针对不同用户名的模式,则将被视为密码喷洒。 密码喷洒规则:一个源 IP 在检测窗口内尝试对至少 `HALOTRACE_SPRAY_USER_THRESHOLD` 个不同的用户名进行失败的 SSH 身份验证。 严重程度和置信度是确定性的。它们基于事件量、时间集中度和目标帐户的数量。不使用随机评分。 暴力破解警报示例: ``` { "alert_type": "ssh_brute_force", "severity": "medium", "confidence": 0.68, "source_ip": "203.0.113.10", "target_hostname": "lab-host", "affected_usernames": ["root"], "event_count": 5, "explanation": "5 failed SSH login attempts from 203.0.113.10 against 1 account(s) within 300 seconds." } ``` 密码喷洒警报示例: ``` { "alert_type": "password_spray", "severity": "medium", "confidence": 0.7, "source_ip": "198.51.100.25", "target_hostname": "lab-host", "affected_usernames": ["alice", "bob", "carol", "dave", "erin"], "event_count": 5, "explanation": "198.51.100.25 attempted failed SSH authentication against 5 distinct usernames within 300 seconds." } ``` ## 测试 ``` pytest ``` 测试使用隔离的临时 SQLite 数据库,涵盖了解析、格式错误的行、IPv4/IPv6 地址、检测边界、重复抑制、评分、事件关联、API 验证、上传限制、不支持的文件类型、状态更新、备注、安全标头和速率限制。 ## 安全控制 - 对请求体和查询输入进行严格的 Pydantic 验证。 - 上传文件大小限制和直接文本正文限制。 - 允许的上传扩展名:`.log` 和 `.txt`。 - 不信任或使用上传的文件名进行存储。 - 上传的日志仅作为文本解析,永远不会被执行。 - 每个客户端的接入速率限制。 - 安全响应标头。 - 安全的通用服务器错误。 - SQLAlchemy 查询参数化。 - 基于环境的配置,没有硬编码的密钥。 - 针对事件状态更改和备注的审计日志。 - 应用程序代码中没有 `eval`、shell 插值或子进程执行。 ## 已知限制 - 仅支持常见的 Linux `sshd` 身份验证日志格式。 - SQLite 适用于本地演示和实验室,不适合大吞吐量的生产环境接入。 - 速率限制在内存中进行,并在进程重启时重置。 - 第一个版本中没有分析师身份验证。 - 数据库迁移已记录为未来的工作。 ## 道德使用 HaloTrace 仅用于授权的防御性实验室、教育以及分析您被允许检查的日志。请勿使用它来支持未经授权的访问、凭据窃取、持久化、规避、破坏性行动、恶意软件或未经授权的扫描。 ## 路线图 - 添加 Alembic 迁移。 - 添加分析师身份验证和基于角色的权限。 - 添加针对警报和事件的 CSV/JSON 导出。 - 添加更丰富的趋势图表和源聚合。 - 添加对其他 Linux 发行版和日志格式的支持。 - 添加可选的 PostgreSQL 部署配置。 ## 截图 接入示例身份验证日志后的威胁监控仪表板 —— 一个 暴力破解和一个密码喷洒警报,各自关联为一个待处理事件: ![HaloTrace 威胁监控仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/67/67cc621cc3db76e3c832dbd8dcf448cc8ac4cc7f3f360f5fad948d918ed2660e.png)
标签:AV绕过, FastAPI, Python, SQLite, 多模态安全, 数据可视化, 无后门, 版权保护, 网络测绘, 请求拦截