Cómo Have I Been Squatted construyó certgrep.sh, un buscador gratuito de certificados con regex

Fuentes: Building certgrep.sh: a free certificate transparency search engine

El equipo de Have I Been Squatted ha presentado certgrep.sh, un motor público y gratuito para buscar dominios en los registros de Certificate Transparency (CT) mediante expresiones regulares. La herramienta surge de una necesidad interna: su pipeline de detección contra typosquatting y phishing necesitaba consultar CT a gran escala, pero las opciones públicas eran poco fiables o demasiado lentas, y las APIs comerciales resultaban caras para un uso intensivo.

La clave del diseño es renunciar a almacenar los certificados enteros. Los autores argumentan que lo relevante para los analistas no es el certificado, sino la aparición de nombres de dominio completos en una ventana temporal reciente, normalmente 90 días. Los logs públicos de CT actúan como almacén frío y el índice solo guarda punteros y metadatos mínimos sobre los FQDN.

La primera versión del motor se apoyó en transductores de estados finitos (FST) en Rust, aprovechando que las búsquedas cuestan tiempo proporcional a la longitud de la clave y que la estructura se puede mapear en memoria y combinarse con autómatas de expresiones regulares. Para soportar búsquedas por sufijo, el equipo mantuvo un segundo FST con las etiquetas invertidas, y para coincidencias aproximadas empleó el autómata de Levenshtein integrado en la crate fst. El sistema funcionó en producción unos tres meses, pero gestionar un FST inmutable sobre un flujo continuo de millones de entradas diarias obligó a construir a mano una capa similar a un árbol LSM, con instantáneas, compactación y rotación.

Esa complejidad llevó al equipo a replantear la arquitectura para poder ofrecer el servicio de forma abierta y sostenible. El artículo describe el problema de fondo, la decisión de tratar los dominios como dato principal y el camino técnico recorrido, deteniéndose antes de detallar el rediseño posterior que hizo viable regalar la herramienta.