대부분의 OSINT 도구는 빠르게 노후화됩니다. 웹 환경이 변하고, 사이트 엔드포인트가 이동하며, 캡차가 진화하면서 도구는 2년 안에 쓸모없게 됩니다. Maigret은 예외입니다. 수년간 운영되어 왔고, 3,000개 이상의 사이트를 지원하며, Python 패키지, Telegram 봇, 웹 UI를 제공합니다. 그리고 그 내부 엔지니어링은 사이트가 변경될 때마다 고장 나지 않는 스캐너를 구축하는 방법에 대한 작은 명품 교과서입니다.
이 가이드는 단순한 조회를 위한 것이 아니라 엔지니어를 위한 것입니다. Maigret이 무엇을 하는지, 이를 정당화하는 합법적인 연구 및 보안 사용 사례, 수천 개의 사이트로 확장할 수 있게 하는 아키텍처, 그리고 Maigret이 사용하는 동일한 테스트 패턴(시그니처 데이터베이스, 드리프트 감지, 재귀적 검증)이 Apidog와 함께 매일 수행하는 API 테스트 작업에 어떻게 적용되는지를 설명합니다.
아직 읽지 않으셨다면, 저희의 2026년 Postman 없이 API 테스트하기 게시물은 좀 더 친숙한 영역에서 유사한 패턴 매칭 및 드리프트 감지 아이디어를 다룹니다.
요약 (TL;DR)
- Maigret은 사용자 이름만을 사용하여 개인에 대한 공개 조서를 수집하며, 3,000개 이상의 사이트에서 계정을 확인하고 공개 프로필 정보를 추출합니다.
- 엔지니어링은 인상적입니다: 버전 관리되는 사이트 시그니처 데이터베이스, 재귀적 검색, 자동 드리프트 감지, 캡차 우회, 그리고 선택적 AI 요약 모드를 갖추고 있습니다.
- 합법적인 사용 사례에는 언론인의 OSINT 조사, 계정 복구, 실종자 수색, 보안 감사 및 기업 브랜드 남용 모니터링이 포함됩니다.
- 승인된 레드팀 활동은 Maigret과 같은 도구를 사용하여 조직의 공개 공격 표면을 매핑합니다. 동의 없이 개인에게 사용하는 것은 괴롭힘 및 스토킹에 해당합니다.
- 아키텍처 아이디어(시그니처 기반 감지, 재귀적 검증, 자동 드리프트 경고)는 API 테스트에 직접 적용될 수 있습니다. Apidog를 사용하여 이를 적용하는 방법을 보여드립니다.
- Apidog를 다운로드하여 Maigret이 사이트를 테스트하는 것과 동일한 방식으로 자체 API에 대한 시그니처 스타일의 어설션을 설계하고 테스트하세요.
Maigret의 정의와 아닌 것
Maigret은 soxoj가 유지 관리하는 MIT 라이선스의 Python 도구입니다. README의 요지는 "3,000개 이상의 사이트에서 사용자 이름을 통해 개인에 대한 조서를 수집합니다"입니다. `pip install maigret`을 실행하고 사용자 이름을 제공하면, 데이터베이스의 사이트들을 조회하고, 발견된 각 계정 뒤에 있는 공개 프로필 정보를 스크랩하여 보고서를 생성합니다.

