За декілька минулих років системи виявлення вторгнень зросли з ясельного віку і вже не б’ють хакерів совочком по голові, а мочать їх щосили, вчеплюся мертвою хваткою, немов триголовий пес Цербер. Кількість IDS все росте і вже кроку не можна ступити, щоб не вляпатися в одну з них. Якщо ми не навчимося літати нижче радарів, нас просто знищать. Як і будь-яка інша сутність, IDS має свої слабкі місця, знання яких дозволяє її обходити.

Введення або ласкаво просимо в пекло

Не так страшний чорт, як його малюють, тим більше що потрапити в його лапи не так-то просто, оскільки всі підступи до пекла контролює злісний міфічний триголовий пес Цербер, по науковому називається «системою виявлення вторгнень». Вона ж — Intrusion Detection System, або IDS.

На відміну від них, наглухо закривають порти і запобігають цим можливість атаки (ну, «запобігання» — це в ідеалі), IDS намагається розпізнати сам факт атаки. Але успішні атаки, як відомо, не розпізнаються, тому правильніше говорити про розпізнавання спроб атаки.

Системи виявлення вторгнень розпізнають і відсікають (точніше, припиняють) більшість актів вандалізму, які охопили Мережа останнім часом, коли будь-який хлопчик, ще навіть не трахавшийся, вже хитає черговий сканер безпеки або нюкер і починає типу атакувати. Такі «типу атаки» становлять понад 99% від всіх нібито зафіксованих атак на Пентагон, Мелкософт та інший непотріб, що наймають хлопчиків — типу експертів з безпеки. Такі з понтом «типу експерти» в своїй масі просто дивляться в лог IDS і б’ються в екстазі, бачачи, скільки мегахакеров було зупинено на шляху до інформаційної фортеці. А що! Сканування портів — це вже атака, а перебір параметрів cgi-скриптів — це взагалі Якась хороша IDS, без неї нам не жити. Думка про те, що правильно налаштована і заштопанная вісь здатна впоратися з SYN/PING/UDP-флудом та сама, просто не приходить їм у голову, але зате створює вагому мотивацію, яка виправдовує їх килобаксовую зарплату. Зустрічаються, звичайно, і нормальні адміністратори, але мало, дуже мало. І більшість з них не використовує IDS, оскільки це непотрібна річ.

Справжнього хакера, цілеспрямовано атакуючого сервер тільки йому одному відому помилку переповнення, IDS не тільки не зупинить, але навіть не виявить. Крім того, у багатьох випадках IDS сама може виступати об’єктом атаки, тому її присутність не тільки не підсилює безпеку, але навіть послаблює її! До того ж помилково розпізнані атаки (відсоток яких досить великий) укупі з активними діями, здійсненими з боку IDS проти «хакера», створюють у легальних користувачів великі проблеми, що не є добре. Але тут ми не виступаємо за або проти IDS, оскільки впливати на політику безпеки атакується сервера хакер може тільки своїми руками і головою, але ніяк не пропагандою проти IDS (виняток становлять випадки, коли хакер атакує сервери своєї ж власної компанії і не хоче, щоб кожен його крок потрапляв в лог).

Типи IDS

Розвелося тут цих типів. Це раніше все було просто, зараз же — без пляшки не розберешся! По сектору охоплення IDS діляться (умовно) на мережні та локальні. Мережева IDS встановлюється на окремому вузлі, контролюючим цілу підмережа, і часто є апаратним рішенням (тобто «ящиком», в який вмонтований процесор, пам’ять, мережеві адаптери, вбудована операційна система, під якою обертається IDS). Мережева IDS може розташовуватися між зовнішньою і внутрішньою мережею (найбільш типова конфігурація), так і представляти окремий вузол в локальній мережі. Останнє, природно, зменшує можливості її впливу на атакуючого, спрощує хакеру завдання розпізнання наявності IDS і її обхід.

Локальні IDS встановлюються безпосередньо на той вузол, який вони охороняють, і такі IDS часто є частиною персонального брандмауера або антивіруса. Розробники люблять подібні комплексні рішення, прагнучи запхати в одну коробку якомога більше софта, але адміністратори (я маю на увазі нормальних адміністраторів) тільки кривляться при вигляді подібних «швейцарських ножів». Спеціалізовані рішення завжди мають масу переваг перед універсальними, пред’являючи при цьому значно менші вимоги до апаратних ресурсів, але кого це взагалі цікавить?

