Атаки замещения на приложения, защищенные ВМ (Часть 2)

Атаки замещения на приложения, защищенные ВМ (Часть 2)

В данном документе мы опишем атаку, названную атакой замещения, на приложения, защищенные виртуализацией уровня процесса. В ходе данной атаки атакующий замещает защищающую виртуальную машину (ВМ) атакующей ВМ, тем самым делая приложение уязвимым к анализу и модификации.

Авторы: Sudeep Ghosh, Jason Hiser, Jack W. Davidson

6. Исследование

В данном разделе проводится всестороннее исследование методологии атаки замещения. Здесь описывается Strata, защитная виртуальная машина, и создание защищенного приложения PV. Целевое приложение было выбрано из тестовых задач на целочисленную арифметику набора SPEC CPU2000. Данные тестовые задачи были выбраны как примеры типичных приложений, они широко используются для измерения производительности. Данные программы содержат от нескольких тысяч до сотен тысяч строк и выполняют различные задачи. Таким образом, они достаточно варьируются как по размеру кода, так и по функциональности, чтобы проверить наши идеи. В рамках данного исследования мы сконцентрировались на тестовой задаче 256.bzip2 в качестве целевого гостевого приложения P. 256.bzip2 – это модифицированная версия архиватора bzip, разработанная для оценки производительности CPU. Все наши тесты выполнялись на 32-битной платформе Intel x86 под управлением ОС Linux. Все компоненты были изначально скомпилированы с помощью gcc.

6.1 Динамическая трансляция двоичного файла

В разделе 2 было дан высокоуровневый обзор виртуализации уровня процесса. Хотя системы такой виртуализации сложны по своей природе, они являются вариациями подхода декодирование-диспетчеризация. Системы декодирования-диспетчеризации состоят из главного цикла который проходит через три стадии: декодирование, диспетчеризация и выполнение. На стадии декодирования извлекается опкод инструкции. Стадия диспетчеризации использует эту информацию, чтобы вызвать соответствующие обработчики. На стадии выполнения затем извлекаются операнды и вызывается соответствующий обработчик, реализованный на хостовой системе. В системах декодирования-диспетчеризации в их базовой форме проблемой могут стать издержки производительности. Одно из требований использования виртуализации как платформы для безопасности – низкие издержки при выполнении. Данное исследование сосредоточено на виртуализации уровня процесса, основанной на динамической трансляции двоичного кода [45], которая включает выполнение преобразования по запросу блоков кода гостевого приложения в исполняемые инструкции хостовой машины и кэширование их для последцющего использования. Существует множество эффективных инструментов динамической трансляции двоичного кода с низкими издержками, включая DynamoRIO [7], HDTrans [47], Pin [33], PTLSim [55] и Strata [43].

 

(a) Виртуализованное приложение, PV, запущено под фреймворком интроспекции кода (CIF).

(b) CIF перехватывает вызов к функции входа защитной ПВМ.

(c) CIF приступает к загрузке атакующей ПВМ.

(d) Управление затем передается функции входа атакующей ПВМ, которая приступает к запуску P без динамических защит.

Рисунок 3. Шаги, иллюстрирующие методологию атаки на виртуализованные приложения.

Защитная ПВМ в нашем случае реализована с помощью двоичного транслятора Strata [42, 43]. Рисунок 4 иллюстрирует механизм Strata и методы динамической защиты. При старте программы Strata получает контроль над выполнением, сохраняет текущий контекст выполнения (текущий PC, значения регистров, условные коды и т. д.), и начинает выборку, декодирование и трансляцию инструкций, начиная со стартового адреса P. Этот процесс продолжается до тех пор, пока не будет выполнено условие окончания трансляции. Транслятор восстанавливает контекст и передает управление только что транслированному блоку. После завершения выполнения блока управление возвращается к транслятору и он начинает трансляцию со следующего адреса.

Блоки транслированного кода после выполнения не ликвидируются а кэшируются в памяти (называемой кэшем кода) [7]. Перед попыткой трансляции Strata сначала ищет блок в кэше. Если блок найден, управление может быть передано кэшированному блоку. Этот процесс кэширования значительно уменьшает стоимость трансляции. Для уменьшения издержек производительности двоичных трансляторов было предложено и множество других методов [24, 25].

Strata настроена на повышение безопасности во время выполнения. Например, в ходе трансляции она вставляет бесполезный код случайного размера в виртуализованные блоки кода. Таким образом, разметка кэша кода будет различной для каждого запуска программы. Этот метод затрудняет запуск автоматизированных атак, поскольку действительное положение транслированного кода отличается от запуска к запуску.

Кодовый кэш также укреплен в целях противодействия анализу [20]. Один из таких укрепляющих методов – периодическое очищение кэша, в ходе которого транслированный код удаляется из кэша через постоянные промежутки времени. Для восстановления приложения целиком должны быть сопоставлены все снимки кодового кэша. Strata может использовать преобразования кода [6] так, чтобы один и тот же блок приложения транслировался в разные формы после каждой очистки кэша. Очистка также гарантирует, что транслированный код появляется в ходе выполнения в разных местах. Подобная динамика усложняет нахождение и удаление защитных средств.

Рисунок 4 Виртуальная машина Strata, модифицированная для применения динамической защиты.

6.2 Создание защищенных программ

Защищенное виртуализованное приложение было создано с помощью линковочного инструмента перезаписи двоичного кода, Diablo [16]. Diablo считывает все объектные файлы и библиотеки, составляющие приложение и создает его внутренне представление. Модифицированное представление может затем быть выгружено в виде исполняемого файла. Мы модифицировали Diablo, чтобы применить несколько методов защиты к приложению. Например, охранники контрольных сумм1 были помещены в код 256.bzip2 и Strata.

Во время выполнения охранники контрольных сумм присутствуют в 256.bzip2, защищая Strata и наоборот, осуществляя циклическую верификацию. Diablo был также адаптирован для чередования кода ПВМ и гостевого приложения, что затрудняет статический анализ. Рисунок 5(a) показывает разметку двоичного кода виртуализованного приложения после нормальной компиляции и линковки. Информированный противник может проанализировать и определить отдельные регионы кода и извлечь полезную информацию. Поэтому в ходе линковки Diablo случайным образом перемешивает блоки кода 256.bzip2 с блоками кода Strata, создавая в результате разметку, изображенную на рисунке 5(b). Статический анализ перемешанного кода эквивалентен проблеме отделения кода от данных, которая в общем случае нерешаема [26]. Блоки кода приложения шифруются алгоритмом AES.

6.3 Реализации атаки

Данный раздел описывает две реализации предложенной методологии атаки, которая делает приложение, P, уязвимым к анализу, и последующей атаке, основанной на информации, полученной из проведенного анализа. Первая демонстрационный пример использует фреймворк динамической инструментации (Pin) для замещения Strata атакующей ПВМ (построенной с помощью ПВМ HD-Trans, которую мы расширили для выполнения AES-шифрования). Вторая реализация использует архитектурный симулятор, PTLsim [55], как фреймворк интроспекции кода и атакующую ПВМ. Хотя для демонстрации методологии мы использовали эти конкретные инструменты, подойти могут любые подобные им.
6.3.1 Атака с использованием динамического двоичного транслятора
Данный прототип использует фреймворк инструментации двоичного кода во время выполнения от Intel – Pin [33] – для замещения Strata другим двоичным транслятором, HD-Trans [47]. Pin предлаuает богатый API для динамической проверки и изменения инструментированных исходных инструкций приложения. Функционал инструментирования реализован в модуле Pintool. Во время выполненеия фреймворк Pin принимает на входе Pintool и целевую программу и выполняет необходимое инструментирование.

Так как защищенное приложение зашифровано, мы сначала должны найти процедуру расшифровки защитной ПВМ и расширить атакующую ВМ для использования того же алгоритма. Криптографические примитивы находятся в ПВМ, которая защищена не так сильно, как приложение, и позволяет более легкий анализ. Были предложены методы, которые могут автоматически выводить данные криптографические примитивы из двоичного кода [8, 21, 31]. Данные схемы включают профилирование виртуализованных приложений и анализ трассировки для нахождения криптографических примитивов. Мы успешно использовали метод Грёберта для определения включенного алгоритма шифрования (AES) и извлечения ключа [21]. HDTrans был затем модифицирован для расшифровки по алгоритму AES блоков кода до трансляции. Раздел 8.2 описывает методы, которые можно использовать для получения более подробной криптографической информации.

Pintool, который реализует данную атаку, действует следующим образом: он начинает с загрузки и запуска защищенного приложения. Когда происходит запуск приложения, Pintool отслеживает функцию точки входа защитной ПВМ. В случае Strata вызов функции входа следует за следующим фрагментом кода:

pop %eax sub 0x1c, %esp pusha pushf push %eax ; contains application start address push <address> ; return address jmp <address> ; jump to entry point function

Когда вызывается функция входа, Pintool извлекает из списка ее аргументов стартовый адрес приложения. Затем он динамически загружает расширенную версию HDTrans, приступает к инициализации HDTrans и передает ей стартовый адрес приложения. Таким образом, HDTrans получает управление защищенным приложением, а Strata так и не запускается. Приложение теперь может быть проанализировано любым способом. Мы модифицировали HDTrans для выгрузки всех выполняемых инструкций на диск.

