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_leak_03

В блоке “Properties” в строке “Filter name” вписываем:

TCP or UDP port 53 (DNS)

А в строке “Filter string”:

port 53

Нажимаем на кнопку “New”.

В конце списка должен появится фильтр который мы создали.

Нажимаем “Ok”.

Нажимаем CTRL+I или мышью открываем вкладку Capture ⇒ Interfaces: DNS_leak_00

Ставим галочку напротив сетевого интерфейса который мы собираемся слушать и нажимаем “Options”: DNS_leak_01

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

Нажимаем “Start”.

Наконец мы можем увидеть все пакеты прошедшие через 53 порт. DNS_leak_02


Arthur Gareginyan

Arthur Gareginyan

Arthur is a designer and full stack software engineer. He is the founder of MyCyberUniverse.com. His personal website can be found at arthurgareginyan.com. Check out his free WordPress plugins at wordpress.org.

Follow Arthur: