Железные цепи победы Николай "GorluM" Андреев Хакер, номер #070, стр. 070-122-1 (gorlum@real.xakep.ru) Учимся работать с цепочкой socks-проксей Невозможно достичь абсолютной анонимности в интернете. Пусть ты даже используешь замечательный «анонимный» прокси-сервер, не пишущий логов, никто и никогда не убережет тебя от хитрого админа, который жаждет выдать всю инфу о тебе органам по борьбе с компьютерными преступлениями. Он без проблем может, никого не предупредив, поставить сниффер на машину с квази-анонимной проксей и записывать весь трафик, который впоследствии будет являться уликой. О том, как максимально усложнить жизнь людям, выслеживающим тебя, и пойдет речь в этом материале. Хорошо зарекомендовавший себя способ не светить своим ip’шником в Сети – использование SOCKS-прокси-серверов – вещь, как оказывается, не слишком надежная. Да, бесспорно, что твой IP в логах сервера, к которому ты коннектишься, не светится, но он без проблем может остаться в записях самого прокси. Ведь 80% всех публичных соксов в Сети – дело рук дядек из органов, которые с помощью них ловят нашего брата. А даже если и не их, примитивный сниффер, установленный случайно или специально рядом с соксой, может выдать хакера с головой. Как же быть? Выход, несмотря на всю трагичность ситуации, есть – использование цепочки SOCKS-серверов. Ты наверняка не раз встречался с программой SocksChain. Хорошая программа, может быть, даже единственная в своем роде. Но параноику свойственно не доверять чужим программам, особенно если от их работы зависит место проживания в ближайшие 5 лет. Попробуем разобраться в том, как она работает, и напишем свою - ничуть не хуже. Принципы протокола Поскольку целью себе мы поставили разобраться с передачей данных по цепочке SOCKS-проксей, в первую очередь нам надо понять принципы работы обыкновенного socks-клиента. То есть что и как надо посылать socks-серверу нашим клиентским приложением, чтобы тот соединился с нужным нам адресом и начал бы правильно работать, а точнее, прозрачно передавать данные. Приступим. Соединение через socks-прокси проходит в два этапа. Первый этап – приветствие и аутентификация (которая, надо заметить, не обязательна). Второй – сообщение серверу данных о пункте назначения, грубо говоря, шлем адрес и порт, куда должен коннектиться сокс. Приветствие – это сообщение, посылаемое клиентом сразу после соединения с соксом. Согласно RFC1928 (запомнить очень просто, 1928 – год, положивший начало военным действиям между Боливией и Парагваем), наше приложение должно послать пакет со следующим содержанием: 1 байт – номер версии; 1 байт – количество (N) методов; N байт – перечисленные поддерживаемые клиентом методы; Номер версии в нашем конкретном случае – это 0x05, если бы мы рассматривали предыдущую версию протокола, то написали бы 4. За ним идет байт, в котором должно находиться число поддерживаемых клиентом методов соединения/аутентификации, за которым должна идти последовательность байтов, описывающих эти самые методы. Значение байта метода 0x00 означает, что клиент поддерживает соединение без аутентификации, 0x02 – что мы можем при желании выдать USERNAME/PASSWORD по протоколу, описанному в RFC1929. |