3mehmet3/threatlens

GitHub: 3mehmet3/threatlens

ThreatLens 是一款定期扫描 IP/域名资产并结合多源情报生成 0–100 风险评分的威胁情报监控应用,帮助团队持续评估和展示资产安全态势。

Stars: 0 | Forks: 0

# ThreatLens 一款定期扫描客户 IP/域名资产;结合外部 reputation 数据源(AbuseIPDB、VirusTotal)和自身的网络分析(DNS、TLS、HTTP header)生成 **0-100 风险评分**,并在 dashboard 中展示的威胁情报应用程序。 ## 功能 - **网络分析**(无需 API key):DNS(A/AAAA/MX/NS)、TLS handshake(证书有效性、self-signed/expired 检测、TLS 版本)、HTTP 安全 header(HSTS、CSP、X-Frame-Options)以及服务器 banner 泄露 - **WHOIS 域名年龄**(无需 key):标记注册时间少于 30 天的新域名 - **Hosting/datacenter 检测**(无需 key):通过 ipinfo.io 检测 IP 是否属于 AWS、Google、Azure、DigitalOcean、OVH、Hetzner 等提供商 - **Reputation**(需要 API key):AbuseIPDB (IP)、VirusTotal (IP/domain) - **风险评分**:通过加权信号生成 0-100 分数及 Low/Medium/High 标签 - **定期扫描**:通过 APScheduler 配置扫描间隔(默认 60 分钟) - **并行扫描**:使用 ThreadPoolExecutor 同时扫描多个 asset(`SCAN_MAX_WORKERS`,默认 4)——在大量 asset 时有明显加速 - **Dashboard**:添加客户/asset、实时风险面板、扫描历史、手动“立即扫描” ## 安装 ``` python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt cp .env.example .env # API key'leri (opsiyonel) doldurun python app.py ``` 通过浏览器访问: ### 加载示例数据(可选) 为了快速体验,您可以添加示例客户/asset 记录(此操作是幂等的,重复运行也是安全的): ``` python seed.py ``` 在 Docker container 内部: ``` docker run --rm -v threatlens-data:/data --env-file .env threatlens python seed.py ``` ## 配置 (`.env`) | 变量 | 说明 | 默认值 | |---|---|---| | `ABUSEIPDB_API_KEY` | AbuseIPDB key(可选) | — | | `VIRUSTOTAL_API_KEY` | VirusTotal key(可选) | — | | `SCAN_INTERVAL_MINUTES` | 扫描间隔(分钟) | `60` | | `SCAN_MAX_WORKERS` | 并行扫描 worker 数量 | `4` | | `FLASK_HOST` / `FLASK_PORT` | 服务器地址 | `0.0.0.0` / `5000` | | `FLASK_DEBUG` | Debug 模式 | `false` | | `DATABASE_PATH` | SQLite 文件路径 | `threatlens.db` | | `DNS_TIMEOUT` | DNS 查询 timeout(秒) | `5.0` | | `TLS_TIMEOUT` | TLS handshake timeout(秒) | `8.0` | | `HTTP_TIMEOUT` | HTTP 请求 timeout(秒) | `8.0` | ## API endpoint | 方法 | 路径 | 说明 | |---|---|---| | `POST` | `/customers` | 添加客户 `{"name": "..."}` | | `GET` | `/customers` | 列出客户 | | `POST` | `/assets` | 添加 asset `{"customer_id", "target"}`(类型自动识别) | | `GET` | `/assets` | 列出 asset | | `POST` | `/scan` | 立即扫描所有 asset | | `GET` | `/dashboard` | 获取每个 asset 的最新分数 | | `GET` | `/history?asset_id=X` | 获取某个 asset 的扫描历史 | | `GET` | `/health` | 健康检查 | ## 风险评分逻辑 | 信号 | 分数 | |---|---| | AbuseIPDB 分数 > 50 | +30 | | VirusTotal 上 ≥3 个引擎标记为 "malicious" | +30 | | TLS 证书无效/self-signed | +15 | | 旧版 TLS(TLS 1.0/1.1) | +10 | | 缺少关键安全 header(HSTS/CSP) | +10 | | 域名注册时间少于 30 天 | +15 | | IP 属于 hosting/datacenter 提供商 | +10 | | 均未触发 | 5(基准安全分数) | 等级:**Low** 0-30 · **Medium** 31-60 · **High** 61-100 ## 架构 ``` app.py Flask giriş noktası + scheduler başlatma config.py .env okuma database.py SQLite şema + CRUD analyzers/ network_analyzer.py DNS / TLS / HTTP header reputation.py AbuseIPDB + VirusTotal whois_lookup.py WHOIS domain yaşı geo_lookup.py ipinfo.io hosting/datacenter tespiti scorer.py risk skoru scanner.py tüm asset'leri tarayan orkestrasyon scheduler.py APScheduler periyodik tetikleme routes/ customers.py müşteri/varlık ekleme lookups.py dashboard / geçmiş / manuel tarama templates/ index.html dashboard (vanilla JS) ``` ## Docker ``` docker build -t threatlens . docker run -p 5000:5000 \ -v threatlens-data:/data \ --env-file .env \ threatlens ``` 数据库持久化存储在 `/data` volume 中。 ## 单独测试模块 ``` python -m analyzers.network_analyzer example.com # network analizi python -m analyzers.reputation 8.8.8.8 # reputation (key gerekir) python -m analyzers.whois_lookup google.com # WHOIS domain yaşı python -m analyzers.geo_lookup 8.8.8.8 # hosting/datacenter tespiti python -m analyzers.scorer # skorlama örnekleri python scanner.py # tüm asset'leri tara ``` ## 范围之外(后续可能会添加) - 用户登录 / authentication - 端口扫描(出于道德/法律原因未包含) - 多个 scheduler interval
标签:GitHub, Python, Web仪表盘, 占用监测, 威胁情报, 实时处理, 开发者工具, 无后门, 网络安全, 网络测绘, 请求拦截, 资产管理, 逆向工具, 隐私保护