Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 130, ОКТЯБРЬ 2009 г.

Включаем Tor на всю катушку. Заставляем анонимную сеть работать на наши хакерские цели

Антон "Ant" Жуков (antitster@gmail.com)

Если ты считаешь, что Tor - это исключительно средство для обеспечения приватности в сети, то ты неправ дважды. Во-первых, ее распределенную сеть можно использовать в разных целях. А, во-вторых, не так уж безопасен черт, как его малюют. Увы.

Замечательный инструмент для обеспечения анонимности и сохранности данных в сети хорош по многим причинам. Сразу остаются не у дел любые сниферы, в том числе установленные и на интернет-маршрутизаторов, потому как весь трафик передается через цепочку узлов, исключительно в зашифрованном виде. Крайне затруднительно или, если полностью поверить разработчикам, то даже невозможно становится отследить источник отправки данных, благодаря постоянно меняющимся цепочкам специальных узлов-посредников, через которые передаются данные. Кто не пробовал использовать Tor, чтобы банально сменить свой IP? Минус на первый взгляд один - скорость работы. Каждый нодов, входящих в цепочку, вносит серьезную задержку, как по времени отклика, так и банально по ширине канала. В результате получаем анонимное соединение. Анонимное и модемное :). Но диалапный коннект - это не самая главная проблема активных пользователей Tor. Гораздо сильнее их должно волновать, что любые данные можно перехватить и, черт подери, сделать это просто!

Откуда берутся... ноды

Чтобы пустить трафик приложения через Tor, достаточно указать в настройках прокси - адрес локального SOCKS-сервера. В случае, если такой возможности не предусмотрено можно использовать соксофикатор (например, Sockcap), но помнить при этом, что через сокс можно пустить только TCP-трафик. Впрочем, для большинства пользователей намного более интересны будут готовые сборки (так называемые Bundles), включающие сам Tor, а также преконфигурированные браузер Firefox и IM-клиент Pidgin. Поставил и все работает! Кстати говоря, для большего удобства для Firefox'а реализован плагин Torbutton (addons.mozilla.org/firefox/addon/2275). Щелкнул - и весь безопасно трафик уже передается через цепочку промежуточных узлов. Что вообще представляют собой эти узлы и как в принципе устроен Tor? Попробуем разобраться.

В основе лежит распределенная система узлов - так называемых нод, между которыми в зашифрованном виде передаются данные. Для соединения обычно используется три сервера, которые образуют временную цепочку. Каждый сервер выбирается случайным образом, при этом он знает только то, от какого звена получил данные и кому они предназначаются. Мало этого - цепочки постоянно меняются. Даже в случае перехвата данных на одном из серверов отследить полный маршрут пакетов (в том числе и их отправителя) не представляется возможным. Перед отправлением пакет последовательно шифруется тремя ключами: сначала для третьей ноды, потом для второй и, в конце концов, для первой. Когда первая нода получает пакет, она расшифровывает «верхний» слой шифра и узнает, куда отправить пакет дальше. Второй и третий сервер поступают аналогичным образом.

Где зарылась собака?

Итак, маршурт постоянно меняется, данные через промежуточные узлы проходят в виде белиберды, т.е. в зашифрованном виде - где подвох? Он есть. Ведь, как серьезно бы ни защищались данные, как изощренно не выбирался и запутывался маршрут, где-то на выходе данные все равно нужно расшифровывать. Ведь только так их можно доставить до места назначения. Эта операция осуществляется на последней ноде в цепочке - так называемой выходной нодой (Exit Node). Если на таком узле установить снифер, то данным ничего больше не останется, как прямиком попасть в логи :).

Ты можешь подумать, что система такого положения дел не допускает и поднять Tor для работы выходной ноды нельзя? Запросто! Вся система строится на большом количестве энтузиастов, учавствующих в проекте и предоставляющие свои домашние компьютеры как ноды, и в том числе выходные. Несколько строчек кода в конфиге - твой билет их ряды.

Да здравствует Exit node!

Ну что ж, приступим. Для экспериментов нам понадобится любой никсовый дистрибутив, пускай даже это будет Backtrack, запущенный с флешки, или Ubuntu на виртуальной машине - это совершенно не нужно. Далее потребуется последняя версия Tor (на момент публикации - 0.2.1.19). Любители GUI также могут скачать и установить Vidalia - мы же будем работать в консоли. Итак скачиваем пакет, распаковываем и устанавливаем. Я думаю на этой стадии никаких проблем быть не должно.

Для Tor'а вожно, чтобы часы были установлены точно. В противном случае - синхронизируем с публичными серверами времени. Забегая вперед скажу, что для запуска Tor лучше создать отдельного пользователя - делается это командой adduser. Я создал себе пользователя toruser: uid=111(toruser) gid=10(wheel) groups=0(wheel),10(wheel). Теперь нужно создать файл конфигурации. Tor использует для хранения своих данных папку .tor в домашней директории пользователя (/home/toruser). Создаем папку .tor, создаем в ней файл torrc и открываем его в текстовом редакторе.

Нас интересует несколько параметров: ControlPort – на этом порту Tor будет принимать подключения для управления Tor-сервером (т.е. можно подключиться удаленно для конфигурации Tor'а, опция важна для тех, кто использует графические оболочки типа Vidalia или Tork). Устанавливаем его в 9051DirPort – на этом порту Tor будет принимать данные от сервера директорий. Устанавливаем в 9030.

ControlPort 9051
DirPort 9030

ExitPolicy – определяет, какой трафик мы будем принимать и форвардить. Имеет формат "ExitPolicy Accept | reject address:port". По умолчанию политика следующая:

reject *:25
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:*

Означает, что мы будем резать трафик, направленный на вышеперечисленные порты, а весь остальной будем пропускать. В принципе можно ее и не переопределять и оставить дефолтной, ну это уж на твой выбор. Я использовал следующую:

ExitPolicy accept *:80,accept *:443,accept *:110,accept *:143,accept *:993,accept *:995,reject *:*

HashedControlPassword – хеш пароля для доступа и конфигурации Tor-сервера (чтобы никакой злобный хакер не смог переконфигурировать наш сервер), создается при помощи команды: tor --hash-password.

  • Nickname – имя нашего сервера.
  • ORPort – порт, ожидающий подключения от других нодов
  • SocksListenAddress - адрес, по которому Tor будет ждать подключений от приложений, работающих через SOCKS. Формат: SocksListenAddress IP[:PORT] Установим IP в 127.0.0.1, а порт оставим дефолтным (9050). Это понадобится нам, если мы захотим использовать Tor в связке с Privoxy или другими прокси.

HashedControlPassword 16:91495A0B7CBC41C76073E1EC00A5CF1510D41462884391CCB24BF489F1

Log notice stdout – выводить сообщения в консоль
Nickname HelloXakep
ORPort 9001
SocksListenAddress 127.0.0.1

Сохраняем изменения и закрываем файл. Можно приступать к запуску. Открываем консоль, логинимся под toruser и запускаем Tor, передав в качестве параметра путь до конфиг-файла:

$ tor -f /home/toruser/.tor/torrc

И смотрим выдаваемые сообщения. Как только сервер сможет подсоединиться к сети, он попытается определить доступность своих портов снаружи. Это может занять до 20 минут. В логах появятся сообщения вида "Self-testing indicates your ORPort is reachable from the outside. Excellent". Если таковых нет, это значит, что сервер недоступен из Сети — тогда следует перепроверить файрволл.

Как только сервер определит доступность, он загрузит на сервер директорий (базу нод) свой дескриптор. Это позволит клиентам узнать адрес, порты, ключи и другую информацию о нашем сервере. Можно зайти на http://moria.seul.org:9032/tor/status/authority и найти там nickname своего сервера, чтобы убедиться, что он будет использоваться клиентами. Правда, обновляется он не моментально - иногда может потребоваться некоторая время, чтобы эта информация в базе обновилась.

Вот и появился наш сервер в списке. Посмотрим на строчку ниже HelloHacker. Что мы видим: s Exit Fast Running V2Dir Valid. Exit - означает, что мы являемся Exit Node!

Ловись-ловись, рыбка

Итак, выходная нода настроена, запущена, добавлена в базу - кто-нибудь обязательно ею воспользуется уже в самое ближайшее время. Что ж, остается только запустить любимый снифер Wireshark, выбрать Интерфейс, смотрящий во внешнюю сеть и включить захват пакетов. А дальше нужно чуть подождать. В большинстве случаев пакеты начинают сыпаться в логи уже очень скоро :))

После этого можно отключить захват и проанализировать полученный дамп (например, осуществить поиск строки pass в пакетах). Как ты знаешь HTTP-протокол передает все в открытом виде, так что может попасться что-нибудь интересное (мне за 40 минут работы попались 2 логина и пасса к забугорным трекерам). Согласись, неплохо. Но все же самое вкусное пролетает мимо нас (вернее проходит то онокак раз через нас, но зашифрованным). Но и тут есть выход. Мы уже писали в майском номере (№125) о тулзе,перехватывающей данные в SSL-соединениях – sslstrip. На прошедшей в августе конференции BlackHat2009 Moxie Marlinspike зарелизил новую версию этой замечательной программульки (кстати, настоятельно рекомендую ознакомиться с его докладом - все материалы с BlackHat мы выкладывали на сентябрьском DVD). Скачиваем sslstrip с сайта автора и устанавливаем (подробнее от том как использовать sslstrip смотри майским номер).
Запускаем:

$ python sslstrip.py -a -l 8080 -w today.log

Так как мы являемся последним узлом, то трафик от предыдущего узла передается зашифрованным, расшифровывается на нашем сервере и уже потом отправляется конечному адресату. Итак, нам необходимо пропускать исходящий http трафик через sslstrip. Для этого добавим в iptables такое правило:

$ iptables -t nat -I OUTPUT -p tcp -m owner -uid-owner 111 --dport 80 -j DNAT --to-destination 127.0.0.1:8080

где 111 - id пользователя toruser. Иными словами, мы задаем, чтобы весь исходящий HTTP-трафик пользователя toruser шел на sslstrip. Все, теперь процесс полностью автоматизирован, а нам осталось только ждать. А потом проверять логи. :)

Анонимное сканирование

Перехватывать чужие логины и пароли мы научились. А вот задачка поинтересней. Сталкивался ли ты c ситуацией, когда ты находишься во внутренней сети, а посканировать интересующий тебя сервак нельзя, потоум как это тут же привлечет внимание IDS и соответственно админа. Или вот еще вариант: ты сканируешь удаленный хост, а он распознает сканирование и блокирует твой айпишник. Неприятные ситуации. Но и из них есть выход! Нам опять поможет Tor, который можно использовать в качестве посредника для сканирования. Ведь, кто говорил, что эта система можно использовать только для анонимного серфинга? :)

В чем преимущество такого сканирования? В нашем первом случае сканирование сервера будет происходить из инета, а не из локальной сети. А во втором, даже если нас заблокируют, мы всегда сможем пустить трафик через другой Tor-сервер, благо их хватает. Итак, для наших экспериментов нам понадобится:

  1. Tor - у нас уже установлен и настроен
  2. Privoxy (www.privoxy.org)
  3. proxychains (proxychains.sourceforge.net)
  4. tortunnel (www.thoughtcrime.org/software/tortunnel)
  5. Nmap (nmap.org)

Устанавливаем, все, кроме tortunnel. Заходим в конфиг proxychains и, чтобы пустить трафик через Tor,раскомментируем строчку:

Socks4 127.0.0.1 9050

Сохраняем и запускаем сканирование (адрес 92.241.175.142 - это IP xakep.ru): "proxychains nmap -PN 92.241.175.142". На первый взгляд это кажется быстрым и эффективным способом сканирования, но это не так. При дефолтном SYN-сканировании, пакеты через Tor не пойдут. Таким образом мы бы сканировали сервер напрямую и, возможно, спалились бы. Хорошо -попробуем по-другому, посмотрим, какие еще техники сканирования предлагает Nmap: "SCAN TECHNIQUES: -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans".

Укажем Nmap использовать сканирование с полным соединением: "proxychains nmap -sT -PN 92.241.175.142"Поздравляю! Вот теперь мы сканируем через Tor-сеть. Правда что-то долго. А все потому, что наши пакеты проходят через три узла прежде, чем достигнуть цели, причем эти узлы могут быть не самые быстрые на планете. В случае сканирования целой подсети, процесс может затянуться на часы или даже дни. Кроме того, такое сканирование все еще не является анонимным, так как перед сканированием Nmap посылает icmp запросы (идущие напрямую от нашей машины), чтобы проверить доступность удаленной машины. Что ж, придется резать файрволом весь исходящий трафик, идущей к этой машине не через Tor или просто указать опцию -PN Nmap'у (чтобы он не проверял доступность удаленной машины): "iptables -A OUTPUT -dest 92.241.175.142 -j DROP". Я указываю везде опцию -PN, так как фаервол на xakep.ru рубит ICMP_трафик, поэтому я вручную указываю, что хост жив.

Прокачиваем скорость

А как же быть со скоростью? Ведь с такой скоростью много не посканируешь, что лишает смысла все наши изыски. Тут нам поможет утилита torrtunnel. Она служит для того, чтобы пускать трафик сразу через выходной узел, минуя два предыдущих. И в данной ситуации скорость сканирования зависит только от того, какой последний нод ты выберешь. Для установки утилиты потребуются дополнительные библиотеки boost. Скачиваем последнюю версию библиотек с сайта www.boost.org. Распаковываем, заходим в папку и выполняем:

$ bootstrap.sh --libdir=/usr/lib --includedir=/usr/include
$ ./bjam --prefix=/usr
$ ./bjam install

После этого, заголовочные файлы должны оказаться в /usr/include/boost, а библиотеки в /usr/lib. Теперь надо вручную создать символическую ссылку на библиотеку libboost_system.so.1.40.0 (может кому и не понадобится, но у меня она при установке автоматически не создалась):

$ ln -s /usr/lib/libboost_system.so.1.40.0 /usr/lib/libboost_system-mt.so

После этого можно компилировать и устанавливать tortunnel. Запускаем torproxy - она выдает: torproxy <torExitNodeHost>. Теперь нужно выбрать подходящий exit node. Для это идем сюда http://128.31.0.34:9031/tor/status/all или сюда http://moria.seul.org:9032/tor/status/authority и ищем узел с описанием "Exit, Fast, Stable, Valid". Так обозначаются надежные и быстрые ноды - именно такие нам и нужны. Далее копируем айпишик и выполняем: "./torproxy [ExitNodeIP]"

Теперь, для того чтобы все заработало, нужно через конфиг указать proxychains использовать socks5. Итак, комментируем строку Socks4 127.0.0.1 9050в /etc/proxychains.conf и добавляем socks5127.0.0.1 5060 (5060 – порт, который будет слушать tortunnel).

После этого можно запустить и Nmap: @proxychains nmap -sT -p 80,443,21,23 92.241.175.142"

Как ты видишь, скорость сканирования увеличилась (если нет – попробуй другой нод). Теперь можно даже просканировать свою собственную машину. В довершении научим Privoxy работать через tortunnel.Тем самым мы снимим уровнень анонимности (одна промежуточная нода вместо трех), но получим более шустрый серфинг. Заходим в файл конфигурации и добавляем строчку:

forward-socks5/127.0.0.1:5060

Теперь открываем лиса и настраиваем http-proxy на 127.0.0.1:8118. После этого идем на http://torcheck.xenobite.eu/index.php, проверять, действительно ли мы серфим через Tor, если все ок - то отобразится страница с надписью "Your IP is identified to be a Tor-EXIT.". Вот и все, теперь можно провести и ручной аудит удаленной системы.

Tor Scanner

Ну вот, вообщем, мы и заставили Tor работать на себя. Можем сканировать через Tor, перехватывать чужие пароли. А что если нам самим понадобится использовать Tor, чтобы, например, на Gmail зайти? Как не попасть в логи sslstrip'a? Выход есть! В пакете tortunnel есть утилита torscanner, предназначенная для поиска Exit Node'ов, использующих sslstrip. Работает она следующим образом: мы передаем программе URL страницы, содержащей https ссылку(и), после чего она напрямую соединяется со всеми Exit Node'ами и запрашивает указанную страницу. Полученные данные выводятся в консоль, но можно перенаправить вывод в файл, для дальнейшего изучения. Синтаксис для запуска - "torscanner destinationHost destinationPort request". Например:

$ torscanner www.google.ru 80 / > 1.txt

Если проанализировав файл 1.txt, в ответах одного и серверов, ты обнаружешь подмену HTTPS на HTTP, то на сервере однозначно работает sslstrip.
Torscanner сканирует все выходные узлы, что занимает достаточно много времени. Но я думаю, что ты сумеешь модифицировать программу таким образом, чтобы она проверяла только определенный диапазон или один конкретный сервер и уже их использовать в качестве выходных серверов (Tor'у можно явно указать какой или какие выходные узлы использовать).

Жди подвох :)

