Назад к обновлениям
New releaseSep 1, 2026

puncia v0.36

Panthera(P.)uncia - Официальная CLI-утилита для Subdomain Center & Exploit Observer.

Поделиться

Panthera(P.)uncia

Официальная CLI-утилита для Subdomain Center и Exploit Observer

Downloads GitHub stars

Puncia — официальный клиент командной строки для двух разведывательных API A.R.P. Syndicate: укажите домен, бренд или идентификатор уязвимости и получите структурированный JSON за считанные секунды, без необходимости открывать браузер:

  • 🕸️ Subdomain Center — перечисление поддоменов, выявление захвата поддоменов, обнаружение теневого ИТ, а также обнаружение подделки бренда / похожих доменов (тайпсквоттинг) в масштабах интернета.
  • 💥 Exploit Observer — разведка эксплойтов и уязвимостей по более чем 150 схемам идентификаторов (CVE, GHSA, EDB, MSF, ZDI, фиды государственных акторов и другие), с обогащением CVE/GHSA (оценка зрелости EPSS + VEDAS) и сканированием SBOM.
$ puncia subdomain arpsyndicate.io
╭──────────────────────────────────────────────────────────────────────╮
│ Panthera(P.)uncia v0.38                                              │
│ subdomain recon · brand impersonation · exploit intel · sbom analysis│
│ A.R.P. Syndicate — https://www.arpsyndicate.io                       │
╰──────────────────────────────────────────────────────────────────────╯
[
  "advisories.arpsyndicate.io",
  "asm.arpsyndicate.io",
  "blog.arpsyndicate.io",
  ...
]

$ puncia sbom bom.json ./out
puncia ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% (128/128) 0:00:41

Обратите внимание: хотя эти результаты иногда могут быть довольно неточными и ненадёжными, они могут сильно различаться со временем благодаря возможностям самообучения.

Агрессивных ограничений скорости можно избежать с помощью API-ключа: https://www.arpsyndicate.io/pricing.html

Практическое применение

  1. Обнаружение подделки бренда и фишинговых доменов
    Выявляйте домены-копии, похожие домены и тайпсквоты, использующие ваш бренд, прежде чем их применят против вас или ваших клиентов.
  2. Обнаружение теневого ИТ и внешней поверхности атаки
    Выявляйте и отслеживайте открытые поддомены и инфраструктуру, созданную вне официальных каналов.
  3. Разведка захвата поддоменов
    Перечисляйте полный набор поддоменов цели — ключевой первый шаг для выявления «висящих» записей, подверженных захвату.
  4. Продвинутое исследование и мониторинг уязвимостей
    Обнаруживайте и отслеживайте известные и новые угрозы, включая малоизвестные или непубликуемые уязвимости.
  5. Контекстное обогащение данных CVE/GHSA
    Добавляйте глубину и практически применимую разведку (оценки зрелости EPSS + VEDAS) к известным уязвимостям для лучшей приоритизации.
  6. Обнаружение уязвимостей в спецификации состава ПО (SBOM)
    Анализируйте программные компоненты на предмет известных эксплойтов и проблем безопасности с использованием структурированных данных SBOM.
  7. Бесшовная интеграция с CI/CD и рабочими процессами Threat Intel
    Автоматизируйте сбор разведданных и проверки уязвимостей в рамках процессов разработки или безопасности.
  8. Мониторинг тенденций эксплойтов государственных акторов
    Будьте на шаг впереди угроз, отслеживая уязвимости, отмеченные иностранными акторами, но ещё не признанные мейнстримными базами данных.
  9. Поиск поддоменов по ключевому слову
    Выявляйте хосты, содержащие заданное ключевое слово, по всему интернету, независимо от конкретного родительского домена.
  10. Массовая обработка данных Threat Intelligence
    Выполняйте пакетные запросы (домены, уязвимости и т. д.) для масштабируемого анализа больших наборов данных или корпоративных инвентарей активов.
  11. Пассивная разведка для Red Teams
    Проводите скрытую разведку, используя пассивные источники данных (без прямого взаимодействия с целями).
  12. Сбор разведки из открытых источников (OSINT)
    Объединяйте разведку по поддоменам и эксплойтам для улучшения OSINT-расследований.
  13. Поддержка соответствия требованиям и управления рисками
    Обогащайте данные об уязвимостях для поддержки аудитов соответствия (например, ISO 27001, SOC 2) с более глубоким контекстом.

