27.08.2004

Metasploit Framework (Часть первая из трех). Прометей Эксплойтирования

В настоящие время сообщество разработчиков эксплойтов (таких как хакеры и профессионалы безопасности) наиболее разумно, чем когда-либо прежде. Промежуток времени между выпуском уведомления и эксплойта значительно уменьшился. Создание эксплойтов, которое считалось скорее исскуством, пришло в массы. Администратор сетевой защиты должен быть более бдителен, чем когда-либо прежде, так как враг всегда на шаг впереди со свежим эксплойтом в руке.

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

Эксплойт. Дефект в коде (см. bug) или проектировании игры, который может быть использован для получения незаслуженных преимуществ (Источник: Словарь терминов MMORPG).

В настоящие время сообщество разработчиков эксплойтов (таких как хакеры и профессионалы безопасности) наиболее разумно, чем когда-либо прежде. Промежуток времени между выпуском уведомления и эксплойта значительно уменьшился. Создание эксплойтов, которое считалось скорее исскуством, пришло в массы. Администратор сетевой защиты должен быть более бдителен, чем когда-либо прежде, так как враг всегда на шаг впереди со свежим эксплойтом в руке.

Утилиты для разработки эксплойтов и автоматизированные среды для тестирования и моделирования эксплойтов - вот, что необходимо сегодня. Metasploit Framework (MSF) соответствует этим требованием. Его последний релиз имеет возможности весьма сопоставимые с его высоко оцененными коммерческими коллегами и благодаря хорошо продуманному интерфейсу разработки позволяет создать эксплойт в самое короткое время. Вместе с полной средой разработки, рабочими эксплойтами, эффективными полезными нагрузками и добавленными обработчиками это единый инструмент, который должны использовать испытатели на проникновение.

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

1. Пролог

Я хотел бы начать мою статью со ссылки на некоторые относительно текущие события. Уведомление Майкрософт (MS04-011) описывает и устраняет набор критических уязвимостей защиты в различных операционных системах Windows [1]. Двумя из них, интересовавших меня, были переполнения в SSL PCT и Local Security Authority, которые могли быть использованы для удаленного компрометирования системы. Почти сразу были выпущены рабочие эксплойты, ставя под угрозу неосведомленных и неподготовленных администраторов и профессионалов безопасности.

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

Патчи, IDS, брандмауэры и т.д. не должны быть единственными критериями безопасности. Вследствие некоторых ситуаций много укромных уголков и углов сети могут стать незащищенными и стать источником компрометации. Это случается, когда мы слышим о большой сети, скомпрометированной хакерами, использующими известную уязвимость. Это также причина того, почему Sasser поразил 250,000 компьютеров даже спустя две недели после того, как MS выпустила патчи.

По моему мнению, решение в использовании простого метода "думайте как нападающий". Испытатель на проникновение должен ощутить веселье взлома, проверяя свою собственную сеть на предмет того, что я называю Уклонение от угрозы испытания на проникновение. Здесь в игру вступают среды разработки эксплойтов, которые автоматизируют искусство эксплойтирования.

2. Основная часть

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

2.1 Организация памяти

Основные методы эксплойтирования могут быть систематически категоризированы также как и любые другие технические знания. Однако, прежде чем двигаться дальше, читатель должен знать основные принципы организации памяти [2]. Процесс, находящийся в памяти, имеет следующие субструктуры:

Код это сегмент только для чтения, содержащий скомпилированный исполняемый код программы.

Данные и BSS - сегменты доступные на запись, содержащие статические, глобальные, инициализированные и неинициализированные сегменты данных и переменные.

Стек это структура данных, работающая по принципу "последним вошел, первым вышел". Элементы помещаются и удаляются с вершины стека. Указатель стека (SP) это регистр, указывающий на вершину стека (в большинстве случаев). Стек растет к отрицательным адресам памяти. Это используется для сохранения контекста процесса. Процесс помещает все свой локальные и динамические данные в стек. Указатель команды (IP) - регистр, использующийся для указания адреса следующий команды, которая будет выполнена. Процессор каждый раз смотрит на IP, чтобы узнать, какую команду нужно выполнить следующей. Если имеет место резкое изменение места выполнения программы (обычно, вследствие jmp или call), после возвращения назад, адрес следующей команды может быть потерян. Для решения этой проблемы, программа хранит адрес следующей команды, которая должна быть выполнена (после возврата из jmp или call), в стеке. Этот адрес называется адрес возврата (реализован в ассемблерной команде RET). Это обеспечивает правильное выполнение программы, содержащей много вызовов функций и goto команд.

Куча это обычно вся остальная память, выделенная процессу. В ней хранятся данные, время жизни которых находится между временем жизни глобальных и локальных переменных. Подпрограммы выделения и освобождения соответственно выделяют место для динамических данных и освобождают память кучи [3].

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

2.2 Переполнения буфера

Слова, вызывающие много эмоций у любого человека, который имел с ними дело, будь это программист, тестер приложений или администратор безопасности. Кое-то говорит, что это самый крупный риск для безопасности за десятилетие [4]. Техника эксплойтирования просто и смертельна. Стек программы хранит данные в следующем порядке: параметры, которые были переданы функции, затем адрес возврата, далее предыдущее значение указателя стека и локальные переменные. Если переменные (типа массивов) переданы без проверки границ, то при большом количестве данных, они могут разрушить стек, переписав адрес возврата и, следовательно, вызвав ошибку сегментации. Если эта уловка правильно реализована, мы можем изменить буфер так, чтобы он указывал на любой адрес, приведя к исполнению нашего кода [5].

2.3 Переполнения кучи

Память, выделенная в куче, организована как двусвязный список. Выполнив переполнение, мы можем изменить указатели связанного списка так, чтобы они указывали на наш адрес в памяти. Переполнения кучи трудно эксплойтируемы и более характерны для ОС Windows, так она содержит более важные данные, которые могут использоваться для создания эксплойта. В случае системы распределения памяти malloc, информация о свободной и распределенной памяти хранится в пределах кучи. Переполнение может быть вызвано использованием этой информации таким образом, чтобы впоследствии мы смогли писать в случайные области памяти, что может привести к исполнению нашего кода [6].

Итак, как же вызвать переполнение? Есть много различных способов, например строки и строковые функции, строки формата, нулевые указатели, целочисленные переполнения, известные проблемы и ситуации, который могут помочь создать исключительную ситуацию для процесса [7].

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

3. Рождение эксплойта

Теперь приступим к самой интересному, написанию эксплойта. Тело или структура эксплойта может быть разделена на различные компоненты, как это показано на Рисунке 1 [8]. Мы опишем некоторый составляющие эксплойта, который помогут нам проанализировать показанный рисунок.


Рисунок 1

3.1 Shellcode

Это полезная нагрузка, которая должны быть выполнена после эксплойтирования. В большинстве случаев мы переадресовываем следующую выполняющуюся команду так, что внедренный шелкод был выполнен [9]. Следовательно, адрес возврата делается таким, чтобы он указывал на этот шелкод. Именно ассемблерные команды, закодированные в виде двоичной строки, выполняют действие подобное запуску командного интерпретатора. В хорошем шелкоде должен быть компромисс между размером и сложностью. Есть много ограничений, который должны быть учтены во время создания полезной нагрузки, например отсутствие некоторых символов. В настоящее время полезные нагрузки оптимизированы для того, чтобы быть очень короткими и занимать меньше места. Они могут выполнять много сложных операций от открытия сокета, до загрузки компилятора на удаленный компьютер.

3.2 Вектор инъекции (Injection vector)

Указатель или смещение, куда шелкод внедряется в процесс и измененный адрес возврата, указывающий на это место в памяти.

3.3 Построитель запроса (Request builder)

Это код, который вызывает эксплойт. Если он связан со строковыми функциями, то предпочтительнее использовать скриптовые языки.

3.4 Стандартный обработчик (Handler Routine)

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

3.5 Обработчик пользовательских опций (User options Handler)

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

3.6 Обработчик сетевых соединений (Network connection Handler)

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

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

4. Некоторые общие проблемы

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

Для некоторых эксплойтов нужно понимание сложных фундаментальных понятий и исследование, например для эксплойтов основанных на сетевых протоколах (RPC, SMB и SSL) и запутанных API. Также, не много информации содержится в уведомлении, поэтому всегда есть необходимость в экспериментировании.

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

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

Многие брандмауэры и IPSec обнаруживают и блокируют шелкод.

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

Все сказано и сделано, написание эксплойтов - грязная адская работа!

5. Наконец то!

Приступим к Metasploit Framework (MSF)! Согласно Руководству Пользователя MSF [10] "Metasploit Framework это законченная среда для написания, тестирования и использования кода эксплойтов. Эта среда обеспечивает надежную платформу для испытаний на проникновение, разработки шелкодов и исследования уязвимостей".

Согласно моим словам Metasploit Framework это решение всех вышеперечисленных проблем. На данный момент последняя версия среды - 2.0 (на момент перевода последняя версия 2.2 доступна на сайте разработчика -- примечание переводчика). Она более устойчива, имеет очень привлекательные возможности и интуитивный пользовательский интерфейс для разработки эксплойтов.

Главные особенности, выгодно выделяющие MSF на фоне других решений:

  • Написан на Perl (с некоторыми частями на ассемблере, Python и C), что означает чистый эффективный код и быстрая разработка плагинов.
  • Предпакетная поддержка расширяемых утилит, библиотек и таких возможностей как отладка, кодирование, ведение логов, тайм-ауты, случайные NOP'ы и SSL.
  • Понятная, интуитивная, модульная и расширяемая среда и API эксплойтов.
  • Высоко оптимизированная мультиплатформа, автоматически загружаемые полезные нагрузки.
  • Усовершенствованный обработчик и поддержка callback, которая действительно сокращает код эксплойта.
  • Поддержка различных сетевых опций и протоколов, которые могут использоваться для разработки зависимого от протокола кода.
  • Включены вспомогательные эксплойты, которые помогают нам тестировать методы эксплойтирования и типовые эксплойты.
  • Это ПО с открытым исходным кодом, поддерживаемое сообществом разработчиков.
  • Поддержка расширенных возможностей и утилит третьих лиц, таких как InlineEgg, Impurity, UploadExec и цепочек прокси.
  • Совершенно ясно, что MSF является инструментом, который должен иметь каждый испытатель на проникновение. Он дает новую парадигму искусству эксплойтирования.

    6. Установка

    На данный момент, Metasploit Framework эффективно работает на Linux и Windows. Есть некоторые незначительные проблемы с совместимостью, но на них можно не обращать внимание. Пользователи могут загрузить последний релиз для Windows и Linux c http://www.metasploit.com/projects/Framework/downloads.html.

    Установка очень проста и интуитивна, загружает пакеты, распаковывает и запускает. Простая установка под Windows показана на Рисунке 2. В случае Linux распакуйте архив (файл с именем framework-2.x.x.tar.gz), содержащий скомпилированные бинарники различных утилит. При запуске под Linux сообщается, что модули Term::ReadLine::Gnu (для поддержки дополнения по нажатию TAB) и Net::SSLeay (для поддержки SSL) были установлены (они находятся в директории extras).


    Рисунок 2

    Среда под Windows базируется на доработанном Cygwin, что является мудрым решением, т.к. это дает пользователю удобную консоль. Однако, были некоторые проблемы с поддержкой Active Perl, поэтому поддерживается только Cygwin Perl. Инсталляция создана в виде исполняемого setup файла, который устанавливает Metasploit Framework в указанный каталог (см. Рисунок 2) и добавляет ярлык на него.

    7. Заключение первой части

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

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

    Cсылки

    1. Microsoft Security Bulletin http://www.microsoft.com/technet/security/bulletin/ms04-011.mspx

    2. Stack, Pointers and Memory, Lally Singh http://www.biglal.net/Memory.html

    3. A Memory Allocator, Doug Lea http://gee.cs.oswego.edu/dl/html/malloc.html

    4. Buffer overflows likely to be around for another decade, Edward Hurley http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci860185,00.html

    5. Buffer Overflows Demystified, Murat http://www.enderunix.org/docs/eng/bof-eng.txt

    6. Badc0ded - How to exploit program vulnerabilities, http://community.core-sdi.com/~juliano/bufo.html

    7. Once upon a free(), Phrack 57 Article 9 by Anonymous http://www.phrack.org/show.php?p=57

    8. Presentation on Advanced Exploit Development at HITB, HD Moore (PDF) http://conference.hackinthebox.org/materials/hd_moore/HDMOORE-SLIDES.pdf

    9. Designing Shellcode Demystified, Murat http://www.enderunix.org/docs/en/sc-en.txt

    10. Crash Course User Guide for Metasploit Framework, (PDF) http://metasploit.com/projects/Framework/docs/CrashCourse-2.0.pdf

    или введите имя

    CAPTCHA