18.07.2012

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

image

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

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

Краткий обзор

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

1. Введение

Виртуализация уровня процесса – это мощный и универсальный метод, который решает широкий спектр системных задач. Он все больше используется для решений в области защиты ПО (предоставляет механизмы, которые защищают ПО от реверс-инженерии и несанкционированной модификации) [1,20]. Для защиты ПО с помощью виртуализации уровня процесса было разработано множество коммерческих продуктов вроде VMProtect [51], Code Virtualizer [37] и Themida [36]. Большое количество компьютерных игр используют систему виртуализации StarForce для защиты от копирования и реверс-инженерии [48]. Недавно злоумышленники использовали этот метод защиты для разработки передовой вредоносной программы, которая может обходить существующие системы обнаружения [41]. Существует несколько причин, по которым ПВМ популярны среди исследователей безопасности для улучшения защиты ПО.
  • Виртуализация уровня процесса предоставляет платформу для повышенной безопасности во время выполнения. Атакующие все больше используют для атаки на ПО динамические методы (например, запуск приложений в отладчике или симуляторе) [5]. ПВМ позволяют отслеживать и проверять код во время его выполнения, что делает их превосходным инструментом для разработки схем динамической защиты [38]. ПВМ также могут изменять код по ходу его выполнения (например, менять положение кода и данных, заменять инструкции семантически эквивалентными и т. д.), затрудняя итеративные атаки [20].
  • Полезно иметь методы защиты, тесно интегрированные с приложением, сохраняя раздельность реализации. Этот модульный подход облегчает тестирование и отладку системы и позволяет вводить новые средства защиты в старые системы без необходимости в их модификации и перекомпиляции. ПВМ позволяет получить такую гибкую возможность.
  • Схемы статической защиты можно усилить, если приложение запущено под ПВМ. Например, шифрование – это полезная техника, препятствующая статическому анализу программ. Так как шифрованный код нельзя напрямую запустить на обычных процессорах, уязвимым местом становится программная расшифровка кода приложения. Например, схемы, которые расшифровывают приложение целиком, уязвимы к динамическому анализу [5], тогда как расшифровка отдельных фрагментов (например, функций) страдает от больших накладных расходов [9,29]. Запуск же шифрованных приложений под управлением ПВМ показал лучшее соотношение производительность/безопасность [27]. ПВМ подвержены меньшим утечкам информации, добавляя небольшие накладные расходы [20]. Другой пример – улучшение надежности проверок целостности, находящихся в приложении. При запуске под ПВМ эти проверки целостности никогда не запускаются с их исходного положения, вместо этого они могут вызываться из случайных мест памяти [20]. Эта рандомизация усложняет атакующему поиск и отключение проверок.

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

  • Данная работа представляет общую методологию атаки, названную атакой замещения, которая нацелена на приложения, использующие виртуализацию уровня процесса. Данная стратегия атаки основана на предположении, что ПВМ недостаточно привязана к среде выполнения и в ходе выполнения может быть замещена атакующим. Используя атаку замещения, атакующий может эффективно удалять любой метод динамической защиты, приведенный в действие виртуализацией уровня процесса, и приступать к анализу приложения во время его выполнения. Некоторые значения данной работы перечислены ниже.
  • Настоящий документ описывает атаки замещения – новую методологию атак, нацеленную на виртуализованные приложения (например, приложения, запускающиеся при посредничестве виртуальной машины уровня процесса), которая пытается сделать защитную машину неэффективной. Атака замещения может быть использована против любого приложения, которое запущено посредством виртуальной машины уровня процесса. Цель атаки замещения – обойти динамическую защиту ПВМ и облегчить тем самым динамический анализ.
  • Наш анализ показывает, что существующие схемы защиты вроде охранников контрольных сумм (предложенных Чангом и пр. [10]) не могут адекватно защищать виртуализованные приложения от атак данного класса.
  • Мы представляем исчерпывающее, состоящее из двух частей исследование, описывающее методологию атак замещения. Первая часть этого исследования описывает создание защищенного виртуализованного приложения, а далее показывается, как атакующий может с легкостью заменить защищающую ПВМ. Мы опишем два прототипа атаки замещения на основе легко доступных, свободных инструментов. Первый включает замещение защищающей ПВМ атакующей ПВМ (например, ПВМ без каких-либо защит). Второй прототип включает запуск приложения в модифицированном симуляторе, который обходит защищающую ПВМ и симулирует приложение напрямую. Эти примеры демонстрируют осуществимость и эффективность атак замещения на нетривиальные приложения.
  • Затем, во второй части нашего исследования, мы обсудим следствия атаки замещения. Вторая часть включает исследование динамических атак на незащищенные приложения, приложения, защищенные ПВМ, и приложения, подвергнутые атаке замещения. Наши результаты показывают, что атака замещения делает приложение совершенно уязвимым к анализу во время выполнения и последующей несанкционированной модификации.
  • Данное исследование демонстрирует, что виртуализация уровня процесса на текущий момент не может предоставить адекватную защиту для приложений. Чтобы полностью реализовать защитные возможности ПВМ, необходимы методы, которые тесно связывают ПВМ с защищаемыми приложениями.