(a) Разметка регионов кода виртуализованного приложения при стандартной компиляции. Регионы кода P и ПВМ четко выделяются.

(b) Разметка регионов кода после перемешивания блоков инструкций.

Рисунок 5. Разметка секции .text виртуализованного приложения 256.bzip2. Блоки кода ВМ и приложения перемешаны случайным образом, что затрудняет их статическое разделение.

По сути, данная атака не позволяет охранникам контрольных сумм проверить целостность кода. Охранники, расположенные в Strata, никогда не вызываются, а те, что расположены в P, продолжают проверять целостность P и Strata, которая остается нетронутой. На данном этапе код P доступен для анализа.

6.3.2 Атака с использованием архитектурного симулятора
Второй прототип этаки использует архитектурный симулятор PTLSim [55]. В данной реализации PTLSim действует как фреймворк инструментирования и как атакующая ПВМ. PTLSim моделирует ядро современного суперскалярного процессора, совместимого с Intel x86, вместе с полной иерархией кэша, подсистемой памяти и поддерживающими устройствами. Он моделирует все значительные компоненты современного процессора, включая различные конвейерные стадии, функциональные блоки и набор регистров. PTLSim поддерживает полный набор инструкций x86-64 вместе со всеми расширениями (SSE, SSSE и т. д.). Более подробно о симуляторе можно прочесть в руководстве пользователя.

ISA Intel x86 является двухоперандным CISC ISA, однако PTLSim не симулирует инструкции этого набора напрямую. Вместо этого, каждая инструкция x86 сначала транслируется в серию RISC-подобных микроопераций (uops). Для дальнейшего улучшения эффективности PTLSim поддерживает локальный кэш, содержащий транслированную последовательность uop для ранее декодированных основных блоков программы.

Атака происходит следующим образом: криптографические примитивы получаются так же, как в разделе 6.3.1, и PTLSim расширяется для расшифровки инструкций после выборки их из памяти. Во время загрузки PTLSim инициализирует свои внутренние структуры данных и считывает двоичный файл PV. На стадии выборки PTLSim обращается к инструкциям по адресу в памяти, на который указывает его программный счетчик, называемый виртуальным программным счетчиком (Virtual Program Counter, VPC). Мы модифицировали стадию выборки для проверки последовательности инструкций (изображенных ранее в разделе 6.3.1) и поиска функции входа Strata. После того, как стадия выборки распознает функцию входа, симулятор получает ее аргументы, которые содержат стартовый адрес кода приложения. Симулятор затем отбрасывает свою текущую инструкцию, ждет очищения конвейера и приступает к выборке инструкций, начиная с полученного стартового адреса приложения. Симулятор расшифровывает инструкции, используя извлеченный ключ, перед декодированием их в составляющие uop-ы. Таким образом, Strata никогда не запускается и PTLSim может выбирать и симулировать инструкции P напрямую.

Как и в случае с предыдущем прототипом, охранники контрольных сумм не могут обеспечить адекватной защиты. Охранники проверяют только оригинальный код, который никогда не запускается. Мы можем анализировать P в локальном кэше PTLSim и модифицировать его так же по желанию.

7. Следствия атаки

В данном разделе обсуждается то, как методология замещения ВМ помогает анализу и реверс-инженерии приложений, защищенных ПВМ. Первый шаг любой атаки включает получение базового понимания приложения. Полезной информацией в понимании и анализе программы является граф потока управления (CFG). CFG, полученный из хранящегося на диске двоичного файла, содержит надмножество всех возможных путей выполнения программы. Получение CFG из двоичного кода при наличии статических защит может быть очень затратным в вычислительном плане [49]. По существу атакующие все больше фокусируются на методах получения CFG во время выполнения. Хотя CFG, полученные динамически, могут быть неполными, они все же дают атакующему полезную информацию о приложении. ПВМ предоставляет защиту, делая динамическое построение и анализ CFG очень ресурсо- и времяемкими задачами. Таким образом, для успешного реверсирования приложения защитная ПВМ должна быть замещена с помощью описанной в данной работе методологии.

