Используем tor как proxy для брута

Обновлено: 03.07.2024

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

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

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

Чтобы пустить трафик приложения через Tor, достаточно указать в настройках
прокси - адрес локального SOCKS-сервера. В случае, если такой возможности не
предусмотрено можно использовать соксофикатор (например, Sockcap), но помнить
при этом, что через сокс можно пустить только TCP-трафик. Впрочем, для
большинства пользователей намного более интересны будут готовые сборки (так
называемые Bundles), включающие сам Tor, а также преконфигурированные браузер
Firefox и IM-клиент Pidgin. Поставил и все работает! Кстати говоря, для большего
удобства для Firefox'а реализован плагин
Torbutton.
Щелкнул - и весь безопасно трафик уже передается через цепочку промежуточных
узлов. Что вообще представляют собой эти узлы и как в принципе устроен 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).
Устанавливаем его в 9051.

DirPort – на этом порту 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 или другими прокси.

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

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

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

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

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

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

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

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

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

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

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

Socks4 127.0.0.1 9050

Укажем Nmap использовать сканирование с полным соединением: " proxychains
nmap -sT -PN 92.241.175.142 "

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

$ 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

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

После этого можно запустить и Nmap:

@proxychains nmap -sT -p 80,443,21,23 92.241.175.142

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

Tor Scanner

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

Жди подвох 🙂

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

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

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

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

WARNING

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

Этичный хакинг и тестирование на проникновение, информационная безопасность

Оглавление

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

Где скачать Tor без браузера для Windows


Как установить службу Tor без браузера в Windows

Данный вопрос подробно рассмотрен в разделе «Tor в Windows: установка службы, создание скрытого сервиса, использование браузерами и для пентеста». Последующие подсказки подразумевают, что Tor установлен так, как описано в статье, на которую дана ссылка. Особенно обратите внимание, как именно делается установка когда нужно, чтобы Tor использовал настройки из конфигурационного файла.

Настройка файлов GeoIPFile и GeoIPv6File для Tor в Windows

Файлы для определения расположения по IP адресу (геолокация) поставляются в комплекте Tor. У этих файлов имена geoip и geoip6. В Linux эти файлы имеют следующие пути:

Для обычной работы Tor эти файлы не требуются и поэтому в инструкции, на которую дана ссылка, ничего не сказано об их подключении. Тем не менее если вы хотите настроить Tor так, чтобы он имел IP адрес определённой страны, либо чтобы он избегал использовать узлы сети Tor, располагающиеся в определённых странах, то обязательно нужно указать в настройках Tor файлы для геолокации.

В скаченном архиве эти файлы размещены в папке Data\Tor. Распакуйте два файла geoip и geoip6 в папку C:\Tor\, где уже установлен Tor.

Теперь создайте (если вы этого ещё не сделали) или откройте файл C:\Tor\torrc и добавьте в него следующие строки:.

Если всё нормально, то должны появиться примерно следующие строки:


Как исключить из цепочек Tor определённые страны

Чтобы работала эта настройка, у вас должны быть настроены значения GeoIPFile и GeoIPv6File. Как это сделать в Windows показано чуть выше. В Linux всё настроено автоматически сразу после установки.

Если вы не хотите, чтобы ваши запросы не проходили через узлы сети Tor из определённых стран, то откройте конфигурационный файл Tor:

И добавьте в неё директиву ExcludeNodes, после которой поместите список двухбуквенных кодов стран (каждое значение должно быть помещено в фигурные скобки, значения разделены друг от друга запятыми), которые вы не хотите.

Пример исключения узлов Tor из стран РФ, Беларусь, Украина и Казахстан:

Также дополнительно добавьте настройки:

Подробности об этих настройках смотрите по ссылкам:

Чтобы изменения вступили в силу, нужно перезапустить службу Tor.

Как сделать так, чтобы при выходе через Tor был IP адрес определённой страны

Если вы хотите, чтобы при выходе в Интернет через Tor у вас всегда был IP адрес конкретной страны, то используйте опцию ExitNodes, после которой в фигурных скобках укажите двухбуквенный код выбранной страны. Пример настройки, при которой IP адрес при использовании Tor всегда будет из Японии:

Чтобы работала эта настройка, у вас должны быть настроены значения GeoIPFile и GeoIPv6File.

Чтобы изменения вступили в силу, нужно перезапустить службу Tor.

Можно указать сразу несколько стран, и IP адреса будут выбираться для любой из этого списка. Пример настройки, которая устанавливает использование только выходные узлы Tor из европейских стран (Германия, Франция, Финляндия, Нидерланды, Новая Зеландия, Норвегия, Швейцария, Швеция, Дания, Эстония):

