Научные публикации

Подход к построению анализатора программ в рамках исследований
исходного текста на наличие уязвимостей

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

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

Для семантического анализа требуется реализовать отдельный программный модуль, который будет соотносить имеющиеся лексемы с искомыми элементами архитектуры. По результатам этого анализа формируется база данных (БД), содержащая необходимые конструкции для формирования представления об архитектуре, такие как функции, линейные участки, переменные и т.п. Полученная БД является отправной точкой для анализа содержащихся в ней сведений об архитектуре. На основании БД возможно, например, выполнять следующие действия: получать информацию о связях между функциональными объектами, определять избыточность исходных текстов, осуществлять поиск уязвимых функций, обнаруживать ошибки программирования, производить контроль ошибок переполнения буфера, создавать блок-схемы, генерировать отчеты и пр. БД является центральным связующим звеном для самостоятельных программных модулей, реализующих разнообразные проверки. Модульная концепция построения анализатора обеспечивает свойство масштабируемости комплекса в целом и позволяет использовать принцип разделения механизмов контроля, что позволяет наращивать мощь анализатора независимо от внутренней реализаций других модулей.