¿Cómo vive la Internet doméstica y las estadísticas del servidor de nombres de dominio?

Un enrutador doméstico (en este caso FritzBox) puede registrar muchas cosas: cuánto tráfico circula, cuándo, quién está conectado a qué velocidad, etc. Un servidor de nombres de dominio (DNS) en la red local me ayudó a descubrir qué se escondía detrás de los destinatarios desconocidos.

En general, DNS ha tenido un impacto positivo en la red doméstica: ha añadido velocidad, estabilidad y capacidad de gestión.

A continuación se muestra un diagrama que generó preguntas y la necesidad de comprender lo que estaba sucediendo. Los resultados ya filtran las solicitudes conocidas y en funcionamiento a los servidores de nombres de dominio.

¿Por qué se encuestan 60 dominios desconocidos cada día mientras todos todavía duermen?

Cada día, se sondean 440 dominios desconocidos durante las horas activas. ¿Quiénes son y qué hacen?

Número promedio de solicitudes por día por hora

¿Cómo vive la Internet doméstica y las estadísticas del servidor de nombres de dominio?

consulta de informe SQL

WITH CLS AS ( /* prepare unique requests */
SELECT
DISTINCT DATE_NK,
STRFTIME( '%s', SUBSTR(DATE_NK,8,4) || '-' ||
	CASE SUBSTR(DATE_NK,4,3)
	WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
	WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
	ELSE '12' END || '-' || SUBSTR(DATE_NK,1,2) || ' ' || SUBSTR(TIME_NK,1,8) ) AS EVENT_DT,
REQUEST_NK, DOMAIN
FROM STG_BIND9_LOG )
SELECT
  1 as 'Line: DNS Requests per Day for Hours',
  strftime('%H:00', datetime(EVENT_DT, 'unixepoch')) AS 'Day',
  ROUND(1.0*SUM(1)/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS 'Requests per Day'
FROM CLS
WHERE DOMAIN NOT IN ('in-addr.arpa', 'IN-ADDR.ARPA', 'local', 'dyndns', 'nas', 'ntp.org')
  AND datetime(EVENT_DT, 'unixepoch') > date('now', '-20 days')
GROUP BY /* hour aggregate */
  strftime('%H:00', datetime(EVENT_DT, 'unixepoch'))
ORDER BY strftime('%H:00', datetime(EVENT_DT, 'unixepoch'))

Por la noche, el acceso inalámbrico está desactivado y se espera actividad del dispositivo, es decir. no hay encuestas para dominios desconocidos. Esto quiere decir que la mayor actividad proviene de dispositivos con sistemas operativos como Android, iOS y Blackberry OS.

Enumeremos los dominios que se sondean intensamente. La intensidad estará determinada por parámetros como el número de solicitudes por día, el número de días de actividad y en cuántas horas del día se notaron.

Todos los sospechosos esperados estaban en la lista.

Dominios intensamente encuestados

¿Cómo vive la Internet doméstica y las estadísticas del servidor de nombres de dominio?

consulta de informe SQL

WITH CLS AS ( /* prepare unique requests */
SELECT
DISTINCT DATE_NK,
STRFTIME( '%s', SUBSTR(DATE_NK,8,4) || '-' ||
	CASE SUBSTR(DATE_NK,4,3)
	WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
	WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
	ELSE '12' END || '-' || SUBSTR(DATE_NK,1,2) || ' ' || SUBSTR(TIME_NK,1,8) ) AS EVENT_DT,
REQUEST_NK, DOMAIN
FROM STG_BIND9_LOG )
SELECT 
  1 as 'Table: Havy DNS Requests',
  REQUEST_NK AS 'Request',
  DOMAIN AS 'Domain',
  REQ AS 'Requests per Day',
  DH AS 'Hours per Day',
  DAYS AS 'Active Days'
FROM (
SELECT
  REQUEST_NK, MAX(DOMAIN) AS DOMAIN,
  COUNT(DISTINCT REQUEST_NK) AS SUBD,
  COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))) AS DAYS,
  ROUND(1.0*SUM(1)/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS REQ,
  ROUND(1.0*COUNT(DISTINCT strftime('%d.%m %H', datetime(EVENT_DT, 'unixepoch')))/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS DH
FROM CLS
WHERE DOMAIN NOT IN ('in-addr.arpa', 'IN-ADDR.ARPA', 'local', 'dyndns', 'nas', 'ntp.org')
  AND datetime(EVENT_DT, 'unixepoch') > date('now', '-20 days')
GROUP BY REQUEST_NK )
WHERE DAYS > 9 -- long period
ORDER BY 4 DESC, 5 DESC
LIMIT 20

Bloqueamos isс.blackberry.com e iceberg.blackberry.com, lo que el fabricante justificará por motivos de seguridad. Resultado: al intentar conectarse a la WLAN, muestra la página de inicio de sesión y nunca vuelve a conectarse a ningún lado. Desbloqueémoslo.

detectportal.firefox.com es el mismo mecanismo, sólo que implementado en el navegador Firefox. Si necesita iniciar sesión en la red WLAN, primero se mostrará la página de inicio de sesión. No está del todo claro por qué se debe hacer ping a la dirección con tanta frecuencia, pero el fabricante describe claramente el mecanismo.

skype. Las acciones de este programa son similares a las de un gusano: se esconde y no se deja simplemente matar en la barra de tareas, genera mucho tráfico en la red, hace ping a 10 dominios cada 4 minutos. Al realizar una videollamada la conexión a Internet se corta constantemente, cuando no puede ser mejor. Por ahora es necesario, así queda.

upload.fp.measure.office.com: se refiere a Office 365, no pude encontrar una descripción decente.
browser.pipe.aria.microsoft.com: no pude encontrar una descripción decente.
Bloqueamos ambos.

connect.facebook.net: aplicación de chat de Facebook. Restos.

mediator.mail.ru Un análisis de todas las solicitudes del dominio mail.ru mostró la presencia de una gran cantidad de recursos publicitarios y recopiladores de estadísticas, lo que genera desconfianza. El dominio mail.ru se envía por completo a la lista negra.

google-analytics.com: no afecta la funcionalidad de los dispositivos, por lo que lo bloqueamos.
doubleclick.net: cuenta los clics publicitarios. Bloqueamos.

Muchas solicitudes van a googleapis.com. El bloqueo ha provocado el alegre cierre de los mensajes cortos en la tableta, lo que me parece una estupidez. Pero la tienda de juegos dejó de funcionar, así que desbloqueémosla.

cloudflare.com: escriben que les encanta el código abierto y, en general, escriben mucho sobre ellos mismos. La intensidad de la encuesta de dominio no está del todo clara, que suele ser mucho mayor que la actividad real en Internet. Dejémoslo por ahora.

Por tanto, la intensidad de las solicitudes suele estar relacionada con la funcionalidad requerida de los dispositivos. Pero también se descubrieron aquellos que se excedieron con la actividad.

Muy primero

Cuando la Internet inalámbrica está activada, todos siguen dormidos y es posible ver qué solicitudes se envían primero a la red. Entonces, a las 6:50 se enciende Internet y en los primeros diez minutos se sondean 60 dominios diariamente:

¿Cómo vive la Internet doméstica y las estadísticas del servidor de nombres de dominio?

consulta de informe SQL

WITH CLS AS ( /* prepare unique requests */
SELECT
DISTINCT DATE_NK,
STRFTIME( '%s', SUBSTR(DATE_NK,8,4) || '-' ||
	CASE SUBSTR(DATE_NK,4,3)
	WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
	WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
	ELSE '12' END || '-' || SUBSTR(DATE_NK,1,2) || ' ' || SUBSTR(TIME_NK,1,8) ) AS EVENT_DT,
REQUEST_NK, DOMAIN
FROM STG_BIND9_LOG )
SELECT
  1 as 'Table: First DNS Requests at 06:00',
  REQUEST_NK AS 'Request',
  DOMAIN AS 'Domain',
  REQ AS 'Requests',
  DAYS AS 'Active Days',
  strftime('%H:%M', datetime(MIN_DT, 'unixepoch')) AS 'First Ping',
  strftime('%H:%M', datetime(MAX_DT, 'unixepoch')) AS 'Last Ping'
FROM (
SELECT
  REQUEST_NK, MAX(DOMAIN) AS DOMAIN,
  MIN(EVENT_DT) AS MIN_DT,
  MAX(EVENT_DT) AS MAX_DT,
  COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))) AS DAYS,
  ROUND(1.0*SUM(1)/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS REQ
FROM CLS
WHERE DOMAIN NOT IN ('in-addr.arpa', 'IN-ADDR.ARPA', 'local', 'dyndns', 'nas', 'ntp.org')
  AND datetime(EVENT_DT, 'unixepoch') > date('now', '-20 days')
  AND strftime('%H', datetime(EVENT_DT, 'unixepoch')) = strftime('%H', '2019-08-01 06:50:00')
GROUP BY REQUEST_NK
 )
