PunyaKBhange/SAFIS
GitHub: PunyaKBhange/SAFIS
一个基于本地机器学习的安全文件智能系统,通过持续行为分析和动态风险评分实现零信任式的自主威胁检测与访问控制。
Stars: 0 | Forks: 0
# SAFIS — 安全自主文件智能系统
**“为安全文件环境提供自主行为智能与威胁防御”**
SAFIS 是一个工业级的本地优先智能安全文件生态系统,它负责对用户进行身份验证,应用动态的基于角色的授权,持续监控行为活动,并使用本地机器学习异常检测引擎自主限制危险操作。
## 封面概述
传统的文件管理和身份验证系统严重依赖于静态的基于角色的访问控制 (RBAC)。一旦用户通过身份验证和授权,他们通常可以全权访问其被允许的资源,这使得这些系统极易受到凭证泄露、内部威胁和暴力行为异常的影响。
**SAFIS 通过实现持续自适应信任解决了这一问题。**
该系统不仅会询问“你是谁?”,还会持续监控“你的行为如何?”。通过利用本地 Scikit-Learn Isolation Forest 模型和确定性风险评分引擎,SAFIS 能够检测合法用户(或使用窃取凭证的攻击者)何时开始出现异常行为(例如,在非工作时间大量下载敏感文件)。它会在数据泄露发生*之前*自主撤销访问权限并锁定账户。
## 核心创新
- **行为智能:** 跟踪每一个操作、频率和资源敏感度,为每个会话构建行为档案。
- **自适应安全(动态风险评分):** 静态角色会被动态风险评分覆盖。高风险评分将触发自主账户锁定。
- **本地 AI:** 使用 `scikit-learn` Isolation Forest 进行 100% 的本地推理。无云依赖,确保敏感遥测数据零泄露。
- **自主威胁分析:** 多线程后台监控器和多处理管道实时分析数据流,动态提升威胁级别。
## 主要功能
- **动态风险评分:** 基于访问速度、时间、失败尝试和资源敏感度的算法风险计算。
- **行为异常检测:** 本地 ML 管道,用于识别访问模式中的统计异常值。
- **智能访问限制:** 当超过临界风险阈值时,自主触发“失败即封闭”的账户锁定机制。
- **安全文件智能:** 防路径穿越、元数据检查以及安全的上下文感知文件读/写管道。
- **结构化分析:** 用于日志处理的高性能多处理管道(`pandas`,`numpy`)。
- **实时监控:** 针对会话劫持(例如,来自不同 IP 的并发登录)的并发实时线程监控。
- **多角色授权:** 分层 RBAC (Admin, Analyst, Auditor, Researcher, Viewer)。
- **生产级日志记录:** 用于 SIEM 集成的轮换式、JSON 格式结构化日志。
## 系统架构
SAFIS 采用分层、面向服务的架构,专为可扩展性和关注点分离而设计。
```
+-------------------------------------------------------------+
| Client / Trigger |
+-------------------------------------------------------------+
|
+-----------------------------v-------------------------------+
| Auth Engine |
| (Authentication, JWT Sessions, Password Hashing, RBAC) |
+-----------------------------+-------------------------------+
|
+-----------------------------v-------------------------------+
| Access Control |
| (Contextual Authorization & Enforcement) |
+-----------------------------+-------------------------------+
|
+-----------------------------v-------------------------------+
| Risk Engine |
| (Algorithmic Penalty Computation based on Telemetry) |
+-----------------------------+-------------------------------+
|
+-----------------------------v-------------------------------+
| File Intelligence |
| (Path Validation, Encrypted File Parsing, I/O) |
+-----------------------------+-------------------------------+
|
+-----------------------------v-------------------------------+
| Threat Detector |
+-----------------------------+-------------------------------+
| |
+--------v---------+ +--------v---------+
| Local ML Engine | | Live Monitor |
| (Isolation Forest| | (Multithreading) |
+--------+---------+ +--------+---------+
| |
+--------v-------------------------------------v---------+
| Database (SQLite) |
| (users, sessions, logs, threats, files) |
+--------+-------------------------------------+---------+
| |
+--------v---------+ +--------v---------+
| Analytics Engine | | Report Generator |
| (Multiprocessing)| | (Excel, Pandas) |
+------------------+ +------------------+
```
## 完整项目结构
```
SAFIS/
│
├── analytics/ → Heavy data crunching & Visualizations
│ ├── data_pipeline.py → Multiprocessing Pandas logic
│ └── visualizer.py → Matplotlib/Seaborn graph generation
│
├── auth/ → Identity & Access Management
│ ├── access_control.py→ Dynamic RBAC & Risk interception
│ └── auth_manager.py → Secure login, session handling
│
├── config/ → Centralized configuration
│ └── settings.py → Thresholds, ML configs, Paths
│
├── database/ → Persistence Layer
│ └── db_manager.py → Thread-safe SQLite ORM and schemas
│
├── files/ → Secure Resource Handling
│ └── file_manager.py → Path traversal prevention & safe I/O
│
├── logs/ → Audit & Telemetry
│ └── logger.py → Rotating structured JSON logger
│
├── ml_engine/ → Local Artificial Intelligence
│ └── anomaly_detector.py → Isolation Forest training & inference
│
├── monitoring/ → Active Defense
│ ├── live_monitor.py → Background multithreading anomaly scanner
│ └── threat_detector.py→ Real-time event analysis and escalation
│
├── reports/ → Compliance & Auditing
│ └── report_generator.py → Excel report generation
│
├── utils/ → Cross-cutting Concerns
│ └── security_utils.py→ SHA-256 Hashing, Path sanitization
│
├── main.py → System orchestrator & Simulation execution
├── requirements.txt → Dependencies
└── README.md → Documentation
```
## 技术栈
- **Python 3.10+**: 核心编程语言,因其强大的数据科学和后端生态系统而被采用。
- **NumPy & Pandas**: 用于分析管道中高性能数组操作和大量日志数据聚合。
- **Scikit-learn**: 用于 Isolation Forest 算法。它提供了无需云 API 即可进行高效、强大的本地异常检测功能。
- **Matplotlib & Seaborn**: 用于生成威胁趋势图和风险分布热力图,以提供类似 SOC 的可见性。
- **Multithreading**: 在 `LiveMonitor` 中实现,允许在主应用程序线程旁边对数据库状态(例如,并发 IP)进行非阻塞的后台扫描。
- **Multiprocessing**: 在 `DataPipeline` 中使用,用于跨多个 CPU 核心对大型数据集进行分块和聚合,从而绕过 CPU 密集型任务的 GIL。
- **SQLite3**: 轻量级、本地优先的数据库,确保零外部设置。采用规范化表和线程安全的连接处理设计。
- **Joblib**: 用于高效的 ML 模型持久化(保存 Isolation Forest 和 Scaler 对象)。
## 演示的 Python 概念
- **面向对象编程 (OOP)**: 严格使用类、封装和组合(例如,`FileManager` 接收 `AccessControl` 和 `RiskEngine` 的实例)。
- **Multithreading**: `LiveMonitor` 继承自 `threading.Thread` 并使用 `daemon=True` 进行后台执行。
- **Multiprocessing**: `multiprocessing.Pool` 和 `numpy.array_split` 用于 map-reduce 日志数据块。
- **异常处理与链式捕获**: 安全的 `try...except` 块,带有精确的错误抛出(例如,`PermissionError`,`ValueError`),以实现失败即封闭的安全性。
- **生成器与迭代器**: 数据库行获取利用了最优的迭代模式。
- **类方法与单例模式**: Logger 使用 `__new__` 魔术方法来强制执行单例模式,确保线程安全的日志记录。
## 机器学习管道
1. **预处理**: 系统查询 `access_history` 并使用 Pandas 清理时间戳并提取特征(例如,一天中的小时)。
2. **特征工程**: 分类变量(`action`,`status`)被编码。风险评分和时间数据被合成为一个多维特征向量。
3. **归一化**: `StandardScaler` 通过去除均值并缩放到单位方差来标准化特征,这对于基于距离的 ML 模型至关重要。
4. **Isolation Forest**: Scikit-Learn 的实现使用 `0.05` 的 `contamination` 因子进行训练。它构建随机决策树;异常点由于具有鲜明的特征,会在更靠近树根的位置被隔离。
5. **持久化与推理**: 模型和缩放器通过 `joblib` 保存。在运行期间,单一事件向量被重建并实时传递给 `model.predict()`。
## 安全工程概念
- **路径穿越防御**: `SecurityUtils.safe_path_join` 验证解析请求的文件路径不会超出定义的安全边界(`os.path.abspath`)。
- **失败即封闭设计**: 如果在风险计算或 ML 推理期间发生错误,系统会默认设定为最高风险或拒绝访问。
- **动态授权**: 静态 RBAC 被行为风险拦截。如果管理员的 risk score 飙升,即使是 Admins 也会被锁定。
- **密码哈希**: 密码使用 SHA-256 进行加盐和哈希处理(展示了如 Argon2/Bcrypt 等现代实践)。
## 算法部分
### 自适应风险评分算法
**逻辑:**
风险 $R$ 是失败登录 $L$、操作频率 $F$、时间异常 $T$ 和资源敏感度 $S$ 的函数。
$$ R = \min(100, (\min(L \times 20, 60)) + Penalty(F) + T + S ) $$
- **$L$**: 过去一小时内失败登录的次数。
- **$Penalty(F)$**: 如果 actions > 10/分钟,则 +20;如果 > 5/分钟,则 +5。
- **$T$**: 如果在营业时间(08:00 - 18:00)之外,则 +15。
- **$S$**: 如果 resource 包含如 "secret"、"financial" 等关键词,则 +10。
**优化推理**:
系统并非对每个请求执行繁重的复杂聚合,而是使用具有有界时间窗口(`timestamp > 1_hour_ago`)查询索引的时间戳,确保 $O(1)$ 到 $O(\log n)$ 的查找时间,这对于延迟敏感的授权检查至关重要。
## 数据库设计
**规范化模式**:
- `users`: 核心身份 (id, username, password_hash, role, is_locked)。
- `sessions`: 会话跟踪 (id, user_id, token, ip_address, device_info)。
- `access_history`: 所有系统交互的不可变审计日志 (id, user_id, action, resource, status, risk_score)。
- `threats`: 由 ML 或基于规则的逻辑生成的升级警报 (id, user_id, threat_type, severity)。
**查询示例(分析)**:
```
SELECT user_id, COUNT(DISTINCT ip_address) as ip_count
FROM sessions WHERE is_active = 1
GROUP BY user_id HAVING ip_count > 1;
```
## 数据处理与分析
`DataPipeline` 读取数千条审计行。由于这是 CPU 密集型任务且 Pandas 受到 GIL 的限制,我们利用 `multiprocessing.Pool` 通过 `numpy.array_split` 对 DataFrame 进行分块。每个 CPU 核心并行计算聚合结果(`total_actions`,`high_risk_actions`),然后主进程将这些结果规约为最终的统计字典,在多核系统上实现了接近线性的加速。
## 安装指南
```
# 1. Clone 仓库
git clone https://github.com/yourusername/SAFIS.git
cd SAFIS
# 2. 创建并激活 Virtual Environment
python -m venv venv
# 在 Windows 上:
venv\Scripts\activate
# 在 Mac/Linux 上:
source venv/bin/activate
# 3. 安装 Requirements
pip install -r requirements.txt
# 4. 执行 Simulation Flow
python main.py
```
## 配置指南
修改 `config/settings.py` 以调整系统:
- `MAX_LOGIN_ATTEMPTS`: 锁定阈值。
- `RISK_THRESHOLD_CRITICAL`: 自主限制所需的分数(默认值:90.0)。
- `ISOLATION_FOREST_CONTAMINATION`: 基线中预期异常流量百分比(默认值:0.05)。
## 执行流程
1. **初始化**: 构建数据库模式;创建文件夹。
2. **基线生成**: 模拟用户执行标准读取操作,构建预期的基线。
3. **ML 训练**: Isolation Forest 模型在基线数据上进行训练,以理解什么是“正常”。
4. **主动防御**: `LiveMonitor` 后台线程启动。
5. **攻击模拟**: 攻击者尝试暴力破解、登录并大量发起受限文件访问。
6. **自主响应**: 风险分数飙升。访问控制引擎检测到关键风险并自主锁定攻击者的账户。ML 引擎同时标记异常行为。
7. **报告**: 分析模块将混乱状态编译为 Matplotlib 图表和 Excel 威胁报告。
## 示例输出
**分析示例:**
```
{
"total_actions": 145,
"high_risk_actions": 6,
"failed_actions": 4
}
```
**日志片段:**
```
{"timestamp": "2023-10-25T14:32:00", "level": "CRITICAL", "module": "access_control", "message": "Autonomous restriction! Risk score 95.0 exceeds critical threshold.", "user_id": 4}
```
## 可扩展性讨论
- **微服务转型**: 模块化设计允许将 `auth_manager`、`risk_scorer` 和 `anomaly_detector` 拆分为通过 gRPC 或 Kafka 通信的独立微服务。
- **数据库可扩展性**: SQLite 用于本地零依赖测试。通过更改 `db_manager.py` 中的连接工厂,可以使用 SQLAlchemy 或 asyncpg 无缝扩展到 PostgreSQL。
- **ML 可扩展性**: 本地 Scikit-Learn 模型速度很快,但属于单节点。对于大规模场景,可以将其过渡到 Apache Spark MLlib 管道。
## 未来改进
- **联邦学习**: 在不共享原始访问日志的情况下,跨多个分支机构聚合异常检测模型。
- **基于图的威胁分析**: 使用 NetworkX 映射文件和用户之间的横向移动。
- **SIEM 集成**: 使用专用的日志处理程序将 JSON 日志转发到 Splunk 或 ELK stack。
## 研究与工程视角
SAFIS 的构建超越了标准教程 CRUD 应用程序的范围。它弥合了后端工程、安全架构和应用 AI 之间的鸿沟。
它展示了系统性思维:认识到身份验证不是一次性关卡,而是一个持续验证的过程。它通过使用 O(1) 数学惩罚和无监督机器学习分析 API/文件调用的*上下文*和*速度*,解决了凭证泄露的现实问题。
## 面试讨论指南
**问:为什么在分析中使用多处理而不是多线程?**
**答**: Python 的全局解释器锁 (GIL) 阻止多个线程同时执行 Python 字节码。由于 Pandas 分析是高度 CPU 密集型的,多线程不会提供任何加速。`multiprocessing` 会生成具有独立内存空间和 GIL 的独立 OS 进程,从而允许真正的并行 CPU 利用率。
**问:系统如何安全地处理并发数据库写入?**
**答**: `DatabaseManager` 利用 `threading.local()` 提供特定于线程的数据库连接,防止在 SQLite 中发生线程交错崩溃,同时允许 LiveMonitor 和主线程并发运行。
**问:为什么使用 Isolation Forest 而不是神经网络?**
**答**: Isolation Forest 是一种无监督算法,针对表格/结构化数据上的异常检测进行了高度优化。与深度学习自编码器相比,它需要的训练数据和计算能力要少得多,使其非常适合在没有 GPU 的情况下进行快速本地推理。
**问:解释如何防止路径穿越。**
**答**: 我们使用 `os.path.abspath` 来解析请求文件的绝对路径。然后我们严格验证解析后的路径是否以预定义的安全基目录 `.startswith()` 开头。如果攻击者传递 `../../etc/passwd`,绝对路径将脱离基目录,从而导致验证立即失败。
## 性能考量
- **内存效率**: ML 管道严格基于元数据(整数 ID、数字分数、枚举)进行训练,从不会将完整的原始文件内容拉入内存。
- **分析优化**: 利用 `np.array_split` 划分 Pandas DataFrames,避免了深拷贝逻辑,并极大地加快了并行调度开销。
## 许可证
MIT License
## 贡献者
由 SAFIS 工程团队开发。
## 最终工程总结
SAFIS 代表了一种现代的零信任工程范式。通过将健壮的面向对象后端设计与无监督机器学习紧密结合,系统不会被动地等待安全规则被触发。它主动识别人类/机器人行为的偏差,并执行确定性的杀伤链(账户锁定),反映了生产级安全工程的最高标准。
标签:AMSI绕过, Apex, HTTP工具, Scikit-Learn, Streamlit, 人工智能安全, 内部威胁防护, 动态风险评分, 合规性, 基于角色的访问控制, 多进程, 威胁检测, 孤立森林, 安全生态系统, 异常检测, 持续自适应信任, 敏感数据保护, 文件安全, 文件管理系统, 无云依赖, 本地AI, 本地推理, 机器学习, 端点安全, 网络安全, 网络安全审计, 自主安全系统, 自适应安全, 行为画像, 补丁管理, 访问控制, 账户锁定, 逆向工具, 隐私保护, 零信任架构