
신규 등록 도메인을 브랜드 키워드에 대해 모니터링하고 DNS 및 VT 검증을 통해 도메인 스쿼팅, 타이포스쿼팅 및 피싱 유사 도메인을 탐지하는 OSINT 도구입니다.
openSquat은 브랜드나 도메인을 표적으로 하는 사이버 스쿼팅 위협을 식별하는 오픈 소스 인텔리전스(OSINT) 보안 도구입니다:
"브랜드 보호를 위한 강력한 만능 도구" — WhoisXML API 블로그, 2022년 8월
"타이포스쿼팅 및 관련 모든 사이버 장난과 싸우는 엄청난 힘을 가진 도구" — WhoisXML API 블로그, 2022년 8월
"새로 등록된 도메인 정보 수집에 유용한 도구" — 피싱 탐지 도구 Top 5 선정 — SOCRadar 블로그, 2022년 7월
"openSquat은 자동화된 모니터링 및 탐지를 통해 도메인 스쿼팅 및 피싱 공격에 대한 필수적인 보호를 제공합니다." — Prince Yadav, TutorialsPoint, 2026년 3월
"OpenSquat은 103개의 스쿼팅 도메인, 960개의 활성 피싱 웹사이트, 53개의 의심스러운 인증서가 있는 도메인을 식별했습니다." — Sharma 외, 정보 보안 및 사이버 범죄 연구 저널 (JISCR), 7권 1호, 2024년 6월
openSquat은 오픈코어 모델을 따릅니다:
이 모델은 투명성과 커뮤니티 협업을 가능하게 하면서, 기업 환경의 규모, 신뢰성 및 운영 요구 사항을 지원합니다.
pip install opensquat
opensquat -k keywords.txt
git clone https://github.com/atenreiro/opensquat
cd opensquat
pip install -r requirements.txt
python3 opensquat.py -k keywords.txt
리포지토리 사용자: 아래 모든 예제에서
opensquat대신python3 opensquat.py를 사용하여 클론된 체크아웃에서 실행하세요.
confusable_homoglyphs, homoglyphs, colorama, requests, dnspython, beautifulsoup4# 기본 실행
opensquat
# 모든 옵션 보기
opensquat -h
# 사용자 정의 키워드 파일 사용
opensquat -k my_keywords.txt
# Quad9를 통한 DNS 검증
opensquat --dns
# 인증서 투명성 로그 확인
opensquat --ct
# 열린 포트 스캔 (80/443)
opensquat --portcheck
# 피싱 데이터베이스 상호 참조
opensquat --phishing results.txt
# JSON으로 저장
opensquat -o results.json -t json
# CSV로 저장
opensquat -o results.csv -t csv
참고: API 측(
--api)에서는 5가지 신뢰도 수준이 4가지 퍼지 값(exact,low,auto,high)에 매핑됩니다 —-c 3과-c 4는 모두high로 매핑됩니다. 전체 매핑 및--api-fuzziness로 재정의하는 방법은 프리미엄 및 API 모드를 참조하세요.
openSquat은 세 가지 모드를 지원합니다. 기본(커뮤니티)은 변경되지 않았으므로 기존 사용자는 플래그가 필요하지 않습니다. 두 프리미엄 모드는 단일 openSquat API 키를 공유합니다. 더 큰 피드와 동일한 로컬 탐지 파이프라인을 원하면 프리미엄 피드, 로컬 피드 다운로드 없이 서버 측 탐지를 원하면 프리미엄 API를 선택하세요.
opensquat.com에 가입하여 키를 받으세요. 동일한 키가 프리미엄 피드(--premium)와 프리미엄 API(--api) 모두에서 작동합니다.
--api-key YOUR_KEYOPENSQUAT_API_KEY 환경 변수api_key.txt 파일 (파일당 하나의 키, # 주석 허용)CLI 플래그는
ps출력에 표시됩니다. 공유 환경에서는 환경 변수나 키 파일을 선호하세요.
# 프리미엄 피드 모드 — 동일한 로컬 파이프라인, 더 큰 피드
export OPENSQUAT_API_KEY=os_xxxxxxxxxxxx
opensquat -k keywords.txt --premium
# 프리미엄 API 모드 — 키워드별 서버 측 탐지
opensquat -k keywords.txt --api
# 프리미엄 API + 반환된 각 도메인의 DNS 평판 확인
opensquat -k keywords.txt --api --dns
# 키워드별로 그룹화된 JSON 출력의 프리미엄 API
opensquat -k keywords.txt --api -t json -o results.json
# 프리미엄 API 검색 조정
opensquat -k keywords.txt --api --api-fuzziness high --api-history-days 7 --api-max-results 200
--premium 또는 --api가 키를 성공적으로 로드하면 CLI는 마스킹된 확인 줄을 출력하여 키가 유출되지 않으면서 어떤 키가 선택되었는지 확인할 수 있습니다:
[*] API key loaded: os_gL...L5Mb
프리미엄 API 모드에서 실행 요약은 활성 모드, 수행된 API 호출 수, 사용 델타를 포함한 남은 잔액(예: 4972 (used 4 of 4976 this run))을 보고합니다. 호출이 병렬로 실행되더라도 키워드별 진행 줄은 키워드 파일의 순서와 동일하게 나타납니다. 할당량 소진(HTTP 429)은 부분 결과를 우아하게 반환합니다. 인증 오류(401) 및 요금제 오류(403)는 명확한 메시지와 함께 중단됩니다.
백엔드가 요청을 속도 제한하는 경우(HTTP 429, Retry-After 헤더 있음), 도구는 이를 할당량 소진과 구별합니다. 빨간색 quota exhausted 메시지 대신 노란색 [!] Rate limit hit (retry in Ns) 경고가 표시되고, 부분 결과가 계속 반환되며, 요약에는 실제 API 잔액이 보존되어 실제로 사용된 크레딧 수를 정확히 확인할 수 있습니다. 대규모 스캔 시 속도 제한을 피하려면 --api-rate-limit N을 전달하여 모든 작업자 간의 초당 아웃바운드 요청 수를 제한하세요. 대부분의 백엔드에서 8은 안전한 시작 값입니다.
# 모든 작업자 간 초당 8개의 요청으로 제한
opensquat -k keywords.txt --api --api-rate-limit 8
프리미엄 API 모드에서는 JSON 출력 형식을 권장합니다. API는 도메인별 메타데이터(등록된 TLD, NRD 첫 발견 날짜, IDN 호모그래프 플래그, 호모그래프의 유니코드 표현)를 반환하는데, 다른 형식은 이를 깔끔하게 전달할 수 없기 때문입니다.
opensquat -k keywords.txt --api -t json -o results.json
프리미엄 API 모드의 풍부한 출력 예시 (일부 생략):
[
{
"keyword": "microsoft",
"domains": [
{"domain": "securite-microsoft.fr", "tld": "fr", "date": "09-04-2026", "idn": false},
{"domain": "xn--mirosoft-hw7c.com", "tld": "com", "date": "09-04-2026", "idn": true, "unicode": "miᴄrosoft.com"}
]
}
]
idn 플래그와 unicode 표현을 통해 xn--mirosoft-hw7c.com이 실제로 ᴄ (라틴 문자 작은 대문자 C)를 사용하여 "microsoft"의 'c'를 가장한 것임을 한눈에 알 수 있습니다. 이 정보는 일반적인 퓨니코드 문자열로는 완전히 숨겨집니다.
CSV 출력도 지원되며, 도메인당 한 행에 동일한 메타데이터 열을 제공하므로 Excel 또는 pandas에서 작업하는 분석가에게 적합합니다:
opensquat -k keywords.txt --api -t csv -o results.csv
CSV는 UTF-8 BOM으로 작성되어 Windows의 Excel에서 유니코드 호모그래프 열을 올바르게 렌더링합니다.
커뮤니티 및 프리미엄 피드 모드는 동일한 JSON 최상위 구조를 출력하여 모드 간 일관성을 유지하지만, 항목당 domain 필드만 채워집니다. NRD 피드는 호스티드 API에서만 사용 가능한 도메인별 메타데이터를 포함하지 않습니다:
[
{
"keyword": "microsoft",
"domains": [
{"domain": "mirosoft.com"},
{"domain": "mcrosoft.net"}
]
}
]
--api-key를 전달하면서 --premium 또는 --api를 선택하지 않으면 CLI는 커뮤니티 모드에서 키가 무시된다는 한 줄 힌트를 출력합니다(무음 모드 전환 없음).
프리미엄 API 모드에서 -c/--confidence는 자동으로 API 퍼지로 매핑됩니다(0→exact, 1→low, 2→auto, 3→high, 4→high). 재정의하려면 --api-fuzziness를 사용하세요.
프리미엄 API(--api)는 --doppelganger 및 -d/--domains와 호환되지 않습니다.
keywords.txt)# #으로 시작하는 줄은 주석입니다
mycompany
mybrand
myproduct
vt_key.txt)--vt 또는 --subdomains를 사용하려면 API 키를 추가하세요:
# https://www.virustotal.com에서 무료 API 키를 받으세요
your_api_key_here
api_key.txt)--premium 및 --api에 필요합니다. 작업 디렉터리에 api_key.txt 파일을 만드세요:
# https://opensquat.com에서 키를 받으세요
# #으로 시작하는 줄은 무시되며, 첫 번째 주석이 아닌 줄이 사용됩니다.
os_your_key_here
CLI는 다음 순서로 키를 확인합니다: --api-key 플래그 → $OPENSQUAT_API_KEY 환경 변수 → api_key.txt 파일. CLI 인수가 ps를 통해 표시되므로 공유 환경에서는 CLI 플래그보다 환경 변수와 파일 방식을 권장합니다.
crontab을 통해 매일 실행:
# pip 설치 (권장) — 매일 오전 8시, 피드는 ~7:30 UTC에 업데이트
0 8 * * * cd /path/to/workdir && opensquat -k keywords.txt -o results.json -t json
# 리포지토리 체크아웃 — python3로 opensquat.py 직접 호출
0 8 * * * cd /path/to/opensquat && python3 opensquat.py -k keywords.txt -o results.json -t json
api_key.txt(현재 디렉터리에서 확인)에 의존하거나results.json을 특정 위치에 쓰려면 작업 디렉터리로cd하는 것이 중요합니다.
기여를 환영합니다! 자세한 내용은 기여 가이드를 참조하세요.
Andre Tenreiro — LinkedIn · PGP 키
이 프로젝트는 GNU GPL v3 라이선스 하에 배포됩니다.
| 위협 유형 | 설명 |
|---|
| 🎣 피싱 | 브랜드를 사칭하는 사기 도메인 |
| 🔤 타이포스쿼팅 | 일반적인 오타가 포함된 도메인 (예: gooogle.com) |
| 🌐 IDN 호모그래프 | 다른 문자 체계의 유사 문자 사용 |
| 👥 도펠갱어 | 브랜드 이름을 포함하는 도메인 |
| 🔀 비트스쿼팅 | 도메인 이름의 단일 비트 오류 |
| 수준 | 플래그 | 설명 |
|---|
| 0 | -c 0 | 매우 높음 (결과 적음, 정확도 높음) |
| 1 | -c 1 | 높음 (기본값) |
| 2 | -c 2 | 중간 |
| 3 | -c 3 | 낮음 |
| 4 | -c 4 | 매우 낮음 (결과 많음, 오탐 많음) |
| 모드 | 플래그 | 설명 |
|---|
| 커뮤니티 (기본) | (없음) | 무료 NRD 피드(~10만 도메인/일)를 다운로드하고 로컬 Levenshtein 탐지를 실행합니다. |
| 프리미엄 피드 | --premium | openSquat API 키를 사용하여 유료 NRD 피드(nrd-lite, 훨씬 큼)를 다운로드한 후 동일한 로컬 Levenshtein 탐지를 실행합니다. |
| 프리미엄 API | --api | 로컬 피드 다운로드를 건너뜁니다. 키워드별로 openSquat 유사 도메인 REST API를 질의하고 서버 측 일치 항목을 반환합니다. |
| 인수 | 기본값 | 설명 |
|---|
-k, --keywords | keywords.txt | 검색할 키워드 파일 |
-o, --output | results.txt | 출력 파일 이름 |
-t, --type | txt | 출력 형식: txt, json, csv |
-c, --confidence | 1 | 신뢰도 수준 (0-4). --api 모드에서는 자동으로 퍼지로 매핑됨 (-c 3 및 -c 4 모두 → high). |
-d, --domains | — | 다운로드 대신 로컬 도메인 파일 사용 |
-u, --url | openSquat 피드 | 도메인 피드를 다운로드할 URL |
--dns | — | Quad9 DNS 검증 활성화 |
--doppelganger | — | 도펠갱어 전용 모드 (키워드가 도메인에 포함됨 + 연결 가능성 확인) |
--ct | — | 인증서 투명성 로그 검색 |
--phishing | — | 피싱 데이터베이스 상호 참조 |
--subdomains | — | VirusTotal을 통해 서브도메인 가져오기 |
--portcheck | — | 열린 포트 80/443 확인 |
--vt | — | VirusTotal로 검증 |
--premium | — | 프리미엄 피드 모드 — 유료 NRD 피드 사용 (openSquat API 키 필요) |
--api | — | 프리미엄 API 모드 — 키워드별 openSquat 유사 도메인 REST API 질의 (로컬 피드 없음) |
--api-key | — | openSquat API 키 (또는 $OPENSQUAT_API_KEY 설정 또는 api_key.txt 사용) |
--api-fuzziness | (-c에서) | 프리미엄 API 모드: exact, low, high, 또는 auto |
--api-history-days | — | 프리미엄 API 모드: NRD 기록 기간(일 단위, 요금제 상한으로 제한됨) |
--api-max-results | — | 프리미엄 API 모드: 키워드당 최대 결과 수 (요금제 상한으로 제한됨) |
--api-rate-limit | (무제한) | 프리미엄 API 모드: 모든 작업자 간 초당 최대 아웃바운드 요청 수 |