cascioli/osintriskmapper

GitHub: cascioli/osintriskmapper

一款面向中小企业的被动式 OSINT 攻击面管理工具,通过多轮聚合数据源并结合 Gemini 大模型生成可读的风险评估报告,帮助企业发现自身暴露在互联网上的凭据、文档和子域名等数字足迹。

Stars: 0 | Forks: 0

# OSINT Risk Mapper ### 面向中小企业的被动攻击面管理 ![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python&logoColor=white) ![Streamlit](https://img.shields.io/badge/Streamlit-1.35%2B-FF4B4B?logo=streamlit&logoColor=white) ![License: MIT](https://img.shields.io/badge/License-MIT-green) ![OSINT: Passive Only](https://img.shields.io/badge/OSINT-Passive%20Only-orange) ![Last Commit](https://img.shields.io/github/last-commit/cascioli/osintriskmapper) ## 为什么开发这个工具 在与当地的商业生态系统(如福贾省的农业中小企业、物流公司和小型专业公司)合作时,我注意到了一个反复出现的模式:这些公司**并非因为复杂的基础设施而变得脆弱**,而是因为一些更加日常且容易被忽视的原因。 企业凭据在数据泄露事件中被泄露。废弃的子域名暴露了管理面板。包含价格表的 Excel 文件被 Google 索引。没有人知道,也没有人去检查,更没有人发现它们——直到被其他人发现。 **OSINT Risk Mapper** 为安全专业人员(或对自身暴露情况感到好奇的公司)提供了一个完整的被动侦察工具,该工具聚合了多个来源,并将技术数据转化为即使是不以阅读 Nmap 输出为乐的人也能理解的风险报告。 ## 道德声明 ## 工作原理 OSINT Risk Mapper 运行一个 **5 轮的人员与数据管道**——全部为被动方式,无主动扫描。专为共享托管(如 Aruba/OVH/Cloudflare)上的 SMB 目标而设计,在这些环境中,IP 扫描是无效且不相关的。 ``` domain input → Round 1: web scrape (contacts/social/tech/VAT) + WHOIS + subdomains (crt.sh+VT) + Hunter.io emails + generic document dork → Round 1.5: Gemini strategic guidance (sector/aliases/people/related domains) + PhoneBook.cz emails + OpenCorporates company officers → Round 2: breach check (HIBP + LeakLookup) + LinkedIn/Twitter/Instagram/Facebook dorks + VAT dork + email pattern dork + GitHub/Pastebin/brand dorks + Gemini-guided custom queries → Round 3: Gemini deep-dive entity extraction → follow-up dorks (max 5+5) → Final: unified LLM report (person + data focused) + interactive connection graph → Export: CSV ZIP archive + Markdown report ``` ## 功能 ### 第 1 轮 — 发现 - **网页抓取** (BeautifulSoup):直接从目标网站提取电子邮件、电话号码、社交链接、技术栈提示以及意大利增值税号 - **WHOIS 查询** (python-whois + 原始 NIC.it 解析器):注册人姓名、组织、日期 - **子域名枚举**:通过 crt.sh 的证书透明度日志 + HackerTarget(免费,无需密钥),可选择通过 VirusTotal 被动 DNS 进行增强 - **电子邮件发现**:Hunter.io API 集成 - **文档 Dork**:Google 索引的 `.pdf`、`.doc`、`.xls`、`.xlsx`、`.sql`、`.env`、`.bak` 文件 ### 第 1.5 轮 — 策略指导 - **Gemini LLM 分析**:识别公司所属行业、可能的别名、需要调查的关键人物以及相关域名 - **OpenCorporates**:从官方企业注册库获取意大利公司高管(董事、管理员)信息 - **PhoneBook.cz**:额外的电子邮件枚举 ### 第 2 轮 — 信息补充 - **泄露检查**:将所有发现的电子邮件与 HaveIBeenPwned (HIBP) 和 Leak-Lookup 进行交叉比对 - **社交 Dork**:针对每个已识别人员进行 LinkedIn、Twitter、Instagram、Facebook 的定向搜索 - **品牌情报 Dork**:GitHub 代码泄露、Pastebin 提及、增值税号交叉比对 ### 第 3 轮 — LLM 引导的迭代 - Gemini 从累积的数据中提取额外的人员和调查角度 - 为新建议的人员和查询运行最多 5 + 5 次后续 Dork - 受控迭代以限制 API 成本 ### 最终阶段 — 报告 - **统一 AI 报告**:由 Gemini 生成的执行摘要,重点关注数据暴露和受损的凭据 - **交互式关系图谱**:NetworkX + Plotly 可视化,节点类型包括:domain(域名)、person(人员)、email(电子邮件)、breach(泄露)、social profile(社交资料)、document(文档)、subdomain(子域名) ## 输出 | 输出 | 格式 | 内容 | |--------|--------|----------| | 仪表盘 | Streamlit UI | 指标卡、AI 报告、关系图谱、可展开的数据表 | | CSV 存档 | `.zip` | `emails`、`people`、`breaches`、`social`、`subdomains`、`documents`、`whois`、`officers`、`related_domains`、`instagram_facebook` | | Markdown 报告 | `.md` | 摘要统计 + 完整的 AI 报告文本 | ## 架构 ``` osintriskmapper/ ├── app.py # Streamlit entry point — session state, pipeline phases, export ├── modules/ │ ├── orchestrator.py # run_round1/1_5/2/3/final() — pipeline execution with callbacks │ ├── scan_context.py # ScanContext dataclass — shared state across all rounds │ ├── web_scraper.py # BeautifulSoup — emails, phones, social links, tech, VAT │ ├── whois_client.py # python-whois + raw NIC.it parser │ ├── gemini_guidance.py # Round 1.5 Gemini strategic guidance │ ├── phonebook_client.py # PhoneBook.cz email discovery │ ├── opencorporates_client.py# OpenCorporates REST API — Italian company officers │ ├── inipec_client.py # inipec.gov.it — official Italian PEC email registry (no key) │ ├── atoka_client.py # Atoka.io — Italian company enrichment (ATECO, officers, PEC) │ ├── vt_client.py # VirusTotal API v3 — passive subdomain enumeration │ ├── hibp_client.py # HaveIBeenPwned API v3 — breach check per email │ ├── osint_dorking.py # Google dork functions (docs/LinkedIn/Twitter/GitHub/Pastebin/VAT) │ ├── osint_hunter.py # Hunter.io email discovery │ ├── osint_leaklookup.py # Leak-Lookup breach check │ ├── osint_subdomains.py # crt.sh + HackerTarget subdomain enumeration │ ├── dehashed_client.py # DeHashed breach lookup by username/email/name/phone │ ├── intelx_client.py # IntelX leaked DB intelligence search │ ├── social_scraper.py # Instagram + Facebook profile scraper (bio/email/phone, no key) │ ├── unified_report.py # Cross-correlated final Gemini report │ ├── graph_builder.py # NetworkX + Plotly connection graph │ ├── dashboard_map.py # Foggia province heatmap (demo page) │ ├── ai_analyzer.py # Gemini executive risk report (breach + subdomains + documents) │ ├── llm_client.py # SOC-oriented Gemini host/network analysis │ └── ui.py # Streamlit UI components for host analysis mode └── utils/ └── config.py # API key loader — st.secrets (cloud) or .env (local) ``` **设计原则:** - 每个 OSINT 模块都是独立的,可以单独进行测试 - 所有轮次共享一个通过引用传递的 `ScanContext` 数据类 - 编排器回调(`log_fn`、`progress_fn`)将管道逻辑与 UI 解耦 - 缺失的 API 密钥会静默禁用相关模块——应用程序可使用现有的任何密钥运行 - API 密钥绝不硬编码——通过 `python-dotenv` 从 `.env` 加载,且从不提交 ## API 密钥 所有密钥均为可选。缺失的密钥将静默禁用相应的模块。 | 变量 | 服务 | 免费套餐 | 获取方式 | |----------|---------|-----------|--------| | `GEMINI_API_KEY` | Google Gemini 2.5 Flash | 是 | [aistudio.google.com](https://aistudio.google.com) | | `SERPER_API_KEY` | Serper.dev (Google dorking) | 每月 2,500 次查询 | [serper.dev](https://serper.dev) | | `SERPAPI_KEY` | SerpAPI (Google dorking, 备选) | 每月 100 次搜索 | [serpapi.com](https://serpapi.com) | | `HUNTER_API_KEY` | Hunter.io 电子邮件发现 | 每月 25 次搜索 | [hunter.io](https://hunter.io) | | `HIBP_API_KEY` | HaveIBeenPwned 泄露检查 | 付费(便宜) | [haveibeenpwned.com](https://haveibeenpwned.com/API/Key) | | `LEAKLOOKUP_API_KEY` | Leak-Lookup 泄露数据库 | 是 | [leak-lookup.com](https://leak-lookup.com) | | `VIRUSTOTAL_API_KEY` | VirusTotal 被动 DNS | 每天 500 次请求 | [virustotal.com](https://www.virustotal.com) | | `OPENCORPORATES_API_KEY` | OpenCorporates 企业注册库 | 是(受限) | [opencorporates.com](https://opencorporates.com/api_accounts/new) | | `ATOKA_API_KEY` | Atoka.io 意大利企业信息丰富 | 否 | [atoka.io](https://atoka.io) | | `DEHASHED_API_KEY` + `DEHASHED_EMAIL` | DeHashed 泄露查询 (Basic 认证) | 否 | [dehashed.com](https://dehashed.com) | | `INTELX_API_KEY` | IntelX 泄露数据库搜索 | 受限 | [intelx.io](https://intelx.io) | | `OPENAI_API_KEY` | OpenAI 兼容的 LLM 后端(Gemini 的替代方案) | 否 | [platform.openai.com](https://platform.openai.com) | ## 安装 **前置条件:** Python 3.10+, `git` ``` # 1. 克隆仓库 git clone https://github.com/cascioli/osintriskmapper.git cd osintriskmapper # 2. 创建并激活 virtual environment python -m venv .venv source .venv/bin/activate # Linux / macOS # .venv\Scripts\activate # Windows # 3. 安装依赖 pip install -r requirements.txt # 4. 配置 API keys cp .env.example .env ``` 编辑 `.env` 文件并添加您拥有的密钥: ``` GEMINI_API_KEY=your_gemini_key SERPER_API_KEY=your_serper_key HUNTER_API_KEY=your_hunter_key HIBP_API_KEY=your_hibp_key # ... 将其他项留空以禁用这些模块 ``` ## 使用 ``` streamlit run app.py ``` 浏览器将自动打开 `http://localhost:8501`。 1. **输入目标域名**(例如,`company.com`) 2. **选择性填写** 公司姓名、已知员工姓名、城市以及已知的联系电子邮件,以改善结果 3. **点击 Avvia Analisi**——管道将自动运行所有轮次 4. **在可展开部分查看结果**:指标、AI 报告、关系图谱、泄露表格、社交资料、子域名、暴露的文档 5. **导出** 为 CSV ZIP 压缩包或 Markdown 报告 ## 技术栈 | 组件 | 技术 | |-----------|-----------| | UI / 仪表盘 | [Streamlit](https://streamlit.io) | | 数据处理 | [Pandas](https://pandas.pydata.org) | | AI 分析 | Google Gemini 2.5 Flash (`google-genai`) | | 关系图谱 | [NetworkX](https://networkx.org) + [Plotly](https://plotly.com) | | 网页抓取 | [BeautifulSoup4](https://www.crummy.com/software/BeautifulSoup/) | | WHOIS | [python-whois](https://pypi.org/project/python-whois/) | | HTTP 客户端 | [Requests](https://requests.readthedocs.io) | | 配置管理 | [python-dotenv](https://pypi.org/project/python-dotenv/) | ## 贡献 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 安全 发现了漏洞或想要报告敏感发现?请参见 [SECURITY.md](SECURITY.md)。 ## 许可证 MIT——可免费使用、修改和分发,但需注明出处。
标签:Atomic Red Team, ESC4, GPT, HIBP, Hunter.io, Kubernetes, OSINT, Python, SEO Dorking, Streamlit, Unix, WHOIS查询, 中小企业安全, 企业情报, 协议探测, 占用监测, 外部威胁, 威胁建模, 子域名枚举, 安全工具库, 实时处理, 数字足迹, 数据泄露检测, 数据管道, 无后门, 泄露检查, 漏洞管理, 特权检测, 社会工程学防范, 系统安全, 网络安全, 被动侦察, 访问控制, 资产管理, 软件工程, 逆向工具, 钓鱼防御, 隐私保护