Як відомо, 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»);
@ee=(
«CHARSET»,
«HTTP_USER_AGENT»,
«HTTP_REFERER»,
«REMOTE_ADDR»,
«REMOTE_HOST»
);
foreach $e(@ee)
{
print “$e: $ENV{$e}
“;
}
Взагалі-то це найбезпечніший випадок оприлюднення ip-адреси (хіба що якщо допустити злий умисел веб-майстра, який встановив скрипт, атакуючий відвідувача, але ймовірність цілеспрямованої атаки мізерно мала).

IP-адреса відправника можна витягнути з заголовка отриманої електронної пошти (Швидше за все, він буде лежати на останньому полі Received:, на відміну від поля From: його підробити трохи складніше). Якщо у вас динамічно виділяється адресу, то подібна ситуація не занадто небезпечна. Гірше, якщо адреса постійний, що, правда, зустрічається рідше.

Найбільш небезпечними з точки зору оприлюднення ip-адреси виявляються всілякі системи для інтерактивного спілкування — IRC (командою /whois), InternetPhone, ICQ і т. д. Справедливості заради треба помітити, що деякі з них намагаються прикрити адресу користувача (скажімо, в MS Comic Chat показується тільки частина адреси, ICQ’98 з’явилася можливість приховування своєї адреси, не надто правда добре працює при спілкуванні зі старими версіями), але в більшості систем адреса лежить абсолютно відкрито. Що ж стосується html-чатів, тут все залежить від бажання розробника, принципова можливість показу ip-адреси існує, як це було продемонстровано трохи вище.

Ідея така: якщо в чаті дозволено введення тегів html, ніхто не завадить вставити в своє повідомлення щось типу В підсумку всі присутні в чаті (навіть не реєструються), самі того не відаючи, викликати скрипт sniffer.cgi. Ну а решта-вже справа техніки, реалізація такого сценарію на Perl ‘ е, що веде лог всіх звернень, займе кілька рядків. Демонстраційний варіант цього скрипта доступний www.HackZona.Ru/cgi-bin/sniffer.cgi.

Спосіб застосування дуже простий — ви вставляєте в повідомлення текст на зразок наступного:

, де id — ідентифікатор каналу (допомагає не заплутатися при використанні скрипта на різних чатах різними людьми).

Якщо цей чат підтримує вставку html-тегів, то швидше за все ви побачите анімований логотип HackZona. Все, що тепер залишилося — переглянути лог (http://www.HackZona.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: $!»;
flock(DB, 2);
@line=;
flock(DB, 8);
close(DB);
$line0=”[$thetime[0] $theclock[0]:$theclock[1]$ampm] (“.$lnum.”) “. $ENV{REMOTE_ADDR}.” “.$ENV{REMOTE_HOST};
[email protected];
$maxline=30 if ($maxline>30);
open (DB, “>$log”) || die «can’t Open $log: $!»;
flock(DB, 2);
print DB (“$line0”);
for ($i=0; $i< $maxline; $i++)
{ print DB (“$line[$i]”);
}
flock(DB, 8);
close(DB);
print «Location: www.HackZona.Ru/images/hz_animated.gif»;

Тепер трохи про те, як же захиститися від усього цього неподобства. Найпростіший спосіб прикритися при прогулянках по 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-клієнти. Так що боротись тут можна лише двома способами. Найнадійніший — не використовувати їх взагалі Більш реалістичний — боротися не з причиною, а з наслідками — розшукати найсвіжіші латки і сподіватися, що проти вашої броні ще не винайшли підходящої гармати.