Перевірка на витік DNS (DNS leak)
Головна проблема більшості програм які використовуються спільно з “Tor” (The Onion Router), це витік DNS-запитів. Тобто, незважаючи на те, що використовується Tor, програми на початку посилають DNS-запит “незаторенім” щоб отримати IP-адресу кінцевої мети. І вже тільки після цього звертаються до кінцевої мети будучи “заторені”. Це означає, що завдання визначення DNS-витоків є критичною з точки зору анонімності.
Розглянемо приклад. При зверненні до доменному імені сайту (google.com) замість його IP-адреси (173.194.70.101
), відбувається обчислення IP з цього імені. Робиться це службою “Domain Name System” (DNS). При цьому відбувається витік: в мережу надсилається відкритий незашифрований запит до серверів DNS, що містить доменне ім’я (google.com), що дозволяє цікавим (наприклад СОРМ-2) дізнатися, куди ви ходите. Але навіть якщо ви зайшли, набравши в адресному рядку IP-адреса (173.194.70.101
), то і тут можливий витік через запитів активних елементів завантажених з сайту сторінки (наприклад можуть виконатися java-скрипти).
Запити DNS короткі, тому надсилаються по транспортному протоколу UDP. Якщо запит занадто довгий, використовується звичайний транспорт TCP, при цьому використовується 53 порт. Значить ми будемо слухати саме 53 порт.
Для перевірки мережі використовуються спеціальні програми - перехоплювачі-аналізатори мережевого трафіку (інформації, що йде по мережі). Їх називають ще сніффером (sniffer - винюхіватель).
Варіант 1: “TCPDump” (Console)
Найбільш відомим аналізатором є програма “tcpdump” (http://ru.wikipedia.org/wiki/Tcpdump), включена в більшість дистрибутивів Linux.
Встановлюємо “tcpdump”:
sudo apt-get install tcpdump
Почнемо прослуховування для перевірки на витік DNS:
sudo tcpdump port 53
При цьому бажано закрити всі, крім досліджуваного додатку. Якщо після цієї команди в результаті роботи досліджуваного додатка з’явилися рядки у вікні tcpdump, то DNS-витік має місце бути. Далі можна аналізувати яка.
Якщо використовується кілька мережевих пристроїв, то можливо додатково доведеться вказати необхідний мережевий інтерфейс. Їх список можна дізнатися консольної програмою ifconfig
.
sudo ifconfig
Після знаходження імені мережевого інтерфейсу, треба додавати до команди наступне:
-i <имя_сетевого_интерфейса или его номер>
sudo tcpdump -i eth0 port 53
Зупиняється аналіз комбінацією CTRL+C
.
Варіант 2: “WireShark” (Console & GUI)
Wireshark (раніше — Ethereal) — програма-аналізатор трафіку для комп’ютерних мереж Ethernet і деяких інших. Написаний на бібліотеках GTK+ і має графічний інтерфейс (GUI). Але крім GUI, є консольна реалізація програми по імені “TShark”, що володіє тим же функціоналом, що і її графічний варіант. Функціональність дуже схожа з можливостями програми tcpdump
, однак Wireshark має графічний користувальницький інтерфейс і набагато більше можливостей із сортування та фільтрації інформації. Програма дозволяє користувачу переглянути весь трафік, що проходить через мережу в режимі реального часу, переводячи мережеву карту в нерозбірливий режим (promiscuous mode). Так як програма дуже популярна в якості адміністративного інструменту для аналізу мереж, вона є в репозиторіях практично будь-якого дистрибутива Linux.
- TShark
Встановлюємо:
sudo apt-get install tshark
Почнемо прослуховування для перевірки на витік DNS:
sudo tshark -i eth0 port 53
Замість eth0
вписуємо ім’я свого інтерфейсу
- Wireshark
Встановлюємо:
sudo apt-get install wireshark
У всіх інструкціях в мережі зазвичай пропонується запускати WireShark від root’а, інакше WireShark не побачить мережеві інтерфейси, так як для доступу до них потрібні рутові права. Але надавати права root’а GUI-програмам протипоказано! З цього ми не станемо використовувати sudo
, а виконаємо маніпуляції описані в офіційної інструкції.
Створюємо групу wireshark
:
sudo groupadd wireshark
Додаємо в групу wireshark
користувача (тобто себе), замінивши user
на своє ім’я користувача:
sudo usermod -G wireshark -a user
Примітка: Впишемо в місце
user
своє ім’я користувача.
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 754 /usr/bin/dumpcap
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
Перелогінімся (вийдемо і знову увійдемо в смістему) для того, що б пророблені маніпуляції з правами вступили в силу.
Тепер WireShark може бачити мережеві інтерфейси не тільки від root
але і від користувача що складається в групі wireshark
.
Запускаємо wireshark
:
wireshark &
Мишею відкриваємо вкладку Capture ⇒ Capture Filters:
Створимо фільтр перехоплення DNS.
У блоці “Properties” в рядку “Filter name” вписуємо:
TCP or UDP port 53 (DNS)
А в рядку “Filter string”:
port 53
Натискаємо на кнопку “New”.
В кінці списку повинен з’явиться фільтр який ми створили.
Натискаємо “Ok”.
атискаємо CTRL+I або мишею відкриваємо вкладку Capture ⇒ Interfaces:
Ставимо галочку навпроти мережевого інтерфейсу який ми збираємося слухати і натискаємо “Options”:
Натискаємо на кнопку “Capture Filter” і у вікні, що відкриється, виберіть фільтр “TCP or UDP port 53 (DNS)”, який ми створили.
Натискаємо “Start”.
Нарешті ми можемо побачити всі пакети які пройшли через 53 порт.
Якщо ця стаття допомогла вам, будь ласка, залиште коментар
Дякую за прочитання!
Arthur is a designer and full stack software engineer. He is the founder of Space X-Chimp and the blog My Cyber Universe. His personal website can be found at arthurgareginyan.com.