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/html\n\n");
@ee=(
"CHARSET",
"HTTP_USER_AGENT",
"HTTP_REFERER",
"REMOTE_ADDR",
"REMOTE_HOST"
);
foreach $e(@ee)
{
print "$e: $ENV{$e}
\n";
}
Вообще-то это самый безобидный случай
обнародования ip-адреса (разве что если допустить злой умысел веб-мастера,
установившего скрипт, атакующий посетителя, но вероятность целенаправленной
атаки ничтожно мала).
IP-адрес отправителя можно вытащить из
заголовка полученной электронной почты (Скорее всего, он будет лежать в
последнем поле Received:, в отличие от поля From: его подделать чуть сложнее).
Если у вас динамически выделяемый адрес, то подобная ситуация не слишком опасна.
Хуже, если адрес постоянный, что, правда, встречается пореже.
Самыми опасными с точки зрения обнародования
ip-адреса оказываются всевозможные системы для интерактивного общения - IRC
(командой /whois), InternetPhone, ICQ и т.д. Справедливости ради надо заметить,
что некоторые из них пытаются прикрыть адрес пользователя (скажем, в MS Comic
Chat показывается только часть адреса, в ICQ'98 появилась возможность скрытия
своего адреса, не слишком правда хорошо работающая при общении со старыми
версиями), но в большинстве систем адрес лежит совершенно открыто. Что же
касается html-чатов, здесь все зависит от желания разработчика, принципиальная
возможность показа ip-адреса существует, как это было продемонстрировано чуть
выше.
Идея следующая: если в чате разрешен ввод тегов
html, никто не помешает вставить в свое сообщение что-то типа В итоге все
присутствующие в чате (даже не зарегистрировавшиеся) будут, сами того не ведая,
вызывать скрипт sniffer.cgi. Ну а остальное уже дело техники, реализация
подобного скрипта на Perl'е, ведущего лог всех обращений, займет несколько
строчек. Демонстрационный вариант этого скрипта доступен на http://www.hackzone.ru/cgi-bin/sniffer.cgi.
Способ применения очень прост - вы вставляете в
свое сообщение текст наподобие следующего:
, где 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=;
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
("$line0\n");
for ($i=0; $i<$maxline;
$i++)
{ print DB
("$line[$i]");
}
flock(DB,
8);
close(DB);
print "Location:
http://www.hackzone.ru/images/hz_animated.gif\n\n";
Теперь немного о том, как же защититься от
всего этого безобразия. Самый простой способ прикрыться при прогулках по 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-клиенты. Так что
бороться тут можно лишь двумя способами. Самый надежный - не использовать их
вообще :) Более реалистичный - бороться не с причиной, а со следствиями -
разыскать свежайшие заплаты и надеяться, что против вашей брони еще не изобрели
подходящей пушки. |