«Слідчим» методів IDS діляться на пасивні і активні. Пасивні обмежуються моніторингом мережевої активності, записуючи в лог підозрілі дії або явно виявлені атаки. Практично всі IDS підтримують гнучко настроюється ступінь деталізації лода. Чим детальніше лог, тим більше інформації він несе про мережевої активності, але тим важче в ньому виловлювати реальні спроби атаки. До того ж більшість IDS кидають всю інформацію в один лог, влаштований за принципом кільцевого списку, що дозволяє атакуючому знищити сліди атаки тупими спробами проникнення типу сканування портів, затиральних всю іншу інформацію. Також практично всі IDS передбачають можливість оповіщення адміністратора через пошту, sms або інші засоби комунікації, проте далеко не кожен адміністратор поспішає скористатися їй. Ось йому радість прокидатися від дзвінка мобільного, весело оголошує про черговий виявленої псевдоатаке!

Активні IDS не тільки збирають докази, але і роблять відповідні дії проти атакуючого, поки адміністратор п’є пиво. Які ж це дії? Ну, наприклад, занесення хакерського IP black-лист на деякий час (скажімо, 6 хвилин або цілу годину) або до зняття його адміністратором. Враховуючи досить велику кількість помилкових спрацьовувань і частоту (не)відвідування роботи адміністратором, стає ясно, що «бан до помилування» відсікає велика кількість чесних користувачів і навіть цілі підмережі, сам по собі будучи нехилой DoS-атакою. Менш жорстка міра — посилка IDS’ом відповідного TCP-пакета, що ініціює розрив з’єднання. Вона не працює з UDP і «сирими» IP-пакетами, а також проти атак на переполняющиеся буфери і реально лише обмежує активність флудеров.

Архітектура та принципи роботи IDS

Мережева IDS складається з сенсорів, які збирають інформацію про мережевої активності (зазвичай грабують весь трафік), бази даних, яка описує відомі типи атак, і «мізків», які все це обробляють. Почнемо з сенсорів. Якщо IDS розташована між зовнішньою і внутрішньою мережею (наприклад, наглухо вбудована в маршрутизатор), то вона просто вистачає трафік, фізично проходить через неї і, з точки зору хакера, все виглядає так, як ніби ніякої IDS там немає.

А ось якщо IDS розташована всередині мережі, то єдиний шлях збору інформації — це переклад мережевої карти в нерозбірливий режим, і така IDS елементарно виявляється, оскільки перетворюється в звичайний сніфер. Методики його виявлення докладно розглянуті в моїй статті «риболовля в локальній мережі sniffering», опублікована раніше в «Хакера». Так навіщо повторюватися? Досить зазначити, що для виявлення сніфера (яким у даному випадку є IDS) хакеру необхідно перебувати вже усередині локальної мережі, щоб посилати ARP-запити та робити інші справи. Ззовні мережі, маючи лише один TCP/IP, виявити сніфер дуже складно, а ще складніше залишитися при цьому непоміченим і не привернути до себе увагу IDS.

База даних зазвичай не тільки описує моделі хакерського поведінки (сканування портів, підбір рядків різної довжини в спробі викликати переповнення, перебір параметрів cgi тощо), але також містить сигнатури всіх відомих вірусів/хробаків і, що найголовніше, відомості про всіх дірках! Тобто це що виходить? Допустимо, усередині локальної мережі знаходиться незалатанный Microsoft IIS з помилкою переповнення. Хакер розробляє свій власний shell-код, сигнатура якого ще нікому не відома і який не можна виявити евристичними методами, і відправляє його серверу. Але! Між хакером і сервером знаходиться IDS, встановлена, наприклад, на одному з проміжних маршрутизаторів, можливо, навіть і не належить компанії, чий сервер хакер хоче атакувати. IDS не знає, що робить цей shell-код, але, бачачи, що він прямує прямо в дірку, каже «Ага!» і розриває з’єднання (ставить хакеру бан). Ось так облом! Тупий адміністратор може не латати дірявий сервер роками, але якщо він підключений до правильного провайдера і цей провайдер має правильну IDS, то завдання атаки різко ускладнюється. Найпростіше, але не найправильніше, що може зробити хакер в цьому випадку, — послати кому-небудь із співробітників атакується організації лист з вкладенням (що знаходиться у вкладенні пояснювати, сподіваюся, не треба?), заманити їх на web-сервер зі сторінкою, що використовує одну з дірок в IE/Firefox е і т. д. Коротше, захопити мережу зсередини.

«Мізки», які обробляють всю інформацію, далеко не завжди беруться з запасом, і при інтенсивному трафік час розпізнавання атаки різко зростає! Деякі IDS розпізнають атаку через 5 хвилин після її початку. Для розборок з флудом цього зазвичай виявляється цілком достатньо, але от проти помилок переповнення тут вже сильно не повоюєш. За ці 5 хвилин хакер цілком встигає опанувати сервером, встановити rootkit останнього покоління і потягти масу конфіденційних даних. От і лови його потім! А що? Все логічно. Обробка трафіку вимагає часу, і якщо пакети сиплються як з відра, то IDS починає відчайдушно буксувати. Добре, якщо вона не викидає пакети, які не встигає аналізувати, інакше атака взагалі не буде виявлена (не кажучи вже про яку б то не було протидії атакуючим). Локальні IDS ведуть себе трохи не так і затримують пакети аж до повного з’ясування особистості. Проте сенсу в них небагато. Якщо адміністратор або користувач робочої станції) не встановлює латки, то з якої це радості він буде оновлювати базу IDS? А без бази IDS розпізнає тільки тупі акти вандалізму, про яких ми вже говорили, але ніяк не цілеспрямовану атаку на переповнення. Тому далі ми будемо говорити виключно про мережеві IDS, які становлять найбільшу небезпеку для хакера.

Методи обходу IDS

Жодних сканувань портів! Жодних сканерів безпеки! Ніякий інший дурі! Зрозуміло?! Наслухалися тут рад на форумах! «Як це так — не сканувати? — запитаєш ти. Адже це ж головна розвідувальна операція перед початком кожної атаки». Ну, по-перше, далеко не кожній. Якщо відомо, що на сайті варто web-сервер, в якому (можливо) є дірка, навіщо сканувати інші порти? Власне кажучи, сканування переслідує мету отримати перелік встановлених на сервері служб (в ідеалі — з визначенням їх типу і версій). Потім серед них шукаються вразливі, і атака переходить у другу стадію. Поширені утиліти за замовчуванням сканують порти досить агресивно, причому з одного і того ж IP-адреси. А факт сканування розпізнається елементарно — по приходу пакетів, спрямованих на закриті порти. При перевищенні певного порогу агресивності сканування (кількість пакетів в одиницю часу) IDS сигналізує про атаку і часто блокує IP, створюючи ілюзію, що всі інші порти закриті. Неагресивна сканування, на жаль, займає надто багато часу (в середньому — кілька діб), але і в цьому випадку воно з великою ймовірністю виявляються. Вихід — змінювати IP з кожним посилаються пакетом. Для цього добре підходить методика сканування з використанням мовчазної хвоста, підтримувана просунутими сканерами, в тому числі і nmap, або інший спосіб — підігнати армію чужих комп’ютерів з впровадженим бекдорів і сказати їй «Фас!». Тут агресивність сканування вже не відіграє ніякої ролі, оскільки кожен порт сканується з нового IP, адреса якого IDS передбачити не може, а тому не може і заблокувати. Чисто теоретично, виявивши атаку, адміністратор здатний технічно заблокувати всі ресурси, перерізати мережевий кабель, забарикадувати двері і вимкнути сервер, але сканування портів в реальності відбувається так часто, що на нього просто перестають звертати увагу.

Обійти сигнатурну захист складніше, але все-таки можливо! Насамперед, не варто використовувати ніяких готових (і широко відомих) shell-кодів, rootkit’ів та іншої фігні, особливо не поліморфною. IDS заматерится так, що адмін з секретаркою перетворяться в сіамських близнюків (з жінками з переляку це часто трапляється). Це вже не просто підозра в атаці, це стовідсоткова спроба атаки (неважливо, вона успішна чи ні). Навіть якщо атака дійсно виявиться успішною і IDS прокинеться сильно після того, як rootkit буде встановлено (для цього атаку краще проводити в години пік, коли сервер максимально завантажений і через IDS несеться лавина чесного трафіку), адмін, піднятий по тривозі, або виявить rootkit, або просто візьме бекап і зробить відкат до свідомо «стерильною» конфігурації. Або ж перевстановить всю систему з нуля. Шанси на виживання у хакера мінімальні, так що не варто діяти за принципом: кинув бекдор і, якщо все тихо, через тиждень вирішив його заюзать. Досвідчений хакер використовує сервер одразу і набирає буковки не руками, а запускає заздалегідь розроблені програми, хакающие дані на форсажі — так швидко, як це тільки можливо.

Багато атакуючі вдаються до наступного прийому — встановлюють два rootkit’а. Один — простий, як точка, що знаходиться на перетині двох прямих, і легко виявляється навіть лохом, ну, тобто явна підстава. А другий по-справжньому добре замаскований і дуже-дуже важко виявляється. Є шанс, що, зафіксувавши і видаливши перший rootkit, адмін заспокоїться і більше не буде робити ніяких дій, вважаючи, що хакер вже роздавлений.

Але ми, схоже, відхилилися від теми статті, яка називається «Обман IDS», а «Як зачмирити адміна». Так, методи впливу на саму IDS ми відкинемо, оскільки вони практично не змінилися з часів атак на перші, ще доісторичні брандмауери (практично всяка IDS підтримує функції віддаленого управління і конфігурування, але далеко не всякий адмін поспішає тут же змінити дефолтовий пароль).

Ще кілька років тому більшість IDS распознавало тільки дві форми запиту до HTTP-серверів: UTF і HEX. Обидві стандартні. При цьому самі сервери (і зокрема MS IIS) підтримують нестандартний Unicode/Wide-формат (типу %u), що дозволяв хакерам і черв’якам (серед яких значиться і гучний CodeRed) легко обходити IDS, які стоять на магістральних каналах зі всіма витікаючими звідси наслідками. Мільйони непатченных серверів захачились по всьому світу, викликавши переполох і чутки про близький кінець інтернету. Кінець же, як з’ясувалося, перебував в іншому кишені і в черговий раз була перенесена на невизначений термін. Тим часом розробники IDS зрозуміли свою помилку і підтримали Unicode/Wide-формат по повній програмі. Однак купа апаратних IDS так і залишилася не оновленою і не обізнаною про жодні %u.

А Windows Vista — це взагалі краса! Справжній подарунок для хакерів! Прозора підтримка протоколу IPv6 в мережах, розділених між собою IPv4, здійснюється за рахунок інкапсуляції IPv6 в IPv4/UDP, про який існуючі IDS не в курсі. Тобто якщо у жертви стоїть Windows Vista або Longhorn Server, підключений до інтернет-каналу по IPv4 (а IPv6 народ ще не прийшов), хакер може вільно посилати Pv6-пакети, інкапсульовані в UDP (для цього йому також доведеться встановити у себе Висту). Щодо IDS все буде ОК, жодної відомої їй сигнатури вона не побачить, доки не здогадається розпотрошити инкапсулированный UDP і подивитися, що там у нього всередині. А з урахуванням того, що Віста допускає вкладену інкапсуляцію, розпізнати атаку зможе тільки дуже розумна і притому оновлена IDS. Ясна річ, що розробники IDS не сидять склавши руки, а так як Висту собі ставлять, в основному, геймери, але ніяк не серйозні підприємства, то невідомо, що станеться раніше — масова міграція на Вісту або оновлення IDS. Тим не менш, у хакерів є відмінний шанс показати всьому світові, на що вони здатні.

Висновок

І все-таки що ж таке IDS? Опудало філіна або зубастий Цербер? Дивлячись для кого. Для слона, наприклад, що моська, що цербер — все одно, а для миші і пугач — загроза. Правильно налаштована IDS добре справляється з піонерськими атаками, відсікаючи всяких там флудеров і куль-хацкеров з exploit’ом замість голови. Хакери, які ведуть пошук дірок самостійно, присутність IDS просто не помічають, як IDS не помічає невідому атаку. Коротше, завдання обходу IDS в загальному випадку зводиться до того, щоб їх не обходити, а рухатися своїм шляхом крізь терни за заздалегідь наміченим маршрутом, уникаючи доріг і магістралей.

Найпопулярніші IDS

Серед безлічі IDS, наявних на ринку, найбільшою популярністю користуються наступні продукти: Cisco Secure IDS, ISS RealSecure, Enterasys IDS Dragon, CA eTrust Intrusion Detection Engine і Intrusion.com SecureNet PDS. Некомерційних IDS просто море, але в більшості своїй вони годяться лише для вирішення обмеженого кола завдань і за межі локальних сіток не виходять. На магістральних каналах вони просто загнуться (особливо це стосується IDS, написаних на скриптових мовах), і тут без апаратних рішень вже не обійтися!