Опция ExcludeNodes переопределяет эту опцию: любой узел, указанный одновременно в ExitNodes и ExcludeNodes, рассматривается как исключённый.

Настройка логов Tor в Windows

Чтобы журнал работы службы Tor сохранялся в файл, добавьте в конфигурационный файл Tor следующую директиву:

и перезапустите службу Tor.

Для изменения уровня подробности журналов Tor, вместо info можно указать: debug, info, notice, warn и err. Варианты перечислены от самого подробного вывода информации к наименее подробному.

Настройка выполнения DNS запросов через Tor в Windows

В конфигурационный файл Tor добавьте директиву:

Затем в системных настройках в качестве IP адреса DNS сервера нужно указать 127.0.0.1.


После этого все DNS запросы будут передаваться через анонимную сеть Tor.


Можно ли использовать Tor как прокси на удалённом компьютере

Для знакомства с прокси смотрите статьи:

Если вам хочется организовать свой такой же прокси на сервере, то вы можете это сделать с помощью Tor. Используя директиву SocksPort можно сделать так, что служба Tor будет прослушивать для подключений внешний IP адрес (по умолчанию она прослушивает только localhost).

Если вы не предпримите каких-либо мер, то данный прокси будет открытым и любой желающий сможет им воспользоваться. Для ограничения тех, кто может подключаться к прокси, используйте директиву SocksPolicy.

Защита от идентификации по профилю трафика

Можно предположить довольно специфические условия, когда соглядатай имеет доступ к вашему трафику (например, это может быть провайдер Интернет-услуг). Ваш трафик Tor зашифрован, и единственное, что ему остаётся, это наблюдать за активностью вашего трафика. Например, в 18.01 было отправлено немного исходящего трафика и получен ответ. Затем до 18.07 был только незначительный фоновый трафик. Затем до 18.16 активная отправка и получение данных. На самом деле, профиль трафика составляется не по минутам, а по секундам и долям секунд, но принцип, надеюсь, должен быть понятен. Если этот же соглядатай имеет доступ к профилю трафика узла, к которому подключался этот пользователь, то эти профили можно сопоставить и подтвердить, что именно этот пользователь подключался к этому узлу.

На самом деле, для выполнения такого анализа нужно соблюдение многих условий и не совсем понятно, насколько он применим в реальной жизни.

Тем не менее с помощью настройки ConnectionPadding можно принять меры для защиты. Эта настройка будет отправлять ненужные данные в дополнение к вашим данным. С одной стороны, это увеличит нагрузку на сеть (что особенно чувствительно если это мобильный платный трафик), но зато должно свести на нет потенциальные методы анализа.

Для принудительного включения этой функции добавьте следующие директиву:

Настройка смены IP адресов в Tor

По умолчанию маршрут Tor трафика меняется каждые 30 секунд. Если вы хотите, чтобы этот маршрут менялся чаще или реже, то используйте опцию NewCircuitPeriod после которой укажите число секунд, через которое должен обновляться маршрут и ваш IP адрес:

Подключение к сайтам через одну и ту же выходную ноду Tor

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

С помощью TrackHostExits будет включено следующее поведение: для большинства сайтов Tor будет работать в обычном режиме — подключаться часто меняя IP адреса. Но для указанных после TrackHostExits сайтов Tor будет запоминать IP адрес выходной ноды, через которую было сделано соединение, и будет пытаться использовать эту же самую выходную ноду Tor для подключения к этим сайтам.

Имена хостов и домены должны быть перечислены через запятую:

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


В этой статье, мы научимся выполнять парсинг веб-сайтов, не позволяя им блокировать наш IP-адрес с помощью различных методов, использующих прокси в Python.

Другими словами при использовании прокси-сервера вместо прямого подключения к целевому серверу и отправки запроса ему непосредственно, вы направляете запрос на прокси-сервер, который обрабатывает его, выполняет его и возвращает ответ. Рисунок ниже демонстрирует, проще чем в Википедии, принцип работы прокси-сервера:

Специалисты по парсингу часто используют более одного прокси, чтобы веб-сайты не блокировали их IP-адрес. Кроме того прокси-серверы имеют ряд других преимуществ, в том числе обход различных фильтров и цензуры, скрытие вашего реального IP-адреса и т.д.

В этом руководстве вы узнаете, как использовать прокси-серверы в Python с помощью библиотеки requests, мы также будем использовать библиотеку stem, библиотекой позволяющей работать с помощью Python контролером Tor, то есть программно отправлять и получать от него команды. Также мы будем использовать библиотеку BeautifulSoup для обработки полученного содержимого страниц. И так давайте установим их:

Используем адреса активных бесплатных прокси

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

Однако, когда я попытался использовать их, у большинства из них был слишком большой тайм-аут, и я отфильтровал только рабочие:

