This page is an archived copy on Gagin.ru personal site

InterNet magazine, number 30

Дмитрий Леонов

Анонимности.NET

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

Ключевые понятия при обсуждении анонимности в сети - IP-адрес и прокси-сервер. IP-адрес - основа передачи данных в сети, уникальный идентификатор каждого компьютера, к ней подключенного. Знание IP-адреса удаленной машины позволяет воспользоваться сервисами, на ней запущенными, - будь то веб-сервер, почтовый сервер или троянец, поджидающий на машине-жертве прихода хозяина. Взаимодействие между клиентом и сервером осуществляется по определенному протоколу, описывающему порядок передачи информации. Разные сетевые службы используют разные протоколы - так, для передачи веб-страниц используется протокол передачи гипертекстовой информации HTTP, для работы с файловыми архивами - протокол передачи файлов FTP, для работы с почтой - протоколы SMTP и POP3 и т.п.

IP-адрес позволяет точно идентифицировать узел, но, поскольку на каждом узле может быть запущено несколько различных служб, необходимо как-то различать, какой из них адресован данный запрос клиента. Для каждой службы отведен отдельный порт, представляющий собой число от 0 до 65 534. Если проводить аналогию с обычной почтовой адресацией, то IP-адрес примерно соответствует номеру дома, а порт - номеру квартиры. Для наиболее популярных служб зарезервированы стандартные номера портов. Так, для FTP это 21, для HTTP - 80, SMTP - 25, POP3 - 110 (впрочем, это лишь значения по умолчанию, никто не мешает владельцу узла настроить эти службы на работу с другими портами).


Рис. 1 

При обмене информацией в сети не только клиент должен знать адрес сервера, но и сервер должен знать адрес клиента - ведь ответ на запрос клиента как-то должен быть ему доставлен. Таким образом, любое клиентское приложение как минимум передает серверу IP-адрес своего владельца, все прочее же зависит от фантазии его разработчиков. Броузеры, как видно из Рис. 1, обычно передают информацию о своей версии и типе операционной системы, адрес страницы, по ссылке с которой пользователь попал на текущую, информацию о прокси и cookie, о которых мы поговорим чуть позже.


Рис. 2 

В случае броузеров эти сведения передаются только серверу (впрочем, что с ними будет происходить дальше - проигнорируют ли их, положат в базу или выставят на всеобщее обозрение, - уже полностью на усмотрении владельца сервера), в случае почтовых клиентов IP-адрес отправителя письма можно считать из его заголовка (в Outlook Express для этого достаточно выбрать пункт меню File/Properties при просмотре сообщения) (см. Рис. 2, последний из заголовков "Received:"). Кстати, бывает очень полезно заглянуть в заголовки письма, чтобы убедиться в том, что ваш корреспондент - действительно тот, за кого себя выдает, - как, например, в случае письма от president@whitehouse.gov, пришедшего с dialup55.uryupinsk.ru. Наиболее безалаберно ведут себя всевозможные программы для интерактивного общения - так называемые чаты (chats), интернет-телефоны, средства передачи сообщений и т.п. Большинство из них не слишком заботится о безопасности пользователя, позволяя получить большое количество информации о его системе - начиная от IP-адреса и самого факта его нахождения в сети, кончая временем суток и типом операционной системы. Многие из них умеют скрывать IP-адрес собеседника, как это делает MS Comic Chat или ICQ, но, поскольку при общении один на один соединение, как правило, устанавливается непосредственно между компьютерами собеседников, минуя сервер, это позволяет, например, воспользоваться для определения адреса стандартной утилитой netstat, честно выводящей адреса всех узлов сети, с которыми в данный момент установлено соединение. Строго говоря, раскрытие IP-адреса пользователя не означает автоматической потери им анонимности. Однако в случае dialup-пользователей этой информации уже вполне достаточно, чтобы многие провайдеры сообщили, с какого телефона велась работа. Пусть эта информация и не открывается первому встречному, легче от этого не делается; дискуссию же о том, что законопослушному гражданину нечего скрывать от родного государства, предлагаю вести в другом месте. Кроме того, зачастую и не надо устанавливать идентичность виртуальной и реальной личности, достаточно установить идентичность двух виртуальных, а тут уже IP-адрес может быть неплохим помощником.

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