Остаток данного документа организован следующим образом. Раздел 2 дает общие сведения о виртуализации уровня процесса. В разделе 3 описана модель защиты виртуализованного приложения. Раздел 4 описывает цели и возможности атакующего. Раздел 5 дает высокоуровневый обзор динамической атаки замещения. Раздел 6 описывает подробности механизмов защиты и то, как динамическая атака обходит их, чтобы сделать приложение уязвимым. Раздел 7 описывает влияние данной методологии на реверс-инженерию. В разделе 8 рассматриваются некоторые требования для проведения успешной атаки. Раздел 9 описывает некоторые из предыдущих работ в области защиты ПО от несанкционированной модификации и, наконец, в разделе 10 представлены заключения.

2. Виртуализация уровня процесса

Приложение – это последовательность инструкций, которая запускается на определенной компьютерной системе. Виртуализация – это программный уровень, который инкапсулирует приложение и ассоциированную с ним платформу от нативной операционной системы, позволяя приложению запускаться на различных платформах. Виртуализация использовалась для преодоления барьеров, поставленных новым железом [17, 39], или для улучшения безопасности [7, 19, 30]. Формально виртуализация включает построение изоморфизма, который отображает виртуальную систему (называемую гостевой) на нативную систему (называемую хостовой). Виртуальная машина отвечает за выполнение приложения, скомпилированного для гостевой системе (гостевого приложения) на хостовой системе. Некоторые необходимые задачи виртуализации включают преобразование инструкций гостевого приложения для запуска на хостовой системе и содействие в обмене информацией между приложением и хостовой платформой. Виртуализация может выоплняться на системном уровне (операционной системы) или на уровне процесса (одного приложения).

 

Рисунок 1. Высокоуровневый обзор виртуализации уровня процесса. Гостевое приложение запускается при посредничестве ВМ уровня процесса, благодаря чему выглядит для используемой платформы как нативный процесс.

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

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

3 Модель защиты программ

Данный раздел описывает важность методов защиты программ и иллюстрирует общую модель защиты в контексте виртуализованного приложения.

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

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

Статические методы защиты защищают находящийся на диске двоичный файл от анализа и модификации. За последние несколько лет было предложено множество мощных методов статической защиты [13, 14, 32, 52]. Например, непрозрачные предикаты являются распространенным методом, помогающим при обфускации программ [14]. Непрозрачный предикат имеет два возможных исхода: true/false. Непрозрачность данных предикатов кроется в том факте, что реверс-инженеру трудно найти их значения из находящегося на диске двоичного файла с помощью статических методов. Данные конструкции используются в обфускации информации потока управления. Шифрование кода – еще один полезный метод противодействия статическому анализу [9]. Рисунок 2 иллюстрирует создание виртуализованного приложения, которое защищено подобными методами. Во время создания приложения защитник упаковывает защищающую ВМ с гостевым приложением P вместе с ее библиотеками с помощью инструмента линковки. Данный инструмент затем применяет разнообразные схемы защиты к виртуализованному приложению PV. После применения защитных методов инструмент выдает защищенный файл, как показано на рисунке 2.

Статические методы сами по себе не могут обеспечить адекватную защиту. Как мы опишем в разделе 4, атакующие все чаще анализируют программы во время выполнения. Чтобы защититься от таких атак, было предложено несколько решений, которые включают изменение программного кода в ходе выполнения, что перемещает цель атаки (напрмер, динамическая перезапись инструкций [28] и скриптов модификации [35]). Другое решение включает упаковку вместе с приложением ВМ уровня процесса, которая защищает приложение во время выполнения и от общих атак [1, 20, 51], как показано справа на рисунке 2. Приложение модифицируется так, что при старте программы происходит инициализация ПВМ и передача ей управления. Затем приложение запускается под управлением ПВМ, а не напрямую на нативной платформе. Код для вызова ПВМ хранится в инициализирующей процедуре виртуализованного приложения. Существуют различные методы создания таких инициализирующих процедур (например, в ELF-файлах эти процедуры могут быть помещены в секцию .init [54]). Формат двоичного файла MacOS, Mach-O, содержит раздел DATA для размещения конструкторов классов [2]).