Чтобы продемонстрировать данное утверждение, мы изучили динамические схемы реверс-инженерии, которые показали себя успешными при атаке программ [34, 50] и сравнили их эффективность при наличии защитной ПВМ. Как правило, данные методы включали инструментирование защищенного приложения для получения трассировки инструкций. Трассировка анализируется для определения отдельных базовых блоков. В результате выполняется анализ потока управления для получения динамического CFG приложения. Атакующий затем выполняет профилирование различных структур вроде базовых блоков и вызовов процедур, чтобы изолировать важные фрагменты кода. Например, Маду и пр. использовали частотность вызова базовых блоков и полустепень захода функций для определения функции ватермаркинга [34]. Подобным образом Удупа и пр. использовали профилирование ребер для определения и удаления ненужных ребер из статического CFG [50].

Чтобы показать, что защитная ПВМ должна быть замещена, мы исследовали применимость подобных методов профилирования в трех различных сценариях выполнения:

  • Приложение запускается без каких-либо защит (Не защищено).
  • Приложение запускается при наличии защитной ПВМ (Защищено).
  • Защищенное приложение было подвергнуто атаке замещения ПВМ, то есть приложение запущено под управлением скомпрометированной ПВМ (Атаковано).

Рисунок 6. Частота запусков для блоков приложения в трех сценариях выполнения (Не защищено, Защищено, Атаковано). Периодическое очищение и перетрансляция блоков кода приложения резко изменяет характеристики частоты выполнения. Под управлением ВМ блоки перестают запускаться с очень большой частотой (107), вместо этого существенно большее количество блоков запускается со средней частотой (103 и 105), вынуждая атакующего расширять пространство поиска. Замещение защитной ВМ восстанавливает исходные характеристики выполнения.

Чтобы облегчить сбор виртуализованных блоков кода приложения, приложение во всех трех сценариях было запущено под фреймворком инструментирования. Далее мы будем называть такие блоки динамическими. Динамические блоки определяются на основе их стартового виртуального адреса. Защитная ПВМ также была модифицирована, чтобы генерировать отображение между транслированными блоками кода приложения и теми, что находятся на диске. Эта модификация была выполнена только в целях данного исследования и обычно не будет доступна атакующему. Целью данного исследования было продемонстрировать, что методология замещения показывает исходные характеристики выполнения приложения, которые были обфусцированы ПВМ, что облегчает анализ и понимание программы.

Мы начали со сравнения генерации трассировки инструкций и анализа блоков в трех указанных сценариях. В ходе сравнения мы выяснили, что упаковка приложения вместе с защитной ПВМ делает анализ динамической трассировки и генерацию CFG гораздо труднее. Во-первых, периодическое очищение и перетрансляция кода приложения преумножают количество индивидуальных базовых блоков. В данном исследовании, использующем программу 256.bzip2, количество динамических блоков кода возросло с приблизительно 3.7 тысяч при незащищенном запуске до более чем 160 тысяч при использовании защитной ПВМ. Число различных ребер графа CFG также возросло с 6.4 до 290 тысяч. Хотя большое количество данных динамических блоков исходит из одних и тех же блоков приложения, ПВМ может использовать методы вроде полиморфизма кода, перераспределения инструкций и вставки бесполезного кода, заставляя блоки выглядеть по-разному [6]. Таким образом, атакующему пришлось бы выполнить анализ потока управления и данных для гораздо более масштабной трассировки инструкций. Использование атаки замещения позволяет атакующему получить исходные инструкции из приложения и значительно уменьшить пространство поиска.

Периодическое очищение и рандомизация кодового кэша ВМ изменяет множество динамических характеристик приложения вроде частоты запуска блоков и полустепеней исхода и захода узлов CFG. Рисунок 6 показывает частоту запуска динамических блоков в трех сценариях. Когда приложение запускается без защиты, мы наблюдаем, что некоторые блоки запускаются очень часто (порядка 107 раз). Атакующий сконцентрировался бы на реверс-инженерии этих блоков, поскольку они находятся на горячих путях приложения. Маду и пр. использовали такую эвристику для нахождения функции ватермаркинга [34]. Запуск приложения под управлением защитной ПВМ обфусцирует подобные блоки из-за периодического очищения и перетрансляции по разных адресам. Частота выполнения защищенного приложения показывает, что больше не наблюдается столь часто запускаемых блоков (то есть, никакие блоки не запускаются с частотой выше 107). Вместо этого появляется больше блоков кода, запускаемых с меньшими частотами (то есть, между 102 и 105). Например, 15% блоков запускаются по меньшей мере 104 раз при запуске под управлением защитной ПВМ, по сравнению с лишь 4% при незащищенном запуске. Таким образом, не существует очевидных блоков, с которых атакующий мог бы начать анализ. Чтобы найти горячие пути приложения, атакующему придется увеличить пространство поиска.

ПВМ также дает атакующему дезориентирующую информацию. В упомянутых ранее трех сценариях мы проранжировали все блоки кода на основе частоты их вызова. Ранг 1 был присвоен наиболее часто вызываемым блокам. Таблица 2 показывает десятку наиболее часто вызываемых блоков при запуске приложения без защиты. Обычно атакующий сначала фокусируется на анализе таких блоков. Столбец 2 отображает ранг этих блоков, когда приложение запускается под управлением ПВМ. Например, наиболее часто запускаемые блоки приложения при незащищенном запуске появляются на 121 позиции, когда приложение запущено под управлением защитной ПВМ. Таким образом, ПВМ может переупорядочивать блоки в плане частотности вызова. Мы наблюдали подобное переупорядочвивание и в том случае, когда ранжирование проводилось на основе полустепеней захода блоков кода. Как показано четвертом столбце таблицы 2, замещение защитной ПВМ восстанавливает исходные динамические свойства приложения. Таблица 3 показывает список десяти наиболее часто вызываемых блоков при запуске под защитой ПВМ, вместе с их соответствующими рангами для незащищенного запуска. Итак, данное исследование показывает, что при наличии виртуализации частотный анализ бесполезен для атакующего. Критичная информация (в данном случае – основанный на частотности ранг) рассеивается защитной ПВМ, усложняя для атакующего ее поиск и эксплуатацию.

Адрес приложенияРанг (Не защищено)Ранг (Защищено)Ранг (Атаковано)
0x804883011211
0x804ac3c2452
0x804ae1b3133
0x80507d4494
0x80507d951735
0x80507c06186
0x80507fa7297
0x805082c83518
0x805081091399
0x804a7501077910

Таблица 2. Исходные адреса 10 наиболее часто запускаемых блоков приложения при незащищенном запуске с их соответствующими рангами при запуске под управлением защитной ПВМ. Стандартное отклонение для данных блоков при защищенном запуске достигает 239, что свидетельствует об очень высокой степени разброса. Значит, для нахождения этих блоков понадобится больше усилий. Успешная атака замещения восстанавливает ранги частотности.

Адрес приложенияРанг (Не защищено)Ранг (Защищено)Ранг (Атаковано)
0x804bec01621162
0x804ae2117217
0x804ac7436336
0x804bed321421
0x804a7a042542
0x804abaf1646164
0x804a81a88788
0x804a99b1268126
0x80507d4494
0x804a7ca631063

Таблица 3. Исходные адреса десяти наиболее часто вызываемых блоков при запуске приложения под защитой ПВМ вместе с их соответствующими рангами при незащищенном запуске и при атаке замещения.

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

Итак, ПВМ может предоставлять сильную защиту против динамического анализа программ. ПВМ может серьезно увеличить пространство поиска для атакующего, обеспечивать его дезориентирующей информацией и постоянно менять положение критичного кода, чрезвычайно затрудняя проведение динамического анализа. Существует исследование, целью которого было реверсировать приложения, защищенные ПВМ, определив код, относящийся к ВМ в ходе трассировки выполнения [15, 44]. Однако, подобные методологии обычно включают комплексный анализ информации трассировки и нацелены на приложения, которые обычно малы в размерах (несколько сотен инструкций, что характерно, например, для вредоносных программ). Данные методологии не могут дать удовлетворительные результаты применительно к приложениям, защищенным ВМ, поскольку не могут обрабатывать сложные потоки данных и управления, обычно связанные с крупными приложениями. Поэтому методология атаки замещения является ключевой для успешной реверс-инженерии приложений, защищенных ПВМ. Когда защитная ПВМ замещена, приложение может быть проанализировано, а его истинные характеристики беспрепятственно изучены.

Ссылки

