В рубрику "Защита информации" | К списку рубрик | К списку авторов | К списку публикаций
Традиционный подход к автоматизации создания виртуальных патчей для Web-приложений заключается в предоставлении информации WAF (Web Application Firewall) о каждой обнаруженной с помощью средств статического анализа (далее SAST – Static Application Security Testing) уязвимости, включающей:
Такой подход позволяет защищаться от ряда атак, однако вместе с тем обладает и существенными недостатками:
Эти недостатки приводят к тому, что технология VP, ориентированная на защиту от частных случаев, не позволяет защититься от всех возможных атак на уязвимости, обнаруженных с помощью SAST. К примеру, для приведенного кода на рис. 1 (C#, ASP.NET) построение корректного патча невозможно из-за промежуточных преобразований потоков данных в 10 и 15-й строках.
Для того чтобы устранить эти недостатки, технологию VP необходимо расширить в следующих направлениях:
В основе технологии виртуальных патчей времени выполнения (далее RVP – Runtime Virtual Patching) лежит используемая модель анализируемого приложения под названием "граф потоков вычисления" (Computation Flow Graph – CompGF). Данная модель строится во время анализа кода приложения в результате его абстрактной интерпретации в семантике, схожей с традиционными символическими вычислениями. Вершины данного графа содержат формулы-генераторы, задающие множество допустимых значений всех потоков данных, присутствующих в соответствующих точках выполнения. Эти потоки называются аргументами точки выполнения. Одним из свойств CompFG является его конкретизируемость – возможность вычислить множества конкретных значений всех потоков данных в любой точке выполнения приложения, задав значения для всех входных параметров. Например, для рассмотренного выше примера формула для VEP (рис. 2) будет выглядеть следующим образом: CustomDecode(condition) ? "secret" ? param ? CustomDecode({xss-vectors-text}).
При этом для функции CustomDecode (если ее исходный код был доступен во время анализа) в соответствующей вершине CompFG будет выведена формула, описывающая цепочку преобразований Base64-URL-Base64: (FromBase64Str (UrlDecodeStr (FromBase64Str argument))).
Рабочий процесс RVP делится на два этапа, соответствующих этапам жизненного цикла приложения. Перед развертыванием очередной версии приложения осуществляется анализ его кода и выполняются следующие шаги:
На этапе эксплуатации при каждом HTTP-запросе WAF делегирует его обработку бинарному модулю RVP, который выполняет следующие шаги:
Реализованный таким образом подход к защите приложения на основе результатов анализа защищенности его кода обладает рядом существенных преимуществ по сравнению с традиционным VP: l за счет описанного выше формального подхода и возможности учитывать все промежуточные преобразования выходных данных устранены все рассмотренные недостатки традиционного VP; l формальный подход также исключает возможность появления ложных срабатываний первого рода (False-Positive), при условии корректной реализации токенайзеров для каждой из поддерживаемых грамматик; l отсутствие какого-либо влияния на функциональность Web-приложения, поскольку защита реализуется не просто в соответствии с ней, а на ее же основе.
Тесты производительности также показывают более чем приемлемые результаты: средний процент замедления реакции приложения на запросы составляет:
Таким образом, в среднем время обработки HTTP-запросов с помощью RVP сравнимо со временем их обработки модулями традиционной защиты WAF.
Опубликовано: Журнал "Information Security/ Информационная безопасность" #4, 2017