Способность ПВМ отслеживать код гостевого приложения делает ее подходящей платформой для динамической защиты. Поскольку ПВМ виртуализует гостевое приложение, она может делать проверять код на предмет модификации и обфусцировать код. ПВМ можно использовать для применения схем защиты при каждом запуске, создавая разные поверхности атаки с каждым стартом приложения [20]. Подобные схемы усложняют запуск автоматизированных атак на приложение. ПВМ увеличивает и эффективность существующих защитных методов. Например, схемы шифрования кода часто уязвимы из-за грубых уровней дешифрования в ходе работы приложения [5]. ПВМ помогает выполнять дешифрование кода по требованию, в нужное время [20]. Расшифровываются только те инструкции приложения, которые планируется выполнить. После выполнения эти инструкции могут быть зашифрованы опять. Таким образом, приложение не будет расшифровано полностью ни в какой момент выполнения.

4 Модель атаки

После развертывания приложение может быть подвержено разнообразным атакам. Атакующий определяется как сущность, пытающаяся повлиять на функциональность ПО или завладеть имеющейся в нем критичной информацией. Для достижения своей цели атакующему приходется сначала проанализировать программу и получить определенное понимание того, как она работает. С помощью этих знаний атакующий может затем попытаться отключить схему защиты.

Достижению целей атакующего способствуют недавние достижения в технологии реверс-инженерии, которые привели к появлению мощных инструментов анализа программ. Существует два типа инструментов анализа: инструменты для статического анализа, которые собирают информацию о программе путем изучения ее двоичного файла, не запуская ее (например, дизассемблеры и декомпиляторы), и инструменты для динамического анализа, которые собирают информацию из запущенной программы (например, отладчики, симуляторы, фреймворки для динамического анализа и эмуляторы [18, 34, 55]). Разработка и доступность динамических инструментов в частности усилили способности атакующего, поскольку многие методы статической защиты поддаются анализу во время выполнения [5]. С помощью этих инструментов атакующий пытается получить информацию, необходимую для выполнения задуманной атаки. Атака, описываемая в следующем разделе, делает возможным использование таких инструментов на приложениях, защищенных ПВМ.

ТерминОбозначениеОпределение
Гостевое приложениеPЗащищаемая программа
Защищающая ПВМ (PVM)VВиртуальная машина уровня процесса, которая настроена на применение разнообразных защитных методов во время выполнения.
Виртуализованное приложениеPVПриложение, состоящее из P, упакованной вместе с защищающей ПВМ
Функция входаEPФункция в коде ВМ, которая инициирует процесс виртуализации приложения. Для успешного выполнения атаки атакующему нужно найти эту функцию.
Атакующая ПВМMВМ уровня процесса, которая помогает атакующему в анализе P.
Фреймворк интроспекции кодаCIFФреймворк интроспекции, способный отслеживать и инструментировать выполняемый код.

Таблица 1. Глоссарий используемой в данном документе терминологии.

Терминология, используемая в данном документе, сведена в таблицу 1.

5. Атака замещения

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

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

Чтобы подготовить успешную атаку замещения против защищаемого ПВМ приложения, необходимо выполнить определенные требования.

  • Атакующий должен быть способен найти функцию входа (EP) защищающей ПВМ в PV. Функция входа определяется как функция ПВМ, которая инициирует виртуализацию программы. Функция входа часто принимает в качестве аргумента адрес начала кода P.
  • Атакующий должен быть осведомлен об архитектуре набора команд гостевого приложения (ISA). Код гостевого приложения P обычно скрывается с помощью секретной ISA или шифрования. Чтобы анализировать и выполнять P после отключения ПВМ, атакующий должен знать ISA, что означает анализ и понимание секретной ISA или извлечение ключа из двоичного файла.

В разделе 8 данные требования обсуждаются более подробно, включая эвристику, которую атакующий может использовать для получения требуемой информации.

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

Рисунок 3 иллюстрирует второй этап атаки на PV. На рисунке 3(a) атакующий вызвает PV под фреймворком интроспекции кода (CIF), наблюдая за инструкциями по мере их запуска. Хорошо известные примеры CIF включают Pin [33] и QEMU [3]. Атакующий модифицирует CIF для нахождения и вызова функции входа защищающей ПВМ.

Процедура инициализации затем затем переходит к подготовке внутренних структур ПВМ. Когда вызывается функция входа защищающей ПВМ, CIF перехватывает этот вызов и извлекает стартовый адрес, изображенный на рисунке 3(b). Подробности процедуры определения функции входа ПВМ даны в разделе 8.1.

Далее CIF приступает к загрузке и инициализации атакующей ПВМ, показанной на рисунке 3(с). Затем CIF вызывает данную атакующую ПВМ со стартовым адресом P, который был извлечен из первоначального вызова.

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

В разделе 6 мы опишем две демонстрационных реализации, которые используют только что описанный подход. Первый прототип использует популярный CIF, Pin, для замещения защищающей ПВМ атакующей ПВМ и запуска гостевого приложения. Второй использует модифицированный архитектурный симулятор, который выполняет интроспекцию кода, а также виртуализацию.

Ссылки

[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. 

или введите имя

CAPTCHA