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


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

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

8. Обсуждение

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

8.1 Определение функции входа ПВМ

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

Например, как мы отмечали в разделе 6.1, до инициализации ПВМ сохраняет текущий контекст приложения. После инициализации ПВМ восстанавливает его. На 32-битных платформах Intel x86 инструкции pusha и pushf часто используются динамическими трансляторами для сохранения состояния. В разделе 6.3.1 была показана последовательность инструкций, используемая Strata для сохранения состояния, которая содержит эти две инструкции. Dynamo-RIO и HDTrans также используют эти инструкции для сохранения значений регистров и флагов до начала трансляции2. Изучение бенчмарков C из набора SPEC CPU2000, скомпилированных со стандартными флагами, обнаружило, что ни один из двоичных файлов приложения не содержит этих инструкций. Поэтому наличие этих инструкций может помочь противнику в определении потенциальных точек входа в ПВМ. Из-за уникальных действий ПВМ простого просмотра этих потенциальных точек входа может оказаться достаточно, чтобы определить настоящую точку входа.

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

8.2 Определение ISA гостевого приложения

Другое требование для использования атаки замещения - определение ISA гостевого приложения, P. Обычно код P защищен сокрытием деталей реализации [1, 51] или шифрованием [20]. Атакующему приходится анализировать двоичный файл на диске для получения необходимой для определения ISA информации, которая затем используется для настройки атакующей ПВМ. В данном разделе обсуждаются некоторые эвристики, которые атакующий может использовать для получения подходящей информации.

Роллс и пр. провели исчерпывающую работу по исследованию ISA, используемыми инструментами обфускации вроде VMProtect и Themida [41]. Семантика ISA не публикуется, обеспечивая безопасность через сокрытие. Во время применения защитных средств инструкции P трансформируются в специальный ISA, выбираемый из набора шаблонных ISA, который затем интерпретируется во время выполнения ПВМ, специально разработанной для данного ISA. Эти ISA RISC-подобные, в них недостает многих сложных возможностей традиционных ISA вроде Intel x86. Поскольку эти инструменты получают итоговый ISA из шаблона, последовательности инструкций двух различных защищенных двоичных файлов будут иметь много схожестей. Данный факт делает более разрешимой задачу анализа синтаксиса и семантики. Кроме того, часть набора инструкций x86 вроде инструкций SIMD не виртуализуются VMProtect.

Гостевой ISA также может быть защищен шифрованием. Анализ и реверс-инженерия криптографических ключей и процедур, проводимые вручную, могут быть трудной задачей. Недавно исследователи разработали методы, которые помогают автоматическому определению и извлечению криптографических процедур. Грёберт и пр. представили новый подход к определению криптографических процедур и ключей зашифрованной программы [21]. Их методы включают профилирование приложения и применение эвристик для обнаружения криптографических операций. Некоторые из предложенных авторами эвристик включают чрезмерное использование арифметических функций, циклов и исследование потока данных между промежуточными переменными в течение многих запусков. Данный метод может определять распространенные алгоритмы шифрования вроде AES и DES и извлекать ключи.

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

Управление ключами дешифрования также является проблемой для защитной ПВМ. Атакующий может использовать методы динамического анализа для извлечения ключа дешифрования. Халдерман и пр. выяснили, что современные DRAM значительное время удерживают свое содержимое, и атакующий может находить и эксплуатировать эти ключи для анализа зашифрованных данных [22]. Skype – популярная VoIP-программа, которая использует шифрование как средство затруднения статического анализа. Бионди и пр. смогли расшифровать код Skype путем получения его ключа шифрования из памяти [5]. Для улучшения управления клчами в основанных на шифровании системах были предложены методы вроде криптографии белого ящика [12]. Однако, впоследствии исследователи разработали решения для извлечения ключа из подобных систем [4]. Как только ключ становится доступен, расшифровка шифрованного ISA становится простой задачей, независимо от стойкости алгоритма шифрования.

