OSINT_AI_Agent

Reconnaissance активный

Мультиагентный OSINT-агент на LangGraph с Subfinder, Shodan и автоматической генерацией отчётов


Установка
git clone git@github.com:dazzyddos/OSINT_AI_Agent.git
cd osint-agent
docker build -t osint-tools:latest -f docker/Dockerfile.tools .
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
показать оригинал переведено ИИ

OSINT Multi-Agent System

Многокластерная OSINT (разведка по открытым источникам) система разведки, построенная на LangGraph. Этот проект демонстрирует, как оркестрировать специализированных ИИ-агентов, которые сотрудничают для проведения комплексной разведки безопасности целевых доменов.

Примечание: Это простой инструмент, созданный в учебных целях для демонстрации того, как начать создавать ИИ-агентов в сфере кибербезопасности. Подробное руководство и объяснение см. в сопровождающей статье блога: Building Your First Cybersecurity AI Agent with LangGraph.

Обзор

Эта система использует архитектуру супервизора, где координирующий агент управляет тремя специализированными агентами через рабочий процесс разведки:

┌─────────────────────────────────────────────────────────────────┐
│                        COORDINATOR                              │
│                    (Supervisor Agent)                           │
└───────────────────────────┬─────────────────────────────────────┘
                            │
            ┌───────────────┼───────────────┐
            │               │               │
            ▼               ▼               ▼
     ┌──────────┐    ┌──────────┐    ┌──────────────┐
     │  RECON   │    │  SHODAN  │    │ FINGERPRINT  │
     │  AGENT   │    │  AGENT   │    │    AGENT     │
     └────┬─────┘    └────┬─────┘    └──────┬───────┘
          │               │                 │
          ▼               ▼                 ▼
     ┌──────────┐    ┌──────────┐    ┌──────────────┐
     │Subfinder │    │ Shodan   │    │   WhatWeb    │
     │ (Docker) │    │   API    │    │   (Docker)   │
     └──────────┘    └──────────┘    └──────────────┘

Этапы рабочего процесса: 1. Разведка → Перечисление поддоменов с использованием Subfinder 2. Shodan Intelligence → Запрос экспонированных сервисов и уязвимостей 3. Фингерпринтинг → Идентификация технологического стека с WhatWeb 4. Отчётность → ИИ-генерируемый отчёт об оценке безопасности

Возможности

  • Многоагентная архитектура: Специализированные агенты с различными обязанностями
  • Изоляция Docker: Инструменты безопасности запускаются в контейнерах для безопасности и воспроизводимости
  • Управление состоянием: LangGraph обрабатывает поток разговора и персистентность данных
  • Чекпоинты: Опциональная возможность возобновления для длительных расследований
  • Структурированный вывод: Pydantic-модели обеспечивают согласованные форматы данных
  • Комплексные отчёты: LLM-генерируемые отчёты тестирования на проникновение

Структура проекта

osint_agent/
├── agents/
│   ├── __init__.py
│   ├── state.py                # Shared state definition (TypedDict)
│   ├── coordinator.py          # Supervisor agent & graph definition
│   ├── recon_agent.py          # Subdomain enumeration agent
│   ├── shodan_agent.py         # Shodan reconnaissance agent
│   └── fingerprint_agent.py    # Technology detection agent
├── tools/
│   ├── __init__.py
│   ├── docker_runner.py        # Docker execution wrapper
│   ├── subdomain_tools.py      # Subfinder integration
│   ├── shodan_tools.py         # Shodan API tools
│   └── fingerprint_tools.py    # WhatWeb integration
├── docker/
│   └── Dockerfile.tools        # Container with recon tools
├── config.py                   # Application configuration
├── main.py                     # CLI entry point
├── requirements.txt
└── .env.example

Предварительные требования

  • Python 3.11+
  • Docker (для запуска инструментов безопасности)
  • DeepSeek API Key (или измените для OpenAI/Anthropic)
  • Shodan API Key