명확히 해야 할 세 가지 사항이 있습니다.
Maigret은 공개 데이터만 사용합니다. 로그인, 자격 증명 남용, API 키를 사용하지 않습니다. 사이트가 익명 방문자에게 프로필을 노출하면 Maigret은 이를 읽고, 그렇지 않으면 "사용자 이름 없음" 또는 플래그가 지정된 페이지를 반환합니다.
Maigret은 합법적인 연구 맥락에서 널리 사용됩니다. 주요 조사 언론사, 실종자 자원봉사자, 사기 및 브랜드 보호 팀, 승인된 레드팀은 매일 이를 사용합니다. Maigret README 자체에는 학술 OSINT 커리큘럼의 참조 자료가 명시되어 있습니다.
오용될 수 있습니다. 다른 OSINT 도구와 마찬가지로, 동의 없이 개인에게 사용하는 것은 윤리적이며 많은 관할권에서 법적 경계를 넘는 행위입니다. EU, 미국 및 대부분의 다른 지역에서 스토킹 법이 적용됩니다. 누구에게든 이 도구를 사용하기 전에 해당 지역의 규정을 확인하세요.
이 기사의 나머지 부분은 엔지니어링 및 전이 가능한 테스트 패턴에 초점을 맞추며, 사람을 대상으로 하는 워크플로에는 초점을 맞추지 않습니다.
사이트 시그니처 데이터베이스
Maigret의 가장 뛰어난 엔지니어링 아이디어는 사이트 시그니처 데이터베이스입니다. 각 항목은 스캐너가 다음과 같이 결정할 수 있도록 충분한 정보를 가진 하나의 사이트를 설명합니다.
- 이 사이트에 사용자 이름이 존재하는가?
- "발견된" 페이지는 어떻게 생겼는가?
- "발견되지 않은" 페이지는 어떻게 생겼는가?
- 발견된 페이지에서 어떤 정보를 추출할 수 있는가?
- 이 사이트는 속도 제한 또는 캡차를 사용하는가?
이 데이터베이스는 JSON 형식이며, 리포지토리에서 버전이 관리되고, 도구가 실행될 때 24시간마다 한 번씩 GitHub에서 자동으로 업데이트됩니다. 유지 관리자가 최근 변경된 사이트의 시그니처를 업데이트하면, 모든 Maigret 설치가 재설치 없이 다음 날 이를 가져옵니다.
이 패턴은 API 테스트 스위트에서 원하는 것과 정확히 동일합니다. 프로젝트에는 50개, 500개 또는 5,000개의 엔드포인트가 있을 수 있습니다. 각 엔드포인트에는 예상 상태 코드, 응답 형태, 오류 봉투 등의 시그니처가 있습니다. 공급업체가 형태를 변경할 때, 테스트 스위트가 유용한 차이점과 함께 빠르게 실패하기를 원할 것입니다. 우리는 계약 우선 API 개발 및 MCP 서버 테스트 플레이북에서 동일한 아이디어를 다루었습니다.
Maigret이 "사용자 이름 발견"과 "발견되지 않음"을 감지하는 방법
순진한 스캐너는 `https://example.com/user/`에 HTTP GET 요청을 보내고 상태 코드를 확인합니다. 이는 실제 사이트의 약 10%에서만 작동합니다. 나머지 90%는 "그런 사용자 없음" 페이지와 함께 200을 반환하거나, 캐시된 홈페이지와 함께 200을 반환하거나, 캡차 챌린지와 함께 200을 반환합니다.
Maigret의 데이터베이스는 더 풍부한 탐지 규칙 세트로 각 사이트를 설명합니다.
- `urlMain` 및 `url` 템플릿
- `presenseStrs` 목록 (사용자가 존재할 때 나타나야 하는 부분 문자열)
- `absenceStrs` 목록 (사용자가 존재하지 않음을 확인하는 부분 문자열)
- 페이지에서 사용자 이름을 추출하기 위한 정규식
- 선택적 헤더 (일부 사이트는 사용자 정의 사용자 에이전트가 필요함)
- 카테고리 및 국가 태그
"발견" 판정은 모든 `presenseStrs`가 응답에 존재하고 `absenceStrs` 중 어느 것도 없어야 합니다. "발견되지 않음" 판정은 그 반대입니다. 그 외의 모든 것은 사용자가 수동으로 조사할 수 있는 "알 수 없음" 결과입니다.
이는 복잡한 API를 테스트할 때 원하는 것과 동일한 종류의 다중 신호 어설션입니다. 200 상태만으로는 충분하지 않습니다. 본문 내용도 어설션해야 합니다. Apidog는 동일한 요청에서 상태 코드 및 본문 내용 어설션을 모두 지원하며, 이는 Maigret의 `presenseStrs`와 `absenceStrs`를 결합한 API 테스트와 동등합니다.
재귀적 검색 및 정보 추출
Maigret은 계정을 찾으면 두 가지 작업을 더 수행합니다.
추가 식별자(링크된 이메일 주소, 전화번호, 실명, 기타 사용자 이름)를 위해 공개 프로필 페이지를 스크랩합니다. 추출 규칙 또한 시그니처 기반이며, 사이트별로 정의됩니다. LinkedIn 프로필은 GitHub 프로필과는 다른 필드를 제공합니다.
그리고 재귀합니다. 새로운 식별자들은 검색 루프로 다시 피드백되어 연결된 계정 전체로 조서를 확장합니다. 한 사이트의 사용자 이름이 실명으로 이어질 수 있고, 그 이름이 다른 사이트의 다른 계정을 잠금 해제할 수 있으며, 그 계정이 Instagram 핸들로 연결될 수 있는 등입니다.
OSINT의 경우, 이는 "하나의 트위터 계정을 찾았습니다"와 "이 사람을 12개의 서비스에서 추적했습니다"의 차이입니다. API 테스트 스위트의 경우에도 동일한 패턴이 유용합니다. 한 엔드포인트의 응답에서 문서화되지 않은 필드를 발견하면 이를 따라가세요. 종종 관련 엔드포인트, 다운스트림 시스템 또는 누락된 테스트 케이스를 가리킵니다.
캡차 및 속도 제한 처리
Maigret은 응답 형태를 읽어서 캡차를 부분적으로 우회하고 속도 제한을 감지합니다. 우회 전략에는 다음이 포함됩니다.
- 사용자 에이전트 로테이션
- 사이트별 재시도 헤더 준수
- 사이트의 모바일 또는 간소화된 도메인으로 대체
- 사이트가 허용할 경우 Tor 또는 I2P를 통한 라우팅
README는 이것이 부분적임을 솔직하게 밝힙니다. 사이트에 공격적인 자동화 방지 기능이 있는 경우, Maigret은 "캡차 감지"를 기록하고 사용자에게 수동으로 조사하도록 합니다. 이 도구는 적대적인 방어를 무력화하려고 시도하지 않습니다. 기본 익명 액세스를 허용하는 사이트와 함께 작동합니다.
이 패턴은 그대로 적용됩니다. API 클라이언트 또는 테스트 러너를 구축할 때, 속도 제한 응답을 감지하고 우아하게 물러나도록 설계해야 하며, 무차별 대입을 시도해서는 안 됩니다. Maigret이 공급업체 약관을 준수하도록 하는 동일한 방어적인 자세는 API 테스트가 팀의 IP를 차단당하는 것을 방지합니다.
시그니처 드리프트 문제
3,000개 사이트 데이터베이스는 최신 상태를 유지해야만 유용합니다. 사이트는 프로필 페이지를 재설계하거나, URL 패턴을 변경하거나, 캡차를 추가하거나, 인수되어 브랜드를 변경하기도 합니다. 오래된 시그니처는 잘못된 부정(검색에서 아무것도 찾지 못함) 또는 잘못된 긍정(존재하지 않는 계정을 찾음)을 반환합니다.
Maigret은 세 가지 계층으로 이 문제를 해결합니다.
- 중앙 GitHub 리포지토리에서 24시간마다 자동 업데이트
- 개별 사이트 시그니처를 유지 관리하는 커뮤니티 풀 리퀘스트
- 새로운 가져오기를 강제하는 `--update` 플래그
- 각 시그니처를 배포하기 전에 알려진 기존 사용자 이름에 대해 유효성을 검사하는 내장 테스트 하네스
세 번째 항목은 대부분의 엔지니어링 팀이 간과하는 부분입니다. Maigret은 각 사이트에 대해 알려진 기존 사용자 이름(일반적으로 동의한 개발자 또는 유지 관리자)을 유지합니다. 하네스는 해당 사용자 이름을 쿼리하고 시그니처가 여전히 작동하는지 확인합니다. 드리프트가 감지되면 시그니처에 플래그가 지정되고 기여자들이 통지됩니다.
이는 자체 API 계약에 대해 원하는 회귀 스위트와 정확히 동일합니다. Apidog는 동일한 패턴을 지원합니다: 엔드포인트별로 알려진 양호한 응답을 저장하고, 일정에 따라 라이브 엔드포인트에 대해 재생하고, 결과를 비교하고, 드리프트 발생 시 경고합니다. 저희의 DeepSeek V4 API 가이드는 특정 공급업체에 대한 수동적인 측면을 다룹니다.
선택적 AI 요약 모드
`--ai` 플래그는 Maigret의 원시적인 발견 사항을 OpenAI 호환 LLM 엔드포인트를 사용하여 짧은 조사 요약으로 변환합니다. API 키는 사용자가 제공하며, Maigret은 프롬프트와 호출을 구성합니다.
이것은 LLM을 후처리기로 올바르게 사용하는 좋은 예시입니다. 모델은 사용자 이름이 일치하는지 여부를 결정하지 않습니다. 이는 규칙 기반이며 확정적입니다. 모델은 요약만 하며, 이는 모델이 잘하는 일이며, 제약된 입력에서 작동합니다. 환각은 제한됩니다.
동일한 아키텍처는 API 모니터링에도 잘 작동합니다. Apidog의 확정적 규칙 기반 어설션과, 실행 보고서를 Slack 친화적인 요약으로 변환하는 LLM 후처리기가 끝에 있습니다. 저희의 컴퓨터 사용 대 구조화된 API 게시물은 구조화된 계층이 항상 먼저 와야 하는 이유를 설명합니다.
알아둘 가치가 있는 합법적인 사용 사례
Maigret 실행이 명확하게 적절한 다섯 가지 상황입니다.
자신을 위한 계정 복구. 2014년에 사용했던 사용자 이름과 연결된 모든 오래된 계정을 찾습니다. 개인 정보 감사 전이나 디지털 흔적을 제거할 때 유용합니다.
브랜드 남용 모니터링. 기업은 자사 브랜드 또는 제품 이름으로 Maigret을 실행하여 사칭 계정을 탐지합니다. 대부분의 관할권에서는 이러한 종류의 모니터링을 장려하며, 일부는 의무화하기도 합니다.
실종자 자원봉사 활동. 수색 및 구조 및 실종자 조직은 가족의 동의를 얻어 Maigret을 사용하여 디지털 흔적을 추적합니다. 항상 법 집행 기관과 협력해야 합니다. 독자적인 활동은 종종 조사를 더 어렵게 만듭니다.
승인된 레드팀 활동. 계약 범위에 서명한 침투 테스트 팀은 Maigret을 사용하여 조직의 공개 공격 표면을 매핑합니다. 계약이 범위를 정의하고, 도구는 구현일 뿐입니다.
탐사 저널리즘. 사기, 공인 부적절 행위 또는 조직 범죄를 조사하는 기자들은 편집 및 법률 검토 하에 OSINT 도구를 사용합니다.
이 목록에 없는 것: 호기심으로 낯선 사람을 검색하거나, 전 배우자를 감시하거나, 동의하지 않은 사람들에 대한 데이터 세트를 구축하는 것입니다. 이러한 사용은 대부분의 관할권에서 법적 선을 넘고 모든 곳에서 윤리적 선을 넘습니다.
Maigret에서 API 테스트에 적용할 수 있는 패턴
직접 적용할 수 있는 다섯 가지 엔지니어링 아이디어입니다.
수동 코딩된 검사 대신 시그니처 데이터베이스 사용. 각 엔드포인트의 예상 동작을 코드가 아닌 데이터로 정의합니다. 새로운 공급업체는 재컴파일 없이 추가됩니다.
다중 신호 어설션. 상태 코드, 본문 내용, 헤더 검사를 모두 요구합니다. 캐시된 응답이나 일반적인 오류 페이지로 인한 오탐을 줄입니다.
자동 업데이트되는 시그니처. 중앙 리포지토리에서 최신 어설션을 정기적으로 가져옵니다. Apidog 프로젝트는 클라우드 동기화를 지원합니다. 이를 사용하세요. 저희는 Postman 없이 API 테스트하기에서 이 워크플로를 다루었습니다.