Установка

  1. Из PyPi - pip3 install puncia
  2. Из исходников - pip3 install .

Быстрый старт за 30 секунд

pip3 install puncia

# subdomain footprint of a target (shadow IT / attack surface / takeover recon)
puncia subdomain example.com

# lookalike / typosquat / brand-impersonation domains
puncia replica example.com

# what's known about a CVE
puncia exploit CVE-2021-44228

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

puncia <mode> <query> [output] [--match M] [--domain D] [--limit N] [--offset N]
                               [--crawl] [--api-key K] [--concurrency N]
                               [--timeout S] [--retries N] [--quiet]

Запустите puncia --help для полной справки. Результаты выводятся в stdout; баннер, индикаторы выполнения, предупреждения и ошибки направляются в stderr, поэтому puncia subdomain example.com > out.json всегда даёт чистый, валидный JSON.

Коды выхода: 0 успех · 1 ошибка запроса или ввода · 2 ошибка использования.

  1. (ПЛАТНО) Сохранить API-ключ (storekey) - puncia storekey <api-key>

    • Сохраняется в ~/.puncia с правами 0600. $PUNCIA_API_KEY переопределяет его, что обычно и нужно в CI.
  2. (FREEMIUM) Запрос доменов, сгруппированных по домену (движок subdomain / cuttlefish) - puncia subdomain <domain> <output-file>

    • Пагинация (только для аутентифицированных): у аутентифицированного результата нет общего ограничения. По умолчанию subdomain/replica/keyword проходят все страницы и объединяют их за вас. Передайте --offset--limit или без него), чтобы вместо этого получить ровно одну сырую страницу самостоятельно, например для возобновляемого или потокового обхода:
      puncia subdomain bigco.com --limit 50000 --offset 0
      # stderr prints: note: more results available — continue with --offset 50000
      puncia subdomain bigco.com --limit 50000 --offset 50000
      
      Анонимные запросы игнорируют --limit/--offset на стороне сервера (всегда перемешанная выборка до 500 строк); puncia предупреждает об этом, а не делает вид, что они сработали.
    • Живой обход (только для аутентифицированных): --crawl дополняет сохранённые результаты проходом живого обнаружения. Конкретный домен фактически повторно обходится только раз в ~6 ч — запросы внутри этого окна мгновенно получают кэшированный результат обхода. Puncia сообщает результат в stderr: crawl: fresh, 12 newly discovered name(s) (также partial / cooldown / disabled).
      puncia subdomain bigco.com --crawl
      
  3. (FREEMIUM) Запрос доменов-реплик, сгруппированных по бренду (движок replica / octopus) - puncia replica <domain> --match <prefix|exact|substring> <output-file>

  4. (FREEMIUM) Запрос по ключевому слову, сгруппированный по ключевому слову (движок keyword / ammonites) - puncia keyword <keyword> --match <exact|prefix> <output-file>

    • При необходимости ограничьте ключевое слово одним доменом с помощью --domain: puncia keyword blog --domain bandcamp.com
  5. Запрос идентификаторов эксплойтов и уязвимостей (exploit)

    • (БЕСПЛАТНО) Список отслеживания идентификаторов уязвимостей и эксплойтов (^WATCHLIST_IDES) - puncia exploit ^WATCHLIST_IDES <output-file>
    • (БЕСПЛАТНО) Список отслеживания идентификаторов уязвимостей и эксплойтов с описаниями (^WATCHLIST_INFO) - puncia exploit ^WATCHLIST_INFO <output-file>
    • (БЕСПЛАТНО) Список отслеживания уязвимых технологий (^WATCHLIST_TECH) - puncia exploit ^WATCHLIST_TECH <output-file>
    • (БЕСПЛАТНО) Агрегированная статистика уязвимостей/эксплойтов (^STATS) - puncia exploit ^STATS <output-file>
    • (БЕСПЛАТНО) Состояние сервиса (^HEALTH) - puncia exploit ^HEALTH <output-file>
    • (FREEMIUM) Поддерживаемые идентификаторы уязвимостей - puncia exploit <eoidentifier> --match <substring|prefix|exact> <output-file>
  6. (FREEMIUM) Обогащение идентификаторов CVE/GHSA (enrich) - puncia enrich <cve-id/ghsa-id> <output-file>

    • enrich=true действует только для идентификаторов CVE-/GHSA-; он объединяет полную запись вышестоящего бюллетеня с оценкой EPSS + VEDAS.
  7. (ПЛАТНО) Идентификаторы не-CVE по группе VEDAS (noncve) - puncia noncve <browser/china/russia/europe/exploitable> <output-file>

  8. (БЕСПЛАТНО) Состояние сервиса Subdomain Center (^HEALTH) - puncia subdomain ^HEALTH <output-file>

  9. Множественные запросы (bulk/sbom)

    • (FREEMIUM) Формат входного JSON-файла для массовой обработки - puncia bulk <json-file> <output-directory>
      {
          "subdomain": [
              "domainA.com",
              "domainB.com"
          ],
          "replica": [
              "domainA.com",
              "domainB.com"
          ],
          "keyword": [
              "keywordA",
              "keywordB"
          ],
          "exploit": [
              "eoidentifierA",
              "eoidentifierB"
          ],
          "enrich": [
              "eoidentifierA",
              "eoidentifierB"
          ]
      }
      
    • (FREEMIUM) Формат входного JSON-файла SBOM - puncia sbom <json-file> <output-directory>

    Массовые запуски и запуски SBOM дедуплицируют запросы, ограничивают параллелизм значением --concurrency (по умолчанию 10) и — при отсутствии API-ключа — автоматически задают темп запросов, чтобы оставаться в рамках бюджета бесплатного уровня.

  10. (FREEMIUM) Внешний импорт

