Проверка во время выполнения кода
Системы, реализующие данный подход, обнаруживают различные ошибки (в том числе и уязвимости), которые трудно "отловить" в процессе анализа исходных текстов. И хотя в процессе синтаксического и семантического '' анализа можно идентифицировать с высокой степенью вероятностью многие ошибки, все же некоторые пропускаются этими анализаторами и выявить их можно уже только во время выполнения программы [Рамодин 1-96].
Система BoundsChecker Proпредназначена для обнаружения ошибок, связанных с неправильным обращением к памяти. При ее использовании препроцессор, встроенный в BoundsChecker Pro, встраивает в определенные участки проверяемой программы свои фрагменты кода, которые и отвечают за контроль операций с памятью, вызов функций, работу с указателями и массивами и т.д. Необходимо отметить, что за всеми своими достоинствами BoundsChecker Pro скрывает и ряд недостатков. Это во-первых, — замедление работы анализируемой программы за счет "лишнего" кода, осуществляющего проверку. Во-вторых, ошибки, не связанные с неправильным использованием памяти, не обнаруживаются этой системой.
Система HeapAgentне изменяет анализируемый код, как это делает BoundsChecker Pro. Но зато она подставляет на место любого пула памяти, выделяемого анализируемому приложению, свой собственный, который и позволяет отслеживать все неверные операции с данным пулом памяти. К недостаткам системы HeapAgent можно отнести то, что она не позволяет обнаруживать никаких других ошибок (вызовы функций, переполнение стека и т. д.), кроме непосредственно ошибок пула памяти.
Система Purify NT так же, как и BoundsChecker Pro, вставляет в анализируемый код свои фрагменты, отвечающие за проверку работы с пулом памяти и стеком. Помимо замедления работы диагностируемого ПО, присущего и BoundsChecker Pro, ограничивающим ее распространение фактором служит то, что система Purify NT функционирует только под управлением ОС Windows NT и очень чувствительна к типу процессора.
Отечественные решения.Примером отечественной системы проверки по ходу выполнения кода является эмулятор ПЭВМ EMU (рис. 6.6), разработанный в уже упоминаемом Центре безопасности информации. Данная система позволяет эмулировать практически любые команды компьютеров, построенных на базе процессора Intel, и такие процессы, как включение питания нажатие клавиши RESET [Калайда 1-01].
Системы генерации тестов
Системы генерации тестов проводят ряд внешних воздействий на анализируемое программное обеспечение и изучают ответные действия системы на эти тесты. Очень часто данные средства анализируют реакцию системы на различные граничные значения входных данных, к которым можно отнести:
q переполнение буфера;
q выход за границы массива при индексации;
q отсутствие проверки аргументов;
q некорректный доступ к памяти;
q неподходящие аргументы вызова критических процедур.
Потребность в такого рода тестах закономерна, т.к. по статистике большинство уязвимостей реализации связано именно с указанными ошибками, например, переполнением буфера. Большинство известных систем генераций-тестов разработано для ОС Unix (например, проекты Fuzz или Ballista). В Специальном Центре Защиты Информации Санкт-Петербургского Государственного Технического Университета (СЦЗИ СПбГГУ) создана аналогичная разработка, но для платформы Windows NT [Корт 1-99]. Можно заметить, что данная система осуществляет те же самые тесты, что и система SLINT, отличие только в том, что SL1NT реализует проверки для исходного текста программы, а система СЦЗИ СПбГТУ — для исполняемого кода.
В табл. 6.3 перечислены достоинства и недостатки рассматриваемого метода.
Таблица 6.3. Достоинства и недостатки средств генерации тестов
Достоинства | Недостатки |
Возможность тестирования программного обеспечения, поставляемого без исходных текстов Относительная простота реализации | Обнаружение только некоторого класса уязвимостей и ошибок реализации. Наличие некоторых ошибок еще не является признаком наличия уязвимости |
Дизассемблирование
Сам процесс дизассемблирования мало чем может помочь при обнаружении уязвимостей, т.к. в этом случае объемы анализируемого кода будут намного превосходить размер исходного текста на языке программирования высокого уровня для той же программы. Однако дизассемблированный код может служить источником информации для анализаторов более высокого уровня, например, для системы АСТМА.
Имитация атак
Имитаторы атак предназначены для моделирования различных несанкционированных воздействий на компоненты информационной системы. Именно эти системы получили широкую известность во всем мире ввиду своей относительной простоты и дешевизны. Посредством таких имитаторов уязвимости обнаруживаются еще до того, как они будут использованы нарушителями для реализации атак. К числу систем данного класса можно отнести SATAN, Internet Scanner, Cisco Secure Scanner, NetRecon и т. д. Из российских продуктов можно выделить систему с многозначительным названием НКВД, разработанную в ЦБИ.
Средства имитации атак с одинаковым успехом обнаруживают не только уязвимости реализации, но и уязвимости эксплуатации. Поэтому положения следующего раздела, посвященного системам поиска последних, могут быть проецированы и на имитаторы атак. Именно эти разработки, наряду с системами поиска уязвимостей эксплуатации, получили наибольшее распространение среди пользователей.