Итак, сокрытие ISA не может адекватно защитить гостевое приложение от анализа. Предыдущие работы показали, что атакующий может анализировать подобные ISA за разумное время и ценой разумных усилий [5, 41]. Как только ISA становится известен, атакующий может успешно заместить защитную ПВМ.

9. Работы, связанные с данной

Программные системы все больше используются для управления критическими сиситемами. Поэтому в области безопасности программ делается множество исследований. Для противодействия статическому анализу приложений было разработано немало методов. Линн и пр. описали новые методы защиты от дизассемблирования кода в [32]. Вонг и пр. предложили использовать ненаправленные ветви для обфускации потока управления приложением [53]. Чанг и пр. исследовали идею использования сети самопроверяющего контрольные суммы кода, называемого охранником, для поддержки целостности [10]. Коллберг и пр. изучали различные методы сокрытия кода [13, 14]. Тем не менее, большинство этих методов можно преодолеть, используя динамический анализ. Исследователи также исследовали методы сокрытия кода во время выполнения, включая использование самомодифицируемого кода для обфускации инструкций [28]. Шифрование кода – также полезная техника для противодействия анализу. Код может расшифровываться аппаратно (то есть, защищенным сопроцессором) [56], который может значительно увеличить стоимость решения. Программное дешифрование – менее дорогостоящее решение [9], но более уязвимо к динамическому анализу.

Виртуализация программ – активная область исследований с приложениями в безопасности программ как на системном, так и на процессном уровнях. Виртуальные машины уровня процесса вроде Pin [33], Strata [43] и HDTrans [47] использовали оптимизацию кода [7], инструментирование [33] и, в особенности, безопасность [20, 23, 40].

Исследователи использовали виртуальные машины для улучшения сопротивляемости кода к анализу, чтобы улучшить безопасность программ [1, 20], а с более позднего времени и чтобы скрывать вредоносное ПО вроде вирусов, троянов и т. д. Недавно были созданы коммерческие ПВМ вроде VMProtect [51], Themida [36] и Code Virtualizer [37] с особым упором на безопасность программ. Данные инструменты следуют общепринятой модели интерпретации [46] и используют закрытый ISA для защиты приложений от анализа.

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

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

Виртуальные машины уровня системы также использовались для решения проблем безопасности. Система Terra реализует доверенный монитор виртуальной машины, который можно использовать для создания закрытых платформ, где разработчик может приспособить программный стек к требованиям безопасности [19]. Однако, для проверки программного стека такая система требует аппаратной поддержки. Чен и пр. рассматривают Overshadow, систему, которая криптографически изолирует приложение внутри ВМ от гостевой ОС, на которой оно запущено. Данная система предлагает еще один слой защиты от фальсификации даже в случае полной компрометации ОС [11].

10. Заключения

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

Благодарности

Данное исследование было поддержано грантами Национального Научного Фонда CNS-00716446 и CCF-0811689, а также Исследовательской Лабораторией Воздушных Сил в рамках контракта FA8650-10-C-7025. Взгляды и заключения, содержащиеся в данном документе, принадлежат его авторам и не должны восприниматься как представление официальных позиций (выраженных или подразумевавшихся) ИЛВС или правительства США.

1 Охранник контрольной суммы – небольшая последовательность инструкций, которая проверяет во время выполнения, что контрольная сумма определенного набора инструкций приложения совпадает с той, что была вычислена при создании программы [10].
2Мы не смогли проверить использование данных инструкций в Pin, поскольку его исходных кодов нет в открытом доступе.

Ссылки

[1] ANCKAERT, B., JAKUBOWSKI, M., AND VENKATESAN, R. Proteus: virtualization for diversifi-ed 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 fi-le 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 identifi-cation 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 retrofi-tting 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 Unoffi-cial 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 identifi-cation 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-modifi-cation 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 reconfi-gurable 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 fi-le 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.