import asyncio
import puncia

async def main():
   # Without an API key (ratelimited)
   print(await puncia.query_api("exploit", "CVE-2021-3450"))
   print(await puncia.query_api("subdomain", "arpsyndicate.io"))

   # With an API key
   await puncia.store_key("ARPS-xxxxxxxxxx")
   api_key = await puncia.read_key()
   print(await puncia.query_api("subdomain", "arpsyndicate.io", apikey=api_key))
   print(await puncia.query_api("replica", "arpsyndicate.io", match="exact", apikey=api_key))
   print(await puncia.query_api("enrich", "CVE-2021-3450", apikey=api_key))
   print(await puncia.query_api("noncve", "exploitable", apikey=api_key))

   # Static endpoints (unauthenticated, unlimited)
   print(await puncia.query_api("subdomain", "^HEALTH"))
   print(await puncia.query_api("exploit", "^STATS"))

   # Live crawl, with the outcome surfaced via a callback
   await puncia.query_api(
       "subdomain", "bigco.com", apikey=api_key, crawl=True,
       on_crawl=lambda h: print("crawl status:", h.get("X-Crawl-Status")),
   )

   # Write straight to disk
   await puncia.query_api("subdomain", "arpsyndicate.io", "out.json", apikey=api_key)

asyncio.run(main())

При сбоях возникает puncia.PunciaError; пустой результат ({} / []) возвращается как есть, а не трактуется как ошибка. Переиспользуйте одну сессию для множества запросов, передавая session= и общий limiter=, точно так же, как это делает process_bulk().

from puncia import PunciaError, query_api

try:
    data = await query_api("exploit", "CVE-2021-3450", apikey=api_key)
except PunciaError as exc:
    print(f"lookup failed: {exc}")

Разработка

git clone https://github.com/ARPSyndicate/puncia && cd puncia
pip install --upgrade pip     # editable installs need pip >= 21.3
pip install -e ".[dev]"
pytest                        # 42 offline tests, no API calls or network access

Набор тестов полностью офлайн — он охватывает построение URL, изоляцию выходных путей, разбор SBOM, планирование массовых операций и тайминг ограничителя скорости без обращения к сети, поэтому его безопасно запускать в любом окружении.

Обогащение CVE


Обогащение GHSA


Примечательные упоминания

Категории