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