LXF86:Безопасность
|
|
|
Содержание |
Безопасность: Зондируем систему
ЧАСТЬ 3: Урок сканирования на уязвимости. Крис Браун покажет, как тестировать сеть на окна и черные ходы со всей серьезностью.
На сей раз мы рассмотрим утилиты, помогающие в поиске уязвимостей вашей системы. Очевидно, что искать уязвимости можно как с честными, так и с дурными намерениями, посему повторю то, что сказал на первом нашем уроке: во-первых, я абсолютно не поощряю использование этих утилит для получения неавторизованного доступа. Во-вторых, перед запуском этих утилит на работе вы должны получить разрешение у вашего начальника [то же самое относится и к домашним сетям, принадлежащим интернет-провайдерам, – прим. ред.]. Утилиты для оценки уязвимостей делятся на две категории: одни действуют снаружи, а другие внутри системы. Наша первая утилита, Nmap, явно относится к первым. Nmap определяет, какие порты открыты (то есть ждут соединений), и может сканировать сразу несколько числа машин: посылает серию сетевых пакетов на указанные диапазоны портов и IP-адресов и смотрит, что происходит. Вот простой пример запуска Nmap. Моя домашняя сеть довольно мала – на маршрутизаторе осталось всего два целых порта, остальные погибли во время грозы – но этот вывод даст вам пищу для ума:
$ nmap -sT -p 20-100 192.168.0.1-50 Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2006-08-01 15:18 BST Interesting ports on 192.168.0.1: (The 78 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 23/tcp filtered telnet 53/tcp open domain 80/tcp open http Interesting ports on 192.168.0.3: (The 78 ports scanned but not shown beloware in state: closed) PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http All 81 scanned ports on 192.168.0.4 are: closed Nmap finished: 50 IP addresses (3 hosts up) scanned in 12.269 seconds
Рис. 1 (ниже) показывает некоторые опции Nmap. Интереснее всего типы сканирования. Чтобы вполне оценить их, необходимо глубокое понимание работы TCP/IP; в частности, TCP-флагов и стандартной последовательности TCP-пакетов при создании TCP-соединения. Тип сканирования -sT, показанный на схеме, использует т.н. «трехстороннее рукопожатие» (three-way handshake) для установки соединения, как обычный клиент. Такое сканирование очень «заметно»: скорее всего, информация о нем попадет в файл журнала сканируемой системы. Зато его можно выполнить не от имени суперпользователя. Есть и другие, «менее заметные» типы сканирования, например, тот, что в Nmap называется стелс-FIN-сканированием [stealth FIN scan], когда посылается TCP-пакет с одним лишь установленным флагом FIN (это один из флагов заголовка пакета). При нормальных условиях такой пакет посылается только при закрытии соединения – и никогда не посылается до установления соединения с портом. Ответ операционной системы на такие попытки поможет определить, какие порты действительно открыты и ждут соединения. Спецификации TCP/IP не всегда четко определяют поведение ОС в нестандартных ситуациях, а если и определяют, реализации не всегда соответствуют спецификациям. По ответу на нестандартный TCP-пакет можно распознать ОС. Типы сканирования посредством заведомо неверных TCP-пакетов требуют открытия rawсокета для явного формирования заголовка, и сканирование при этом возможно только от имени суперпользователя.
Определяем ОС с помощью Nmap
Опция -А у Nmap включает функцию определения сервисов и версии ОС. Вот пример:
$nmap -A scanme.nmap.org Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2006-0804 09:30 BST Interesting ports on scanme.nmap.org (205.217.153.62): (The 1657 ports scanned but not shown below are in state: filtered) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 4.3 (protocol 2.0) 25/tcp closed smtp 53/tcp open domain 70/tcp closed gopher 80/tcp open http Apache httpd 2.2.2 ((Fedora)) 113/tcp closed auth Nmap finished: 1 IP address (1 host up) scanned in 94.760 seconds
Nmap – отличный инструмент для поиска доступных в данный момент портов и сервисов вашей сети. Вы можете удостовериться, что порты, которые должны быть открыты, действительно открыты, а те, что должны быть закрыты – закрыты, и что брандмауэр ведет себя как должно. А хотите – запустите Nmap снаружи и внутри системы, закрытой брандмауэром, и сравните результаты (о создании брандмауэров под Linux поговорим позже). Nmap содержит немало трюков кроме уже описанных, например, умеет разбивать IP-пакеты на мелкие кусочки. Смысл разбиения в том, чтобы затруднить работу межсетевых экранов и систем обнаружения вторжений. Для получения более подробной информации об Nmap прочтите man-страницу (она на редкость хороша) или посетите http://insecure.org/nmap.
Сканирование на уязвимости
Ну вот, мы дошли до сканеров уязвимостей. Они обычно используют какую-нибудь внешнюю базу уязвимостей. Следовательно, их эффективность зависит не только от качества самого сканера, но и от того, насколько активно обновляется база. Один из лучших и активно поддерживаемых сканеров – Nessus от Tenable Network Security (www. nessus.org).
Nessus имеет клиентский и серверный компоненты. Сервер по имени nessusd – это часть, выполняющая сами проверки; клиент, Nessus client, является графической утилитой, позволяющей вам соединяться с сервером, выбирать нужные тесты и смотреть результаты. Клиентсерверная архитектура позволяет размещать сервер в разных стратегических точках сети (например, до и после брандмауэра) и проводить тесты различного назначения.
Для этого урока я установил Nessus на мой компьютер с Fedora Core 5. На http://www.nessus.org/download вы найдете собранные пакеты Nessus для различных дистрибутивов Linux, включая Debian 3.1, Red Hat Enterprise Linux 3/4, Fedora Core 4/5, SUSE 9.3/10 (сканер бесплатен, но исходные тексты закрыты). Я установил пакеты nessus-3.0.3-fc5. i386.rpm и nessusClient-1.0.0.RC5-fc5.i386.rpm.
При соединении с сервером клиент должен указать верные имя пользователя и пароль, так что надо создать учетную запись Nessus на той машине, где планируется запуск сервера. Эти учетные записи используются в Nessus для контроля и не связаны с обычными учетными записями Linux. Утилита создания учетной записи Nessus довольно разговорчива, и использование ее самоочевидно. Вот пример диалога с ней:
#/opt/nessus/sbin/nessus-add-first-user Using /var/tmp as a temporary file holder Add a new nessusd user --------------------- Login : joe Authentication (pass/cert) [pass] : pass Login password : Login password (again) : User rules --------- nessusd has a rules system which allows you to restrict the hosts that joe has the right to test. For instance, you may want him to be able to scan his own host only. Please see the nessus-adduser(8) man page for the rules syntax Enter the rules for this user, and hit ctrl-D once you are done : (the user can have an empty rules set) accept 192.168.0.0/24 default deny Login : joe Password : *********** DN : Rules : accept 192.168.0.0/24 default deny Is that ok ? (y/n) [y] user added.
Каждому пользователю приданы правила, ограничивающие набор систем, которые ему можно тестировать. Два простых правила, указанных выше, позволяют Joe сканировать системы подсети 192.168.0.0/24 и ничего более.
Серверу также нужен SSL-сертификат для аутентификации у клиента. Nessus поставляется с готовым сертификатом, однако если вы хотите создать свой собственный, используйте команду Nessus-mkcert.
Теперь вы готовы к запуску демона Nessus. На Fedora я могу запустить демон вручную так:
#service nessusd start
Чтобы выполнить проверку, запустите графический клиент:
$/usr/X11R6/bin/NessusClient
Для начала выберите File->Connect и подсоединитесь к серверу с ранее созданным именем пользователя. При первом подключении вам будет предложен SSL-сертификат сервера, его нужно проверить вручную и принять. Как только вы соединитесь, будут скачаны доступные модули (plugins), и вы можете выбрать, какие из них запускать. Пример показан на рис. 2 (слева); правда, там нет флажков для выбора теста (они скрыты под окном, детально описывающим конкретный тест).
Зачем модули? Nessus использует их для проведения проверок. Это скрипты, написанные на специальном языке NASL (Nessus Attack Scripting Language). На моей Fedora Core модули хранятся в /opt/Nessus/lib/nessus/plugins (там их больше 11 тысяч!). На рис. 2 они представлены в виде дерева. Под категорией SUSE Local Security Checks их, например, штук 200. Щелкните на строке модуля, чтобы увидеть описание соответствующего теста – это как раз и показано на рисунке. Используйте экран Выбор цели (Target Selection) для указания машины – объекта сканирования.
Есть и другие интересные вкладки: например, экран сертификатов позволяет выбрать сертификаты для SMB- и SSH-соединений. Короче, стоит потратить некоторое время для исследования этих вкладок, чтобы взять от Nessus все.
Настроив сканирование по вкусу, выберите Scope > Execute для его запуска. Nessus покажет вам индикаторы для каждой машины.
Скорая помощь
Если хотите сканировать скрытно, без ведома системыобъекта, запускайте Nmap от имени root.
Экран отчета Nessus
Завершив сканирование, можете просмотреть экран отчета, показанный на рис. 3 (внизу). Укажите подсеть, затем от дельный хост – увидите список открытых портов, а напротив каждого из них – иконку критичности. Выберите порт и просмотрите информацию об обнаруженных проблемах с безопасностью, их критичности и существующих способах устран ения.
Nessus начинает со сканирования открытых портов на машине-объекте. Для каждого открытого порта модуль fin d_service пытается распознать, что на нем запущено, сначала пробуя SSL-соединения, затем обычные, после чего по сылая различные данные сервису и распознавая ответы.
Потом Nessus разными способами атакует каждый открытый пор т. Например, если на открытом порту найден HTTP- или HTTPS-сервер, будут запущены все модули, содержащие цель « web-сервер»: они проверят удаленные сервисы, пытаясь эксплуатировать известные уязвимости, типа неверной провер ки ввода, переполнения буфера, неудачной конфигурации и так далее.
Цитирую фразу из одного шоу, которая звучит примерно так: «Знаю, который час: вчера я его записал». Моментально устаревает не только значение точного време ни. Новые уязвимости в программном обеспечении находят ежедневно, и Tenable Network Security дает возможность о бновить модули. Еще когда вы регистрируетесь, чтобы скачать Nessus, на вашу электронную почту высылается код ак тивации. Получив его, запустите
# nessus-fetch --register <ваш код активации>
Ваш код зарегистрируется, и будут скачаны самые свежие модули. В дальнейшем нужно будет регулярно запускать nessus-update-plugins (например, как ежедневную задачу Cron), чтобы поддерживать программы в актуальном состоянии.
Вопреки своей мощности и популярности, Nessus не слишком-то документирован, но одна книга есть: Nessus Network Auditing, автор – Рено Дерезон [Renaud Deraison], он же написал большую часть Nessus (издание Syngress Media).
Sussen: Nessus наоборот
Другая утилита для сканирования уязвимостей, на которую я недавно наткнулся – Sussen (да, это Nessus наоборот). Sussen запускает набор тестов уязвимостей, определенных в специальном файле, написанном на языке OVAL (Open Vu lnerability and Assessment Language), и содержит три исполняемых файла: sussen-agent (утилита, выполняющая тест ы и представляющая результаты в браузере), Sussen-applet (просто апплет для Gnome, запускающий Sussen без обращ ения к командной строке) и Sussen-editor (графический редактор OVAL-файлов). Sussen – из серии новомодных прило жений, написанных на C#/.NET, и требует, помимо прочего, последней версии Mono и glibc 2.4, что делает его «кре пким орешком» для большинства современных дистрибутивов. При содействии создателя Sussen, Лорена Бандьера [Lore n Bandiera], мне удалось заставить его работать на Fedora Core 5. На рис. 4 (вверху) показан пример вывода.
Sussen еще не завершен, особенно его редактор. Вы можете вводить новые определения и тесты, но не можете прочесть их из файла и сохранить их в файле (пока). Подробно о Sussen – на http://dev. mmgsecurity.com/projects/sussen.
Согласно сайту OVAL (http://oval.mitre.org), он «создает возможность взаимодействия между продуктами по безопас ности, предоставляя стандартный язык на базе XML для обмена информацией». Основная идея здесь – отделить информ ацию об уязвимости системы от программ, в которых она используется. Обычно описание уязвимости выглядит как «Ес ли у вас версия X программы Y, то вы подвержены уязвимости Z», однако на XML это простое определение требует не одной дюжины строк.
Фактически, Sussen – просто движок для запуска тестов уязвимостей, определенных в OVAL-файлах. Могу сказать, что он прилично выполняет эту работу, однако эффективность утилиты зависит в первую очередь от самих OVAL-файлов. В Red Hat, похоже, приняли идею; они публикуют обширные отчеты, используя OVAL (www.redhat.com/ oval), хотя не похоже, чтобы в SUSE (например) делали то же самое. Я считаю OVAL хорошей идеей, но не уверен, что она привлече т критическую массу пользователей для повсеместной реализации. Есть и другие сканеры уязвимостей, например, Sar a (Security Auditor’s Research Assistant) и Saint (Security Administrator’s Integrated Network Tool). Кому нуже н полный список, посетите страничку Fyodor’а (автора Nmap) – http://sectools.org/vuln-scanners.html
Скорая помощь
Не сканируйте системы на уязвимость у себя на работе без разрешения вашего начальника!
Наш эксперт
Д-р Крис Браун независимый инструктор по Linux, имеет степень доктора наук по физике элементарных частиц, сертифицированный сп ециалист Novell и Red Hat. Недавно написал книгу о SUSE для издательства O’Reilly.
Как Nmap говорит с вами
Nmap обычно различает одно из трех состояний порта: Open – открыт и ждет соединений; Closed – доступен, но не ждет соединений; Filtered – недоступен (возможно, запросы Nmap фильтруются брандмауэром), и Nmap не может определить, открыт порт или закрыт.
Бойтесь сканеров
Будьте осторожны при сканировании действующих серверов с помощью Nessus – некоторые типы сканирования (по умолчанию они отключены) выполняют атаки типа «отказ в обслуживании», способные вывести сервер из строя. Лучшее время выполнения подобных тестов – перед тем, как сервер будет подготовлен к реальной работе. Если вам потребуется просканировать его позже, выберите время, когда временная недоступность сервера вызовет минимальные неудобства.