[1] ANCKAERT, B., JAKUBOWSKI, M., AND VENKATESAN, R. Proteus: virtualization for diversified tamper-resistance. In DRM ’06: Proceedings of the ACM Workshop on Digital Rights Management (New York, NY, USA, 2006), ACM Press, pp. 47–58.
[2] APPLE. Mac OS X ABI Mach-o file format reference, 2009.
[3] BELLARD, F. QEMU, a fast and portable dynamic translator. In ATEC’05: Proceedings of the USENIX Annual Technical Conference (Berkeley, CA, USA, 2005), USENIX Association, pp. 41–41.
[4] BILLET, O., GILBERT, H., AND ECH-CHATBI, C. Cryptanalysis of a white box AES implementation. In Selected Areas in Cryptography (Hiedelberg, 2004), Springer-Verlag, pp. 227–240.
[5] BIONDI, P., AND FABRICE, D. Silver needle in the skype. In Black Hat Europe (Amsterdam, the Netherlands, 2006).
[6] BORELLO, J.-M., AND M` E, L. Code obfuscation techniques for metamorphic viruses. Journal in Computer Virology 4 (2008), 211–220. 10.1007/s11416-008-0084-2.
[7] BRUENING, D., GARNETT, T., AND AMARASINGHE, S. An infrastructure for adaptive dynamic optimization. In CGO ’03: Proceedings of the IEEE/ACM International Symposium on Code Generation and Optimization (Los Alamitos, CA, USA, 2003), IEEE Computer Society, pp. 265–275.
[8] CABALLERO, J., JOHNSON, N. M., MCCAMANT, S., AND SONG, D. Binary code extraction and interface identification for security applications. In NDSS ’10: Proceedings of the Network and Distributed System Security Symposium (2010), The Internet Society.
[9] CAPPAERT, J., PRENEEL, B., ANCKAERT, B., MADOU, M., AND DE BOSSCHERE, K. Towards tamper resistant code encryption: practice and experience. In ISPEC’08: Proceedings of the 4th International Conference on Information Security Practice and Experience (Berlin, Heidelberg, 2008), Springer-Verlag, pp. 86–100.
[10] CHANG, H., AND ATALLAH, M. Protecting software code by guards. In Proceedings of the ACM Workshop on Security and Privacy in Digital Rights Management (2000), pp. 160–175.
[11] CHEN, X., GARFINKEL, T., LEWIS, E. C., SUBRAHMANYAM, P., WALDSPURGER, C. A., BONEH, D., DWOSKIN, J., AND PORTS, D. R. Overshadow: a virtualization-based approach to retrofitting protection in commodity operating systems. In ASPLOS XIII: Proceedings of the 13th International Conference on Architectural Support for Programming Languages and Operating Systems (New York, NY, USA, 2008), ACM Press, pp. 2–13.
[12] CHOW, S., EISEN, P. A., JOHNSON, H., AND OORSCHOT, P. C. V. White-box cryptography and an AES implementation. In SAC ’02: Revised Papers from the 9th Annual International Workshop on Selected Areas in Cryptography (London, UK, 2003), Springer-Verlag, pp. 250–270.
[13] COLLBERG, C., THOMBORSON, C., AND LOW, D. A taxonomy of obfuscating transformations. University of Auckland Technical Report (1997), 170.
[14] COLLBERG, C., THOMBORSON, C., AND LOW, D. Manufacturing cheap, resilient and stealthy opaque constructs. In POPL’98:Proceedings of the 25th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (New York, NY, USA, 1998), ACM Press, pp. 184–196.
[15] COOGAN, K., LU, G., AND DEBRAY, S. Deobfuscating virtualization-obfuscated software: A semantics-based approach. CCS ’11: Proceedings of the ACM Conference on Computer and Communications Security (October 2011). To appear.
[16] DE BUS, B., DE SUTTER, B., VAN PUT, L., CHANET, D., AND DE BOSSCHERE, K. Link-time optimization of ARM binaries. In LCTES’04: Proceedings of the 2004 ACM SIGPLAN/SIGBED Conference on Languages, Compilers, and Tools for Embedded Systems (Washington D.C., U.S.A, 7 2004), ACM Press, pp. 211–220.
[17] DEHNERT, J. C., GRANT, B. K., BANNING, J. P., JOHNSON, R., KISTLER, T., KLAIBER, A., AND MATTSON, J. The Transmeta code morphing software: using speculation, recovery, and adaptive retranslation to address real-life challenges. In CGO’03: Proceedings of the International Symposium on Code Generation and Optimization (Washington, DC, USA, 2003), IEEE Computer Society, pp. 15–24.
[18] EAGLE, C. The IDA Pro Book: The Unofficial Guide to the World’s Most Popular Disassembler. No Starch Press, San Francisco, CA, USA, 2008.
[19] GARFINKEL, T., PFAFF, B., CHOW, J., ROSENBLUM, M., AND BONEH, D. Terra: a virtual machine-based platform for trusted computing. In SOSP’03: Proceedings of the 19th ACM Symposium on Op- erating Systems Principles (New York, NY, USA, 2003), ACM Press, pp. 193–206.
[20] GHOSH, S., HISER, J. D., AND DAVIDSON, J. W. A secure and robust approach to software tamper resistance. In IH ’10: Proceedings of the 12th International Conference on Information Hiding (Berlin, Heidelberg, 2010), Springer-Verlag, pp. 33–47.
[21] GR ¨ OBERT, F., WILLEMS, C., AND HOLZ, T. Automatic identification of cryptographic primitives in binary programs. In RAID ’11: Proceedings of the 14th International Symposium on Recent Advances in Intrusion Detection (London, UK, 2011), Springer-Verlag, pp. 45–65.
[22] HALDERMAN, J. A., SCHOEN, S. D., HENINGER, N., CLARKSON, W., PAUL, W., CALANDRINO, J. A., FELDMAN, A. J., APPELBAUM, J., AND FELTEN, E. W. Lest we remember: cold-boot attacks on encryption keys, May 2009.
[23] HISER, J. D., COLEMAN, C. L., CO, M., AND DAVIDSON, J. W. Meds: The memory error detection system. In ESSoS ’09: Proceedings of the 1st International Symposium on Engineering Secure Software and Systems (Berlin, Heidelberg, 2009), Springer-Verlag, pp. 164–179.
[24] HISER, J. D., WILLIAMS, D., FILIPI, A., DAVIDSON, J. W., AND CHILDERS, B. R. Evaluating fragment construction policies for SDT systems. In VEE ’06: Proceedings of the 2nd International Conference on Virtual Execution Environments (New York, NY, USA, 2006), ACM Press, pp. 122–132.
[25] HISER, J. D., WILLIAMS, D., HU, W., DAVIDSON, J. W., MARS, J., AND CHILDERS, B. R. Evaluating indirect branch handling mechanisms in software dynamic translation systems. In CGO’07: Proceedings of the International Symposium on Code Generation and Optimization (Washington, DC, USA, 2007), IEEE Computer Society, pp. 61–73.
[26] HORSPOOL, R. N., AND MAROVAC, N. An approach to the problem of detranslation of computer programs. Computer Journal 23, 3 (1980), 223–229.
[27] HU, W., HISER, J. D., WILLIAMS, D., FILIPI, A., DAVIDSON, J. W., EVANS, D., KNIGHT, J. C., NGUYEN-TUONG, A., AND ROWANHILL, J. Secure and practical defense against code-injection attacks using software dynamic translation. In Proceedings of the 2nd International Conference on Virtual Execution Environments (New York, NY, USA, 2006), ACM Press, pp. 2–12.
[28] KANZAKI, Y., MONDEN, A., NAKAMURA, M., AND MATSUMOTO, K.-I. Exploiting self-modification mechanism for program protection. In COMPSAC’03: Proceedings of the 27th Annual International Conference on Computer Software and Applications (Washington, DC, USA, 2003), IEEE Computer Society, pp. 170–176.
[29] KC, G. S., KEROMYTIS, A. D., AND PREVELAKIS, V. Countering code-injection attacks with instruction-set randomization. In CCS ’03: Proceedings of the 10th ACM Conference on Computer and Communications Security (New York, NY, USA, 2003), ACM Press, pp. 272–280.
[30] KIRIANSKY, V., BRUENING, D., AND AMARASINGHE, S. P. Secure execution via program shepherding. In USENIX’02: Proceedings of the 11th USENIX Security Symposium (Berkeley, CA, USA, 2002), USENIX Association, pp. 191–206.
[31] LEDER, F., MARTINI, P., AND WICHMANN, A. Finding and extracting crypto routines from malware. In Proceedings of the IEEE 28th International Performance Computing and Communications Conference (IPCCC) (Washington, DC,USA, December 2009), IEEE, pp. 394 –401.
[32] LINN, C., AND DEBRAY, S. Obfuscation of executable code to improve resistance to static disassembly. In CCS’03: Proceedings of the 10th ACM Conference on Computer and Communications Security (CCS) (Washington D.C., U.S.A, 2003), ACM Press, pp. 290–299.
[33] LUK, C.-K., COHN, R., MUTH, R., PATIL, H., KLAUSER, A., LOWNEY, G., WALLACE, S., REDDI, V. J., AND HAZELWOOD, K. Pin: building customized program analysis tools with dynamic instrumentation. In PLDI ’05: Proceedings of the 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation (New York, NY, USA, 2005), ACM Press, pp. 190–200.
[34] MADOU, M., ANCKAERT, B., DE SUTTER, B., AND DE BOSSCHERE, K. Hybrid static-dynamic attacks against software protection mechanisms. In DRM ’05: Proceedings of the 5th ACM workshop on Digital Rights Management (New York, NY, USA, 2005), ACMPress, pp. 75–82.
[35] MADOU, M., ANCKAERT, B., MOSELEY, P., DEBRAY, S., DE SUTTER, B., AND DE BOSSCHERE, K. Software protection through dy- namic code mutation. In The 6th International Workshop on Information Security Applications (WISA 2005) (August 2005), vol. LNCS, Springer Verlag.
[36] OREANS TECHNOLOGIES. Themida. http://oreans.com/ themida.php, 2009.
[37] OREONS TECHNOLOGY. Codevirtualizer. http://oreans.com/ codevirtualizer.php, 2009.
[38] PAYER, M., AND GROSS, T. R. Fine-grained user-space security through virtualization. In VEE’11: Proceedings of the 7th ACM SIG- PLAN/SIGOPS International Conference on Virtual Execution Environments (New York, NY, USA, 2011), ACM Press, pp. 157–168.
[39] POPEK, G. J., AND GOLDBERG, R. P. Formal requirements for virtualizable third generation architectures. Communications of the ACM 17 (July 1974), 412–421.
[40] PORTOKALIDIS, G., AND KEROMYTIS, A. D. Fast and practical instruction-set randomization for commodity systems. In ACSAC’10: Proceedings of the 26th Annual Computer Security Applications Conference (New York, NY, USA, 2010), ACM Press, pp. 41–48.
[41] ROLLES, R. Unpacking virtualization obfuscators. In WOOT’09: Proceedings of the 3rd USENIX Conference on Offensive Technologies (Berkeley, CA, USA, 2009), USENIX Association, pp. 1–10.
[42] SCOTT, K., AND DAVIDSON, J. Safe virtual execution using software dynamic translation. In ACSAC ’02: Proceedings of the 18th Annual Computer Security Applications Conference (Los Alamitos, CA, USA, 2002), IEEE Computer Society, p. 209.
[43] SCOTT, K., KUMAR, N., VELUSAMY, S., CHILDERS, B., DAVIDSON, J. W., AND SOFFA, M. L. Retargetable and reconfigurable soft- ware dynamic translation. In CGO ’03: Proceedings of the International Symposium on Code Generation and Optimization (Washington D.C., U.S.A, 2003), IEEE Computer Society, pp. 36–47.
[44] SHARIF, M., LANZI, A., GIFFIN, J., AND LEE, W. Automatic reverse engineering of malware emulators. In SP’07: Proceedings of the 2009 30th IEEE Symposium on Security and Privacy (Washington, DC, USA, 2009), IEEE Computer Society, pp. 94–109.
[45] SITES, R. L., CHERNOFF, A., KIRK, M. B., MARKS, M. P., AND ROBINSON, S. G. Binary translation. Communcations of the ACM 36 (February 1993), 69–81.
[46] SMITH, J., AND NAIR, R. Virtual Machines: Versatile Platforms for Systems and Processes (The Morgan Kaufmann Series in Computer Architecture and Design). Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2005.
[47] SRIDHAR, S., SHAPIRO, J. S., NORTHUP, E., AND BUNGALE, P. P. HDTrans: an open source, low-level dynamic instrumentation system. In VEE’06: Proceedings of the 2nd International Conference on Virtual Execution Environments (New York, NY, USA, 2006), ACM, pp. 175–185.
[48] STARFORCE. Starforce crypto. http://www.star-force.com/, 2008.
[49] SZOR, P. The Art of Computer Virus Research and Defense. Addison-Wesley Professional, 2005.
[50] UDUPA, S., DEBRAY, S., AND MADOU, M. Deobfuscation: reverse engineering obfuscated code. In WCRE ’05: Proceedings of the International Working Conference on Reverse Engineering (Los Alamitos, CA, USA, Nov. 2005), vol. 0, IEEE Computer Society, pp. 45–54.
[51] VMPROTECT SOFTWARE. VMProtect. http://vmpsoft.com/, 2008.
[52] WANG, C., DAVIDSON, J., HILL, J., AND KNIGHT, J. Protection of software-based survivability mechanisms. In DSN’01: Proceedings of the International Conference on Dependable Systems and Networks (Goteborg, Sweden, 2001), IEEE Computer Society, pp. 193–202.
[53] WANG, C., HILL, J., KNIGHT, J., AND DAVIDSON, J. Software tamper resistance: Obstructing static analysis of programs. Tech. rep., Charlottesville, VA, USA, 2000.
[54] YOUNGDALE, E. Kernel korner: The ELF object file format: Introduction. Linux Journal 1995 (April 1995).
[55] YOURST, M. PTLsim: A cycle accurate full system x86-64 microarchitectural simulator. In ISPASS’07: Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software (2007), IEEE, pp. 23–34.
[56] ZAMBRENO, J., CHOUDHARY, A., SIMHA, R., NARAHARI, B., AND MEMON, N. SAFE-OPS: An approach to embedded software security. Transactions on Embedded Computing Systems 4, 1 (2005), 189–210. 

Цифровые следы - ваша слабость, и хакеры это знают.

Подпишитесь и узнайте, как их замести!