Поиск уязвимостей в программах спомощью анализаторов кодаАвтор: Елена ХаритоноваДата: 10.08.2008АннотацияВ настоящее время...
это язык Unix shell или SQL). В этом случае пользователь может таким образом задать      входные данные, что запущенный ин...
3. MOPSMOPS (MOdel checking Programs for Security) - инструмент для поиска уязвимостей в защите впрограммах на Си. Его наз...
стандартные библиотеки и на данном этапе разработки не позволяет анализировать сколь-нибудьсерьёзные программы.7. FlexeLin...
11. KlocWork K7Продукты компании Klocwork предназначены для автоматизированного статического анализакода, выявления и пред...
FxCop предусматривает возможность создания собственных правил с помощью специального SDK.FxCop может работать как в графич...
Можно сделать вывод, что статические анализаторы должны быть точными, восприимчивыми.Но, к сожалению, статические средства...
Upcoming SlideShare
Loading in …5
×

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

1,360 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,360
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Поиск уязвимостей в программах спомощью анализаторов кодаАвтор: Елена ХаритоноваДата: 10.08.2008АннотацияВ настоящее время разработано большое количество инструментальных средств,предназначенных для автоматизации поиска уязвимостей программ. В данной статье будутрассмотрены некоторые из них.ВведениеСтатический анализ кода - это анализ программного обеспечения, который производится надисходным кодом программ и реализуется без реального исполнения исследуемой программы.Программное обеспечение часто содержит разнообразные уязвимости из-за ошибок в кодепрограмм. Ошибки, допущенные при разработке программ, в некоторых ситуациях приводят ксбою программы, а следовательно, нарушается нормальная работа программы: при этом частовозникает изменение и порча данных, останов программы или даже системы. Большинствоуязвимостей связано с неправильной обработкой данных, получаемых извне, или недостаточнострогой их проверкой.Для выявления уязвимостей используют различные инструментальные средства, например,статические анализаторы исходного кода программы, обзор которых приведён в данной статье.Классификация уязвимостей защитыКогда требование корректной работы программы на всех возможных входных данныхнарушается, становится возможным появление так называемых уязвимостей защиты (securityvulnerability). Уязвимости защиты могут приводить к тому, что одна программа можетиспользоваться для преодоления ограничений защиты всей системы в целом.Классификация уязвимостей защиты в зависимости от программных ошибок: 1. Переполнение буфера (buffer overflow). Эта уязвимость возникает из-за отсутствия контроля за выходом за пределы массива в памяти во время выполнения программы. Когда слишком большой пакет данных переполняет буфер ограниченного размера, содержимое посторонних ячеек памяти перезаписывается, и происходит сбой и аварийный выход из программы. По месту расположения буфера в памяти процесса различают переполнения буфера в стеке (stack buffer overflow), куче (heap buffer overflow) и области статических данных (bss buffer overflow). 2. Уязвимости "испорченного ввода" (tainted input vulnerability). Уязвимости "испорченного ввода" могут возникать в случаях, когда вводимые пользователем данные без достаточного контроля передаются интерпретатору некоторого внешнего языка (обычно
  2. 2. это язык Unix shell или SQL). В этом случае пользователь может таким образом задать входные данные, что запущенный интерпретатор выполнит совсем не ту команду, которая предполагалась авторами уязвимой программы. 3. Ошибки форматных строк (format string vulnerability). Данный тип уязвимостей защиты является подклассом уязвимости "испорченного ввода". Он возникает из-за недостаточного контроля параметров при использовании функций форматного ввода- вывода printf, fprintf, scanf, и т. д. стандартной библиотеки языка Си. Эти функции принимают в качестве одного из параметров символьную строку, задающую формат ввода или вывода последующих аргументов функции. Если пользователь сам может задать вид форматирования, то эта уязвимость может возникнуть в результате неудачного применения функций форматирования строк. 4. Уязвимости как следствие ошибок синхронизации (race conditions). Проблемы, связанные с многозадачностью, приводят к ситуациям, называемым "состояние гонки": программа, не рассчитанная на выполнение в многозадачной среде, может считать, что, например, используемые ею при работе файлы не может изменить другая программа. Как следствие, злоумышленник, вовремя подменяющий содержимое этих рабочих файлов, может навязать программе выполнение определенных действий.Конечно, кроме перечисленных существуют и другие классы уязвимостей защиты.Обзор существующих анализаторовДля обнаружения уязвимостей защиты в программах применяют следующие инструментальныесредства: • Динамические отладчики. Инструменты, которые позволяют производить отладку программы в процессе её исполнения. • Статические анализаторы (статические отладчики). Инструменты, которые используют информацию, накопленную в ходе статического анализа программы.Статические анализаторы указывают на те места в программе, в которых возможно находитсяошибка. Эти подозрительные фрагменты кода могут, как содержать ошибку, так и оказатьсясовершенно безопасными.В данной статье предложен обзор нескольких существующих статических анализаторов.Рассмотрим подробнее каждый из них.1. BOONИнструмент BOON, который на основе глубокого семантического анализа автоматизирует процесссканирования исходных текстов на Си в поисках уязвимых мест, способных приводить кпереполнению буфера. Он выявляет возможные дефекты, предполагая, что некоторые значенияявляются частью неявного типа с конкретным размером буфера.2. CQualCQual - Инструмент анализа для обнаружения ошибок в Си-программах. Программа расширяетязык Си дополнительными определяемыми пользователем спецификаторами типа. Программисткомментирует свою программу с соответствующими спецификаторами, и cqual проверяет ошибки.Неправильные аннотации указывают на потенциальные ошибки. Сqual может использоваться,чтобы обнаружить потенциальную уязвимость форматной строки.
  3. 3. 3. MOPSMOPS (MOdel checking Programs for Security) - инструмент для поиска уязвимостей в защите впрограммах на Си. Его назначение: динамическая корректировка, обеспечивающая соответствиепрограммы на Си статической модели. MOPS использует модель аудита программногообеспечения, которая призвана помочь выяснить, соответствует ли программа набору правил,определенному для создания безопасных программ.4. ITS4, RATS, PScan, FlawfinderДля поиска ошибок переполнения буфера и ошибок форматных строк используют следующиестатические анализаторы: 1. ITS4. Простой инструмент, который статически просматривает исходный Си/Си++-код для обнаружения потенциальных уязвимостей защиты. Он отмечает вызовы потенциально опасных функций, таких, например, как strcpy/memcpy, и выполняет поверхностный семантический анализ, пытаясь оценить, насколько опасен такой код, а так же дает советы по его улучшению. 2. RATS. Утилита RATS (Rough Auditing Tool for Security) обрабатывает код, написанный на Си/Си++, а также может обработать еще и скрипты на Perl, PHP и Python. RATS просматривает исходный текст, находя потенциально опасные обращения к функциям. Цель этого инструмента - не окончательно найти ошибки, а обеспечить обоснованные выводы, опираясь на которые специалист сможет вручную выполнять проверку кода. RATS использует сочетание проверок надежности защиты от семантических проверок в ITS4 до глубокого семантического анализа в поисках дефектов, способных привести к переполнению буфера, полученных из MOPS. 3. PScan. Сканирует исходные тексты на Си в поисках потенциально некорректного использования функций, аналогичных printf, и выявляет уязвимые места в строках формата. 4. Flawfinder. Как и RATS, это статический сканер исходных текстов программ, написанных на Си/Си++. Выполняет поиск функций, которые чаще всего используются некорректно, присваивает им коэффициенты риска (опираясь на такую информацию, как передаваемые параметры) и составляет список потенциально уязвимых мест, упорядочивая их по степени риска.Все эти инструменты схожи и используют только лексический и простейший синтаксическийанализ. Поэтому результаты, выданные этими программами, могут содержать до 100% ложныхсообщений.5. BunchBunch - средство анализа и визуализации программ на Си, которое строит граф зависимостей,помогающий аудитору разобраться в модульной структуре программы.6. UNOUNO - простой анализатор исходного кода. Он был разработан для нахождения таких ошибок, какнеинициализированные переменные, нулевые указатели и выход за пределы массива. UNOпозволяет выполнять несложный анализ потока управления и потоков данных, осуществлять каквнутри- так и межпроцедурный анализ, специфицировать свойства пользователя. Но данныйинструмент не доработан для анализа реальных приложений, не поддерживает многие
  4. 4. стандартные библиотеки и на данном этапе разработки не позволяет анализировать сколь-нибудьсерьёзные программы.7. FlexeLint (PC-Lint)FlexeLint (PC-Lint) - этот анализатор предназначен для анализа исходного кода с целью выявленияошибок различного типа. Программа производит семантический анализ исходного кода, анализпотоков данных и управления.В конце работы выдаются сообщения нескольких основных типов: • Возможен нулевой указатель; • Проблемы с выделением памяти (например, нет free() после malloc()); • Проблемный поток управления (например, недостижимый код); • Возможно переполнение буфера, арифметическое переполнение; • Предупреждения о плохом и потенциально опасном стиле кода.8. Viva64Инструмент Viva64, который помогает специалисту отслеживать в исходном коде Си/Си++-программ потенциально опасные фрагменты, связанные с переходом от 32-битных систем к 64-битным. Viva64 встраивается в среду Microsoft Visual Studio 2005/2008, что способствует удобнойработе с этим инструментом. Анализатор помогает писать корректный и оптимизированный коддля 64-битных систем.9. Parasoft C++testParasoft C++test - специализированный инструмент для Windows, позволяющий автоматизироватьанализ качества кода Си++. Пакет C++test анализирует проект и генерирует код, предназначенныйдля проверки содержащихся в проекте компонентов. Пакет C++test делает очень важную работупо анализу классов C++. После того как проект загружен, необходимо настроить методытестирования. Программное обеспечение изучает каждый аргумент метода и возвращает типысоответствующих значений. Для данных простых типов подставляются значения аргументов поумолчанию; можно определить тестовые данные для определенных пользователем типов иклассов. Можно переопределить аргументы C++test, используемые по умолчанию, и выдатьзначения, полученные в результате тестирования. Особого внимания заслуживает способностьC++test тестировать незавершенный код. Программное обеспечение генерирует код-заглушку длялюбого метода и функции, которые еще не существуют. Поддерживается имитация внешнихустройств и входных данных, задаваемых пользователем. И та и другая функции допускаютвозможность повторного тестирования. После определения тестовых параметров для всехметодов пакет C++test готов к запуску исполняемого кода. Пакет генерирует тестовый код,вызывая для его подготовки компилятор Visual C++. Возможно формирование тестов на уровнеметода, класса, файла и проекта.10. CoverityИнструменты Coverity используются для выявления и исправления дефектов безопасности икачества в приложениях критического назначения. Технология компании Coverity устраняетбарьеры в написании и внедрении сложного ПО посредством автоматизации поиска и устранениякритических программных ошибок и недостатков безопасности во время процесса разработки.Инструмент компании Coverity способен с минимальной положительной погрешностьюобрабатывать десятки миллионов строк кода, обеспечивая 100-процентное покрытие трассы.
  5. 5. 11. KlocWork K7Продукты компании Klocwork предназначены для автоматизированного статического анализакода, выявления и предотвращения дефектов программного обеспечения и проблембезопасности. Инструменты этой компании служат для выявления коренных причин недостатковкачества и безопасности программного обеспечения, для отслеживания и предотвращения этихнедостатков на протяжении всего процесса разработки.12. Frama-CFrama-C - открытый, интегрированный набор инструментов для анализа исходного кода на языкеСи. Набор включает ACSL (ANSI/ISO C Specification Language) - специальный язык, позволяющийподробно описывать спецификации функций Си, например, указать диапазон допустимыхвходных значений функции и диапазон нормальных выходных значений.Этот инструментарий помогает производить такие действия: • Осуществлять формальную проверку кода; • Искать потенциальные ошибки исполнения; • Произвести аудит или рецензирование кода; • Проводить реверс-инжиниринг кода для улучшения понимания структуры; • Генерировать формальную документацию.13. CodeSurferCodeSurfer - инструмент анализа программ, который не предназначается непосредственно дляпоиска ошибок уязвимости защиты. Его основными достоинствами являются: • Анализ указателей; • Различные анализы потока данных (использование и определение переменных, зависимость данных, построение графа вызовов); • Скриптовый язык.CodeSurfer может быть использован для поиска ошибок в исходном коде, для улучшенияпонимания исходного кода, и для реинженерии программ. В рамках среды CodeSurfer веласьразработка прототипа инструментального средства для обнаружения уязвимостей защиты, однакоразработанное инструментальное средство используется только внутри организацииразработчиков.14. FxCopFXCop предоставляет средства автоматической проверки .NET-сборок на предмет соответствияправилам Microsoft .NET Framework Design Guidelines. Откомпилированный код проверяется спомощью механизмов рефлексии, парсинга MSIL и анализа графа вызовов. В результате FxCopспособен обнаружить более 200 недочетов (или ошибок) в следующих областях: • Архитектура библиотеки; • Локализация; • Правила именования; • Производительность; • Безопасность.
  6. 6. FxCop предусматривает возможность создания собственных правил с помощью специального SDK.FxCop может работать как в графическом интерфейсе, так и в командной строке.15. JavaCheckerJavaChecker - это статический анализатор Java програм, основанный на технологии TermWare.Это средство позволяет выявлять дефекты кода, такие как: • небрежная обработка исключений (пустые catch-блоки, генерирование исключений общего вида и.т.п.); • сокрытие имен (например, когда имя члена класса совпадает с именем формального параметра метода); • нарушения стиля (вы можете задавать стиль программирования с помощью набора регулярных выражений); • нарушения стандартных контрактов использования (например, когда переопределен метод equals, но не hashCode); • нарушения синхронизации (например, когда доступ к синхронизированной переменной находится вне synchronized блока).Набором проверок можно управлять, используя управляющие комментарии.Вызов JavaChecker можно осуществлять из ANT скрипта.16. SimianSimian - анализатор подобия, который ищет повторяющийся синтаксис в нескольких файлаходновременно. Программа понимает синтаксис различных языков программирования, включаяC#, T-SQL, JavaScript и Visual Basic®, а также может искать повторяющиеся фрагменты в текстовыхфайлах. Множество возможностей настройки позволяет точно настраивать правила поискадублирующегося кода. Например, параметр порога (threshold) определяет, какое количествоповторяющихся строк кода считать дубликатом.Simian - это небольшой инструмент, разработанный для эффективного поиска повторений кода. Унего отсутствует графический интерфейс, но его можно запустить из командной строки илиобратиться к нему программно. Результаты выводятся в текстовом виде и могут бытьпредставлены в одном из встроенных форматов (например, XML). Хотя скудный интерфейс иограниченные возможности вывода результатов Simian требуют некоторого обучения, онпомогает сохранить целостность и эффективность продукта. Simian подходит для поискаповторяющегося кода как в больших, так и в маленьких проектах.Повторяющийся код снижает поддерживаемость и обновляемость проекта. Можно использоватьSimian для быстрого поиска дублирующихся фрагментов кода во многих файлах одновременно.Поскольку Simian может быть запущен из командной строки, его можно включить в процесссборки, чтобы получить предупреждения или остановить процесс в случае повторений кода.ВыводИтак, в данной статье были рассмотрены статические анализаторы исходного кода, которыеявляются вспомогательными инструментами программиста. Все инструментальные средстваразные и помогают отслеживать самые различные классы уязвимостей защиты в программах.
  7. 7. Можно сделать вывод, что статические анализаторы должны быть точными, восприимчивыми.Но, к сожалению, статические средства отладки не могут дать абсолютно надёжный результат.Библиографический список 1. Alexey Kolosov. Using Static Analysis in Program Development. http://www.viva64.com/art-2-2- 681473622.html 2. Брайан Гетц. Избавьтесь от ошибок. http://www.viva64.com/go.php?url=163 3. Криспин Кован. Безопасность систем с открытым кодом.http://www.viva64.com/go.php?url=160 4. Павел Зуев. О компьютерной безопасности. http://www.viva64.com/go.php?url=161 5. С.С. Гайсарян, А.В. Чернов, А.А. Белеванцев, О.Р. Маликов, Д.М. Мельник, А.В. Меньшикова. О некоторых задачах анализа и трансформации программ. http://www.viva64.com/go.php?url=487

×