Установка

1. Клонирование репозитория

git clone git@github.com:dazzyddos/OSINT_AI_Agent.git
cd osint-agent

2. Сборка Docker-образа

Docker-образ содержит Subfinder, WhatWeb и httpx для разведки:

docker build -t osint-tools:latest -f docker/Dockerfile.tools .

3. Установка Python-зависимостей

python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -r requirements.txt

4. Настройка окружения

cp .env.example .env

Отредактируйте .env с вашими API-ключами:

DEEPSEEK_API_KEY=your-deepseek-api-key
SHODAN_API_KEY=your-shodan-api-key

# Optional configuration
OSINT_DOCKER_IMAGE=osint-tools:latest
DOCKER_TIMEOUT=300
LLM_MODEL=deepseek-chat
LLM_TEMPERATURE=0

Использование

Базовое расследование

python main.py example.com

С чекпоинтами (возможность возобновления)

python main.py example.com --checkpoint

Программное использование

from agents.coordinator import create_coordinator
from langgraph.checkpoint.memory import MemorySaver

# Create coordinator with optional checkpointing
checkpointer = MemorySaver()
coordinator = create_coordinator(checkpointer=checkpointer)

# Initialize state
initial_state = {
    "target": "example.com",
    "messages": [],
    "subdomains": [],
    "live_hosts": [],
    "shodan_hosts": [],
    "shodan_details": [],
    "technologies": [],
    "current_phase": "",
    "completed_phases": [],
    "errors": [],
    "report": "",
}

# Run investigation
config = {"configurable": {"thread_id": "osint-example"}}
for event in coordinator.stream(initial_state, config):
    print(event)

Детали агентов

Координатор (Супервизор)

Координатор реализует конечный автомат, который направляет выполнение через этапы рабочего процесса:

def supervisor_node(state: OSINTState) -> Command:
    completed = state.get("completed_phases", [])

    if "recon" not in completed:
        return Command(goto="recon_node", update={"current_phase": "recon"})
    elif "shodan" not in completed:
        return Command(goto="shodan_node", update={"current_phase": "shodan"})
    # ... continues through phases

Recon Agent

Специализируется на перечислении поддоменов с использованием пассивных техник: - Журналы Certificate Transparency - DNS-датасеты - Веб-архивы - Публичные источники через Subfinder

Shodan Agent

Опрашивает Shodan для экспонированной инфраструктуры: - Открытые порты и сервисы - Известные уязвимости (CVE) - Определение операционной системы - Баннеры сервисов

Fingerprint Agent

Идентифицирует технологические стеки с помощью WhatWeb: - Веб-серверы (Apache, Nginx, IIS) - CMS-платформы (WordPress, Drupal) - JavaScript-фреймворки - Языки программирования - Заголовки безопасности

Схема состояния

Общее состояние использует TypedDict LangGraph с аннотацией сообщений:

class OSINTState(TypedDict):
    target: str                           # Domain being investigated
    messages: Annotated[list, add_messages]  # LLM conversation history
    subdomains: list[str]                 # Discovered subdomains
    live_hosts: list[dict]                # Responsive hosts
    shodan_hosts: list[dict]              # Shodan search results
    shodan_details: list[dict]            # Detailed host lookups
    technologies: list[dict]              # Fingerprint results
    current_phase: str                    # Active workflow phase
    completed_phases: list[str]           # Finished phases
    errors: list[str]                     # Error collection
    report: str                           # Final report

Визуализация графа

