12.03.2018

BOVSTT – утилита для тестирования уязвимостей, связанных с переполнением буфера

image

Приложение помогает обнаружить удаленные / локальные уязвимости, связанные с переполнением буфера в стеке, через стандартные коммуникационные протоколы, используемые службами.

Автор: Ivan Ricart Borges (iricartb@gmail.com)

Введение

Приложение помогает обнаружить удаленные / локальные уязвимости, связанные с переполнением буфера в стеке, через стандартные коммуникационные протоколы, используемые службами.

Кроме того, вы можете настраивать схему тестирования каждой службы, используя шаблоны, представляющие собой обычные текстовые файлы, при помощи специальных ключевых слов (см. раздел «STF файлы»). Эти файлы хранятся в папке <services>, идут с расширением STF (Service Tester File; Файл тестировщика службы) и напрямую связаны с протоколом тестирования.

На данный момент доступна версия 2.5, которая поддерживает протоколы FTP, IMAP, POP3 и SMTP.

Ссылка на проект: https://github.com/iricartb/buffer-overflow-vulnerability-services-tester-tool

Для настройки среды тестирования доступны различные типы параметров.

Параметры

Протокол уровня приложения

Описание: Назначается тип протокола для тестирования
Обязательность: Да
Наименование опций: -ap –application-layer-protocol <protocol>
Доступные значения: FTP, POP3 или SMTP

IP-адрес / имя целевого хоста

Описание: Назначается адрес тестируемого хоста
Обязательность: Да
Наименование опций: -th –target-hostname-ip <hostname>
Доступные значения: любой корректный (IP) адрес хоста

Целевой порт

Описание: Назначается целевой порт службы
Обязательность: Нет
Наименование опций: -tp –target-port <port>
Доступные значения: 1 – 65535
Если пользователь не введет этот параметр, приложение автоматически будет подключаться к стандартному порту в зависимости от службы и типа шифрования.
Например, для службы POP3 и SSL-шифрования стандартный порт – 995.

Протокол криптографической безопасности

Описание: Назначается тип шифрования
Обязательность: Нет
Наименование опций: -cp –cryptographic-security-protocol <crypt protocol>
Доступные значения: SSL, TLS
Примечание: На данный момент не поддерживается

Имя пользователя

Описание: Назначается имя пользователя
Обязательность: Нет
Наименование опций: -lu –login-username <username>
Допустимые значения: буквенно-цифровые
Этот параметр позволяет настроить механизм аутентификации протокола.
Если в STF-файле встречается макрос #AUTH, приложение пытается выполнить аутентификацию, используя имя пользователя / пароль. В случае неудачи программа завершает выполнение.
Каждый раз, когда приложение встречает ключевое слово <login-username> внутри STF-файла, происходит замена на содержимое этого параметра.

Пароль

Описание: Назначается пароль
Обязательность: Нет
Наименование опций: -lu –login-password <password>
Допустимые значения: буквенно-цифровые
Этот параметр позволяет настроить механизм аутентификации протокола.
Каждый раз, когда приложение встречает ключевое слово <login-password> внутри STF-файла, происходит замена на содержимое этого параметра.

Размер буфера

Описание: Назначается размер буфера
Обязательность: Нет
Наименование опций: -bs –buffer-size-length <size>
Допустимые значения: Положительные числа
Значение по умолчанию: 1024
Этот параметр позволяет назначить размер буфера для отправки.
Каждый раз, когда приложение встречает ключевое слово <buffer> внутри STF-файла, происходит замена на последовательность { –buffer-character } * { –buffer- size-length }. В нашем случае символ A будет продублирован 1024 раза.

Символ буфера

Описание: Назначается символ буфера
Обязательность: Нет
Наименование опций: -bc –buffer-character <character>
Допустимые значения: буквенно-цифровые
Значение по умолчанию: A

Подробный отчет

Описание: Данная опция определяет, будет ли выводиться дополнительная информация во время взаимодействия с удаленным хостом.
Обязательность: Нет
Наименование опций: -ov –output-verbose
Допустимые значения: отсутствуют

Сведения об авторах

Описание: Нужно ли выводить информацию об авторе программы.
Обязательность: Нет
Наименование опций: -c –credits
Можно ли использовать в сочетании с другими параметрами: Нет.

Версия

Описание: Просмотр версии программы
Обязательность: Нет
Наименование опций: -v –version
Можно ли использовать в сочетании с другими параметрами: Нет

STF файлы

Описание