WHERE DAYS > 3 -- at least 4 days activity
ORDER BY 5 DESC, 4 DESC

Firefox comprueba la conexión WLAN para detectar la presencia de una página de inicio de sesión.
Citrix hace ping a su servidor aunque la aplicación no se esté ejecutando activamente.
Symantec verifica los certificados.
Mozilla busca actualizaciones, aunque en la configuración pedí no hacerlo.

mmo.de es un servicio de juegos. Lo más probable es que la solicitud se inicie a través del chat de Facebook. Bloqueamos.

Apple activará todos sus servicios. api-glb-fra.smoot.apple.com: a juzgar por la descripción, cada clic en un botón se envía aquí con fines de optimización de motores de búsqueda. Muy sospechoso, pero relacionado con la funcionalidad. Lo dejamos.

La siguiente es una larga lista de solicitudes a microsoft.com. Bloqueamos todos los dominios a partir del tercer nivel.

Número de primeros subdominios
¿Cómo vive la Internet doméstica y las estadísticas del servidor de nombres de dominio?

Entonces, los primeros 10 minutos de encender Internet inalámbrico.
iOS sondea la mayor cantidad de subdominios: 32. Seguido de Android, 24, luego Windows, 15 y, por último, Blackberry, 9.
Solo la aplicación de Facebook sondea 10 dominios, Skype sondea 9 dominios.

