El equipo de seguridad Slow Fog (Niebla Lenta) lanza oficialmente MistEye DNS Guard: una herramienta local ligera de relay DNS y observación de amenazas, escrita en Rust. Ofrece a los equipos con macOS y Linux la capacidad de asumir el DNS del sistema, detectar nombres de dominio y IP públicas, observar conexiones salientes de procesos, conservar eventos maliciosos y enviar alertas mediante Webhook. Se centra en cubrir escenarios de riesgo comunes como el acceso a dominios maliciosos, la devolución de respuestas DNS con indicadores maliciosos y la conexión directa de programas a IP maliciosas.

MistEye DNS Guard desacopla la transmisión de DNS y la detección de amenazas posterior: las consultas se completan sin cambios; los nombres de dominio y las direcciones IP se incorporan de forma asíncrona al sistema de detección de MistEye en segundo plano, con el objetivo de reducir al máximo el impacto de las comprobaciones de seguridad en el acceso normal a la red.

El usuario no necesita desplegar una base de datos ni una cola de mensajes: descarga el programa precompilado y prepara una configuración TOML para ejecutarlo; la consola web está incrustada en el programa principal; los registros de observación, la cola de detección y los eventos maliciosos se guardan en SQLite local. Se puede usar tanto para resolver problemas de forma temporal como para dejarlo en la máquina de desarrollo, de pruebas o en el servidor para observar de manera continua.

I. Antecedentes: el riesgo de red del host deja primero pistas de dominio y de IPs de salida

Normalmente, para acceder a una página desde el navegador, descargar dependencias desde la línea de comandos, comprobar actualizaciones en software de escritorio y que los servicios en segundo plano se conecten a interfaces remotas, primero se completa la resolución de dominios; por eso, el DNS suele ser una entrada importante para observar la actividad de la red del host.

Pero las pistas de riesgo no existen solo en DNS. Algunos programas eluden la resolución de dominios y se conectan directamente a IPs públicas codificadas en duro; incluso si ya se detectó una IP desconocida, aún es necesario confirmar qué proceso, qué PID inició la conexión y a qué puerto se conectó.

En el día a día de desarrollo y trabajo de oficina, estas pistas no suelen verse de forma continua.

• Los logs del sistema normalmente no conservan completamente cada consulta DNS y conexión saliente del proceso;

• El análisis con captura de paquetes es adecuado para análisis específico, pero no para ejecutarse a largo plazo en un host normal;

• Solo mirar dominios no puede cubrir los casos en que el programa elude DNS, o cuando se conecta directamente a una IP pública;

• Solo ves IPs desconocidas y aun así no siempre puedes confirmar rápidamente el proceso correspondiente y el archivo ejecutable;

• Cuando fallen temporalmente DNS, la API de detección o el servicio de alertas, las tareas de observación que no se persisten pueden perderse fácilmente.

El problema más realista es que muchas personas solo empiezan a buscar evidencias de red después de que el navegador muestre una página de error, la cuenta tenga comportamientos anómalos o el host se vuelva claramente más lento. En ese momento, preguntar “qué se visitó hace un momento” suele ser imposible porque ya no hay registros continuos.

Basado en el seguimiento a largo plazo de infraestructura maliciosa y amenazas desde el lado de la red, MistEye posiciona el DNS Guard como una capa de observación ligera desplegada en el host local: la entrada principal de observación es el Relay DNS local, y se complementa con observación opcional de conexiones salientes del proceso en escenarios donde se conectan directamente IPs públicas. Sin descifrar ni inspeccionar el contenido de aplicaciones HTTP/HTTPS, la herramienta registra los dominios relevantes, las IP públicas y el origen del proceso que sea posible confirmar, y luego entrega esa información a las capacidades de inteligencia de amenazas de MistEye para su detección.

II、Capacidades principales: ejecución ligera, resolución DNS normal, detección continua de riesgos

El principio central de MistEye DNS Guard es muy claro:

El reenvío DNS normal no espera la detección de seguridad; los dominios e IPs observados se detectan, se guardan y se alertan en segundo plano.

