Чим живе домашній інтернет та статистика сервера доменних імен

Домашній роутер (в даному випадку FritzBox) багато вміє реєструвати: скільки трафіку коли ходить, хто з якою швидкістю підключений і т.п. Дізнатися, що ховається під незрозумілими адресатами, мені допоміг сервер доменних імен (DNS) у локальній мережі.

Загалом, DNS справив позитивний вплив на домашню мережу: додав швидкість, стійкість та керованість.

Нижче наведено діаграму, яка викликала питання та необхідність розбиратися у тому, що відбувається. У результатах вже відфільтровано відомі та робочі запити до серверів доменних імен.

Чому щодня опитуються 60 незрозумілих доменів під час, коли все ще сплять?

Щодня опитуються 440 невідомих доменів у активний час. Хто це такі, і що вони роблять?

Середня кількість запитів на день по годинах

Чим живе домашній інтернет та статистика сервера доменних імен

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'))

У нічний час бездротовий доступ вимикається і активність пристроїв очікувана, тобто. немає опитування незрозумілих доменів. Значить, найбільша активність походить від пристроїв з операційними системами, як Android, iOS і Blackberry OS.

Виведемо домени, які активно опитуються. Інтенсивність визначатиме такі параметри, як кількість запитів на день, кількість днів активності та у скільки годин дня були помічені.

У списку опинилися всі очікувані підозрювані.

Домени, що інтенсивно опитуються.

Чим живе домашній інтернет та статистика сервера доменних імен

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

Блокуємо iсс.blackberry.com та iceberg.blackberry.com, які виробник обґрунтує міркуваннями безпеки. Результат: при спробі підключення до WLAN показує сторінку логіна і більше ніколи нікуди не підключається. Розблокуємо.

detectportal.firefox.com - це такий самий механізм, тільки реалізований у браузері Firefox. У разі необхідності логінуватися в мережу WLAN, спочатку покаже сторінку логіна. Не зовсім зрозуміло, навіщо часто пінгувати адресу, але механізм доступно описаний у виробника.

skype. Дії цієї програми схожі на хробака: ховається і не дає просто себе вбити в панелі завдань, в мережі генерує багато трафіку, кожні 10 хвилин пінгує 4 домени. При відеодзвінку постійно мобить інтернет-з'єднання, коли воно вже краще не може бути. Поки що є необхідним, тому залишається.

upload.fp.measure.office.com - відноситься до Office 365, пристойного опису не знайшов.
browser.pipe.aria.microsoft.com - пристойного опису не знайшов.
Обидва блокуємо.

connect.facebook.net - чат-додаток facebook. Залишається.

mediator.mail.ru Аналіз усіх запитів домену mail.ru показав наявність величезної кількості рекламних ресурсів та збирачів статистики, що викликає недовіру. Домен mail.ru відправляється повністю в чорний перелік.

google-analytics.com – на функціональність пристроїв не впливає, тому блокуємо.
doubleclick.net - вважає рекламні натискання. Блокуємо.

Багато запитів іде до googleapis.com. Блокування призвело до радісного відключення коротких повідомлень у планшеті, які мені здаються безглуздими. Але перестав працювати playstore, тому розблокуємо.

cloudflare.com - пишуть, що люблять відкритий код і взагалі багато про себе пишуть. Не зовсім зрозуміла інтенсивність опитування домену, яка часто сильно вища за саму активність в інтернеті. Поки що залишимо.

Таким чином, інтенсивність запитів часто пов'язана із необхідною функціональністю пристроїв. Але було виявлено й ті, хто перестарався з активністю.

Найперші

У момент включення бездротового інтернету ще сплять і є можливість побачити, які запити першими відправляються в мережу. Отже, о 6:50 включається інтернет та в перший десятихвилинний проміжок часу щодня опитуються 60 доменів:

Чим живе домашній інтернет та статистика сервера доменних імен

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 перевіряє з'єднання WLAN на наявність сторінки з логіном.
Citrix пінгує свій сервер, хоча програма активно не запущена.
Symantec перевіряє сертифікати.
Mozilla перевіряє поновлення, хоча в налаштуваннях просив не робити цього.

mmo.de - Ігровий сервіс. Швидше за все, запит ініціює чат facebook. Блокуємо.

Apple активує усі свої сервіси. api-glb-fra.smoot.apple.com - судячи з опису, сюди відправляється кожне натискання кнопки з метою пошукової оптимізації. Дуже підозріло, але пов'язане із функціональністю. Залишаємо.

Далі йде довгий перелік звернень до microsoft.com. Усі домени, починаючи з третього рівня, блокуємо.

Кількість піддоменів найперших
Чим живе домашній інтернет та статистика сервера доменних імен

Отже, перші 10 хвилин увімкнення бездротового інтернету.
Найбільше піддоменів опитує iOS - 32. За ним слідує Android - 24, далі Windows - 15 і останній Blackberry - 9.
Один тільки додаток facebook опитує 10 доменів, skype опитує 9 доменів.

Джерело інформації

Джерелом для аналізу послужив лог файл локального сервера bind9, який містить наступний формат:

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)

Файл було імпортовано до бази даних sqlite та проаналізовано за допомогою SQL запитів.
Сервер виконує функцію кешу, запити надходять з роутера, тому клієнт запиту завжди один. Досить спрощеної структури таблиці, тобто. для звіту потрібен час запиту, сам запит та домен другого рівня для групування.

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

Висновок

Таким чином, в результаті аналізу лога сервера доменних імен понад 50 записів були цензурі і поміщені в список для блокування.

Необхідність деяких запитів добре описана виробниками програмного забезпечення і вселяє довіру. Проте, більшість активності необгрунтована і викликає сумнів.

Джерело: habr.com

Додати коментар або відгук