Царь всея Сети: Небольшое исследование концепции распределенного анализатора трафикаНестандартный подход к классическим задачам может привести к рождению инновационной идеи. Привычный инструмент (например, снифер), который позволяет нам решать какую-либо задачу (анализ трафика), при взгляде на него с другой позиции дает шанс разработчику получить на выходе нечто принципиально новое. Рассмотрим формулу «снифер+распределение» и докажем, что ее результат – не просто «распределенный снифер». Ниша сетевых анализаторов плотно занята продуктами с самым разнообразным функционалом и вряд ли очередной самодельный снифер будет выделяться своей оригинальностью. Среди бесплатных аналогов, пожалуй, флагманом является мультиплатформенный Wireshark: продвинутые фильтры по протоколам, гибкие средства автоматизации анализа протоколов и восстановления TCP-потоков, средства фильтрации и поиска пакетов по множеству параметров и формирования статистических данных и прочие функции делают этот сетевой анализатор на голову выше своих бесплатных конкурентов. Среди платных ему не уступает, а в ряде случаев и превосходит его платный продукт CommView. Выбор конкретного инструмента, прежде всего, зависит от задачи, которая с его помощью решается. Wireshark для обеспечения своей работоспособности использует библиотеку PCAP (Packet Capture), что в ряде случаев может не дать нужного результата. Например, при изучении сетевой активности вредоносного программного обеспечения, установленного в систему на уровне драйвера. В данном случае на помощь исследователю может прийти CommView, который устанавливает в систему собственный NDIS-драйвер, что позволяет ему работать с пакетами на самом низком уровне. Да, новому игроку на этом поле будет не так просто выдержать конкуренцию с такими популярными, функциональными и распространенными продуктами. Вряд ли разработчику удастся привнести кардинальные изменения в индустрию сетевых анализаторов, если его идеи будут ограничены рамками идей других коллег. Чтобы твой продукт заметили, необходимо, как минимум, привнести что-либо инновационное, то, что до тебя либо еще не придумали, либо не реализовали. Конвертация мысли в инновациюНестандартные идеи и подходы рождаются с нестандартными взглядами на привычные вещи. Вдоволь наигравшись со снифером, вдоль и поперек изучив сетевую активность операционной системы, перехватив всевозможные собственные или чужие пароли, наталкиваешься на мысль, что неплохо было бы, если таким же образом можно было использовать этот инструмент на хосте, находящемся в другом сегменте сети или в локальной сети, находящейся за тысячи километров, отделенной от внешнего мира маршрутизатором и доступной только через интернет. С позиции системного администратора такая возможность удаленного сетевого анализа трафика своих серверов полностью абстрагировала бы его от их местоположения. Единожды расставив некий модуль на ключевые компьютеры в сегментах сети, которые требуют пристального наблюдения, он будет получать актуальную информацию и сможет в реальном времени проанализировать трафик, который циркулирует в этих сегментах. С точки зрения аудитора безопасности возможность удаленного мониторинга трафика позволяет значительно упростить процесс аудита, так как модули снифера в параллельном режиме независимо друг от друга собирают все необходимые пакеты и формируют отчет на специальном сервере аудитора, что впоследствии позволит ему ознакомиться с общей картиной исследуемой инфраструктуры, сетевых процессов и отследить перемещение критичной информации. В свою очередь, хакер получает оригинальный инструмент, представляющий собой подобие троянского программного обеспечения за тем исключением, что указанный модуль может быть полезной нагрузкой какого-нибудь руткита и пассивно собирать информацию о паролях к сервисам, которые использует пользователь, и прочим конфиденциальным данным. Затем формировать отчет и при первой удачной возможности отправлять его на сервис хакера, который отображает информацию в удобочитаемом виде. А может быть, злоумышленник получил доступ к одному из хостов исследуемой подсети и желает иметь представление о том, куда попал, что тут происходит и какие сетевые пакеты в сегменте сети могут представлять ценность. Позиция разработчика этого программного обеспечения помимо оригинальной идеи содержит еще ряд неочевидных «полезностей», которые мы будем выявлять по мере исследования концепции распределенного снифера. Распределение + снифер = ?На выходе этой простой формулы может получиться трудно предсказуемый результат. Во-первых, все зависит от того, какой сетевой анализатор трафика будет распределяться:
Задача состоит не в написании конкурентоспособного сетевого анализатора трафика (в журнале неоднократно публиковались материалы о написании снифера с использованием разных инструментов и подходов, поэтому советую поднять подшивку или ознакомиться с содержимым ссылок, приложенных к статье). По этой причине предлагаю абстрагироваться от программной составляющей снифера и сконцентрироваться на процессе его распределения, тем самым поддерживая основную идею и увеличивая значимость полученного концепта. Во-вторых, что понимать под распределением, ведь здесь формально отсутствует какая-либо трудоемкая задача, и нет никакой параллельной вычислительной системы? Если смотреть реальности в глаза, то сам по себе сетевой анализатор, компоненты-сенсоры которого исследуют разные и даже независимые друг от друга части сети, является распределенной системой. И, наконец, в-третьих, формирование отчета на стороне серверной части и его предоставление в удобочитаемом виде реципиенту в нашем лице также может осуществляться произвольным образом, на усмотрение программиста. Совокупность вышеперечисленных факторов позволяет разработчику системы подойти к ее проектированию с разных позиций и в разной степени акцентировать внимание на разработке той или иной части. Анализируй этоК распределению сетевого анализатора будем подходить с точки зрения спектра технологий Windows Communication Foundation (детальный обзор WCF ты можешь найти в позапрошлом выпуске журнала в статье «WTF WCF?! Windows Communication Foundation: искусство скоростного создания сложных транзакционных систем»), которые любезно предоставляет .NET Framework. По этой причине после непродолжительных поисков в Сети у меня на руках оказались исходные коды простого снифера, написанного на C#. Имеющийся в наличии снифер разбирает пакеты наиболее распространенных протоколов:
Напомню, что протоколы типа HTTP, SMTP, FTP и прочие инкапсулируются в TCP, который, в свою очередь, инкапсулируется в IP, поэтому, если у тебя вдруг появится желание «допилить» имеющийся снифер, рекомендую начать с парсинга популярных высокоуровневых сетевых протоколов.
Процесс перехвата пакетов осуществляется с помощью так называемого сырого сокета (raw socket), то есть манипулирует пакетами непосредственно на уровне их «конструирования». Сокет привязывается к IP-адресу, затем вызывается метод IOControl со специальным кодом управления «ReceiveAll», который указывает сокету на то, что все входящие и исходящие пакеты должны быть перехвачены. Организация процесса перехвата сетевых пакетов Процедуры парсинга заголовков протоколов описаны в соответствующих классах: IPHeader, DNSHeader, TCPHeader. В качестве примера рассмотрим структуру класса IPHeader. Структура класса IPHeader Аналогичным образом происходит разбор заголовков TCP и UDP: их содержимое читается с той позиции, в который заканчивается содержимое IP-заголовка. Разобравшись со структурой одного из предоставленных классов, можно написать парсер какого-либо специфичного протокола, имея на руках устройство его заголовка (как правило, описывается в спецификации протокола – документ RFC). Добавляя новые декодировщики протоколов, можно составить конкуренцию большинству имеющихся решений. Наращиванием функционала программы в виде плагинов (соответственно, после проектирования интерфейса их подключения) обеспечивается ее расширяемость и гибкость, а там уже и пользовательский интерфейс в виде плагина не за горами… Распределяй и властвуйИ вот, допустим, у нас на операционном столе пациент, представляющий собой полнофункциональный сетевой анализатор трафика, который ждет хардкорного имплантирования свежей идеи в виде распределения.
Определяем область имплантирования. Для этого найдем место, где собранные данные фиксируются и отправляются на вывод в пользовательский интерфейс:
Далее в пошаговом режиме исполнения приложения определяем положение инструкции вывода сформированных данных в область пользовательского интерфейса: Именно в это место производим вставку «имплантанта» в виде распределяющего кода. Для этого нам потребует вспомнить архитектуру клиент-серверного приложения на основе технологии .NET Remoting. Сэмпл простейшей «распределенки» ищи на диске – именно его мы сейчас соответствующим образом адаптируем к нашему сниферу. Так как наше исходное приложение представляет собой не что иное, как упоминавшийся модуль-сенсор, который предназначен для сбора пакетов и их отправки в реальном времени серверу, то найденную процедуру вывода собранных в пользовательский интерфейс заменим кодом отправки этих данных на сервер:
В свою очередь, метод удаленного класса SendLog() должен добавлять к содержимому общего отчета, находящегося на стороне сервера, данные типа rootNode. Для наглядности примера предположим, что общий отчет хранится в строковой переменной Result, тогда обновление отчета происходит следующим образом:
Используя этот же класс на своей стороне, сервер в реально времени может просматривать общий отчет, хранящийся в переменной Result, форматируя ее вывод произвольным образом.
Здесь Show() – метод удаленного класса, который осуществляет вывод переменной Result в удобочитаемой форме. Метод Show() представляет собой некую абстракцию: он может быть банальным выводом результата в консоль сервера с помощью пары инструкций, может являться выводом в специфичное хранилище логов (например, база данных) из которого впоследствии формируется вывод данных, отсортированных строго по определенным критериям и предоставленный пользователям твоего веб-сервиса. Есть идея? Значит, делай!До реализации полноценного инновационного (Денис, сколько можно употреблять это слово, по-моему, тебя перекупила партия власти :) - прим.ред.) продукта предстоит осуществить еще несколько шагов: написать полнофункциональный и конкурентноспособный сетевой анализатор трафика, распределить его в соответствии с тем подходом, который описан в статье, реализовать в виде онлайн-сервиса удобную серверную часть, которая в реальном времени обрабатывает непрерывный поток отчетов с сенсоров и представляет статистику пакетов в надлежащем виде. Однако, уже имея за спиной нестандартную мысль, воплощенную в оригинальную и яркую идею, любые шаги к инновации меркнут на фоне ожидаемых результатов. Как гласит слоган одной крупной компании: "Просто возьми и сделай!". WWW
DVDНа диске находятся исходные коды подопытного снифера и сэмпл простейшего приложения на основе .NET Remoting. |