Обзор утилит для безопасной разработки
Утилиты для безопасной разработки:
BinScope Binary Analyzer
Недаром мы уделяем много времени обходу защит DEP и ASLR. Это действительно серьезный барьер для создателей сплойтов, который кардинальным образом влияет на возможность эксплуатации найденной уязвимости. Чтобы понимать, что представляют собой требования SDL, вот в качестве примера одно из них: «Любое приложение должно быть в обязательном порядке защищено как DEP, так и ASLR». Для этого исходник должен быть собран соответственно с флагами /NXCOMPAT и /DYNAMICBASE. Но это лишь одно из требований, а с помощью анализатора Binscope SDL можно выяснить, использует ли приложение все рекомендации и требования SDL. Программа проверяет, были ли установлены требуемые правилами SDL флаги компилятора/сборщика, использовались ли самые последние версии инструментария и так далее. Помимо этого Binscope сообщает об использовании опасных конструкций, который являются запрещенными или нежелательными (к примеру, использование указателей на глобальные функции).
AppVerifier
Application Verifier — это тоже анализатор, но предназначен для динамического исследования native-кода и обнаружения программерских ошибок, которые сложно отловить во время обычной процедуры тестирования приложения. Динамический подход подразумевает, что программа анализируется прямо во время ее выполнения (это называется runtime-тестированием). AppVerif отслеживает работу программы и проверяет, не выполняет ли оно действий, опасных с точки зрения безопасности. Например, если исследуемое приложение создаст объект без дескриптора безопасности или небезопасным образом передает параметры в API, то выдается предупреждение.
Attack Surface Analyzer Beta
Определение поверхности атаки — задачка для Attack Surface Analyzer. Это один из самых последних инструментов из лаборатории Microsoft, о котором я рассказывал в «Колонке редактора» прошлого номера. Анализатор позволяет отследить изменения в системе, произошедшие в результате каких-то определенных действий. Например, сделав snapshot’ы до и после установки исследуемого приложения и сравнив их, можно определить все произошедшие изменения: появление новых файлов, ключей реестра, сервисов, ActiveX-компонентов, открытых портов, изменения в ACL-списках и так далее.
Code Analysis for C/C++
Автоматизированное исследование исходных кодов на наличие признаков уязвимостей называется статическим тестированием. В свою очередь, Code Analysis for C/C++ является стандартным статическим анализатором кода и по умолчанию входит в состав некоторых редакций Visual Studio. Продуманные механизмы позволяют автоматизировать поиск в native-коде утечек памяти, неотловленных исключений, проблем с быстродействием и, конечно же, уязвимостей в области безопасности.
Microsoft Code Analysis Tool .NET (CAT.NET)
Это тоже утилита для статического анализа, но упоминание .NET в названии программы неслучайно: она производит анализ управляемого кода (C#, Visual Basic .NET, J#). Основная специализация — веб-приложения. CAT.NET выявляет слабые места, которые могут быть впоследствии эксплуатированы через такие векторы атак как Cross-Site Scripting (XSS), SQL Injection и XPath Injection. До публичного релиза это был исключительно внутренний инструмент в компании Microsoft.
FxCop
Это тоже статический анализатор управляемого кода. По сути, он проверяет сборки .NET на соответствие рекомендациям по проектированию библиотек .NET Framework. Правда, он тестирует не исходник, а компилированный объектный код. FxCop использует разбор CIL (промежуточный язык, разработанный Microsoft для платформы .NET) и анализ графа вызовов для проверки сборок на наличие более чем двухсот различных дефектов.
Anti-Cross Site Scripting (Anti-XSS) Library
Многие из уязвимостей можно заранее предупредить, если предложить разработчикам соответствующие инструменты. К примеру, Anti-XSS разработана специально для того, чтобы уменьшить вероятность осуществления XSS-атак на веб-приложения. Важно, что решение включает в себя что-то вроде WAF (файрвол для веб-приложения) — так называемый Security Runtime Engine (SRE). Это движок, запущенный в виде HTTP-модуля, который обеспечивает дополнительный уровень защиты для веб-приложения без необходимости перекомпилирования.
SiteLock ATL Template
Библиотека SiteLock Active Template не поможет избавиться от оставленных в коде багов, зато на порядок снизит риск их эксплуатации. Дело в том, что с помощью ATL можно ограничить запуск ActiveX-компонентов, используя заранее определенный список доменных имен и зон безопасности. Можно сделать так, чтобы ActiveX-компонент выполнялся только в интранете (то есть в локальной сети), но не работал на страничках в интернете. Ограничивая возможности по эксплуатации уязвимостей, мы заметно снижаем поверхность возможной атаки.
banned.h
Если говорить о разработке на C/C++, то особый риск в коде представляют команды, позволяющие выполнить buffer overflow и другие похожие типы атак. Таких команд очень много: функции для работы со строками (xstrcpy(), strcat(), gets(), sprintf(), printf(), snprintf(), syslog()), системные команды (access(), chown(), chgrp(), chmod(), tmpfile(), tmpnam(), tempnam(), mktemp()), а также команды системных вызовов (exec(), system(), popen()). Вручную исследовать весь код (особенно если он состоит из нескольких тысяч строк) довольно утомительно. Это проверяют статические анализаторы, но есть еще один вариант — использовать специальный заголовочный файл, который не допустит использования функций, давно не рекомендуемых к использованию (и, естественно, запрещенных SDL).
SDL Threat Modeling Tool
Важной частью проектирования будущего программного продукта является моделирование угроз. Результатом моделирования является схема основных элементов будущей системы и обозначенные на ней границы доверия. Так вот SDL Threat Modeling Tool позволяет экспертам в области, не связанной с безопасностью, создавать и анализировать модели угроз. Используя полученные диаграммы, можно распознать возможную опасность и выполнить ее смягчение. SDL Threat Modeling Tool сама предлагает подсказки во время построения диаграмм и указывает на возможные просчеты.
SDL Process Template
Для Visual Studio (что неудивительно) доступен специальный шаблон, который автоматически интегрирует политику, процесс и средства, связанные с руководством по процессу Microsoft SDL непосредственно в среду разработки. Таким образом, создавая проект на основе этого шаблона, придется выполнять все условия SDL. И это очень правильно.
MiniFuzz File Fuzzer
Согласно SDL, в качестве одного из обязательных этапов проверки приложения (на стадии верификации) должен использоваться фаззинг, то есть тестирование случайными входными данными. Minifuzz File Fuzzer — основное средство нечеткого тестирования, разработанное для упрощения поиска проблем, которые могут привести к уязвимости системы безопасности в коде обработки файлов. Тулза генерирует различные варианты содержания файла и «скармливает» его приложению, пытаясь выявить необрабатываемые исключения.
SDL Regex Fuzzer
Средство нечеткого тестирования регулярных выражений (Regex) — это еще один фаззер, который опубликовала Microsoft. SDL Regex Fuzzer позволяет выполнять проверку регулярных выражений на наличие потенциальных уязвимостей типа «отказ в обслуживании». Это неспроста. Регулярные выражения (особенно в нагруженных участках кода) нужно использовать очень аккуратно. Регулярные выражения, содержащие паттерны, которые выполняются за экспоненциальное время (например, повторение фрагментов, которые сами являются повторяющимися), могут быть использованы злоумышленниками для осуществления DoS-атаки. Фаззер, в свою очередь, позволяет прямо во время разработки выявить возможные уязвимости в регекспах.