STF-файлы представляют собой текстовые шаблоны, в которых можно задавать специальные ключевые слова. Файлы хранятся в папке <services>, напрямую связаны с протоколом и идут с расширением STF (Service Tester File; Файл тестировщика службы).
Например, в случае с протоколом FTP в папке <services> будет храниться файл FTP.stf, в случае с протоколом SMTP - SMTP.stf и так далее.
Как только соединение с удаленным хостом установлено, приложение начинает построчно считывать соответствующий STF-файл до тех пор, пока не дойдет до конца или не встретит ошибку.
Каждая строка файла представляет собой команду, которая отсылается удаленному хосту. Приложение допускает использование следующих ключевых слов, которые будут считаны в ходе выполнения:
<login-username>: Каждый раз, когда приложение встречает этот тег внутри STF-файла, происходит замена на содержимое параметра -lu –login-username, введенное пользователем.
<login-password>: Каждый раз, когда приложение встречает этот тег внутри STF-файла, происходит замена на содержимое параметра -lp –login-password, введенное пользователем.
<buffer >: Каждый раз, когда приложение встречает этот тег внутри STF-файла, происходит замена на содержимое { –buffer-character } продублированное количество раз, указанное в параметре { –buffer- size-length }.
<remote-domain>: Каждый раз, когда приложение встречает этот тег внутри STF-файла, происходит замена на содержимое параметра -th –target-hostname-ip, введенное пользователем.
Эти файлы также допускают использование серии макросов, которые позволяют изменить механизм тестирования:
#AUTH: Должен быть введен без какой-либо дополнительной информации. Этот макрос подразумевает, что все последующие команды будут выполнены только, если аутентификация завершится успешно. Процесс аутентификации происходит автоматически, и важно задать корректное имя пользователя и пароль в параметрах приложения.
Прохождение аутентификации не является обязательным, однако в этом случае мы сможем отсылать команды удаленному серверу, к которому есть доступ только для авторизованного пользователя.
#RETURN <VALUE> : <COMMAND>: Команда <COMMAND> будет отсылаться только, если значение <VALUE> возвращено во время последнего процесса, иначе тестирование остановится. Этот макрос можно рассматривать как условие. В случае если удаленных хост в ответ на последнюю команду отправил определенное значение, процесс тестирования будет продолжаться.

Пример

Рассмотрим тестовый файл FTP.stf:
USER <buffer>
PASS <buffer>
#AUTH
MKD <buffer>
RMD <buffer>
С целью упрощения примера представим, что пользователь ввел в параметре размера буфера значение 10.
Как только соединение с удаленным хостом установлено, приложение начинает построчное считывание STF-файла.
Вначале считывается строка USER <buffer>, которая преобразуется в строку USER AAAAAAAAAA. В случае если информация отослана успешно, и переполнение буфера не произошло, приложение продолжает свою работу.
Далее переходим к строке PASS <buffer>, которая преобразуется в строку PASS AAAAAAAAAA. В случае если информация отослана успешно, и переполнение буфера не произошло, приложение продолжает свою работу.
Затем переходим к макросу #AUTH, после чего система инициирует процесс аутентификации при помощи имени пользователя / пароля. Если этот процесс завершился успешно, приложение продолжает считывать файл.
Наконец, переходим к строкам MKD <buffer> и RMD <buffer>, которые будут преобразованы к строкам MKD и RMD AAAAAAAAAA соответственно. Эти команды будут отосланы удаленному хосту только, если процесс аутентификации завершился успешно.

Результат выполнения команды

После отсылки каждой команды удаленному хосту программа выводит одно из следующих сообщений:
[ OK ]: Информация отослана успешно, и во время отсылки выполнения буфера не произошло.
[ FAIL ]: Во время отсылки команды произошла ошибка. Условие макроса #RETURN не выполнилось, или процесс аутентификации при считывании макроса #AUTH завершился неудачно.
[ WARNING ]: Возможно произошло переполнение буфера или соединение было закрыто удаленным хостом.

Совместимость / Требования

На данный момент приложение заточено под платформу Microsoft Windows. Для генерирования бинарного файла необходимо только загрузить среду Dev-C ++ IDE.
Платформа: Microsoft Windows
IDE: DEV-C ver-4.9.9.2
Компилятор: MinGW
Зависимости: Libwsock32.a (включена в Dev-C++ IDE)
Среду Dev-C++ IDE можно загрузить по следующей ссылке: https://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_nomingw_setup.exe/download?use_mirror=netix&r=&use_mirror=netix

Компиляция

Установка Dev-C ++ IDE. Переходим по следующей ссылке и запускаем установку https://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_nomingw_setup.exe/download?use_mirror=netix&r=&use_mirror=netix

Загрузка проекта GitHub. Переходим по следующей ссылке и нажимаем кнопку «Download zip» https://github.com/iricartb/buffer-overflow-vulnerability-services-tester-tool


Рисунок 1: Загрузка проекта в виде zip архива

Распаковываем архив при помощи архиватора.


Рисунок 2: Распаковка архива

Дважды кликаем на файл BOVSTT.dev для загрузки проекта.


Рисунок 3: Загрузка проекта

В среде Dev-C ++ IDE переходим в меню Execute и запускаем команду rebuild all (F12). Если возникает ошибка с зависимостями, переходим к пункту 6, иначе – к пункту 7.


Рисунок 4: Сборка проекта

В Dev-C ++ IDE в разделе Project кликните на опцию Project options (1). Далее зайдите во вкладку с параметрами (2) и удалите строчку в разделе линковщика (3). Затем кликните на кнопку add library и найдите библиотеку libwsock32.a в папке с библиотеками среды Dev-C ++ IDE (5). Выберите библиотеку и повторите шаг 5.


Рисунок 5: Добавление нужных библиотек

К данному шагу должен появиться файл BOVSTT.exe. Затем запускаем командную консоль cmd.exe и переходим в папку с проектом.


Рисунок 6: Содержимое папки проекта

Запускаем файл BOVSTT.exe с нужными параметрами для инициации процесса тестирования.


Рисунок 7: Запуск тестирования службы
На рисунке ниже показано, как программа обнаруживает переполнения буфера в FTP-службе сервера FreeFloat FTP Server.

Рисунок 8: Поиск и обнаружение переполнений в FTP-службе

По следующей ссылке можно увидеть видео демонстрацию процесса тестирования: https://www.youtube.com/watch?v=ijsBqSLmRpY

Запуск программы без компиляции

Вы можете запустить программу без выполнения шагов, описанных в разделе 3, скачав файл BOVSTT.exe.