souhardyaCodes24/Signa

GitHub: souhardyaCodes24/Signa

Signa 是一款隐私优先的威胁情报查询工具,通过本地计算文件 SHA-256 哈希并与 MalwareBazaar 恶意软件数据库比对来判断文件是否为已知威胁。

Stars: 0 | Forks: 0

# Signa 隐私保护型威胁情报。在本地计算文件的 SHA-256 哈希值,仅将 64 个字符的哈希值发送至云端 API,并从威胁数据库接收恶意软件判定结果。无需上传文件,无隐私风险。 ## 架构 ``` Local File -> Chunked SHA-256 -> FastAPI Lookup -> PostgreSQL / SQLite -> Verdict | MalwareBazaar Feed (seed script) ``` 该系统分为三层: - **CLI** (Typer + Rich) —— 面向专业用户。对磁盘上的文件进行哈希处理,或直接查找哈希值。以格式化的表格形式显示判定结果。 - **API** (FastAPI + SQLAlchemy) —— 位于 `/api/lookup/{sha256}` 的 REST endpoint。返回包含状态、家族、置信度、来源和时间戳的 JSON。 - **Web UI** (FastAPI + Jinja2) —— 面向基础用户。提供两种工作流:手动粘贴哈希值,或上传文件(任何类型)以进行自动哈希和查找。包含扫描历史记录。 只有 SHA-256 哈希值会离开您的设备。原始文件按 8 KB 的分块读取,在内存中进行哈希处理,随后丢弃。 ## 功能 - 分块 SHA-256 哈希处理 —— 以恒定的内存消耗处理多 GB 的大型文件 - 基于来自 MalwareBazaar 的已知恶意软件指示器数据库进行哈希查找 - 通过 Web UI 进行文件上传扫描 —— 支持任何文件类型(pdf、图像、视频、压缩包、可执行文件) - 带有时间戳条目的扫描历史记录追踪 - 简洁的黑、白、灰界面 —— 不依赖外部 CSS 框架 - 跨平台(Windows、macOS、Linux) ## 技术栈 | 层级 | 技术 | |-------|-----------| | CLI 框架 | Typer | | 终端输出 | Rich | | HTTP 客户端 | httpx | | Web 框架 | FastAPI | | 模板 | Jinja2 | | ORM | SQLAlchemy | | 数据库 | SQLite (开发环境), PostgreSQL (生产环境) | | 种子数据 | MalwareBazaar 公开 CSV 导出 | | 服务器 | Uvicorn | ## 项目结构 ``` signa/ cli/ CLI application hasher.py Chunked SHA-256 hashing client.py HTTP client for API lookup main.py Typer entry point with scan and lookup commands api/ FastAPI backend main.py Application entry point and route registration routes.py API endpoint definitions models.py Pydantic request/response models database.py SQLAlchemy engine and session factory db/ Database layer schema.py SQLAlchemy ORM models (ThreatHash) seed.py MalwareBazaar feed import script ui/ Web UI routes.py Page routes (hash lookup, file upload, history) templates/ Jinja2 HTML templates data/ Local SQLite database storage tests/ Unit tests ``` ## 安装 ### 前置条件 - Python 3.11 或更高版本 - pip ### 设置 ``` git clone https://github.com/yourusername/signa.git cd signa pip install -r requirements.txt ``` ### 填充数据库 此操作将从 MalwareBazaar 获取最新的恶意软件哈希值并将其存储在本地。 ``` python -m db.seed ``` 获取指定数量的记录: ``` python -m db.seed --limit 500 ``` ## 用法 ### Web UI 启动服务器: ``` python -m api.main ``` 在浏览器中打开 http://127.0.0.1:8000。您可以粘贴 SHA-256 哈希值进行查找,或上传文件以进行哈希处理并与数据库进行比对。 ### CLI 扫描文件: ``` python -m cli.main scan path/to/file.exe ``` 直接查找哈希值: ``` python -m cli.main lookup 094fd325049b8a9cf6d3e5ef2a6d4cc6a567d7d49c35f8bb8dd9e3c6acf3d78d ``` 显示帮助: ``` python -m cli.main --help ``` ## API Endpoints | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/` | Web UI 主页 | | GET | `/result?hash={sha256}` | 哈希查找结果页面 | | POST | `/upload` | 文件上传扫描 | | GET | `/history` | 扫描历史页面 | | GET | `/api/lookup/{sha256}` | JSON API endpoint | ## 数据库 Schema **threat_hashes** —— 存储已知恶意软件指示器的主查找表。 | 列名 | 类型 | 描述 | |--------|------|-------------| | sha256 | String(64) PK | SHA-256 哈希值 | | family | String(100) | 恶意软件家族标签(Emotet、RedLine 等) | | severity | String(20) | malicious / suspicious / unknown | | confidence | Float | 0.0 到 1.0 | | source | String(100) | 数据来源(MalwareBazaar 等) | | first_seen | DateTime | 首次发现时间戳 | | last_seen | DateTime | 最近发现时间戳 | **scan_history** —— 所有查找记录的可选审计日志。 ## 贡献 欢迎贡献。请先 open 一个 issue 讨论变更,然后再提交 pull request。 ## 许可证 MIT
标签:AV绕过, FastAPI, Python, 威胁情报, 开发者工具, 文件哈希查询, 无后门, 测试用例, 运行时操纵, 逆向工具