Metasploit Framework, часть вторая.

Metasploit Framework, часть вторая.

В первой части этой серии статей мы обсуждали, что создание эксплойта это все еще трудоемкий и отнимающий много времени процесс. Мы обсуждали общие проблемы, появляющиеся в процессе разработки эксплойта и то, как Metasploit Framework может решить некоторые из них. Эта статья начнется с краткого введения в интерфейс консоли и расскажет о том, как выбирать и использовать модули эксплойтов. Также мы опишем среду разработки, ее возможности и принципы работы.

Покрей Син и К.К. Мукей, перевод Владимир Куксенок

1. Введение

В первой части этой серии статей мы обсуждали, что создание эксплойта это все еще трудоемкий и отнимающий много времени процесс. Мы обсуждали общие проблемы, появляющиеся в процессе разработки эксплойта и то, как Metasploit Framework может решить некоторые из них. Эта статья начнется с краткого введения в интерфейс консоли и расскажет о том, как выбирать и использовать модули эксплойтов. Также мы опишем среду разработки, ее возможности и принципы работы.

2. Начнем

Установленный MSF имеет три рабочих окружения, msfconsole, интерфейс msfcli и интерфейс msfweb. Однако, основная (и предпочтительная) рабочая среда MSF это msfconsole. Это эффективный интерфейс командной строки, имеющий собственное программное окружение и систему команд. Несмотря на то, что Framework был разработан для Unix-подобный систем, типа Linux или BSD, он также будет работать под Windows через среду Cygwin. Windows инсталлятор с сайта metasploit.com включает в себя сконфигурированную урезанную версию Cygwin.

Во время инициализации msfconsole выполняются стандартные проверки. Если все пройдет нормально, мы увидим то, что показано на Рисунке 1.


Рисунок 1

Теперь мы видим приглашение командной строки. Консоль очень гибкая, и если пользователь введет любую неизвестную команду, будет произведен поиск любого исполняемого файла в директориях, указанных в переменной окружения PATH. Если файл будет найден, он будет выполнен, как и в стандартной командной строке.

Инстинктивно, введя команду help, можно увидеть список доступных команд, как это показано на Рисунке 2.


Рисунок 2

Команда show exploits показывает список доступных в данный момент эксплойтов. Здесь есть удаленные эксплойты для различных платформ и приложений, таких как Windows, Linux, IIS, Apache и т.д., которые помогают тестировать MSF и понять принципы его работы. Это показано на Рисунке 3 ниже.


Рисунок 3

Как вы могли заметить, установка Metasploit Framework 2.0 по умолчанию содержит 18 эксплойтов и 27 шелкодов, которые являются весьма внушительным запасом.

Чтобы просмотреть список представленных шелкодов, выполните команду show payloads. Шелкоды качественные, эффективные и очень хорошо написанные. Эти шелкоды выполняют множество задач, например, привязка командной оболочки к прослушиваемому порту, добавление новых учетных записей, загрузка и исполнение выбранной вами программы. MSF также имеет поддержку динамического создания шелкода, используя библиотеку InlineEgg, как это показано на рисунке 4.


Рисунок 4

Определенная информация об эксплойте может быть получена с помощью команды info exploit имя_эксплойта, которая выводит данные о доступных целях, требования эксплойта, непосредственно детали уязвимости и даже ссылки, по которым вы сможете найти больше информации. Это показано на Рисунке 5.


Рисунок 5

Таким же образом, с помощью команды info payload имя_шелкода, может быть получена информация о любом шелкоде, как это показано на рисунке 6. Начиная с версии MSF 2.2, вы можете использовать команду info имя_модуля, без указания типа модуля.


Рисунок 6

3. Использование эксплойта

Теперь мы опишем процедуру выбора и выполнения определенного эксплойта. Команды use имя_эксплойта активизирует среду для использования эксплойта имя_эксплойта.

Если вы выберете Microsoft RPC DCOM MSO3-026 эксплойт, используя имя msrpc_dcom_ms03_026, вы можете заметить, что приглашение командной строки изменится с msf > на msf msrpc_dcom_ms03_026 >. Это уведомление о том, что мы работаем во временном окружении этого эксплойта. Команда show может использоваться для просмотра информации о текущем эксплойте. Команды show options покажет различные параметры, которые обязательны для использования эксплойта, как показано на Рисунке 7.


Рисунок 7

Ясно, что эксплойт требует 2 параметра, RHOST (адрес цели) и RPORT (порт цели, по умолчанию, в данном случае, это 135). Команда show targets покажет все доступные цели для выбранного эксплойта. Как вы можете видеть, этот модуль имеет только одну цель, работающую на NT 4.0 SP6 или на всех версиях Windows 2000 и Windows XP.

Команда show payloads покажет все шелкоды совместимые с выбранным эксплойтом. MSF предотвращает вас от использования шелкода, неподходящего для данного эксплойта.

Мы должны установить все опции, помеченные как 'required', перед тем как использовать эксплойт. Для этого эксплойта есть только одна опция цели, поэтому мы установим переменную TARGET в 0, командой set TARGET 0. Многие эксплойты сами выберут подходящую цель для вас. Теперь установим IP адрес цели командой set RHOST 192.168.0.27.

Затем нам нужно установить шелкод для эксплойта. Мы присваиваем значение winbind переменной PAYLOAD, используя команду set PAYLOAD winbind. Имена шелкодов могут изменяться в разных версиях MSF, поэтому всегда после обновления проверяйте вывод команды show payloads. Этот шелкод заставит сервер прослушивать определенный порт и создавать командную оболочку при соединении. Это показывает гибкость расширяемости набора эксплойтов MSF. Каждый отдельный эксплойт, включенный в MSF, позволяет выбирать и использовать произвольные шелкоды, даже те, которые вы разработали самостоятельно. Обратите внимание на изменение приглашения командной строки после выбора шелкода с msf msrpc_dcom_ms03_026 > на msf msrpc_dcom_ms03_026(winbind) >. Теперь мы используем команду show options, чтобы проверить, какие опции установлены, а какие еще необходимо установить. Как мы видим, нам все еще нужно установить значение переменной LPORT, как показано на Рисунке 8. Мы установим его, используя команду set LPORT 1536.


Рисунок 8

Переменная EXITFUNC доступна почти для всех Windows шелкодов. Эта переменная определяет как шелкод "подчистит" после себя, как только выполнит свою задачу. Довольно много уязвимостей могут быть эксплойтированы неоднократно, просто используя разные значения для EXITFUNC. К счастью, вы редко должны задумываться над этим, так как многие эксплойты автоматически выбирают наилучшее для вас значение. Если вы не знаете, что делаете, это значение не нужно устанавливать. Установка неправильного значения может нанести ущерб эксплойтируемой системе.

Многие эксплойты и шелкоды имеют дополнительный набор опций, названный расширенными опциями. Они могут быть отображены с помощью команды show advanced. Расширенные опции могут выполнять такие задачи, как модификация эксплойта с целью обмана сигнатур IDS, изменение настроек перебора или точное указание адреса возврата, который нужно использовать.

Теперь все готово и все переменные установлены. Сделаем заключительную проверку эксплойта командой show options и убедимся, что мы готовы двигаться дальше.

Все выглядит отлично. Время начинать!

Команда exploit начинает атаку, независимо оттого, что нужно сделать для выполнения шелкода на удаленной системе.

Команда check может быть использована для проверки, действительно ли целевая система уязвима для атаки. Такая возможность доступна не с каждым эксплойтом, но может быть полезна для определения, пропатчена ли система, перед попыткой ее атаки.

4. Добавление новых Эксплойтов/Модулей

Добавить новый эксплойт в MSF очень просто. MSF-совместимый удаленный эксплойт для переполнения буфера в IIS 5.x SSL PCT был публично выпущен 24/04/2004 (http://www.k-otik.com/exploits/04242004.iis5x_ssl_pct.pm.php). Для примера мы добавим этот эксплойт в нашу базу MSF.

После загрузки эксплойта, пользователь должен обратить внимание на имя Perl модуля эксплойта. Имя файла должно быть таким же, как и имя пакета, другими словами Msf::Exploit::iis5x_ssl_pct должен быть сохранен как iis5x_ssl_pct.pm. Теперь скопируйте модуль в директорию эксплойтов (если вы используете Windows это /home/framework-2.0/exploits). Как только файл скопирован, он готов к использованию и вам даже не нужно перезапускать консоль. Используйте команду show exploits, что убедиться, что модуль был загружен правильно.
msf > show exploits

Metasploit Framework Loaded Exploits
====================================

apache_chunked_win32       Apache Win32 Chunked Encoding
exchange2000_xexch50       Exchange 2000 MS03-46 Heap Overflow
ia_webmail                 IA WebMail 3.x Buffer Overflow
iis50_nsiislog_post        IIS 5.0 nsiislog.dll POST Overflow
iis50_printer_overflow     IIS 5.0 Printer Buffer Overflow
iis50_webdav_ntdll         IIS 5.0 WebDAV ntdll.dll Overflow
iis5x_ssl_pct              IIS 5.x SSL PCT Overflow
imail_ldap                 IMail LDAP Service Buffer Overflow
msrpc_dcom_ms03_026        Microsoft RPC DCOM MSO3-026
mssql2000_resolution       MSSQL 2000 Resolution Overflow
poptop_negative_read       PoPToP Negative Read Overflow
...
Эксплойт был успешно добавлен в список. Его можно запустить, так же как и любой другой эксплойт в MSF. Версия MSF 2.2 позволяет пользователям иметь собственные директории для эксплойтов, шелкодов, кодеров и nop'ов. Новый эксплойт может быть установлен для всей системы или для определенного пользователя.

5. Окружения консоли

В предыдущих параграфах мы упомянули довольно много переменных и окружений, не объясняя, что они из себя представляют. Окружение это просто пространство имен переменных. Когда вы устанавливаете переменную в MSF, в вашем текущем окружении создается новая запись. Окружения используются для определения параметров эксплойтов и настройки различных частей системы. MSF подразделяется на два логических окружения, Глобальное окружение (Global Environment) и Временное окружение (Temporary Environment). Каждый эксплойт, после того как он был выбран, имеет временное окружение, которое первично перед глобальным окружением.

5.1 Глобальное окружение

К глобальному окружению можно получить доступ через команды setg и unsetg. Вызов команды setg без параметров показывает текущее глобальное окружение, а unsetg удаляет все настройки глобального окружения.

Ниже, на Рисунке 9, показано, как мы устанавливаем значение переменных LHOST, LPORT и PAYLOAD глобального окружения и сохраняем изменения с помощью команды save.


Рисунок 9
Команда save записывает все текущие окружения в файл на диске. Версии 2.0 и 2.1 хранят эту информацию в файле $HOME/.msfconfig, а версия 2.2 в $HOME/.msf/config. Сохраненные окружения загружаются, когда запускается любой из пользовательских интерфейсов MSF. Обычная практика, установить переменные LPORT и LHOST глобального окружения и сохранить их, избавляясь от необходимости устанавливать их для каждого эксплойта.

5.2 Временное окружение

Временные окружения это окружения, имеющие свои настройки, первичные перед глобальным окружением. Временное окружение имеет привязку к определенному выбранному эксплойту. Окружение каждого эксплойта изолировано от остальных, что позволяет пользователю легко переключаться между сконфигурированными эксплойтами с помощью команды use.

5.3 Расширенные настройки окружения

MSF имеет довольно много расширенных параметров настройки, которые конфигурируются через переменные окружения. Эти настройки включают в себя систему ведения логов, опции сокетов и параметры отладки.

5.3.1 Настройки логов

Ведение логов может быть включено установкой переменной Logging в ненулевое значение. Директория для логов устанавливается изменением переменной LogDir (имя в глобальном окружении такое же, как и во временном), по умолчанию имеющей значение $HOME/.msflogs. Для просмотра логов можно использовать утилиту msflogdump. Начиная с версии 2.2 логи сохраняются в $HOME/.msf/logs.

5.3.2 Опции сокетов

Различные настройки таймаута и прокси могут быть изменены установкой следующих переменных окружения.

Msf::Socket::Proxies (глобальное имя) или Proxies (временное имя): Эта переменная может использоваться для установки настроек прокси (SOCKS4 и HTTP) для сетевого соединения. Поддерживаются цепочки прокси, которые должны быть указаны в формате тип:хост:порт и разделены запятыми для каждого прокси сервера.

Msf::Socket::RecvTimeout (глобальное имя) или RecvTimeout (временное имя): Задает максимальное число секунд чтения данных из сокета.

Msf::Socket::ConnectTimeout (глобальное имя) или ConnectTimeout (временное имя): Задает таймаут сокета при установке соединения (по умолчанию 10 секунд).

Msf::Socket::RecvTimeoutLoop (глобальное имя) или RecvTimeoutLoop (временное имя): Устанавливает максимальное время (в секундах) ожидания подключения, прежде чем сокет будет закрыт. Эта значение восстанавливается после каждого приема данных.

5.3.3 Параметры отладки

Переменная окружения DebugLevel устанавливает уровень отладки и опции вывода дополнительной информации для MSF и модулей. Объем дополнительной информации увеличивается в соответствии со значением переменной, которая принимает значения от 0 до 5.

5.3.4 Опции шелкода

По умолчанию, процесс кодирования будет просматривать все модули, пока не найдет тот, в котором отсутствует специфический набор символов, запрещенный для данного эксплойта. Старшинство модулей кодирования может быть установлено в нужном порядке, с разделением запятыми, в переменной окружения Encoding. Точно также переменная Nop используется для определения старшинства подпрограмм генерации nop'ов. Это может пригодиться для обмана некоторых IDS.

Переменная RandomNops указывает модулю генерации nop'ов использовать случайные последовательности nop-подобных команд вместо стандартного опкода nop. Это также может использовать для обмана сигнатур IDS. Версия 2.2 включает поддержку нового случайного генератора nop'ов, в котором для каждого эксплойта можно указать регистры, которые не должны быть изменены nop-подобными опкодами.

6. Заключение

После прочтения второй части этой статьи вы должны получить твердое представление о том, что такое Metasploit Framework и как вы можете начать его использование. Мы описали интерфейс msfconsole, основное средство для выбора и использования эксплойта, и то, как работает система окружения.

Эта статья приближается к третьей и заключительной части, в которой будут описаны другие пользовательские интерфейсы, вспомогательные утилиты из дистрибутива MSF, и даны некоторые рекомендации по разработке ваших собственных эксплойтов. Мы обсудим будущее развитие MSF, новые возможности, которые будут добавлены в среду разработки.

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену