
puncia v0.36
Panthera(P.)uncia - Официальная CLI-утилита для Subdomain Center & Exploit Observer.
Panthera(P.)uncia
Официальная CLI-утилита для Subdomain Center и Exploit Observer
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
Практическое применение
- Обнаружение подделки бренда и фишинговых доменов
Выявляйте домены-копии, похожие домены и тайпсквоты, использующие ваш бренд, прежде чем их применят против вас или ваших клиентов. - Обнаружение теневого ИТ и внешней поверхности атаки
Выявляйте и отслеживайте открытые поддомены и инфраструктуру, созданную вне официальных каналов. - Разведка захвата поддоменов
Перечисляйте полный набор поддоменов цели — ключевой первый шаг для выявления «висящих» записей, подверженных захвату. - Продвинутое исследование и мониторинг уязвимостей
Обнаруживайте и отслеживайте известные и новые угрозы, включая малоизвестные или непубликуемые уязвимости. - Контекстное обогащение данных CVE/GHSA
Добавляйте глубину и практически применимую разведку (оценки зрелости EPSS + VEDAS) к известным уязвимостям для лучшей приоритизации. - Обнаружение уязвимостей в спецификации состава ПО (SBOM)
Анализируйте программные компоненты на предмет известных эксплойтов и проблем безопасности с использованием структурированных данных SBOM. - Бесшовная интеграция с CI/CD и рабочими процессами Threat Intel
Автоматизируйте сбор разведданных и проверки уязвимостей в рамках процессов разработки или безопасности. - Мониторинг тенденций эксплойтов государственных акторов
Будьте на шаг впереди угроз, отслеживая уязвимости, отмеченные иностранными акторами, но ещё не признанные мейнстримными базами данных. - Поиск поддоменов по ключевому слову
Выявляйте хосты, содержащие заданное ключевое слово, по всему интернету, независимо от конкретного родительского домена. - Массовая обработка данных Threat Intelligence
Выполняйте пакетные запросы (домены, уязвимости и т. д.) для масштабируемого анализа больших наборов данных или корпоративных инвентарей активов. - Пассивная разведка для Red Teams
Проводите скрытую разведку, используя пассивные источники данных (без прямого взаимодействия с целями). - Сбор разведки из открытых источников (OSINT)
Объединяйте разведку по поддоменам и эксплойтам для улучшения OSINT-расследований. - Поддержка соответствия требованиям и управления рисками
Обогащайте данные об уязвимостях для поддержки аудитов соответствия (например, ISO 27001, SOC 2) с более глубоким контекстом.
Установка
- Из PyPi -
pip3 install puncia - Из исходников -
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 ошибка использования.
-
(ПЛАТНО) Сохранить API-ключ (storekey) -
puncia storekey <api-key>- Сохраняется в
~/.punciaс правами0600.$PUNCIA_API_KEYпереопределяет его, что обычно и нужно в CI.
- Сохраняется в
-
(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
- Пагинация (только для аутентифицированных): у аутентифицированного результата нет
общего ограничения. По умолчанию
-
(FREEMIUM) Запрос доменов-реплик, сгруппированных по бренду (движок replica /
octopus) -puncia replica <domain> --match <prefix|exact|substring> <output-file> -
(FREEMIUM) Запрос по ключевому слову, сгруппированный по ключевому слову (движок keyword /
ammonites) -puncia keyword <keyword> --match <exact|prefix> <output-file>- При необходимости ограничьте ключевое слово одним доменом с помощью
--domain:puncia keyword blog --domain bandcamp.com
- При необходимости ограничьте ключевое слово одним доменом с помощью
-
Запрос идентификаторов эксплойтов и уязвимостей (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>
- (БЕСПЛАТНО) Список отслеживания идентификаторов уязвимостей и эксплойтов (^WATCHLIST_IDES) -
-
(FREEMIUM) Обогащение идентификаторов CVE/GHSA (enrich) -
puncia enrich <cve-id/ghsa-id> <output-file>enrich=trueдействует только для идентификаторовCVE-/GHSA-; он объединяет полную запись вышестоящего бюллетеня с оценкой EPSS + VEDAS.
-
(ПЛАТНО) Идентификаторы не-CVE по группе VEDAS (noncve) -
puncia noncve <browser/china/russia/europe/exploitable> <output-file> -
(БЕСПЛАТНО) Состояние сервиса Subdomain Center (^HEALTH) -
puncia subdomain ^HEALTH <output-file> -
Множественные запросы (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-ключа — автоматически задают темп запросов, чтобы оставаться в рамках бюджета бесплатного уровня. - (FREEMIUM) Формат входного JSON-файла для массовой обработки -
-
(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
Примечательные упоминания
- Passive Subdomain Enumeration: Uncovering More Subdomains than Subfinder & Amass
- Around 1000 exploitable cybersecurity vulnerabilities that MITRE & NIST ‘might’ have missed but China or Russia didn’t.
- Utilizing GitHub Actions for gathering Subdomain & Exploit Intelligence
- Introducing Exploit Observer — More than Shodan Exploits, Less than Vulners
- PUNCIA — The Panthera(P.)uncia of Cybersecurity
- Subdomain Enumeration Tool Face-off - 2023 Edition