Comment fonctionne l'Internet domestique et les statistiques des serveurs de noms de domaine ?

Un routeur domestique (dans ce cas, FritzBox) peut enregistrer beaucoup de choses : combien de trafic circule à quel moment, qui est connecté à quelle vitesse, etc. Un serveur de noms de domaine (DNS) sur le réseau local m'a aidé à découvrir ce qui se cachait derrière les destinataires inconnus.

Dans l’ensemble, le DNS a eu un impact positif sur le réseau domestique : il a accru la vitesse, la stabilité et la facilité de gestion.

Vous trouverez ci-dessous un schéma qui a soulevé des questions et la nécessité de comprendre ce qui se passait. Les résultats filtrent déjà les requêtes connues et actives adressées aux serveurs de noms de domaine.

Pourquoi 60 domaines obscurs sont-ils interrogés chaque jour alors que tout le monde dort encore ?

Chaque jour, 440 domaines inconnus sont interrogés pendant les heures d'activité. Qui sont-ils et que font-ils?

Nombre moyen de demandes par jour et par heure

Comment fonctionne l'Internet domestique et les statistiques des serveurs de noms de domaine ?

Requête de rapport 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'))

La nuit, l'accès sans fil est désactivé et une activité de l'appareil est attendue, c'est-à-dire il n'y a pas d'interrogation pour les domaines inconnus. Cela signifie que la plus grande activité provient des appareils dotés de systèmes d'exploitation tels qu'Android, iOS et Blackberry OS.

Listons les domaines qui sont interrogés de manière intensive. L'intensité sera déterminée par des paramètres tels que le nombre de demandes par jour, le nombre de jours d'activité et le nombre d'heures de la journée où elles ont été remarquées.

Tous les suspects attendus figuraient sur la liste.

Domaines intensivement interrogés

Comment fonctionne l'Internet domestique et les statistiques des serveurs de noms de domaine ?

Requête de rapport 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

Nous bloquons isс.blackberry.com et iceberg.blackberry.com, que le fabricant justifiera pour des raisons de sécurité. Résultat : lorsque vous essayez de vous connecter au WLAN, il affiche la page de connexion et ne se connecte plus jamais. Débloquons-le.

detectportal.firefox.com est le même mécanisme, implémenté uniquement dans le navigateur Firefox. Si vous devez vous connecter au réseau WLAN, la page de connexion s'affichera d'abord. On ne sait pas exactement pourquoi l'adresse doit être pingée si souvent, mais le mécanisme est clairement décrit par le fabricant.

Skype. Les actions de ce programme sont similaires à celles d'un ver : il se cache et ne se laisse pas simplement tuer dans la barre des tâches, génère beaucoup de trafic sur le réseau, pinge 10 domaines toutes les 4 minutes. Lors d’un appel vidéo, la connexion Internet tombe constamment en panne, alors qu’elle ne peut pas être meilleure. Pour l’instant, c’est nécessaire, cela reste.

upload.fp.measure.office.com - fait référence à Office 365, je n'ai pas trouvé de description décente.
browser.pipe.aria.microsoft.com - Je n'ai pas trouvé de description décente.
Nous bloquons les deux.

connect.facebook.net - Application de chat Facebook. Restes.

mediator.mail.ru Une analyse de toutes les demandes pour le domaine mail.ru a montré la présence d'un grand nombre de ressources publicitaires et de collecteurs de statistiques, ce qui suscite la méfiance. Le domaine mail.ru est entièrement envoyé sur la liste noire.

google-analytics.com - n'affecte pas la fonctionnalité des appareils, nous le bloquons donc.
doubleclick.net - compte les clics publicitaires. Nous bloquons.

De nombreuses demandes sont adressées à googleapis.com. Le blocage a conduit à l'arrêt joyeux des messages courts sur la tablette, ce qui me semble stupide. Mais le Playstore a cessé de fonctionner, alors débloquons-le.

cloudflare.com - ils écrivent qu'ils aiment l'open source et, en général, écrivent beaucoup sur eux-mêmes. L'intensité de l'enquête sur le domaine n'est pas tout à fait claire, et elle est souvent bien supérieure à l'activité réelle sur Internet. Laissons cela pour l'instant.

Ainsi, l’intensité des demandes est souvent liée à la fonctionnalité requise des appareils. Mais ceux qui en ont fait trop d’activité ont également été découverts.

Tout d'abord

Lorsque l'Internet sans fil est activé, tout le monde dort encore et il est possible de voir quelles requêtes sont envoyées en premier au réseau. Ainsi, à 6h50, Internet s'allume et au cours des dix premières minutes, 60 domaines sont interrogés quotidiennement :

Comment fonctionne l'Internet domestique et les statistiques des serveurs de noms de domaine ?

Requête de rapport 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 vérifie la connexion WLAN pour la présence d'une page de connexion.
Citrix envoie une requête ping à son serveur même si l'application n'est pas en cours d'exécution active.
Symantec vérifie les certificats.
Mozilla vérifie les mises à jour, même si dans les paramètres, j'ai demandé de ne pas le faire.

mmo.de est un service de jeux. Il est fort probable que la demande soit initiée par le chat Facebook. Nous bloquons.

Apple activera tous ses services. api-glb-fra.smoot.apple.com - à en juger par la description, chaque clic sur un bouton est envoyé ici à des fins d'optimisation des moteurs de recherche. Très suspect, mais lié à la fonctionnalité. Nous le laissons.

Ce qui suit est une longue liste de demandes adressées à Microsoft.com. Nous bloquons tous les domaines à partir du troisième niveau.

Nombre de tout premiers sous-domaines
Comment fonctionne l'Internet domestique et les statistiques des serveurs de noms de domaine ?

Donc, les 10 premières minutes d'activation d'Internet sans fil.
iOS interroge le plus de sous-domaines - 32. Suivi par Android - 24, puis Windows - 15 et enfin Blackberry - 9.
L'application Facebook interroge à elle seule 10 domaines, Skype interroge 9 domaines.

Source d'information

La source de l'analyse était le fichier journal du serveur local bind9, qui contient le format suivant :

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)

Le fichier a été importé dans une base de données SQLite et analysé à l'aide de requêtes SQL.
Le serveur agit comme un cache ; les requêtes proviennent du routeur, il y a donc toujours une requête client. Une structure de tableau simplifiée suffit, c'est-à-dire Le rapport nécessite l'heure de la demande, la demande elle-même et le domaine de deuxième niveau pour le regroupement.

Tableaux 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)
);

conclusion

Ainsi, à la suite de l'analyse du journal du serveur de noms de domaine, plus de 50 enregistrements ont été censurés et placés sur la liste de blocage.

La nécessité de certaines requêtes est bien décrite par les éditeurs de logiciels et inspire confiance. Cependant, une grande partie de ces activités sont infondées et discutables.

Source: habr.com

Ajouter un commentaire