andrewblooman/lookout

GitHub: andrewblooman/lookout

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

Stars: 0 | Forks: 0

# Lookout ![Python](https://img.shields.io/badge/Python-3.13-3776ab?logo=python&logoColor=white) ![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688?logo=fastapi&logoColor=white) ![Next.js](https://img.shields.io/badge/Next.js-15-000000?logo=nextdotjs&logoColor=white) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-4169e1?logo=postgresql&logoColor=white) ![Redis](https://img.shields.io/badge/Redis-7-dc382d?logo=redis&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-Compose-2496ed?logo=docker&logoColor=white) ![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg) 一个威胁情报平台,收集、关联并展示来自 CISA KEV、RSS 新闻源、MITRE ATT&CK、Malpedia 和种子数据的网络威胁数据。专为便于分析师进行分诊和威胁狩猎而构建。 ## ![Dashboard](https://raw.githubusercontent.com/andrewblooman/lookout/main/docs/images/image.png) ## 功能 - **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, 威胁情报, 安全运营, 开发者工具, 扫描框架, 搜索引擎查询, 无后门, 测试用例, 版权保护, 逆向工具