Прокси позволяют решить сразу несколько задач. Во-первых, при подключении к интернету локальной сети нет необходимости получать на каждую рабочую станцию уникальный глобальный IP-адрес. Достаточно обзавестись одним таким адресом на всю сеть, раздать внутри нее фиктивные локальные IP-адреса, и настроить все клиентские приложения на работу через прокси (честно говоря, это то еще удовольствие, поскольку традиционные прокси работают на уровне отдельных служб, и каждое приложение, как правило, должно быть специально настроено на работу через прокси - см. Рис. 3). Для последних версий Internet Explorer'а прокси отдельно настраиваются для каждого dialup-соединения, а также для соединения по локальной сети (см. Рис. 3а).


Рис. 3 


Рис. 3a 

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

Наконец, что совсем уже близко к теме этой статьи, прокси могут полностью скрыть от сервера адрес клиента. Обратите внимание, на Рис. 1 в качестве адреса удаленного клиента REMOTE_HOST указан вовсе не адрес клиентской машины, а адрес прокси-сервера. В моем случае прокси-сервер оказался довольно честным и передал в заголовке x-forwarded-for адрес клиента, отправившего запрос, но бывает и по-другому. Прокси-серверы, не передающие адрес клиента, носят название анонимных и являются лакомым кусочком для любителей сетевой приватности.

Веб-сервер может попросить броузер сохранить в специальный файл на жестком диске пользователя некоторую строку символов, называемую cookie (печенье, пирожок и т.п., адекватный перевод этого термина мне неизвестен), с тем чтобы считать ее при следующем заходе. Предельный размер каждого cookie определен в 4 кб, и для каждого сервера допускается наличие не более 20 cookies. Информация, записанная сервером в cookie, может быть считана только этим же сервером и используется преимущественно в мирных целях - например, для идентификации пользователей в онлайновом магазине, для запоминания настроек (например, имен в форумах и гостевых книгах) и т.п.

С другой стороны, далеко не всем нравится, что сервер что-то пишет на диск без ведома хозяина, да и тот факт, что с помощью cookie очень легко отследить маршрут передвижения посетителя по серверу, его привычки и т.д., устраивает отнюдь не каждого. Последнее обстоятельство приобретает существенное значение с распространением баннерных сетей и многочисленных счетчиков, код которых висит на каждой второй веб-странице. Ограничение на считывание cookie только тем сервером, что его установил, здесь уже не срабатывает, поскольку баннеры одной баннерной сети загружаются с одного и того же сервера вне зависимости от того, на каких страницах они показываются. Поэтому они легко могут установить - и устанавливают - свои cookies, делая возможными весьма масштабные маркетинговые исследования. Отдельного доброго слова заслуживают JavaScript, VBScript, Java, ActiveX и прочие средства подготовки приложений, исполняющихся на стороне клиента. Призванные украсить нашу жизнь, зачастую они позволяют утащить слишком много персональной ииформации даже в штатном режиме работы, не говоря уж о регулярно обнаруживаемых ошибках в реализации, позволяющих получить доступ к файлам пользователя.

Стань тенью для зла, бедный сын Тумы...

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


Рис. 4 

Итак, выбор параноика - идем в настройки и отключаем JavaScript, cookie и т.п. (в IE 5.5 - Internet Options/Security/Custom Level (Рис. 4) и запрещаем все, что относится к ActiveX, Java, cookie). Впрочем, после этого прогулки по вебу окажутся не столь приятными, как ранее. В качестве более мягкой альтернативы можно предложить вариант, в котором запрещены cookies, сохраняемые на диск, но разрешены хранящиеся в течение сессии - иначе многие сервисы просто не пустят вас дальше первой страницы. Что касается JavaScript'а и иже с ним, то если вам важна анонимность, лучше его оставить запрещенным.


Рис. 5 

В Internet Explorer'е определено четыре зоны безопасности, в которых можно задать различное состояние настроек (Рис. 5), и для трех из них можно задать принадлежащие им сайты (формально для этого предназначены только категории Trusted и Restricted, но задавать набор сайтов можно и для Local Intranet). Для пользователей Netscape Navigator'а это, увы, является недоступной роскошью, его настройки безопасности монолитны и распространяются на все сайты.

Любители более тонких настроек могут воспользоваться впомогательными программами. Их можно разделить на две группы - локальные http-прокси и работающие на более низком уровне персональные файрволы, по совместительству обеспечивающие фильтрацию веб-контента. Яркие представители первой группы - Internet JunkBuster (www.junkbusters.com/ht/en/ijb.html) и Proxomitron (spywaresucks.org/prox/). После установки броузер необходимо настроить на их использование в качестве локального прокси (указав адрес прокси 127.0.0.1, или localhost, и порт - 8000 в случае JunkBuster и 8080 для Proxomitron). Конфигурация JunkBuster'а осуществляется с помощью текстового файла. В его настройках можно указать критерии блокировки отправки/получения cookie, блокировки рекламных баннеров, подменить значения Referer и User-Agent и т.п. Proxomitron гораздо более удобен в использовании и гибок в настройке, с помощью его фильтров можно не только блокировать загрузку cookie или баннеров, но и изменять значения http-заголовков, блокировать "всплывающие" окна, полностью или частично блокировать JavaScript, производить косметические изменения в загружаемых страницах и т.п.


Рис. 6 

Примеры программ второго класса - Norton Internet Security (в девичестве @Guard) и Outpost (www.agnitum.com/products/outpost/). Предоставляя все те же возможности, что и программы первой группы, они не требуют для своей работы специальной настройки броузера, кроме того, позволяют фильтровать входящий/исходящий сетевой трафик, контролировать текущие соединения, выявлять и блокировать подозрительные действия.


Рис. 7 

Следующий шаг - выбор подходящего http-прокси и указание его в настройках. Найти анонимный прокси в современной сети - не проблема, этому посвящено множество сайтов, например www.proxylist.com, proxys4all.cgi.net, www.cameleon.org/1proxytodayrefresh.html. На первом из перечисленных сайтов можно найти весьма полезную программу, проверяющую анонимность прокси-серверов, на втором - массу дополнительной информации и вспомогательных утилит. И, разумеется, списки прокси.

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

Одним из самых известных подобных сервисов был, видимо, www.anonymizer.com. Впрочем, его использование и раньше омрачалось десятисекундной задержкой с показом рекламы перед загрузкой страницы, а в последнее время бесплатный вариант Anonymizer.com стал пользоваться столь высокой популярностью, что его владельцы попросту ограничили доступ к большинству серверов. Гораздо быстрее, без навязчивой рекламы и ограничений работает anonymouse-master.org/anonwww.html. На Рис. 8 для сравнения изображена та же страница, что и на Рис. 1, загруженная с того же компьютера, но уже через анонимайзер.


Рис. 8 

Анонимность почтовых сообщений традиционно обеспечивалась с помощью сервисов-ремейлеров, работающих опять-таки по принципу прокси. Вы отправляете письмо на адрес ремейлера, указывая в теме или в первой строчке письма тот адрес, на который оно должно быть доставлено. Ремейлер пересылает полученное письмо адресату, удалив предварительно из его заголовков информацию об ip-адресе отправителя. Многие ремейлеры обзавелись веб- интерфейсом - как, например, anonymouse-master.org/ anonemail.html. Ничуть не хуже и вариант использования любой из многочисленных служб веб-почты в сочетании с анонимным http-прокси.

