thumb

Головна проблема більшості програм які використовуються спільно з “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. Перевірка на витік DNS (DNS leak)

У блоці “Properties” в рядку “Filter name” вписуємо:

TCP or UDP port 53 (DNS)

А в рядку “Filter string”:

port 53

Натискаємо на кнопку “New”.

В кінці списку повинен з’явиться фільтр який ми створили.

Натискаємо “Ok”.

атискаємо CTRL+I або мишею відкриваємо вкладку Capture ⇒ Interfaces: Перевірка на витік DNS (DNS leak)

Ставимо галочку навпроти мережевого інтерфейсу який ми збираємося слухати і натискаємо “Options”: Перевірка на витік DNS (DNS leak)

Натискаємо на кнопку “Capture Filter” і у вікні, що відкриється, виберіть фільтр “TCP or UDP port 53 (DNS)”, який ми створили.

Натискаємо “Start”.

Нарешті ми можемо побачити всі пакети які пройшли через 53 порт. Перевірка на витік DNS (DNS leak)