Fuente de información

La fuente del análisis fue el archivo de registro del servidor local bind9, que contiene el siguiente formato:

01-Aug-2019 20:03:30.996 client 192.168.0.2#40693 (api.aps.skype.com): query: api.aps.skype.com IN A + (192.168.0.102)

El archivo se importó a una base de datos sqlite y se analizó mediante consultas SQL.
El servidor actúa como caché; las solicitudes provienen del enrutador, por lo que siempre hay un cliente de solicitud. Una estructura de tabla simplificada es suficiente, es decir El informe requiere la hora de la solicitud, la solicitud en sí y el dominio de segundo nivel para la agrupación.

tablas DDL

CREATE TABLE STG_BIND9_LOG (
  LINE_NK       INTEGER NOT NULL DEFAULT 1,
  DATE_NK       TEXT NOT NULL DEFAULT 'n.a.',
  TIME_NK       TEXT NOT NULL DEFAULT 'n.a.',
  CLI           TEXT, -- client
  IP            TEXT,
  REQUEST_NK    TEXT NOT NULL DEFAULT 'n.a.', -- requested domain
  DOMAIN        TEXT NOT NULL DEFAULT 'n.a.', -- domain second level
  QUERY         TEXT,
  UNIQUE (LINE_NK, DATE_NK, TIME_NK, REQUEST_NK)
);

conclusión

Así, como resultado del análisis del registro del servidor de nombres de dominio, más de 50 registros fueron censurados y colocados en la lista de bloqueo.

La necesidad de algunas consultas está bien descrita por los fabricantes de software e inspira confianza. Sin embargo, gran parte de la actividad es infundada y cuestionable.

Fuente: habr.com

Añadir un comentario