Для обеспечения анонимности других сетевых приложений, как правило, используются SOCKS-прокси. SOCKS - протокол, созданный для прозрачного взаимодействия приложений. При соединении с SOCKS-прокси клиент сообщает ему адрес и порт удаленного сервера, после чего прокси передает по этому адресу пакет с данными, как было отмечено выше, не вдаваясь в подробности протокола обмена информацией, переносимой в этих пакетах. Эта особенность SOCKS-прокси позволяет использовать их практически любыми сетевыми приложениями. В настоящее время распространение получили четвертая и пятая версии SOCKS-протокола, отличающиеся главным образом возможностью парольной авторизации пользователя. Приложения, знающие о существовании возможности использования SOCKS-прокси, настраиваются как обычно - указанием в соответствующих настройках адреса и порта прокси, а также имени и пароля в случае SOCKS5-прокси (Рис. 8). Однако, во-первых, это умеют далеко не все существующие сетевые программы, во-вторых, настройка всех таких программ - довольно утомительное занятие. На помощь пользователям Windows приходит поистине замечательная программа SocksCap (www.socks.nec.com/reference/sockscap.html), позволяющая работать через прокси даже тем программам, которые и не подозревали о такой возможности. Работать с SocksCap очень просто. Вы всего один раз настраиваете ее на использование SOCKS-прокси, после чего создаете в ней ссылки на программы, которые будут исполняться под ее чутким руководством (либо через меню, либо простым перетаскиванием иконки). При запуске сетевой программы через SocksCap последний перехватывает все сетевые запросы, направляет их SOCKS-прокси, а получив от прокси ответ, пересылает его нашей программе, причем все эти действия для самой программы совершенно прозрачны, она искренне считает, что напрямую общается с удаленным узлом.

Но как быть, если под рукой не оказалось подходящего SOCKS-прокси? Ситуация вполне реальная, ведь свободных SOCKS-прокси гораздо меньше, чем их собратьев, работающих с http. На помощь придет крайне любопытная программа HTTPort (www.htthost.com). Она работает как SOCKS-прокси и занимается туннелированием сетевого трафика в http-протокол. Работает это не так запутанно, как звучит. Схема следующая: ваша программа обращается к SOCKS-прокси, встроенному в HTTPort. HTTPort упаковывает запрос программы в виде, пригодном для передачи по http-протоколу, и передает его через http-прокси на удаленный сервер HTTPost. Тот, в свою очередь, распаковывет http-запрос, передает полученную информацию тому удаленному узлу, с которым хотела общаться ваша прикладная программа, получает от него ответ, упаковывает его и передает обратно через http-прокси HTTPost'у. Осталось совсем немного - HTTPost разворачивает этот ответ и через встроенный SOCKS-прокси передает ее вашему приложению в удобоваримом для него виде. Самое удивительное - что все это еще и работает.

Напоследок - ложка дегтя. Все мы понимаем, что говорить о надежности анонимных прокси в то время, когда призраки СОРМа и "Эшелона" (www.echelonwatch.org) бродят по планете, можно с очень большой натяжкой. Да и без всяких эшелонов проблема анонимности зачастую легко решается одним визитом человека с соответствующей корочкой/жетоном/ордером. Одним из возможных решений проблемы Большого брата может стать система Freedom (www.freedom.net), предложенная компанией ZeroKnowledge Systems. Доступный на сайте бесплатный вариант программы ничем особенным не выделяется на фоне других персональныйх файрволов - все та же блокировка баннеров, управление cookies, контроль доступа. Оплатив же расширенную версию, вы получите доступ к системе анонимного серфинга и полностью анонимной почты. После подключения к системе информация, которую вы запрашиваете и передаете, пробегает в зашифрованном виде по цепочке серверов, установленных у крупнейших американских провайдеров, и ваш реальный IP-адрес известен только первому серверу цепочки. А содержание передаваемых вам данных известно только последнему серверу цепочки, поскольку информация зашифрована вашим 128-битным ключом. Все та же идея прокси-сервера, густо замешенная на криптографии с открытым ключом. Выглядит очень внушительно, одна вот только проблема - единственной гарантией ее надежности является честное слово компании ZeroKnowledge.


В оглавление номера This page is an archived copy on Gagin.ru personal site