|
|
Строка 1: |
Строка 1: |
− | == Безопасность: Зондируем систему ==
| + | #REDIRECT [[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 – некоторые типы сканирования (по умолчанию они отключены) выполняют атаки типа «отказ в обслуживании», способные вывести сервер из строя. Лучшее время выполнения подобных тестов – перед тем, как сервер будет подготовлен к реальной работе. Если вам потребуется
| + | |
− | просканировать его позже, выберите время, когда временная недоступность сервера вызовет минимальные неудобства.
| + | |