Контрзаходи: захист від прослуховування мережі
Оскільки прослуховування мережі в кращому разі може викликати роздратування, то дуже важливо виявляти всі спроби таких дій. Залежно від прийнятої в організації політики забезпечення безпеки можна також заблокувати проходження пакетів, передаваних при ping-прослушивании. У цьому розділі розглядаються обидві можливості.
Виявлення факту прослуховування
Як вже мовилося, ICMP- і TCP-прослушивание є загальноприйнятим методом дослідження мережі перед безпосередньою спробою проникнення в мережу. Тому виявлення факту прослуховування дуже важливе з погляду можливості отримання інформації про потенційне місце проникнення і джерело загрози. Одін з основних методів виявлення прослуховування полягає у використанні мережевої програми виявлення вторгнень, такий як Network Flight Recorder (NFR), або програми, встановленої на досліджуваному зломщиком вузлі. Нижче приведений алгоритм, який можна реалізувати в програмі, призначеній для виявлення факту прослуховування.
# Виявлення прослуховування за допомогою Icmp/ping
# Автор — Стюарт Мак-клар (Stuart Mcclure)
# Ця програма призначена для
виявлення ping-сканера, що вивчає вашу мережу
# Для отримання якнайкращих результатів
# встановите потрібні значення maxtime і maxcount.
ping_schema =
library_schema::new(1,["time", "ip" "ip","ethmac",
"ethmac" ],
scope());
count = 0;
maxtime =10; # Час в секундах
maxcount =5; # Кількість ICMP-запросов ECHO або запитів ARP # яке розглядається як
допустиме
dest = 0;
source = 0;
ethsrc = 0;
ethdst = 0;
time = 0;
filter icmp_paskets icmp( )
{
if (icmp.type ==
0x08) # Перевірка на ICMP-пакеты ECHO.
{
if ((source == ip.src) && (dest != ip.dst)) # Попався!
{
count = count + 1;
time = system.time;
}
else
count = 1;
dest = ip.dest;
source =
ip.src;
ethsrc = eth.src;
ethdst = eth.dst;
} .
on tick = timeout ( sec: maxtime, repeat) call checkit;
}
func checkit;
{
if (count >=
maxcount)
{
echo ("Виявлений.ping-сканнер! Час: ", time, "\n");
record system.time, source, dest, eth.src, eth.dst
to the_record_ping; count = 0; dest = 0;
} else {
dest = 0; count = 0;
}
return;
}
the_record_ping=recorder("bin/histogram
packages/sandbox/pingscan.cfg",
"ping_schema" );
Що стосується захисту на рівні окремого вузла, для цього можна з успіхом застосовувати утиліти UNIX, які дозволяють виявляти і реєструвати спроби прослуховування. Якщо, проглядаючи файл журналу, створений такою утилітою, ви виявите масовані ICMP-запросы ECHO, витікаючі з однієї і тієї ж мережі або від одного і того ж вузла, це, швидше за все, означає, що вашу мережу хтось досліджує. На такі факти необхідно звертати найпильнішу увагу, оскільки після вивчення мережі зазвичай робиться реальна спроба проникнення.
На жаль, знайти аналогічні утиліти для платформи Windows достатньо складно. Одним з небагатьох безкоштовних або умовно безкоштовних пакетів, заслуговуючих уваги, є Genius 3.1. Коротку інформацію про нову версію цього програмного продукту можна знайти за адресою
http://softseek.com/Internet/ General/review_20507_index.html а докладніші відомості про нього і завантажуваний файл містяться за адресою
http: //www.indiesoft.com/. Ця програма не дозволяє реєструвати спроби ping-прослушивания, а призначена лише для виявлення TCP-сканирования певного порту. Серед комерційних пакетів аналогічного призначення можна відзначити BLACKICE від компанії Network ICE
(http://www.networkice.com). Цей програмний продукт дозволяє не тільки виявляти факти JCMP- і TCP-прослушивания, але і вирішувати багато інших завдань. У таблиці. 2.1 перераховані деякі додаткові утиліти, які можуть значно полегшити виявлення спроб прослуховування вашої мережі.
Таблиця 2.1.некоториє утиліти UNIX, призначені для зашиті
від прослуховування на рівні вузла
Програма
|
Ресурс
|
Scanlogd
|
http : //www.openwall.com/scanlogd
|
Courtney 1 .3
|
ftp://ciac.llnl.gov/pubс/сiac/sectools /unix
|
Ippl1.4.10
|
http: //pltplp.net/ippl/
|
Protolog 1.0.8
|
http: //packet storm. securify.com/UNIX/loggers/protolog-1.0.8. tar.gz
|
Запобігання прослуховуванню
Якщо виявлення факту
прослуховування має таке велике значення, то що тоді говорити про попередження таких спроб! Ми рекомендуємо дуже уважно оцінити, наскільки важливий для вашої організації обмін даними по протоколу ICMP між вузлами вашої мережі і Internet. Є багато різноманітних типів повідомлень ICMP, ECHO і Echo_reply — лише два з них. В більшості випадків немає ніякої необхідності вирішувати обмін даними між вузлами мережі і Internet з використанням всіх наявних типів повідомлень. Практично всі сучасні брандмауери володіють можливістю фільтрувати пакети ICMP, тому єдина причина, по якій вони можуть проходити у внутрішню мережу, - та або інша виробнича необхідність. Навіть якщо ви твердо переконані в тому, що не можна повністю заблокувати протокол ICMP, обов'язково заблокуйте ті типи повідомлень, які вам не потрібні для роботи. Як правило, цілком достатньо, щоб із зоною DMZ можна було взаємодіяти за допомогою повідомлень Echo_reply, HOST UNREACHABLE І TIME EXCEEDED. Крім того, за допомогою списку управління доступом (ACL — Access Control List) можна вирішити обмін повідомленнями по протоколу ICMP тільки з декількома IP-адресами, наприклад, що належать вашому провайдерові Internet. Це дозволить провайдерові, при необхідності, перевірити якість зв'язку, але при цьому проникнення сторонніх ззовні в комп'ютери, підключені до Internet, буде значно утруднено. Необхідно завжди пам'ятати, що не дивлячись на зручність і потужність протоколу ICMP з погляду діагностування мережевих проблем, він з успіхом може використовуватися і для створення таких проблем. Вирішивши необмежений доступ по протоколу ICMP у внутрішню мережу, ви тим самим надаєте зломщикам можливість реалізувати напад типу DOS (наприклад за допомогою Smurf-метода). Більш того, якщо зломщикові вдасться проникнути в один з ваших комп'ютерів, він може через "потайний хід" в операційній системі за допомогою таких програм, як loki, організувати приховане тунеллірованіє даних, передаваних по протоколу ICMP. Докладніша інформація про loki приведена в журналі Phrack Magazine, том 7, випуск 51 за 1 вересня 1997 року, стаття
06(http://phrack.infonexus.com/search.phtml?view&article=p51-6).
Інша цікава
концепція, запропонована Томом Пташеком (Tom Ptacek) і перенесена в середу Linux Майком Шифманом (Mike Schiffman) полягає у використанні процесу pingd. Демон pingd, запущений на комп'ютері користувача, обробляє всі запити Icmp_echo і Icmp_echoreplay, що поступають на даний комп'ютер. Для реалізації такого підходу потрібно відмовитися від підтримки обробки запиту Icmp_echo на рівні ядра і реалізувати її на рівні користувача за допомогою службового процесу, що забезпечує роботу сокета ICMP. Таким чином, з'являється можливість створення механізму управління доступом на рівні окремого комп'ютера. Утиліта pingd є у версії BSD
(http://www.enteract.com/~tqbf/goodies.html) і в системі Linux (http://www.2600.net/phrack/p52-07.html).
Запити Iсмр
Якщо говорити про можливості протоколу ICMP для збору інформації про мережу, то прослуховування за допомогою утиліти ping (або, іншими словами, за допомогою пакетів ECHO, що пересилаються по протоколу ICMP), — це тільки верхівка айсберга. Просто обмінюючись пакетами ICMP з системою, що цікавить вас, про неї можна отримати будь-яку інформацію. Наприклад, за допомогою таких утиліт UNIX, як icmpquery
(http://packetstorm.securify.com/UNIX/scanners/icmpquery.с) або icmpush
(http://packetstorm.security.com/UNIX/scanners/icmpush22.tgz ), можна дізнатися системний час видаленого вузла (тобто часовий пояс, в якому він знаходиться). Для цього потрібно відправити по протоколу ICMP повідомлення типу 13 (TIMESTAMP). Так само, звернувшись до певного пристрою з ICMP-запросом типу 17 (ADDRESS MASK REQUEST), можна дізнатися маску підмережі. Знання маски підмережі мережевої карти дозволяє визначити всі існуючі підмережі. Наприклад, використовуючи маску підмережі, зусилля можна зосередити на певній підмережі і уникнути необхідності звернення до адрес розсилки широкомовних повідомлень. Утиліта icmpquery дозволяє запрошувати як системний час, так і маску підмережі.
icmpquery <query> [-b] [-f fromhost] [-d delay] [-t time] targets
Тут параметр query приймає одне з наступних значень:
-t : ICMP-запрос системного часу (за умовчанням);
-m : ICMP-запрос маски підмережі.
delay — затримка між пакетами в
мілісекундах, targets — список імен або адрес досліджуваних
вузлів, time — час в секундах, протягом якого слід чекати
відгуку. За умовчанням використовується значення 5 с.
-У — включення режиму широкомовної розсилки. У цьому режимі
утиліта чекає протягом періоду, визначеного
параметром time,
а потім виводить звіт про відповіді, що поступили.
Якщо ви використаєте модем, встановите значення
параметрів -d і -т більшими,
ніж встановлені за умовчанням.
Наприклад, щоб за допомогою icmpquery дізнатися системний час маршрутизатора, скористайтеся наступною командою.
[tsunami] icmpquery -t 192.168.1.1
192.168.1.1 : 11:36:19
Запит на отримання маски підмережі виглядає таким чином.
[tsunami] icmpquery -m 192.168.1.1
192.168.1.1 : OXFFFFFFEO
Далеко не всі маршрутизатори/вузли відповідають на ICMP-запросы TIMESTAMP або NETMASK. Тому за допомогою утиліт icmpquery і icmpush на різних вузлах можна отримати різні результати.
Контрзаходи: захист від ЮМР-запросов
Одним з самих кращих методів захисту є
блокування IOМР-запросов тих типів, які сприяють розголошуванню інформації про мережу за її межами. Як мінімум, на прикордонному маршрутизаторі необхідно заблокувати проходження у внутрішню мережу пакетів TIMESTAMP (ICMP-сообщение тип 13) і ADDRESS MASK (тип 17). Наприклад, якщо як прикордонний маршрутизатор використовується маршрутизатор Cisco, забороните йому відповідати на вказані запити, додавши наступні рядки в список управління доступом.
access-list 101 deny icmp any any 13 ! timestamp request
access-list 101 deny icmp
any any 17 ! address mask request
Для виявлення розглянутих вище видів діяльності можна також скористатися мережевими системами виявлення вторгнень V(NIDS), наприклад, програмою Марті Рош (Marty Roach)
(http://www.snort.org/). При виявленні такого типу вторгнень буде виведена наступна інформація.
[**] PING-ICMP Timestamp [**]
05/29-12:04:40.535502 192.168.1.10 -> 192.168.1.1
ICMP Ttl:255 Tos:0x0 Id:4321
TIMESTAMP REQUEST
Сканування портів
За допомогою
ICMP- або TCP-прослушивания ми встановили, які комп'ютери досліджуваної мережі підключені до Internet. Крім того, вся необхідна інформація зібрана також і з використанням запитів ICMP. Тепер можна перейти до етапу сканування портів цих комп'ютерів. Сканування портів (port scanning) — це процес пробного підключення до портів TCP і UDP досліджуваного комп'ютера з метою визначення, які служби на нім запущені і чи обслуговуються ними відповідні порти. Обслуговувані порти можуть знаходитися в працюючому стані або в стані очікування запиту (listening mode). Визначення портів, що знаходяться в стані очікування запиту, — етап, що має визначальне значення для подальшого з'ясування типу використовуваної операційної системи, а також прикладних програм, що працюють на комп'ютері. Активні служби, що знаходяться в стані очікування, можуть надати зломщикові можливість дістати несанкціонований доступ. Це зазвичай відбувається у тому випадку, коли система безпеки комп'ютера не настроєна належним чином або в програмному забезпеченні є добре відомі вади в системі захисту. За останні декілька років засоби і методи сканування портів були значно вдосконалені. Враховуючи обмежений об'єм книги, ми розглянемо лише найпопулярніші з них, за допомогою яких можна отримати значну частину важливої інформації. Тепер ми вже не намагатимемося визначити, чи підключений той або інший комп'ютер до Internet, як це робилося раніше. Для спрощення завдання вважатимемо, що ми це вже встановили однозначно і зосередимося лише на методиці виявлення портів, що знаходяться в стані очікування, або можливих точок проникнення в досліджувану систему.
При скануванні портів вирішується декілька завдань, пов'язаних з вивченням системи захисту відповідного вузла. Серед цих завдань можна виділити наступні.
- Ідентифікація TCP- і UDP-служб, запущених
на досліджуваному вузлі.
- Ідентифікація типу операційної системи,
встановленої на досліджуваному вузлі.
- Ідентифікація додатків або версій певних служб.
|