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, 威胁情报, 开发者工具, 文件哈希查询, 无后门, 测试用例, 运行时操纵, 逆向工具