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

Обнаружение программных закладок и недекларированных возможностей посредством анализа ошибок программирования

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

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

Автоматизация обнаружения ОП позволяет значительно сократить время исследования ИТ, повысить качество контроля и расширить число возможных проверок. Алгоритм анализа основан на идентификации конечного числа функций конкретного языка программирования, что позволяет сформировать БД уязвимостей и производить её своевременное обновление. Трудоемкость реализации определяется предварительным составлением упрощенной грамматики языка, создании анализатора и заполнении БД уязвимостей, характерных конкретному языку. Преимущества такого решения проявляются при последующих анализах ИТ, за счет сформированной интеллектуально-технической базы.

В настоящий момент подобный метод контроля применяется американскими и европейскими исследователями при анализе ПО на наличие уязвимостей. Общедоступны анализаторы, частично реализующие описанный подход.

Данный подход целесообразно рассматривать, как вид проверки при тестировании, контроле качества, сертификации и независимой экспертизе программного обеспечения.