
※ 이 글은 Criminal IP 사용자들이 자주 겪는 검색 실패 사례와 필터 사용 실수를 정리한 실전 안내서다.
앞으로는 더 다양한 쿼리를 유연하게 활용할 수 있도록, Criminal IP도 지속적으로 개선해 나갈 예정이다.
Criminal IP에서는 태그(tag)와 필터(filter)를 조합해 다양한 위협 인프라를 탐지할 수 있다. 하지만 간혹 원하는 결과가 전혀 나오지 않을 때가 있다. 이런 경우 상당수는 실제 보안 인프라에 문제가 있다기보다, 문법 오류나 필드 오용, 우선순위 혼동 등 기본적인 쿼리 작성 실수에서 비롯된다.
이번 글에서는 자주 발생하는 쿼리 작성 실수를 정리하고, Criminal IP를 더욱 정확하고 효과적으로 활용하는 방법을 소개한다.
실수 1: 국가명을 코드 대신 텍스트로 입력
- ❌country: Korea
✅country: KR
Criminal IP의 country 필터는 ISO 3166-1 alpha-2 형식의 국가 코드만 인식한다. “Korea” 또는 “South Korea”와 같은 일반 텍스트는 필터로 작동하지 않으며, 반드시 아래와 같이 두 자리 코드로 입력해야 한다.
| 국가명 | 올바른 코드 |
|---|---|
| 대한민국 | KR |
| 미국 | US |
| 일본 | JP |
| 독일 | DE |
| 중국 | CN |
| 러시아 | RU |
| 프랑스 | FR |
| 인도 | IN |
| 베트남 | VN |
| 브라질 | BR |
| 캐나다 | CA |
| 싱가포르 | SG |
| 이란 | IR |
| 우크라이나 | UA |
| 튀르키예 | TR |
💡 예시:
country:KR AND tag:C2→ 한국 내 C2 서버 탐지
실수 2: 필드명 오타 또는 미지원 필드
- ❌ ssl: expired
- ✅ ssl_expired: true
Criminal IP에서는 정의된 필드명만 인식하며, 존재하지 않는 필드나 오타는 검색에 반영되지 않는다. 예를 들어, SSL 인증서 만료 여부를 탐지하려면 정확한 필드명인 ssl_expired를 사용해야 한다.
🔎 전체 필드 목록은 Criminal IP > Resources > Filters, Tags에서 확인할 수 있다.
실수 3: AND/OR 우선순위 혼동
- 입력 쿼리: tag: C2 AND port: 80 OR port: 443
이 쿼리는 C2 태그를 가진 인프라 중 80번 포트가 열린 것과 무관하게, 443번 포트가 열린 모든 인프라도 함께 탐지된다.
💡 Criminal IP의 검색 로직에서는
AND가OR보다 먼저 적용된다.
즉, 위 쿼리는 내부적으로 다음과 같은 논리로 해석된다: (tag C2 AND port: 80) OR port: 443
사용자 의도와 달리, tag: C2 조건이 port: 443 에는 적용되지 않기 때문에
불필요한 결과가 포함되거나, 오탐 가능성이 커질 수 있다.
정확한 조건 조합이 필요하다면, AND 기준으로 묶인 쿼리를 각각 나눠서 실행하는 것이 가장 명확하다:
- ✅ tag:C2 AND port: 80
- ✅ tag:C2 AND port: 443
🔍 위처럼 조건을 명확히 분리하면 오탐을 줄이고, 원하는 결과에 더 빠르게 접근할 수 있다.
실수 4: 쌍따옴표 미사용 필드
- ❌ tag: SSL VPN
- ✅ tag: “SSL VPN”
띄어쓰기가 포함된 문자열은 쌍따옴표(” “)로 묶어야 하나의 조건으로 인식된다.
그렇지 않으면 “SSL”과 “VPN”이 각각 다른 조건으로 해석된다.
💡 해당 필드:
title,as_name,ssl_issuer_organization등
실수 5: 대소문자 구분?
Criminal IP의 필터는 대소문자를 구분하지 않는다.
즉, 다음의 세 가지 쿼리는 모두 동일하게 작동된다.
- tag: cobalt strike
- tag: Cobalt Strike
- tag: COBALT STRIKE
하지만 " " 사용 여부 등 구문 구조는 반드시 지켜야 한다.
보너스: 유용한 필터 키워드 모음
| 필드명 | 설명 |
|---|---|
| tag | 자산의 특성 (예: C2, IoT, DevOps 등) |
| port | 열려 있는 포트 번호 (예: 80, 443, 2375 등) |
| ssl_expired | SSL 인증서 만료 여부 (true/false) |
| cloud_provider | AWS, Azure, Google 등 클라우드 사업자 |
| hostname | 호스트명 (예: ec2, vultr) |
| as_name | 통신사 또는 클라우드 기업명 (예: Amazon) |
| country | 2자리 국가 코드 (예: KR, US, RU) |
결론
Criminal IP는 단순한 키워드 검색이 아닌, 정확한 필터 조합과 조건 구성으로 고도화된 위협 인프라를 탐지할 수 있는 플랫폼이다.
문법을 이해하고, 필드를 정확히 사용하는 것만으로도 더 많은 위협을 더 빠르게 발견할 수 있다.
이번 실수 체크리스트를 참고해 쿼리 실수를 줄이고, 더 효율적인 Threat Hunting 전략을 수립해보자.
관련하여 Criminal IP Dorks Cheat Sheet: 실전 위협 인텔리전스 쿼리 가이드 (2편) 글을 참고할 수 있다.
데이터 출처 : Criminal IP (https://www.criminalip.io/ko)
관련 글 :