드리프트 감지. 알려진 고정값에 대해 주기적인 재생을 예약하고 결과를 비교합니다. 프로덕션에 영향을 미치기 전에 형태 변경을 감지하여 경고합니다.
판단자로서의 LLM이 아닌 후처리기으로서의 LLM. 통과/실패는 확정적 규칙에 맡깁니다. LLM은 보고서를 읽기 쉬운 형태로 변환하는 데만 사용합니다.
이러한 원칙을 적용하면 API 테스트 스위트가 Maigret과 동일한 수명을 얻게 됩니다. 대부분의 테스트 스위트는 한 번 작성된 후 수동으로 코딩되고 업데이트되지 않아 소멸됩니다. Maigret의 아키텍처는 살아남는 테스트 스위트를 위한 모델입니다.
Maigret 실행 시 흔히 저지르는 실수
도구 자체를 실험하는 엔지니어를 위한 것입니다.
`-a` 없이 실행하고 완전하다고 가정하는 것. 기본값은 트래픽 기준 상위 500개 사이트를 스캔합니다. 조사가 롱테일(long tail)을 필요로 한다면, `--a`를 사용하여 전체 3,000개 이상을 스캔하세요. 실행 시간이 더 오래 걸립니다.
태그 무시. `--tags` 플래그는 카테고리 또는 국가별로 범위를 좁힙니다. 러시아나 일본 사용자는 미국 중심의 기본 설정으로는 놓칠 수 있습니다. 태그 필터링을 통해 이를 포착할 수 있습니다.
자동 업데이트 건너뛰기. 오래된 시그니처 데이터베이스는 오탐과 오분류를 생성합니다. 자동 업데이트를 실행하도록 하거나, 중요한 조사를 시작하기 전에 수동으로 `--update`를 사용하세요.
대상 사이트의 허가 없이 Tor에서 실행. 일부 사이트는 Tor 출구 노드를 차단합니다. Maigret은 이를 감지합니다. Tor 차단을 사용자에 대한 신호로 해석하지 마세요.
확인 없이 추출된 필드를 믿는 것. 이 도구는 페이지에 노출된 것을 추출합니다. 페이지는 조작될 수 있습니다. 발견된 내용을 증거가 아닌 단서로 취급하세요.
실제 사용 사례
보안 컨설팅 회사는 모든 레드팀 범위 설정 작업의 첫 단계로 Maigret을 사용합니다. 결과는 초기 보고서에 포함되어 고객이 작업 시작 전에 공개 공격 표면을 확인할 수 있도록 합니다.
프리랜서 사기 조사관은 `--ai` 플래그가 있는 Maigret을 사용하여 3,000개 사이트 스캔 결과를 비기술적 고객을 위한 200단어 요약으로 만듭니다. 확정적 검색은 데이터이고, LLM은 읽기 쉬운 계층입니다.
한 엔지니어링 팀은 동일한 아키텍처 아이디어(시그니처 데이터베이스, 드리프트 감지, 주기적 재생)를 사용하여 200개의 마이크로 서비스에 걸친 내부 API 테스트 스위트를 최신 상태로 유지합니다. 그들은 Apidog에서 이를 구축했으며, 그 원리는 Maigret의 것입니다.
결론
Maigret은 기본 표면이 변경될 때마다 고장 나지 않고 수천 개의 탐지 규칙으로 확장되는 도구를 구축하는 방법에 대한 실제 사례입니다. OSINT 조사를 수행하지 않더라도 엔지니어링은 연구할 가치가 있습니다. 시그니처 데이터베이스, 다중 신호 어설션, 자동 업데이트 데이터, 드리프트 감지 및 LLM 후처리는 모두 매일 수행하는 API 테스트 작업에 적용될 수 있습니다.
다섯 가지 핵심 사항:
- Maigret은 버전 관리되고 자동 업데이트되는 시그니처 데이터베이스를 사용하여 사용자 이름에 대해 3,000개 이상의 사이트를 확인합니다.
- 다중 신호 감지(존재 문자열 + 부재 문자열)는 신뢰성 측면에서 단순한 상태 코드 검사를 능가합니다.
- 드리프트는 모든 장기 실행 테스트 스위트의 적입니다. 알려진 고정값에 대한 주기적인 재생은 이를 조기에 감지합니다.
- 후처리기으로서의 LLM(`--ai` 플래그)은 올바른 아키텍처입니다: 확정적 규칙, 요약된 출력.
- 동일한 패턴이 Apidog의 API 테스트에도 적용됩니다. 우리는 고객의 계약 스위트에 이를 적용했습니다.
다음 단계: Maigret 사이트 데이터베이스 형식을 읽은 다음, Apidog를 열고 프로젝트의 한 엔드포인트를 동일한 방식으로 설계하세요. 시그니처 기반, 다중 신호, 드리프트 감지를 위한 저장된 픽스처를 포함합니다. 이러한 규율은 공급업체가 새벽 2시에 필드 이름을 변경하고 사용자가 알기 전에 스위트가 이를 감지할 때 처음으로 그 가치를 발휘할 것입니다.
FAQ
Maigret 사용은 합법적인가요?
관할권과 대상에 따라 다릅니다. 자신, 소유한 계정, 테스트할 서면 승인을 받은 회사 또는 승인된 저널리즘의 일부로 실행하는 것은 일반적으로 괜찮습니다. 의심하지 않는 개인에게 실행하는 것은 EU, 미국, 영국 및 대부분의 다른 지역에서 스토킹 및 괴롭힘 법률을 위반할 수 있습니다. 제3자를 대상으로 사용하기 전에 해당 지역의 규칙을 확인하세요.
Maigret은 Python 없이 작동하나요?
공식 패키지는 Python 3.10+입니다. 저자는 캐주얼한 조회를 위한 Telegram 봇과 로컬 설치를 원하지 않는 사용자를 위한 Cloud Shell 설정을 유지 관리합니다.
3,000개 사이트 주장은 얼마나 정확한가요?
리포지토리의 사이트 데이터베이스는 3,000개 이상의 항목을 나열합니다. 모든 항목이 항상 활성화되어 있는 것은 아닙니다. 자동 업데이트는 작동하는 하위 집합을 최신 상태로 유지합니다. 태그 필터링은 범위에 중요할 가능성이 있는 사이트에 집중하는 데 도움이 됩니다.
AI 모드는 무엇을 추가하나요?
`--ai` 플래그는 OpenAI 호환 LLM을 사용하여 확정적 발견 사항을 읽기 쉬운 보고서로 요약합니다. 검색 자체를 변경하지 않으며, 단지 후처리만 합니다. API 키는 직접 준비해야 합니다.
CI에서 Maigret을 사용할 수 있나요?
OSINT 조사에는 사용할 수 없습니다. 이는 상호작용적인 작업입니다. Maigret이 사용하는 아키텍처 패턴(시그니처 데이터베이스, 드리프트 감지, 예약된 재생)은 API 테스트를 위한 CI 파이프라인에 속해야 할 것입니다. Apidog는 이를 기본적으로 구현합니다.
Sherlock과는 어떻게 다른가요?
Sherlock은 더 오래되고 간단한 조상입니다. Maigret은 정보 추출, 재귀적 검색, 캡차 처리, AI 요약 모드, 그리고 더 풍부한 사이트 데이터베이스로 확장되었습니다. 둘 다 MIT 라이선스이며 알아둘 가치가 있습니다.
오래된 시그니처는 어디에 보고해야 하나요?
README는 Maigret 리포지토리의 GitHub 이슈 및 풀 리퀘스트를 가리킵니다. 커뮤니티 기여는 데이터베이스를 최신 상태로 유지하며, 오래된 사이트당 하나의 PR이 일반적입니다.
