
puncia v0.36
Panthera(P.)uncia - Subdomain Center 및 Exploit Observer를 위한 공식 CLI 유틸리티.
Panthera(P.)uncia
Subdomain Center & Exploit Observer 공식 CLI 유틸리티
Puncia는 두 가지 A.R.P. Syndicate 인텔리전스 API를 위한 공식 커맨드라인 클라이언트입니다. 도메인, 브랜드 또는 취약점 ID를 지정하면 브라우저 없이 몇 초 만에 구조화된 JSON을 반환합니다:
- 🕸️ Subdomain Center — 인터넷 규모의 서브도메인 열거, 서브도메인 탈취 탐지, 섀도우 IT 발견, 그리고 브랜드 사칭 / 유사 도메인(타이포스쿼팅) 탐지.
- 💥 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
실용적 활용 사례
- 브랜드 사칭 및 피싱 도메인 탐지
귀하나 고객을 대상으로 악용되기 전에 귀하의 브랜드를 이용하는 복제, 유사, 타이포스쿼팅 도메인을 찾아냅니다. - 섀도우 IT 및 외부 공격 표면 발견
공식 채널 외부에서 생성된 노출된 서브도메인과 인프라를 식별하고 모니터링합니다. - 서브도메인 탈취 정찰
대상의 전체 서브도메인 범위를 열거하며, 이는 방치되거나 탈취되기 쉬운 레코드를 발견하는 핵심 첫 단계입니다. - 고급 취약점 연구 및 모니터링
잘 알려지지 않았거나 목록에 없는 취약점을 포함하여 알려진 위협과 신종 위협을 발견하고 추적합니다. - CVE/GHSA 데이터의 맥락적 보강
알려진 취약점에 깊이와 실행 가능한 인텔리전스(EPSS + VEDAS 성숙도 점수)를 추가하여 우선순위를 더 잘 정할 수 있습니다. - 소프트웨어 자재 명세서(SBOM) 내 취약점 탐지
구조화된 SBOM 데이터를 사용하여 소프트웨어 구성 요소의 알려진 익스플로잇 및 보안 문제를 분석합니다. - CI/CD 및 위협 인텔리전스 워크플로와의 원활한 통합
개발 또는 보안 파이프라인 내에서 인텔리전스 수집과 취약점 검사를 자동화합니다. - 국가 지원 익스플로잇 동향 모니터링
주류 데이터베이스에서는 아직 인식되지 않았지만 외국 행위자들이 표시한 취약점을 추적하여 위협보다 앞서 나갑니다. - 키워드 기반 서브도메인 발견
특정 상위 도메인과 무관하게 인터넷 전반에서 주어진 키워드를 포함하는 호스트를 찾아냅니다. - 대량 위협 인텔리전스 처리
대규모 데이터셋이나 기업 자산 인벤토리 전반에 걸친 확장 가능한 분석을 위해 배치 쿼리(도메인, 취약점 등)를 실행합니다. - 레드팀을 위한 수동 정찰
수동 데이터 소스를 사용하여(대상과 직접 상호작용 없이) 은밀한 정찰을 수행합니다. - 오픈 소스 인텔리전스(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에서 원하는 방식입니다.
-
(프리미엄) 도메인 쿼리, 도메인별 클러스터링(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
- 페이지네이션(인증된 경우에만): 인증된 결과에는 총
상한이 없습니다. 기본적으로
-
(프리미엄) 복제 도메인 쿼리, 브랜드별 클러스터링(replica /
octopus엔진) -puncia replica <domain> --match <prefix|exact|substring> <output-file> -
(프리미엄) 키워드로 쿼리, 키워드별 클러스터링(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> - (프리미엄) 지원되는 취약점 식별자 -
puncia exploit <eoidentifier> --match <substring|prefix|exact> <output-file>
- (무료) 취약점 및 익스플로잇 식별자 감시 목록(^WATCHLIST_IDES) -
-
(프리미엄) CVE/GHSA 식별자 보강(enrich) -
puncia enrich <cve-id/ghsa-id> <output-file>enrich=true는CVE-/GHSA-식별자에만 적용되며, 전체 업스트림 권고 레코드를 EPSS + VEDAS 점수와 병합합니다.
-
(유료) VEDAS 그룹별 비CVE 식별자(noncve) -
puncia noncve <browser/china/russia/europe/exploitable> <output-file> -
(무료) Subdomain Center 서비스 상태(^HEALTH) -
puncia subdomain ^HEALTH <output-file> -
다중 쿼리(bulk/sbom)
- (프리미엄) 대량 입력 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" ] } - (프리미엄) SBOM 입력 JSON 파일 형식 -
puncia sbom <json-file> <output-directory>
Bulk 및 SBOM 실행은 쿼리를 중복 제거하고, 병렬성을
--concurrency(기본값 10)로 제한하며, API 키가 없을 때는 무료 티어 예산 내에 머물도록 요청 속도를 자동으로 조절합니다. - (프리미엄) 대량 입력 JSON 파일 형식 -
-
(프리미엄) 외부 임포트
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가 발생하며, 빈 결과({} / [])는
오류로 처리되지 않고 그대로 반환됩니다. process_bulk()가 하는 것과
정확히 동일하게 session=과 공유 limiter=를 전달하여 여러 쿼리에 걸쳐
하나의 세션을 재사용하세요.
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