Этот список может оказаться весьма недолговечным, так как большинство из адресов перестанут работать, уже когда вы прочтете это руководство (поэтому вам следует выполнять указанную выше функцию каждый раз, когда вам понадобятся новые адреса прокси-серверов).

Следующая функция принимает список адресов прокси-серверов, создает новый объект session , а также случайным образом выбирает один из переданных в нее адресов прокси для последующей отправки запросов:

Давайте проверим этот код, отправив запрос на веб-сайт, который возвращает наш IP-адрес:

В результате получим:

Как видите, это IP-адреса рабочих прокси-серверов, а не наш реальный IP-адрес (попробуйте посетить этот веб-сайт в своем браузере, и вы увидите свой реальный IP-адрес).

Бесплатные прокси, как правило, умирают очень быстро, в основном за дни или даже часы. Поэтому вам необходимо использовать прокси-серверы премиум-класса для крупномасштабных проектов по извлечению данных, для этого существует множество провайдеров, которые меняют ваши IP-адреса. Одно из хорошо удобных решений – сервис Crawlera . Мы поговорим об этом подробнее в последнем разделе этого руководства.

Использование Tor в качестве прокси

Вы также можете использовать сеть Tor для ротации IP-адресов:

Примечание. Приведенный выше код должен работать только в том случае, если на вашем компьютере установлен Tor (перейдите по этой ссылке, чтобы правильно установить его) и правильно настроен (включен ControlPort 9051, см. этот ответ в stackoverflow о переполнении стека для получения дополнительных сведений).

Все получилось. Однако, когда вы попробуете веб-парсинг с использованием сети Tor, вы скоро поймете, что в большинстве случаев это довольно медленно, поэтому рекомендуемый мною способ мы рассмотрим ниже.

Используем Crawlera

Crawlera от Scrapinghub позволяет вам осуществлять парсинг быстро и надежно, управляя прокси-серверами, автоматически меняя их адреса, поэтому, если вас забанят, он автоматически обнаружит это и изменит IP-адрес за вас.

Благодаря простому API запрос, который вы делаете при парсинге, будет маршрутизироваться через пул высококачественных прокси. При необходимости он автоматически вводит задержки между запросами и удаляет/добавляет IP-адреса для решения различных проблем сканирования.

Вот как можно использовать Crawlera с библиотекой requests используя Python:

После регистрации вам будет предоставлен ключ API, которым вы замените строку proxy_auth .

Итак, вот что делает для вас Crawlera:

Заключение

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

Где можно использовать? В случаях, когда нужно изменить свой IP-адрес при выполнении нескольких запросов за единицу времени без блокировки соединения.

Луковое ПО: используем TOR для анонимного парсинга

Для успешной разработки парсинг-агента на прокси-сервере нужно установить Linux с такими инструментами:

TOR (установка и настройка)

Установи TOR через терминал:

Пароль создаем так:

Для примера 1234 превратится в:

Отредактируй или раскоментируй файл /etc/tor/torrc следующим образом:

Если всплыли какие-либо проблемы, используй ключ --controlport:

Python-Stem

Данный модуль используется для взаимодействия с контроллером Tor и программного отправления/получения команд управления.

Privoxy

Укажи ему использовать TOR для маршрутизации всего трафика через серверы SOCKS в localhost по порту 9050:

После настройки прокси беремся за разработку агента для парсинга страниц с изменением IP-адреса каждые n-запросов. Класс назовем ConnectionManager.py и вставим в него следующую реализацию:

Примечание 1: это не совсем нормальная практика "жестко" программировать элементы в коде (IP, порт, пароль и т. д.), хотя в этом учебном случае полезно для понимания.

Примечание 2: на сайте ican можно увидеть IP-адрес клиента, делающего запрос. При выполнении запросов через сеть TOR наш IP скрывается, а TOR назначает нам другой, показанный на ican.

В конструкторе класса два атрибута (два IP) – текущий и новый IP, который нужно получить для TOR. Если TOR выдает тот же IP, отбрасываем и запрашиваем новый.

Также в коде есть два публичных метода: request(url) и new_identity(). Первый будет использоваться для обращения к странице, которая передается в качестве параметра, а второй – для назначения нового IP. Приватные методы _get_connection() и _set_url_proxy() нужны для установки нового соединения в сети TOR и отправки запроса через прокси.

Приведем пример изменения IP-адреса после выполнения 3 запросов к странице:

При выполнении 3 запросов к веб-странице "icanhazip" запрашивается изменение IP вызовом метода new_identity(). Результат выполнения этого кода:

А теперь более реальный пример. В процессе анонимного парсинга обрабатывается сайт со статьями. IP-адрес перезапрашивается через каждые 5 запросов к странице:анонимного парсинга

Читайте также: