Рубрика:
Безопасность /
Аудит
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АНДРЕЙ БИРЮКОВ, системный архитектор по информационной безопасности, abiryukov@samag.ru
Проводим тест на проникновение Часть 6. Пишем эксплоит
Что собой представляет эксплоит? Как правильно внедрить шелл-код? Продолжаем тему самостоятельной разработки
В этой статье мы продолжим обсуждение темы самостоятельной разработки эксплоитов к самописному программному обеспечению. В предыдущей статье цикла [1] был рассмотрен процесс поиска уязвимостей (фаззинг) в почтовом сервере SLMail. Мы выяснили значения адресов для регистров ESP и EIP, а также объем блока памяти, который нужен для размещения нашего эксплоита.
Однако перед тем как перейти к описанию процесса разработки кода, нам придется уделить внимание основам программирования на языке ассемблер, так как без этого понять все особенности разработки кода эксплоита будет довольно трудно. В рамках данной статьи я не буду подробно рассматривать все инструкции, ограничусь комментариями кода. Во врезке представлены основные инструкции ассемблера, необходимые при анализе кода.
Простые действия
Читателю, не знакомому с низкоуровневым программированием, материал, изложенный в этой статье, может показаться довольно сложным, а описываемые действия – набором хаотичных операций, не связанных между собой.
Для лучшего понимания приведу основные шаги, которые необходимо предпринять для разработки эксплоита:
- Разработка кода эксплоита. Здесь подробно рассмотрим, что собой представляет шелл-код для Windows.
- Адаптация кода для встраивания его в уязвимую программу. Здесь мы поговорим о том, как обойти ограничения, связанные с использованием нескольких сегментов памяти.
- Получение адресов, используемых в нашем шелл-коде функций kernel32.dll и генерации кода эксплоита.
- Обнаружение всех «плохих» байтов в уязвимой программе.
- Замена найденных bad chars в нашем шелл-коде.
- Поиск в уязвимой программе команд, необходимых для выполнения перехода на наш шелл-код.
- Внедрение шелл-кода в уязвимую программу.
- Автоматизация разработки эксплоита с помощью средств Metasploit.
Эксплоит, который мы будем разрабатывать далее, требует встраивания в уже работающую программу. Вследствие этого существует ряд ограничений, о которых мы также будем говорить далее.
Программа может состоять из нескольких частей, называемых модулями. В каждом модуле определяется один или несколько сегментов данных, стека и кода. Любая законченная программа на ассемблере должна включать один модуль, скоторого начинается ее выполнение. Модуль содержит сегменты кода, сегменты данных и стека, объявленные при помощи соответствующих директив. Перед объявлением сегментов нужно указать модель памяти при помощи директивы .MODEL.
Что мы хотим получить
Перед написанием эксплоита нам необходимо четко определиться с тем, что мы хотим получить. В случае с Unix-системами целью злоумышленника является получение доступа (шелл). Но в нашем примере используется сервер SLMail подWindows. Конечной целью нашего эксплоита также будет получение удаленного доступа на почтовый сервер. Реализовать удаленный доступ на ассемблере можно несколькими способами: можно написать код, обрабатывающий сокеты ивзаимодействующий с операционной системой, а можно использовать уже имеющиеся сервисы ОС Windows. Первый вариант требует разработки длинного и сложного кода, тогда как второй достаточно прост для понимания. Мывоспользуемся вторым вариантом и будем получать доступ посредством запуска telnet. Учитывая то обстоятельство, что исследуемая программа SLMail довольно старая (2004 г.) и уязвима она под ОС Windows XP/2003, проблем с запуском сервиса telnet возникнуть не должно.
Статью целиком читайте в журнале «Системный администратор», №11 за 2016 г. на страницах 42-46.
PDF-версию данного номера можно приобрести в нашем магазине.
- Бирюков А. Проводим тест на проникновение. Часть 5. Поиск уязвимостей в «самописных» приложениях. // «Системный администратор», №10, 2016 г. – С. 38-43 (http://samag.ru/archive/article/3292).
- Бирюков А. Проводим пентест. Часть 4. Используем уязвимости. // «Системный администратор», №7-8, 2016 г. – С. 47-51 (http://samag.ru/archive/article/3237).
- Бирюков А. Проводим пентест. Часть 3. Ищем уязвимости. // «Системный администратор», №6, 2016 г. – С. 24-29 (http://samag.ru/archive/article/3211).
- Бирюков А. Проводим пентест. Часть 2. Сбор необходимой информации. // «Системный администратор», №5, 2016 г. – С. 27-31 (http://samag.ru/archive/article/3190).
- Бирюков А. Проводим пентест. Часть 1. Проникаем в беспроводную сеть. // «Системный администратор», №4, 2016 г. – С. 40-44 (http://samag.ru/archive/article/3171).
- Утилита ARWin – http://shinnai.altervista.org/tools/arwin.rar.
- Касперски К. Аудит и дизассемблирование эксплоитов. // «Системный администратор», №8, 2006 г. – С.58-66 (http://samag.ru/archive/article/721).
- Крис Касперски. Искусство дизассемблирования.
- Penetration Testing with Kali Linux – учебные материалы Offensive Security.
- Securitytube.com Видеокурс «SecurityTube Linux Assembly Expert» by Vivek Ramachandran.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|