Пасивне сканування мережі (handmade), linuxsiem

«Де карта, Біллі? ... Нам потрібна карта! »

Карта мережі - це неодмінний атрибут будь-якого пентеста. Якщо ви проводите внутрішній аудит мережі і замовник надав карту - знайте, вам крупно повезло! А що ж робити, якщо карти немає?

Пасивне сканування мережі (handmade), linuxsiem

Як би ви вчинили, якби опинилися випадково в темній закритій кімнаті? Звичайно, стали б прислухатися до всіх звуків, які до вас доходять, щоб зрозуміти де ви, і що навколо.

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

Що можна дізнатися, прослуховуючи Ethernet інтерфейс?

Давайте подивимося, які кадри бувають на канальному рівні (2-й рівень моделі OSI):

Пасивне сканування мережі (handmade), linuxsiem

Для пасивного прослуховування мережі, найпростіший спосіб - взяти Wireshark і зробити вибірку широкомовних кадрів. Але, ми не шукаємо легких шляхів :)) ... давайте напишемо власну утиліту для пасивного виявлення пристроїв в мережі.

Для нетерплячих, відразу викладаю вихідний код fpas.c

Для тих, хто хоче розібратися детальніше, я опишу ключові функції і структуру програми. Тож почнемо …

Структура Ethernet кадру знаходиться в заголовки

Тепер перейдемо на рівень вище і розглянемо структуру ARP-пакета. Складно точно сказати, на якому рівні працює ARP-протокол. Деякі фахівці відносять його до другого рівня, хоча по суті, ARP-пакети инкапсулируются в Ethernet кадри і повинні ставитися до 3-го рівня OSI / ISO. Але, зі стандартами не сперечаються ...

Які пакети нас цікавлять:

Загалом, вважаємо, що:

«Якщо широкомовні кадри хтось посилає, то цей« хтось »присутній в мережі!»

Пасивне сканування мережі (handmade), linuxsiem

Для анонімного прослуховування необхідно належним чином налаштувати мережевий інтерфейс (відключити ARP-службу і заблокувати весь вихідний трафік).

Щоб зберегти анонімність, ми повинні тільки слухати. Ніякі пакети відправляти не можна!

1. Блокування відповідей на канальному рівні (ARP-служба):

де eth0 - мережевий інтерфейс, який налаштовується для прослуховування

2. Блокування вихідного і транзитного трафіку засобами iptables:

F: Скидання всіх правил (flushing).
X: Видалення ланцюжків правил.
P: Установка політик за замовчуванням для вхідного, вихідного і транзитного трафіку (наприклад DROP, REJECT або ACCEPT).

3. Ініціалізація мережевого інтерфейсу:

Для перехоплення всіх кадрів необхідно перевести мережевий інтерфейс в нерозбірливий режим. Робиться це за допомогою ioctl функції. Функція set_promiscuous_mode зчитує поточну конфігурацію інтерфейсу, заповнює структуру lNetwork_Device і встановлює прапор нерозбірливого режиму IFF_PROMISC (якщо мережеву карту потрібно ініціалізацію), або скидає його (якщо закінчуємо перехоплення пакетів):

Отримання ARP-пакетів відбуватиметься в постійному циклі, виходом з якого буде натискання комбінації CTRL + C. Щоб не нагромаджувати пояснення складної логікою роботи, покажу спрощену схему отримання пакетів (обробка CTRL + C описана нижче):

Зверніть увагу на пошук ARP пакета і його типу.

Пасивне сканування мережі (handmade), linuxsiem

Аналогічно ситуація і з визначенням типу ARP-пакета. По зсуву [buffer + 20] [buffer + 21] записується тип пакету (запит ARP_REQUEST = 0х0001, або відповідь ARP_REPLAY = 0x0002).

На практиці, в високонавантажених корпоративних мережах інтенсивність ARP-запитів може досягати десятків одиниць в секунду. Причому, велика частина - це повтори. Для усунення черезмерной інтенсивності потоку я додав в утиліту спеціальний ключ -u (unique), який дозволяє відсівати повторні пакети.

Отримання і обробка пакетів відбувається в безперервному режимі. При натисканні комбінації клавіш CTRL + C в основний процес приходить подія SIGINT, яке потрібно обробити. Обробник події (функція break_mode) встановлює прапор terminate_signal в SET_ON. В основному циклі відбувається перевірка цього прапора, і якщо він встановлений - програма завершується.

Збірка програми і тестування

Збережемо вихідний файл в домашню директорію і зробимо компіляцію (вважаємо, що компілятор gcc вже встановлений в системі):

На виході отримаємо виконуваний файл fpas.

Запуск програми виконуємо під рутом, так як для перекладу інтерфейсу в нерозбірливий режим потрібні права суперкористувача. Спочатку, запустимо fpas без параметрів:

Програма видасть довідку:

Пасивне сканування мережі (handmade), linuxsiem

-i Ім'я інтерфейсу (обов'язковий параметр).

-u Шукати унікальні хости.

-r Показати лічильник ARP-пакетів.

Тепер, давайте послухаємо який-небудь мережевий інтерфейс (не забуваємо при запуску вказати обов'язковий ключ -i з ім'ям інтерфейсу):

Пасивне сканування мережі (handmade), linuxsiem
Через пару хвилин, ми словами кілька ARP-запитів (в тому числі і повторні). Добре, коли мережа невелика, а якщо у нас високонавантажених корпоративний сегмент, нам допоможе (ключ -u) - пошук унікальних хостів. Додамо також, при запуску програми ключ -r, який буде виводити на екран лічильник ARP-пакетів.

Пасивне сканування мережі (handmade), linuxsiem
Ось, власне, і все. Тепер ми можемо отримати список всіх працюючих хостів в сегменті і побудувати карту мережі.

А в наступній статті, я розповім, як здійснити атаку типу ICMP-флуд (природно, handmade :))).

Схожі статті