Вывод может быть один - используя Tor, будь осторожен. Да, система обеспечивает неплохой уровень анонимности, но не может защитить твои данные от перехвата. И пусть ты даже ты убедился, что на последнем узле не запущен sslstrip, все равно никто не даст гарантии, что проходящие пакеты не дампятся снифером. С другой стороны необязательно рассматривать Tor, как исключительно инструмент для анонимного серфинга в Сети. Несколько наших примеров - тому в подтверждение.

Держать Exit Node - задача для крепких парней

Надо понимать, что работая в качестве Exite Node'ы, человек серьезно подставляет себя. Ведь именно его IP светиться во время взломов и т.д. В процессе написания статьи, через мой сервер дважды пытались провести атаку типа SQL-injection. Так что, держи ухо востро, за такие вещи можно запросто всхлопотат от правоохранительных органов или от провайдера. Вот лишь некоторые примеры:

В 2006 г. спецслужбы Германии осуществили захват шести компьютеров, работавших нодами сети Tor на основании того, что они были незаконно использованы для доступа к детской порнографии.

В 2007 г. Национальная полиция Швеции арестовала известного эксперта по компьютерной безопасности Дена Эгерстада (Dan Egerstad) по обвинению в неправомерном доступе к компьютерной информации. 22-летний сотрудник компании Deranged Security опубликовал на своем рабочем сайте пароли к электронной почте посольств, негосударственных организаций, коммерческих фирм и правительственным агентств разных стран. По его словам, он в качестве эксперимента создал 5 выходных серверов Tor и перехватывал через них незашифрованный трафик.

В 2007 г. немецкая полиция арестовала в Дюссельдорфе Александра Янссена, организовавшего у себя на компьютере сервер Tor, через который неизвестный отправил ложное сообщение о теракте. Несмотря на то, что вскоре г-н Янссен был отпущен, он решил отказаться от дальнейшего использования своего компьютера в качестве точки выхода Tor.

Скрытые сервисы - уникалная фишка Tor

Есть у Tor еще одна интересная фича - скрытые сервисы. Пользователи Tor могут предоставлять различные сервисы, такие как веб-доступ или сервер системы мгновенного обмена сообщениями, не открывая своё истинное местоположение. Скрытые службы доступны через специальные псевдо-домены верхнего уровня .onion. Сеть Tor понимает эти домены и направляет информацию анонимно к скрытым службам. Скрытая служба затем обрабатывает её посредством стандартного софта, который настраивается на прослушивание только непубличных (закрытых для внешнего доступа) интерфейсов. Данный функционал можно использовать для размещения сайта, не беспокоясь о цензуре. Никто не будет в состоянии определить владельца сайта, и владелец сайта не будет в состоянии узнать, кто использовал сайт.

Специализированные ОС

  • Anonym.OS — LiveCD-ОС на базе OpenBSD, в которой весь входящий трафик запрещен, а весь исходящий автоматически и прозрачно для пользователя шифруется и анонимизируется при помощи Tor - http://sourceforge.net/projects/anonym-os/
  • ELE — Damn Small Linux+Dillo+Tor+Privoxy+Scroogle (LiveCD) - http://northernsecurity.net/download/ele/
  • Incognito LiveCD — Gentoo+Tor+TrueCrypt+Thunderbird+Enigmail+Firefox+Torbutton+FireGPG+GnuPG+KeePassX - http://anonymityanywhere.com/incognito/
  • Phantomix — LiveCD-дистрибутив, предназначенный для анонимного пользования Интернетом с помощью Tor и Privoxy- http://phantomix.ytternhagen.de/
  • Tor-ramdisk — Дистрибутив Linux, разработанный, чтобы обеспечить работу Tor полностью в оперативной памяти, без использования жесткого диска или иных устройств долговременного хранения данных - http://opensource.dyc.edu/tor-ramdisk/

DVD

Все описанные в статье скрипты, утилиты ты найдешь на нашем диске

WWW

WARNING

Данная статья не является инструкцией или побуждением к действиям. Она призвана лишь показать, что даже программы, создаваемые ради благих целей, могут быть использованы во зло.

WWW

Содержание
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001