La versión actual registra y, según sea necesario, alerta cuando se encuentra un resultado malicioso, pero no modifica la respuesta DNS ni bloquea automáticamente el acceso. Funciona más como un “puesto de observación” desplegado junto a la ruta DNS del host: se encarga de exponer las pistas de riesgo lo antes posible y de proporcionar evidencias para las acciones posteriores.

2.1 Modo de ejecución ligera

La “ligereza” de MistEye DNS Guard no es simplemente recortar funciones; consiste en reducir al máximo el coste de despliegue y mantenimiento de un conjunto de herramientas de observación a nivel de host.

La herramienta no requiere que el usuario construya primero una nueva infraestructura de seguridad. Incluso sin configurar Webhook, puede ejecutarse de forma independiente; cuando necesites integrar con una plataforma de alertas, solo configura la dirección de Webhook.

2.2 Cinco escenarios principales de observación

La consulta DNS y la conexión de salida del proceso son dos rutas de observación complementarias.

El primero es adecuado para descubrir “qué dominio se visitó”; el segundo se usa para completar “qué programa está conectando a qué IP pública”. Incluso si un programa no inicia consultas de dominio y, en su lugar, conecta directamente una IP codificada en duro, todavía hay posibilidades de que la observación de conexiones salientes lo capture.

2.3 DNS upstream compatibles y objetos de detección

MistEye DNS Guard en sí es un relay DNS local UDP/TCP; el upstream puede seleccionarse según el entorno de red real: DNS tradicional o DNS cifrado:

Cuando la dirección upstream usa un nombre de dominio, se puede configurar un bootstrap IP independiente para evitar depender nuevamente del DNS del propio servicio upstream al resolver, evitando así un bucle de resolución (loop).

Los objetos a observar e incluir en la cadena de observación/detección actual son:

• El dominio en la consulta DNS;

• CNAME y ANAME en la respuesta DNS;

• Dirección IPv4 pública en un registro A;

• Dirección IPv6 pública en registros AAAA;

• IP pública que se encuentra mediante observación opcional de conexiones salientes del proceso.

Las IPs no públicas, como las direcciones loopback y las IPs de red interna, no se envían como indicadores de amenaza externa. Los usuarios también pueden agregar dominios precisos, subdominios con comodín o listas blancas de IP exactas en la configuración para omitir objetivos internos claramente confiables.

2.4 Ventana de observación con deduplicación configurable y detección asíncrona

Las consultas DNS tienen una repetitividad evidente. Durante la carga de una misma página web, un dominio puede resolverse varias veces; el software en segundo plano también accede periódicamente a servicios fijos. Si cada vez que se observa se vuelve a enviar de inmediato, no solo se incrementan solicitudes sin sentido, sino que también se vuelve ruidoso el contenido de alertas y logs.

MistEye DNS Guard permite personalizar la ventana de observación mediante window_seconds; el rango es 1–86400 segundos y el valor predeterminado es 120 segundos. El sistema agrega y elimina duplicados de los mismos indicadores que aparezcan dentro de la ventana, y conserva el número real de observaciones. Al finalizar la ventana, el dominio y la IP entran en una cola persistente de detección, la cual es consumida por tareas en segundo plano mediante la API de MistEye.

Los usuarios pueden ajustar este tiempo según su entorno de ejecución: si deseas obtener resultados de detección más rápido, usa una ventana más corta; si deseas reducir solicitudes repetidas, puedes ampliarla un poco. El valor predeterminado ofrece una referencia general, sin obligar a que todos los escenarios sean idénticos.

El proceso de detección posterior no está en la ruta crítica del reenvío DNS:

Consulta DNS → Relay local → DNS upstream → devuelve el resultado de resolución normal
               │
               └→ Observación asíncrona → Agregación por ventana de configuración → Detección de MistEye → Almacenar / Alertar

Aunque la API de MistEye, Webhook o SQLite respondan más lento en algún momento, las solicitudes DNS normales no necesitan esperar a que se complete toda la cadena de detección.

Atribución de evidencias y fuentes tras un impacto malicioso

Los resultados de la detección no deben limitarse a una sola frase “hay riesgo”. Lo que el usuario necesita es saber qué se detectó y desde dónde consultar a continuación.

Para eventos de IP maliciosa, MistEye DNS Guard intentará conservar la información de origen observada en el momento del acierto:

• Nombre del programa de origen;

• PID;

• Ruta del archivo ejecutable;

• Protocolo de conexión;

• Puerto remoto;

• Confianza de la atribución de origen;

• Detalles de coincidencia devueltos por MistEye.

Para eventos de dominio DNS, el sistema marca explícitamente su origen como DNS Relay. Debido a que los informes de DNS comunes no incluyen el proceso que inició la solicitud, la versión actual no atribuye forzosamente el dominio a un programa; en su lugar, marca de manera fiel que el proceso original es desconocido.

Esta distinción es muy importante: se muestran completos los indicios que se pueden confirmar; si no se puede confirmar de forma fiable la atribución, no se hacen suposiciones.

2.6 Reglas de detección y manejo de alertas

Después de configurar el Webhook Secret, las solicitudes de envío admiten firma HMAC-SHA256. El receptor puede verificar la integridad del mensaje con esto y confirmar que el emisor posee el Secret acordado por ambas partes. Webhook no es obligatorio; si no se configura, los eventos maliciosos seguirán guardándose en la base de datos local.

III. Mecanismo: circuito cerrado completo desde una consulta DNS hasta un evento malicioso

El flujo de trabajo de MistEye DNS Guard se puede resumir en cinco pasos:

Tomar control o recibir solicitudes DNS
→ Reenviar al DNS upstream configurado
→ Extraer dominios, alias e IPs públicas
→ Llamar a la API MistEye Threat Detection
→ Guardar localmente y enviar Webhook según sea necesario

La observación de conexiones salientes del proceso, a su vez, actúa como otra cadena de entrada: envía la IP pública y su origen de proceso al mismo flujo de detección de IP, retención de eventos y alertas.

3.1 Toma de control del DNS del sistema

Si solo se inicia el Relay, MistEye DNS Guard solo puede observar las solicitudes enviadas de forma activa al Relay. Para cubrir la mayor parte del tráfico DNS tradicional de la máquina local, la herramienta ofrece el modo de toma de control del DNS del sistema.

En macOS, el programa usa la herramienta networksetup del sistema para modificar el DNS y, mediante PF, redirige las solicitudes al puerto 53 del IPv4/IPv6 local al puerto Relay configurado. Si el puerto 53 local está ocupado por mDNSResponder, se recomienda configurar el Relay en 127.0.0.1:15353.

En el Linux MVP, el programa configura DNS según el entorno del sistema usando resolvectl, NetworkManager o resolv.conf estático, y usa nftables junto con SO_MARK para gestionar los problemas de bypass y el bucle de resolución del propio Relay.

El orden de inicio en modo sistema no es simplemente “cambiar el DNS”:

1. Primero enlazar y confirmar que el Relay local funcione;

2. Guardar el estado original de DNS y del cortafuegos;

3. Cargar las reglas de protección de la plataforma actual;

4. Modificar el DNS del sistema;

5. Verificar que el DNS del sistema y las reglas del cortafuegos estén activos.

3.2 Antibucle de retorno (anti-loop) y control de bypass

Uno de los problemas más comunes del Relay DNS local es que las solicitudes que envía al upstream pueden ser redirigidas por las reglas del sistema de vuelta a sí mismo, formando un bucle de resolución.

MistEye DNS Guard distingue entre el tráfico upstream del propio Relay y el tráfico de aplicaciones normales; combinando las reglas de macOS PF o Linux nftables, limita que las aplicaciones eludan el Relay y accedan directamente a UDP/TCP 53 externo y al puerto 853 por defecto; al mismo tiempo, gestiona el bucle de resolución del propio Relay.

Ten en cuenta que las consultas DoH/DoQ iniciadas internamente por la aplicación, el DNS interno de VPN, la resolución remota a través de proxies, el archivo hosts, mDNS y LLMNR no están dentro del alcance de la versión actual. Para herramientas proxy como Clash Verge o mihomo, se recomienda colocar 127.0.0.1:15353 antes en su lista DNS para que las solicitudes DNS normales pasen primero por el Relay de MistEye.

3.3 Instantáneas, arrendamientos (leases) y recuperación ante anomalías

DNS es la configuración base de la red del host. Si después de que la herramienta se detiene no se puede restaurar el estado, incluso con más funciones, no es apta para una ejecución a largo plazo.

Antes de tomar control del DNS del sistema, MistEye DNS Guard guarda una instantánea de recuperación; durante la ejecución actualiza periódicamente el arrendamiento (lease). En una detención normal, el programa elimina las reglas del cortafuegos y restaura el DNS original; si el proceso principal sale de forma anómala y el sistema sigue en ejecución, el asistente de recuperación independiente intentará limpiar las reglas del cortafuegos y restaurar el DNS después de que expire el lease. Los usuarios también pueden restaurar manualmente usando la instantánea:

El propósito de este mecanismo de recuperación es directo: la herramienta puede hacerse cargo del DNS del sistema y, además, debe proporcionar a los usuarios una ruta de recuperación clara y verificable.

IV. Ejecución continua: de la detección en una consulta a la observación del host local

El riesgo de red no aparece solo en el momento de instalar software. Un programa normal puede empezar a acceder a nuevos dominios después de una actualización; una IP que antes no estaba marcada también puede volver a reconocerse a medida que se actualiza la inteligencia de amenazas.

Por eso, MistEye DNS Guard no tiene como objetivo un “escaneo de una sola vez”, sino que registra de forma continua el DNS y las conexiones salientes que ocurren realmente en la máquina local.

4.1 Consola web y panel de administración del terminal

Los usuarios de macOS pueden iniciar la consola web integrada y completar la operación principal en el navegador local:

• Iniciar o detener el Relay DNS;

• Iniciar Relay y tomar control del DNS del sistema;

• Verificar el estado actual de protección;

• Detener y restaurar la configuración DNS y del cortafuegos existente;

• Ver los dominios observados más recientemente;

• Registro de conexiones salientes del proceso;

• Ver eventos maliciosos, la cola de detección y la cola de Webhook;

• Ver los registros (logs) del Relay;

• Al iniciar el Relay, elegir si habilitar la observación de conexiones salientes del proceso y configurar el intervalo de muestreo.

El servicio de gestión web, por defecto, solo escucha en 127.0.0.1:8080; si de verdad se necesita acceso remoto, es obligatorio configurar un API Token y, junto con el cortafuegos del host, limitar el rango permitido.

En cuanto al panel del terminal, la interfaz interactiva muestra la observación DNS de las últimas 24 horas, las conexiones salientes, la detección maliciosa y el estado de la cola; cuando se asigna un TTY en SSH, también puedes usar el panel del terminal para ver el estado de ejecución.

4.2 Cola persistente y reintentos de fallos

Las tareas de detección de MistEye y los eventos de Webhook escriben en una cola persistente SQLite.

Cuando la API no está disponible temporalmente, falla la conexión de red o el servicio devuelve estado de limitación de tasa (rate limit), la tarea de detección no se descarta directamente; vuelve al estado de espera para procesamiento siguiendo el tiempo de retroceso (backoff). El empuje de Webhook también registra el número de intentos, el tiempo de reintento y el último error.

Esto permite que la herramienta se ejecute continuamente en ordenadores personales donde la red fluctúa ocasionalmente, en hosts de prueba o en servidores remotos, en lugar de confundir “acabar de perder conexión” con “no hay riesgo”.

4.3 Límites de la versión actual

MistEye DNS Guard actualmente se verifica principalmente en macOS y ofrece un Linux MVP. Para evitar expectativas erróneas sobre el alcance, se deben dejar claras las siguientes limitaciones:

Los registros de observación y el estado de la cola generados durante la ejecución se guardan localmente de forma predeterminada. Los dominios y las IP públicas relacionadas observadas se envían a la API de MistEye configurada para la detección; solo cuando se configura Webhook, los eventos maliciosos se enviarán además a la dirección especificada por el usuario.

En el lado web:

Panel de administración del terminal:

V、Despliegue e integración

5.1 Obtener el programa precompilado

GitHub Releases ya ha proporcionado las siguientes versiones precompiladas:

Usando la versión precompilada, no necesitas instalar Rust ni preparar una base de datos o un servicio web independiente. Solo con el archivo principal de ejecución y una plantilla de configuración puedes empezar el despliegue.

En macOS Apple Silicon, puedes descargar directamente:

curl -L -o misteye-dns \
  https://github.com/slowmist/MistEye-DNS-Guard/releases/latest/download/misteye-dns-macos-aarch64
curl -L -o misteye-dns.toml.example \
  https://raw.githubusercontent.com/slowmist/MistEye-DNS-Guard/main/misteye-dns.toml.example
chmod +x misteye-dns

Cuando necesites compilarlo tú mismo, el proyecto usa de forma fija Rust 1.95.0:

cargo build --release --locked --bin misteye-dns

5.2 Obtener la API Key de MistEye

1. Acceder a app.misteye.io/api-keys;

2. Registrarte o iniciar sesión en MistEye;

3. Crear y copiar la API Key;

4. Escribir la clave en una configuración local protegida, o proporcionarla mediante variables de entorno.

La documentación de la API se puede consultar en: app.misteye.io/api-docs.

5.3 Configurar la API Key

Primero copia la plantilla de configuración y limita los permisos del archivo:

Puedes completar directamente en la configuración:

También se puede usar con variables de entorno:

Cuando existen ambos modos, las variables de entorno tienen prioridad. No envíes tu API Key real al repositorio de Git.

La ventana de observación también se puede ajustar según sea necesario en el mismo archivo de configuración, por ejemplo:

5.4 Comprobar la configuración e iniciar

Antes de modificar el DNS del sistema, primero ejecutar la comprobación de configuración:

./misteye-dns doctor --config ./misteye-dns.toml

Si tiene éxito, mostrará:
configuration valid

macOS recomienda iniciar la consola web:

sudo ./misteye-dns serve --config ./misteye-dns.toml

Luego accede a:

http://127.0.0.1:8080

Al hacer clic en “Iniciar y tomar control del DNS del sistema”, el programa completará el arranque del Relay, configurará el DNS del sistema, cargará las reglas de PF y verificará el estado de protección. Al detenerse, el programa restaurará la configuración anterior según la instantánea guardada.

Si solo quieres usar la línea de comandos:

Para la configuración completa y los modos de integración con Clash Verge / mihomo TUN, consulta el documento en chino.

Enlace del documento: https://github.com/slowmist/MistEye-DNS-Guard/blob/main/README.zh-CN.md

Seis、Conclusión

MistEye DNS Guard no intenta sustituir a EDR, la auditoría de tráfico ni herramientas profesionales de análisis forense. Elige una ruta más ligera y más temprana: un programa local usa DNS como punto de observación para que los dominios visitados por el host, las IP públicas resueltas y las conexiones directas de los programas no desaparezcan fácilmente de la vista.

El proyecto sigue mejorándose; te invitamos a probarlo en un entorno real y a enviar comentarios y sugerencias mediante GitHub Issues.

Dirección open source de MistEye DNS Guard: github.com/slowmist/MistEye-DNS-Guard

Si tienes problemas o sugerencias, bienvenido a contactar al equipo de seguridad de SlowMist por los canales siguientes:

• Sitio web oficial: slowmist.com

• WeChat oficial: SlowMist Technology

• GitHub: github.com/slowmist

• Plataforma MistEye: app.misteye.io

Sobre MistEye: MistEye es una plataforma de inteligencia de amenazas Web3 y monitoreo dinámico de seguridad desarrollada de forma autónoma por SlowMist; ofrece capacidades multidimensionales de detección de amenazas, como dominios, IPs, hashes de archivos y paquetes de cadena de suministro.

MistEye-DepScan: github.com/slowmist/MistEye-DepScan — herramienta CLI ligera; con un solo comando escanea las dependencias del proyecto y paquetes globales instalados en busca de paquetes maliciosos conocidos, compatible con los ecosistemas npm / PyPI / Cargo / Go / RubyGems.

MistEye-Skills: github.com/slowmist/misteye-skills — paquete de habilidades de seguridad para asistentes de codificación con IA; activa automáticamente la detección de seguridad de MistEye antes de instalar dependencias y acceder a URLs.