Рабочий процесс LangGraph:

                    ┌─────────┐
                    │  START  │
                    └────┬────┘
                         │
                         ▼
                 ┌────────────┐
          ┌──────│ SUPERVISOR │◄─────────────────┐
          │      └────────────┘                  │
          │            │                         │
          │  ┌─────────┼─────────┐               │
          │  │         │         │               │
          ▼  ▼         ▼         ▼               │
     ┌────────┐  ┌─────────┐  ┌─────────────┐    │
     │ RECON  │  │ SHODAN  │  │ FINGERPRINT │    │
     │  NODE  │  │  NODE   │  │    NODE     │    │
     └───┬────┘  └────┬────┘  └──────┬──────┘    │
         │            │              │           │
         └────────────┴──────────────┴───────────┘
                         │
                         ▼ (all phases complete)
                  ┌────────────┐
                  │   REPORT   │
                  │    NODE    │
                  └─────┬──────┘
                        │
                        ▼
                    ┌───────┐
                    │  END  │
                    └───────┘

Пример вывода

+==============================================================+

|           OSINT Multi-Agent Investigation                    |
+==============================================================+

|  Target: example.com                                         |
+==============================================================+

[*] Starting investigation...

[->] Moving to phase: recon
[OK] Recon complete: found 47 subdomains
[->] Moving to phase: shodan
[OK] Shodan complete: found 12 hosts
[->] Moving to phase: fingerprint
[OK] Fingerprinting complete: scanned 10 targets
[->] Moving to phase: reporting
[OK] Report generated

============================================================
INVESTIGATION COMPLETE
============================================================

# OSINT Reconnaissance Report: example.com

## Executive Summary
...

Опции конфигурации

Переменная По умолчанию Описание
DEEPSEEK_API_KEY Обязательно API-ключ для DeepSeek LLM
SHODAN_API_KEY Обязательно API-ключ для запросов к Shodan
OSINT_DOCKER_IMAGE osint-tools:latest Docker-образ для инструментов
DOCKER_TIMEOUT 300 Макс. время выполнения (секунды)
LLM_MODEL deepseek-chat Идентификатор модели LLM
LLM_TEMPERATURE 0 Настройка temperature LLM

Расширение системы

Добавление нового агента

  1. Создайте агента в agents/:
# agents/new_agent.py
from langgraph.prebuilt import create_react_agent

def create_new_agent():
    llm = ChatOpenAI(...)
    return create_react_agent(
        model=llm,
        tools=[your_tools],
        prompt="Your system prompt"
    )
  1. Добавьте инструменты в tools/:
# tools/new_tools.py
from langchain_core.tools import tool

@tool
def your_new_tool(param: str) -> dict:
    """Tool description for the LLM."""
    # Implementation
    return result
  1. Зарегистрируйте в графе координатора:
# In coordinator.py
builder.add_node("new_node", new_node_function)
builder.add_edge("new_node", "supervisor")

Использование других LLM

Измените инициализацию LLM в файлах агентов:

# For OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")

# For Anthropic
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-4-20250514")

Соображения безопасности

  • Изоляция Docker: Все инструменты разведки запускаются в контейнерах с ограничениями ресурсов
  • Санитизация ввода: Входные домены экранируются с помощью shlex.quote()

  • Управление API-ключами: Учётные данные загружаются из переменных окружения
  • Ограничение скорости: Запросы к Shodan ограничены 25 результатами на поиск
  • Таймауты: Настраиваемые таймауты выполнения предотвращают зависание процессов

Ограничения

  • Только пассивная разведка (нет активного сканирования)
  • Требует Docker для выполнения инструментов
  • У Shodan API есть лимиты скорости на бесплатном тарифе
  • Отпечатки WhatWeb ограничены HTTP/HTTPS

Лицензия

MIT License — см. LICENSE для деталей.

Благодарности

  • LangGraph — оркестрация многоагентных систем
  • Subfinder — перечисление поддоменов
  • WhatWeb — отпечатки технологий
  • Shodan — интернет-разведка
  • DeepSeek — провайдер LLM

Отказ от ответственности: Этот инструмент предназначен только для авторизованного тестирования безопасности и образовательных целей. Всегда получайте надлежащее разрешение перед проведением разведки на любой цели.

Войдите, чтобы оставить комментарий