Описание функционирования BOWall

В начале работы предлагается ввести рабочий каталог (Search directory), в котором находятся DLL. По умолчанию выбирается %systemroot%\system32. Далее следует выбрать команду Find DLLs, после чего будет производиться поиск и анализ DLL в указанном каталоге. В результате данной операции будет сформировано два списка: Vulnerable DLL to protect и DLL to block calls. Первый список соответствует защите первым методом (мониторинг уязвимых функций). Второй список - методу препятствия исполнения функций динамических библиотек.

На этом этапе предоставляется возможность выбрать (отметить), какие DLL следует модифицировать. После этого по команде Protect DLLs или Block DLL calls выполняется модификация указанных DLL. Результаты этого процесса, как и все другие, отображаются в окне Protecting Result.

По окончании модификации будет выведено соответствующее сообщение. При модификации оригинальные DLL не изменяются, а создается их модифицированная копия. Модифицированные DLL получают следующие имена: new_[original_name] в том же каталоге. Для замены оригинальных DLL модифицированными необходимо выполнить следующее:

1) сделать резервную копию оригинальных DLL и переименовать их, например: ren [original_name] orig_[original_name]

2) переименовать модифицированные DLL: ren new_[original_name] [original_name]

3) перезагрузиться

Для тестирования результатов защиты первого метода запустите программу, входящую в данный архив:

botest.exe <big_string>

Где big_string - строка, которая вызывает переполнение буфера путем вызова уязвимой функции strcpy из MSVCRT.DLL. При вводе строки около длиной до 15 символов база кадра локальных переменных не перезаписывается и botest выдает: without overflow.

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

 

Отмечу, что модификации можно подвергать любые DLL, включая системные: KERNEL32.DLL, NTDLL.DLL и т.д.

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

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

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

Программу планируется распространяться совершенно свободно. В ближайешее время я выложу подробное описание алгоритмов и исходники.

(C) 2000, Андрей Колищак