andrewblooman/lookout
GitHub: andrewblooman/lookout
一个开源威胁情报平台,从多个外部安全源自动收集、关联并可视化展示网络威胁数据,帮助分析师高效进行威胁分诊与狩猎。
Stars: 0 | Forks: 0
# Lookout







一个威胁情报平台,收集、关联并展示来自 CISA KEV、RSS 新闻源、MITRE ATT&CK、Malpedia 和种子数据的网络威胁数据。专为便于分析师进行分诊和威胁狩猎而构建。
## 
## 功能
- **Dashboard** — 威胁级别摘要、攻击源地球仪、活跃活动、最新 KEV CVE 和新闻源
- **APTs** — 44 个种子威胁行为者,包含 MITRE ATT&CK ID、别名、国家归属、动机和活动链接
- **Campaigns** — 9 个归属活动,明确链接到其负责的行为者及相关的 IOC
- **IOCs** — 妥协指标,具有按类型汇总的小部件、置信度评分、行为者/活动归属和全文搜索
- **CVEs** — 80 个种子漏洞(2017–2024),包含 CVSS 分数、CISA KEV 状态和截止日期;由实时 CISA KEV 和 NVD 源进一步丰富
- **News** — 通过 RSS 获取的文章,带有提取的行为者、CVE 和恶意软件实体标签
- **Feeds** — 具有加密 API token 存储的接入源的完整 CRUD 管理
## 技术栈
| 层级 | 技术 |
|-----------|-------------------------------------------------|
| Backend | FastAPI + Python 3.13, SQLAlchemy 2 (async) |
| Database | PostgreSQL 16 |
| Cache | Redis 7 |
| Scheduler | APScheduler (后台,每小时接入) |
| Frontend | Next.js 15 App Router, TanStack Query, Tailwind |
| Container | Docker Compose (生产 + 开发覆盖) |
## 快速开始
```
# 复制 env 并生成 Fernet key
cp .env.example .env
python3.13 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# 将输出粘贴为 .env 中的 FEED_SECRET_KEY
# 通过 hot reload 启动一切
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build
```
| Service | URL |
|-----------|----------------------------|
| Frontend | http://localhost:3000 |
| Backend | http://localhost:8000 |
| API docs | http://localhost:8000/docs |
要重置数据库并重新运行种子数据:
```
docker compose down -v && docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build
```
## 种子数据
首次启动时(空的 `actors` 表),应用程序将植入涵盖以下内容的真实威胁情报:
| Entity | 数量 | 备注 |
|-----------|-------|-------|
| Actors | 44 | 俄罗斯、中国、朝鲜、伊朗、犯罪/RaaS 以及其他国家级 APT |
| Campaigns | 9 | 每个都明确归属到一个带有 IOC 链接的行为者 |
| IOCs | 29 | IP、域名、哈希、URL —— 每个都链接到正确的行为者和活动 |
| CVEs | 80 | 2017–2024 年的高知名度 CVE,包括 Log4Shell、ProxyLogon、MOVEit、Citrix Bleed |
| News | 15 | 具有提取的实体标签的代表性威胁情报文章 |
实时源(默认启用,在启动时运行一次,然后每小时运行一次)将在 CISA KEV 和 NVD 接入成功运行后把 CVE 数量增加到 ~1,200+。
## 接入源
| Feed | 类型 | 需要 token |
|------|------|---------------|
| CISA Known Exploited Vulnerabilities | `cisa_kev` | 否 |
| MITRE ATT&CK Enterprise | `mitre_attack` | 否 |
| Malpedia actor list | `malpedia` | 否 |
| NVD CVE (recent) | `nvd_cve` | 否 |
| Wiz Cloud Threat Landscape (STIX) | `wiz_stix` | 否 |
| Abuse.ch URLhaus IOCs | `urlhaus_iocs` | 否 |
| URLhaus recent payloads | `urlhaus_api` | 否 |
| Krebs on Security RSS | `rss` | 否 |
| The Hacker News RSS | `rss` | 否 |
| Bleeping Computer RSS | `rss` | 否 |
| AlienVault OTX | `alienvault_otx` | 是 — 通过 Feeds UI 添加 |
| Shodan | `shodan` | 是 — 通过 Feeds UI 添加 |
## 开发
```
# Backend 语法检查
cd backend && python3.13 -m py_compile app/**/*.py
# 带 auto-reload 的 Backend(在 Docker 之外)
cd backend && python3.13 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt && uvicorn app.main:app --reload
# Frontend lint
cd frontend && npm run lint
# 手动触发所有 feeds
curl -X POST http://localhost:8000/api/v1/ingest/trigger
# 触发单个 feed
curl -X POST http://localhost:8000/api/v1/feeds//trigger
```
## 项目结构
```
lookout/
├── backend/
│ └── app/
│ ├── api/v1/ # Route handlers (actors, campaigns, iocs, cves, news, feeds, dashboard)
│ ├── models/ # SQLAlchemy ORM models
│ ├── schemas/ # Pydantic v2 request/response schemas
│ ├── services/
│ │ ├── ingest/ # Per-feed ingest handlers + seed.py
│ │ ├── cache.py # Redis helpers
│ │ └── token.py # Fernet token encryption
│ └── core/
│ ├── config.py # Settings (pydantic-settings)
│ └── scheduler.py # APScheduler + run_all_feeds()
└── frontend/
├── app/ # Next.js App Router pages
├── components/ # Shared UI components
├── lib/
│ ├── api.ts # Fetch wrapper
│ ├── hooks/ # TanStack Query hooks
│ └── utils.ts # severityColor, relativeTime, truncate
└── types/ # TypeScript interfaces matching Pydantic schemas
```
## 关系模型
行为者、活动和 IOC 在种子数据中明确链接,并通过接入进行维护:
```
Actor ──attributed-to──▶ Campaign ──contains──▶ IOC
│ │
└──mitre_group_id └──target_sectors / target_regions
```
示例:**Team PCP** → **Operation CanisterWorm** → CanisterWorm hash + C2 IPs + malicious npm domains
## 设计系统
赛博朋克暗黑主题 (`app/globals.css`):
| Token | 值 |
|-------|-------|
| Background | `#020617` |
| Card surface | `#111827` |
| Accent | `#00d4ff` (cyan) |
| Critical | `red-500` |
| High | `orange-500` |
| Medium | `amber-500` |
| Low | `green-500` |
| Monospace font | Fira Code |
CSS 类:`.cyber-card`, `.scanlines`, `.glow-accent`, `.glow-danger`。通过 `next-themes` 支持浅色模式。
## License
MIT
标签:AV绕过, FastAPI, Python, 威胁情报, 安全运营, 开发者工具, 扫描框架, 搜索引擎查询, 无后门, 测试用例, 版权保护, 逆向工具