Общая распаковка приложений для обнаружения вредоносных программ

Изобретение относится к средствам обнаружения вредоносных программ в исполняемом модуле. Техническим результатом является обеспечение управляемой распаковки упакованного приложения независимо от знания алгоритма распаковки. Способ распаковки самораспаковывающегося исполняемого модуля для обнаружения вредоносной программы содержит: загрузку самораспаковывающегося исполняемого модуля в память, содержащего первый распаковывающий фиктивный модуль и упакованный исполняемый модуль; разрешение первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль; обнаружение попытки записи на странице памяти, код на которой был ранее исполнен, путем контроля разрешений доступа к страницам памяти с использованием виртуализации с поддержкой аппаратными средствами; обнаружение завершения работы первого распаковывающего фиктивного модуля с использованием одной или более эвристик; и сканирование распакованного исполняемого модуля для обнаружения вредоносной программы, одна или более эвристик содержат определение, является ли запись на страницу памяти, генерирующую исключение записи страницы, записью на последнюю страницу секции страниц памяти. 3 н. и 22 з.п. ф-лы, 8 ил.

 

Область техники, к которой относится изобретение

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

Уровень техники

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

Чтобы создать самораспаковывающийся исполняемый модуль при упаковке файла, можно использовать многие различные типы алгоритмов сжатия и технологий упаковки. Некоторые из них известны и задокументированы, тогда как другие нет. Применение различных технологий в отношении одного и того же файла для создания самораспаковывающегося исполняемого модуля приведет к различным файлам – как код упаковки, так и упакованный код могут отличаться из-за различных упаковщиков и различных результатов, получаемых при использовании различных алгоритмов сжатия. Кроме того, если неизвестные и незадокументированные технологии используются для упаковки файла в самораспаковывающийся исполняемый модуль, это может затруднить даже определение различия между кодом упаковки и упакованным кодом.

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

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

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

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

Краткое описание чертежей

На фиг.1 показана блок-схема 100, иллюстрирующая упрощенную структуру исполняемого файла 101 и сжатый самоизвлекающийся исполняемый модуль 102 (предположительно меньшего размера), как известно в данной области техники.

На фиг.2 показана блок-схема, иллюстрирующая сетевую архитектуру 300, выполненную с возможностью выполнения одного или более раскрытых вариантов осуществления.

На фиг.3 показана блок-схема, иллюстрирующая компьютер с блоком обработки, который можно сконфигурировать согласно одному или более раскрытым вариантам осуществления.

На фиг.4 показана блок-схема, иллюстрирующая стек программного обеспечения компьютерной системы с монитором виртуальной машины, гостевыми операционными системами и приложениями.

На фиг.5 показана блок-схема последовательности операций, иллюстрирующая технологию общей распаковки исполняемого модуля до тех пор, пока не потребуется дополнительная распаковка согласно одному или более раскрытым вариантам осуществления.

На фиг.6A показана блок-схема последовательности операций, иллюстрирующая технологию установки разрешений для страницы памяти и нарушений разрешений для страницы памяти адреса для управления доступом памяти к страницам памяти во время общей распаковки и фаз исполнения исполняемого модуля согласно одному или более раскрытым вариантам осуществления.

На фиг.6B иллюстрирует диаграмму 650 состояний, которая показывает переходы состояний для управляемого исполнения исполняемого модуля из своего двоичного времени загрузки в завершение его исполнения.

На фиг.7 показана блок-схема, иллюстрирующая стадии разрешений для страницы памяти во время общей распаковки и фаз исполнения и исполняемого модуля согласно одному или более раскрытым вариантам осуществления.

Подробное описание изобретения

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

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

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

Ссылаясь на фиг.1, блок-схема 100 иллюстрирует внутренние секции в двух файлах – исполняемый файл и упакованная версия этого файла согласно предшествующему уровню техники. Общий исполняемый модуль 101 представляет собой исполняемый двоичный файл в расширенном (то есть во время исполнения) в виде. Упакованный исполняемый модуль 102, который представляет собой результат общего исполняемого модуля 101, который модифицируется в процессе упаковки, также проиллюстрирован. Исполняемый модуль 101 был создан разработчиком, который выполняет процесс компиляции и связи над исходным кодом, объектными файлами и библиотеками. Исполняемый модуль 101 можно организовать в виде трех различных секций. Заголовок 105 двоичного файла содержит информацию относительно организации оставшейся части исполняемого двоичного файла, включающего в себя секцию(и) 110 кода и секцию(и) 115 данных. Заголовок 105 двоичного файла также включает в себя разрешения для памяти для всех секций, включенных в файл, который будет приводиться в исполнение загрузчиком операционной системы при загрузке исполняемого модуля 101 в память. После загрузки в память каждая секция начинается на границе страницы памяти, которая определена операционной системой. Секция из файла не должна охватывать только одну страницу памяти, а скорее всего каждая секция может занимать целое число страниц.

Исполнение программы начинается (то есть начинается этап выполнения) из местоположения в одной из секций кода в исполняемом двоичном файле 101, которая обычно упоминается как "точка входа" программы. Точка входа может находиться где угодно в секции кода в зависимости от того, где компилятор/ассемблер установил "основную" функцию в двоичном файле. Точка входа не должна начинаться в начале какой-либо конкретной секции кода, что также означает, что точка входа необязательно начинается в начале какой-либо конкретной страницы памяти.

Упаковщик может упаковать и сжать исполняемый файл 101, чтобы создать упакованный исполняемый файл 102, что упоминается здесь как процесс упаковки. Типичные упаковщики могут выполнять сложные и уникальные операции, но почти все упаковщики выполняют относительно простой набор операций, с точки зрения высокого уровня, как будет описано ниже. При создании упакованного исполняемого модуля 102, процесс упаковки сжимает секцию(и) 110 кода и секцию(и) 115 данных исполняемого модуля 101 с использованием алгоритма сжатия по отношению к секциям. Обычно это выполняется в первую очередь при попытке уменьшить размер файла исполняемого модуля, но, как и в случае вредоносной программы, это в первую очередь выполняется для изменения сигнатуры вредоносной программы. После сжатия секций их можно разместить в новой секции, упаковать код и данные 135 в упакованном исполняемом файле 102. Альтернативно, упаковщики могут упаковать код и данные в одной и той же секции, в которой содержится распаковывающий код. Таким образом, секция 130 кода упаковщика и упакованные код и данные 135 могут находиться в отдельных секциях или в одной секции.

Процесс упаковки также типично создает виртуальную секцию 125 кода заданного размера, который будет занимать память при исполнении. Этот размер обычно вычисляется таким образом, чтобы быть большим или равным размеру несжатого упакованного кода и данных 135, как это будет обнаружено в исходном исполняемом модуле 101. Так как виртуальная секция 125 кода представляет собой секцию, предназначенную для несжатых данных памяти, она не должна занимать какое-либо пространство в непосредственно упакованном исполняемом модуле 102. Скорее всего, ее размер в файле, содержащем упакованный исполняемый модуль 102, можно представить в виде числа страниц памяти, необходимых в памяти перед исполнением процесса распаковки кода упаковщика. Подробности виртуальной секции 125 кода точно определены в измененном заголовке 120 двоичного файла с помощью кода преобразования упаковщика. Когда двоичный исполняемый модуль будет загружаться в память с помощью операционной системы, число страниц памяти, которые будут занимать конкретную секцию в памяти, также обычно определяется заголовке (например, 105 или 120) двоичного файла. Поэтому даже в том случае, если размер секции исполняемого файла на диске равен нулю, то секция может занимать некоторое пространство в памяти после загрузки операционной системой. Таким образом, процесс упаковки уменьшает размер всего двоичного файла (то есть размер диска и размер загрузки) путем сжатия кода и данных, но предусмотрел адекватную память для удержания несжатого кода и данных после распаковки в памяти при исполнении.

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

Секция 130 кода упаковщика представляет собой новую секцию кода, добавленную в упакованный исполняемый модуль 102, который содержит код фиктивного модуля распаковщика во время исполнения. Этот фиктивный модуль распаковщика будет считывать упакованные код и данные из секции 135 упакованных кода и данных, распаковывает его и размещает его в секции 125 виртуального кода. Более конкретно, распакованный код может размещаться в памяти, выделенной для удержания секции виртуального кода. Во время первоначального процесса распаковки заголовок 105 двоичного файла модифицируется в заголовок 120 двоичного файла, чтобы убедиться, что поле точки входа заголовка будет способствовать применению фиктивного модуля распаковщика в секции 135 кода упаковщика.

Упаковку, передачу и последующую распаковку исполняемого модуля можно выполнить в контексте сетевой инфраструктуры. Обратимся теперь к фиг.2, на которой схематично показана инфраструктура 200. Инфраструктура 200 содержит компьютерные сети 202. Компьютерные сети 202 включают в себя многочисленные различные типы компьютерных сетей, доступных сегодня, таких как Интернет, корпоративная сеть или локально-вычислительная сеть (LAN). Каждая из этих сетей может содержать проводные или беспроводные устройства и работать с использованием любого числа сетевых протоколов (например, TCP/IP). Сети 202 подсоединены к шлюзами и маршрутизаторам (обозначенным поз.208), компьютерам 206 конечных пользователей и компьютерным серверам 204. В инфраструктуре 200 также показана сотовая сеть 203 для использования с сотовой связью. Как известно в данной области техники, сотовые сети поддерживают сотовые телефоны и многие другие типы устройств (например, планшетные компьютеры, которые не показаны). Сотовые устройства в инфраструктуре 200 проиллюстрированы в виде сотовых телефонов 210. Любое из устройств, показанных в инфраструктуре 200, может пытаться исполнить самоизвлекающийся исполняемый модуль. Если процессор устройства включает в себя необходимые возможности, то он позволяет реализовать концепции настоящего раскрытия. Инфраструктура 200 является иллюстративной и показана только в качестве примера, и при необходимости в раскрытых технологиях можно использовать другие инфраструктуры.

Обратимся теперь к фиг.3, на которой проиллюстрировано в виде блок-схемы примерное устройство 300 обработки для использования в раскрытых технологиях способов согласно различным вариантам осуществления. Устройство 300 обработки можно реализовать в различных устройствах, таких как сотовый телефон 210, шлюз или маршрутизатор 208, клиентский компьютер 206 или компьютерные серверы 204. Примерное устройство 300 обработки содержит системный блок 305, который можно опционально подсоединить к устройству 330 ввода (например, к клавиатуре, мыши, сенсорному экрану и т.д.) и к дисплею 335. Устройство 340 хранения программ (PSD) (которое иногда упоминается как жесткий диск, флэш-память или машиночитаемый носитель информации) включается с помощью системного блока 305. Кроме того, включенным с помощью системного блока 305 может быть сетевой интерфейс 320 для связи через сеть (такую как сотовая сеть 203 или компьютерная сеть 202) с другими вычислительными и корпоративными инфраструктурными устройствами (не показаны) или другими сотовыми устройствами связи. Сетевой интерфейс 320 может быть включенным в системный блок 305 или внешним по отношению к системному блоку 305. В любом случае, системный блок 305 коммуникативно связан с сетевым интерфейсом 320. Устройство 340 хранения программ представляет собой любую форму энергонезависимого запоминающего устройства, включающего в себя, но не ограниченного этим, все формы оптической и магнитной памяти, в том числе твердотельной, элементы хранения, в том числе съемные носители информации, и могут быть включены в системный блок 305 или быть внешними по отношению к системному блоку 305. Устройство 340 хранения программ можно использовать для хранения программного обеспечения в управляющем системном блоке 305, данных, которые используются устройством 300 обработки или обоими.

Системный блок 305 можно запрограммировать на выполнение способов в соответствии с раскрытием. Системный блок 305 содержит один или более блоков обработки (представленных с помощью блока обработки или процессора 310), шину 325 ввода-вывода (I/O) и память 315. Доступ к памяти 315 может осуществляться с использованием шины 325 связи. Блок 310 обработки может включать в себя любое программируемое устройство контроллера, в том числе, например, электронно-вычислительные машины, процессор сотового телефона или один или более элементов из семейства процессоров INTEL® ATOM™, INTEL® CORE™, PENTIUM® и CELERON®, выпускаемых корпорацией Intel, и семейства процессоров Cortex и ARM, выпускаемых корпорацией АРМ (ARM). (INTEL, INTEL ATOM, CORE, PENTIUM, и CELERON представляют собой зарегистрированные торговые знаки корпорации Intel. CORTEX – зарегистрированный торговый знак корпорации ARM Limited Corporation. АРМ – зарегистрированный торговый знак компании ARM Limited Company). Память 315 может включать в себя один или более модулей памяти и содержать оперативное запоминающее устройство (RAM), постоянное запоминающее устройство (ROM), программируемое постоянное запоминающее устройство (PROM), программируемую память с оперативной записью и считыванием и твердотельную память. Блок 310 обработки может также включать в себя некоторую внутреннюю память, включающую в себя, например, кэш-память или память, выделенную для конкретного блока обработки и изолированную от других блоков обработки для использования при распаковке исполняемого двоичного файла.

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

При подготовке к выполнению раскрытых вариантов осуществления на устройстве 300 обработки, программные инструкции для конфигурации устройства 300 обработки в целях выполнения раскрытых вариантов осуществления могут храниться на любом типе постоянных машиночитаемых носителей информации или могут загружаться с сервера 204 в устройство 340 хранения программ. Несмотря на то, что на фиг. 4 изображено одно устройство 300 обработки, в устройстве, сконфигурированном согласно раскрытым вариантам осуществления, можно использовать любое число устройств 300 обработки.

Виртуализация с аппаратной поддержкой

Визуализация представляет собой особенность, которая позволяет компьютерной системе или устройству запускать многочисленные операционные системы параллельно без внесения каких-либо изменений в код операционной системы. Этот тип визуализации можно отличить от паравиртуализации, которая требует внесения изменений в размещенных операционных системах. Многие современные процессоры, исполняемые запросы потребителей, поддерживают виртуализацию с аппаратной поддержкой. Как показано на фиг.4, монитор 420 виртуальных машин (VMM), который также может быть известен как уровень гипервизора, представляет собой уровень программного обеспечения, который размещается между системными аппаратными средствами 410 (которые могут представлять собой, например, устройство 300 обработки (фиг.3)) и одну или более операционных систем ("OS") 430. Что касается виртуализированных систем, OS 430 можно называть "гостевой" OS 430. В отношении систем, которые не используют виртуализации, OS 430 типично взаимодействуют непосредственно с аппаратными средствами 410. При использовании виртуализации OS 430 взаимодействует с аппаратными средствами 410 через VMM 420. VMM 420 позволяет поддерживать многочисленные OS (такие как три OS 430, иллюстрированные на фиг.4) и назначают каждой OS 430 выделенный или совместно используемый доступ к ресурсам системы. Таким образом, каждая OS 430 может работать одновременно с другими OS 430. Кроме того, каждая OS 430 может работать с несколькими приложениями, такими как приложения 440, иллюстрированные, как работающие под OS 430 (фиг.4).

В системах без виртуализации ядра OS обычно исполняет на самом высоком уровне привилегий, который выше другого программного обеспечения, исполняющего в системе. При виртуализации VMM 420 может использовать особенности аппаратной виртуализации процессора и работает при привилегии даже выше ядра OS. С помощью виртуализации с аппаратной поддержкой можно обеспечить выполнение разрешений доступа к странице памяти с помощью VMM 420. Соответственно, VMM 420 позволяет устанавливать разрешения на считывание/запись/ исполнение на страницах физической памяти. Каждая страница памяти может устанавливать разрешение/запрет для привилегий на считывание, запись и исполнение. Разрешения устанавливаются с помощью VMM 420 для исполняющейся OS 430 в системе. Если OS 430 нарушает разрешения для каждой заданной страницы памяти, управление передается непосредственно в предварительно определенное местоположение в VMM 420, приостанавливая эту OS 430. VMM 420 можно обеспечить общим распаковщиком 422, который будет помогать анализировать, категоризировать и сканировать исполняемый модуль во время исполнения в памяти после нарушений разрешений доступа к странице. Общий распаковщик 422 может содержать эвристический движок 424, сканер 426 и базу данных или память, содержащую данные 428 статистики эвристики.

Когда OS 430 запрашивает доступ к странице памяти, процессор 310 будет проверять разрешения доступа к странице памяти перед разрешением запрашиваемого типа доступа. Соответственно, процессор 310 не разрешает какое-либо исполнение из страницы памяти, если страница не имеет набора разрешений на исполнение. При компиляции программы программист может специально установить другие разрешения для страниц секции, например, используя директивы компилятора. Обратимся снова к фиг.1, на которой секция(и) 110 кода требуется по меньшей мере для того, чтобы считывать и исполнять наборы разрешений для своих страниц памяти. В противном случае во время исполнения исполняемый модуль 101 может вырабатывать отказы для предотвращения исполнения данных на исполняющем процессоре, если включена защита исполнения данных. Секция(и) 115 данных требуется для того, чтобы иметь по меньшей мере набор разрешений на считывание для своих страниц после загрузки в память. Однако и оба разрешения на считывание и запись можно установить для секции данных.

Общая распаковка с использованием виртуализации с аппаратной поддержкой

Для того чтобы обеспечить гибкое решение, которое работает во всех многочисленных упаковщиках и алгоритмах упаковки – известных или неизвестных – и ограничить трудности, связанные с распаковкой упакованного исполняемого модуля, управляемый способ позволяет обеспечить общую распаковку упакованного исполняемого модуля без конкретного знания распаковщика или алгоритма распаковки. Фиг.5 демонстрирует способ 500, в котором упакованный исполняемый модуль доставляется в целевой компьютер и начинает исполнение. На этапе 505 самоизвлекающийся исполняемый файл поступает в целевую машину в упакованном или многократно упакованном формате. На данный момент файл можно просканировать известные сигнатуры на этапе 510, чтобы увидеть совпадает ли он с какой-либо известной вредоносной программой. Однако, как описано выше, обнаружение вредоносной программы в этой точке может быть неудачным в отношении каких-либо неидентифицированных упакованных исполняемых модулей. на этапе 515 файл начинает исполнение. В этот момент сегмент кода распаковщика двоичного файла (например, секция 130 кода упаковщика, показанная на фиг.1) начинает исполнение. На этапе 520 процесс распаковки продолжается. Если файл был многократно упакован, то его необходимо многократно распаковать, как показано на этапе 525. После завершения этого процесса распаковки открывается исходный исполняемый модуль двоичного файла. Как показано на этапе 530, в данный момент, в который было завершено исполнение кода распаковщика, и исходный исполняемый модуль еще не начал исполнение, можно выполнить другое сканирование сигнатур. Другими словами, как показано на этапе 530, общая распаковка разрешит исполнение упакованного исполняемого модуля и предотвратит использование перед или только перед передачей управляющего сигнала в исходную точку входа ("OEP") исходного исполняемого модуля, показанного на этапе 535. Исходная точка входа представляет собой точку входа, которая точно определена в заголовке двоичного файла исполняемого двоичного файла, когда он находился в своем исходном распакованном виде. Как было отмечено выше, эмулированное исполнение можно использовать для получения на этом этапе, но существует много упаковщиков, которые содержат антиэмуляционный код, который предотвращает дальнейшее исполнение процесса распаковки после обнаружения того, что код упаковщика является эмулированным.

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

Управляемое исполнение двоичного файла: виртуализация с аппаратной поддержкой

Захват вредоносной программы непосредственно перед тем, как управление передается в OEP, является целью любого решения относительно общей распаковки. Чтобы достичь этого этапа, распаковывающий код исполняется управляемым образом, и пространство памяти исполняемого модуля сканируется и сравнивается с сигнатурами через одинаковые промежутки времени.

Управляемое исполнение можно добиться с помощью виртуализации с аппаратной поддержкой. Как обсуждено выше, VMM 420, который исполняется на самом высоком уровне привилегий, может установить защиты доступа к считыванию/записи/исполнению (R/W/X) при детализации уровня страницы для доступов к странице OS. Этот механизм установки защит памяти на страницах OS для доступов OS можно использовать для установки защит в секциях упакованного исполняемого модуля и связанной с ним памяти. Всякий раз при возникновении нарушений разрешений доступа к странице, VMM 420 получает управление исполнением и может эвристически проверить, произойдет ли передача OEP или произошла ли достаточная распаковка. На этом этапе можно выполнить сканирование сигнатур вредоносных программ или можно выполнить другие технологии обнаружения вредоносных программ.

Чтобы выполнить эвристическое определение, касающееся передачи в OEP, процесс общей распаковки должен управлять исполнением двоичного файла через ключевые интервалы. Эти ключевые интервалы можно определить следующим образом. Время загрузки двоичного файла можно определить как время, в течение которого целевой упакованный исполняемый двоичный файл загружается в память, и уже началось исполнение. Время нарушения исполнения входной точки можно определить как время, в течение которого управление исполнением передается в точку входа упакованного двоичного файла. Время нарушения записи можно определить как время, в течение которого делается попытка для записи на странице, маркированной с помощью VMM 420, как исполняемая и считываемая (но незаписываемая). Время нарушения исполнения страниц можно определить как время, в течение которого делается попытка исполнить инструкции из страниц, промаркированных с помощью VMM 420, как считываемые и записываемые (но неисполняемые).

Ссылаясь на фиг.6A, блок-схема 600 демонстрирует способ управления исполнением самоизвлекающегося исполняемого модуля. Во время 605 загрузки двоичного файла проводится детальный анализ всех секций в заголовке упакованного исполняемого двоичного файла. На этапе 610, где секции маркируются как исполняемые и записываемые (RWX) в заголовке двоичного файла, разрешения на считывание и исполнение (R_X) назначаются с использованием VMM 420 на страницах, связанных с этой секцией, в памяти. Разрешения на запись удаляется для этих страниц. "RWX" и "R_X" являются примерами обозначения, показывающими установку одного или более разрешений на считывание, запись и исполнение. Если страницы этих секций попытаются исполнить в будущем без записи в них, то флаг не устанавливается. Однако, если страница одной из одной из этих секций исполняется после записи в нее, то существует вероятность того, что она представляет собой исходный распакованный код, который является исполняемым. Это связано с тем, что исходный код мог не записаться на странице памяти во время процесса распаковки (то есть доступа к записи), и последующее исполнение может показать, что исполняется исходный исполняемый модуль. В ситуации, когда файл был упакован много раз, запись может представлять собой запись этого следующего уровня распаковывающего кода на странице памяти, и, таким образом, последующее исполнение не будет представлять собой исходный исполняемый модуль, а итерацию распаковывающего кода. В любом случае, этот период времени представляет собой этап, на котором можно выполнить сканирование вредоносной программы. Таким образом, доступ к записи на любой из этих страниц вырабатывает "vmexit", и управление передается VMM 420.

"vmexit" представляет собой механизм виртуализации с аппаратной поддержкой, который передает управление из OS 430 в VMM 420. В то время как управление осуществляется с помощью VMM 420, можно записать состояние регистров процессора, указатель стека и другие состояния, относящиеся к исполнению кода распаковщика. После записи состояний и выполнения других задачи (например, выработка данных эвристики, сканирование), управление может быть передано обратно в OS 430, которое выработало vmexit, или может быть передано подпрограмме для обработки ошибок.

На этапе 615 можно идентифицировать страницу, которая содержит точку входа самоизвлекающегося исполняемого модуля, и разрешения для этой страницы должны быть установлены как только считывание (R__). После того как все разрешения в памяти страницы были установлены с помощью VMM 420, управление возвращается в OS 430 на этапе 620. В ходе исполнения точки входа будет вырабатываться vmexit во время нарушения исполнения точки входа, как показано на этапе 625, и управление перейдет к VMM 420. Соответственно, на этом этапе значение указателя стека и содержимое стека, представляющее собой начало исполнения, можно записать в виде данных 428 статистики эвристики общего распаковщика 422. Состояние в начале исполнения является полезным для построения эвристики, так как она представляет собой состояние, которое ожидает исходная распакованная программа. Каждый раз, когда управление переходит к VMM 420 после периода времени нарушения, сканирование памяти может также выполняться сканером 426 на основании эвристического анализа с помощью механизма 424 эвристики, как показано на этапе 630. На этапе 635, когда секция маркируется как записываемая и исполняемая (RWX) в заголовке двоичного файла, назначаются разрешения на считывание и исполнение, но не записи (R_X). После изменения разрешений для страницы управление может вернуться OS 430.

Когда фиктивный модуль распаковщика самоизвлекающегося исполняемого модуля начинает исполнение, может возникнуть много нарушений доступа к странице, каждое из которых заставляет передать управление в VMM 420. В каждом из этих периодов времени можно произвести сбор (625) статистики 428 эвристики, можно выполнить (630) сканирования и можно скорректировать разрешения, и управление возвращается в OS (635). Примеры нарушений и действий, основанных на нарушениях, будут обсуждены более подробно ниже. В определенных ситуациях, когда управление представляет собой VMM 420, общий распаковщик 422 можно определить путем сканирования того, что распознает известный алгоритм упаковки для итерации упаковки многократно упакованного исполняемого модуля. Если это так, то общий распаковщик 422 может продолжить свои действия путем распаковки непосредственного содержимого, а не с помощью управляемого исполнения. Если последующая итерация упаковки не распознается, то общий распаковщик 422 может вернуться к управляемому исполнению исполняемого модуля.

На фиг.6B показана диаграмма 650 состояний, демонстрирующая переходы состояний во время исполнения исполняемого модуля. Состояние 1 (655) представляет собой время загрузки двоичного файла, который был описан выше. После установки разрешений и записи состояния во время загрузки двоичного файла, vmexit во время нарушения исполнения точки входа приводит к переходу в состояние 2 (660), во время которого записывается состояние точки входа изображения. Управление возвращается в OS, и исполнение продолжается нормальным образом в состоянии 3 (665).

Во время нарушения записи вводится состояние 5 (675) и VMM 420 передает управление общему распаковщику 422. Общий распаковщик 422 обновляет свои внутренние эвристические статистические данные 428 учета использования системных ресурсов. Они могут включать в себя число страниц конкретной секции, в которые производится запись, число раз записей в эту конкретную страницу и т.д. Общий распаковщик 422 также делает конкретную страницу записываемой (+ W) для OS 430, но удаляет доступ к исполнению (-X). В состоянии 6 (680), основываясь на эвристике, эвристический механизм 424 общего распаковщика 422 может запускать в памяти сканирование сигнатур вредоносной программы. Если сигнатура не найдена, или если сканирование не выполнено на основании эвристик, общий распаковщик 422 определяет, что распаковка еще не завершена, и управление передается в OS 430, и исполнение продолжается в состоянии 3 (665). Если сигнатура вредоносной программы обнаружена, то исполнение исполняемого модуля может принудительно завершиться, как показано на переходе к состоянию 7 (685).

Аналогичным образом, во время нарушения исполнения страницы вводится состояние 4 (670), и VMM 420 передает управление общему распаковщику 422. Общий распаковщик 422 обновляет свои внутренние эвристические статистические данные 428 учета использования системных ресурсов, которые могут включать в себя число страниц конкретной секции, которые имели нарушения разрешений доступа к исполнению, число раз нарушений разрешений доступа к исполнению конкретной страницы и т.д. Общий распаковщик 422 также делает конкретную страницу выполнимой (+X) для OS 430, но удаляет доступ к записи (-W). Сканирование можно выполнить в состоянии 6 (680), и исполнение может продолжаться в состоянии 3 (665) или завершиться в состоянии 7 (685).

Сканирование сигнатур можно выполнять в каждый момент времени нарушения страницы, но можно использовать для оптимизации эвристики и сохранения ресурсов обработки во избежание сканирования каждый раз, когда происходит нарушение страницы. Например, в каждый момент времени нарушения исполнения страницы, одна эвристику можно использовать для сравнения указателя стека и содержимого стека со своими исходными значениями. Если значение указателя стека равно значению указателя стека, записанному во время нарушения исполнения точки входа (то есть состояние 2 (660)), и содержимое стека является также одинаковым, существует вероятность того, что OEP приступила к исполнению. Указатель стека и содержимое стека, возвращающееся к своим исходным значениям времени нарушения исполнения точки входа, могут показывать, что процессы распаковщика идут к завершению, и следует выполнить сканирование.

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

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

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

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

Фиг.7 иллюстрирует пример эвристики для определения начала исполнения исходной точки входа и последующее предотвращение исполнения. На фиг.7 показано четыре состояния 710, 720, 730 и 740 эвристики. Каждое состояние показывает набор разрешений для страниц P1, P2, P3, P4 и P5 памяти OS для данного набора доступов к страницам памяти в момент времени во время исполнения. Как подробно описано ниже, продвижение исполнения ведет к изменениям состояний. Страницы P1-P4 памяти образуют секцию 125 виртуального кода, и страница P5 образует секцию 130 кода упаковщика. В этом примере секция 130 кода упаковщика занимает только одну страницу, т.е. страница P5. Фиктивный модуль распаковщика из страницы P5 будет распаковывать код в страницах P1-P4. Разрешения для страниц P1-P5 определяются заголовком 120 двоичного файла (на фиг.6B не показан).

В исходном состоянии 710, разрешения для страниц устанавливаются различным образом из определений в заголовке двоичного файла. Таким образом, в то время как заголовок двоичного файла определяет, что страница P5, которая содержит исполняемый фиктивный модуль распаковщика, должна иметь разрешения на считывание и запись, страница P5 устанавливается с возможностью разрешения считывания и записи, но не разрешения исполнения в исходном состоянии 710. Соответственно, страница P5 представлена как "RW_" в исходном состоянии 660, и исполнение будет запускать vmexit. Аналогичным образом, в то время как страницы Р1-P4 определены в заголовке двоичного файла, как имеющие разрешения на считывание, запись и исполнение, страницы P1-P4 устанавливаются с возможностью разрешения считывания и исполнения, но не разрешения записи в исходном состоянии 660. Соответственно, страницы P1-P4 представлены как "R_X" в исходном состоянии 660.

Сначала, когда предпринимается попытка исполнить код на странице P5, запускается vmexit, так как страница P5 не имеет набора разрешений на исполнение. Если многочисленные страницы устанавливаются с возможностью доступа к записи, то первую страницу из этих страниц, которая запускает vmexit, можно идентифицировать как время нарушения исполнения точки входа. В этом примере, с помощью страницы P5, которая представляет собой только такую страницу, первая попытка исполнить код, который хранится в любом месте на странице P5, является признаком времени нарушения исполнения точки входа. После завершения соответствующей обработки, как описано выше (такой как запись указателя стека, содержимое и другой информации о состояниях), разрешения для страницы P5 изменяются таким образом, чтобы добавить разрешения на исполнение (то есть разрешить 'X'), но удалить разрешения на запись (то есть запретить 'W'). Это показано во втором состоянии 720.

Как показано на страницах P1-P4, эти страницы запустились без разрешений на запись. Впоследствии, при попытке записи в любой из страниц P1-P4, запускается vmexit. Запись в любом месте на одной из этих страниц является также признаком того, что подразумевается, что записываемый код будет исполняться когда-то позже. В примере предпринимается попытка записи на странице PI, и запускается vmexit. В состоянии 730 разрешения для страницы P1 были изменены таким образом, чтобы добавить разрешения на запись (то есть разрешить 'W'), но удалить разрешения на исполнения (то есть запретить 'X'). Таким образом, любая последующая попытка исполнения на странице P1 будет запускать vmexit, возвращая управление снова в VMM 420. Сразу после настройки разрешения для P1, VMM 420 вернет управление в OS 430, которое, в свою очередь, вернет управление в фиктивный модуль распаковщика. На этом этапе исходная инструкция записи (которая запускает vmexit) может разрешить завершение, и фиктивный модуль распаковщика записывается на странице P1.

Таким образом, страницы P1-P4 можно записывать определенное число раз. Каждый раз, когда происходит первая попытка записи на странице, будет запускаться vmexit, и разрешения будут изменяться, как описано выше, по отношению к странице P1. Как отмечено выше, на каждом из этих этапов изменяется статистика 428 эвристики, сбор которой осуществляться перед разрешениями, и управление возвращается в OS 430. Состояние 740 показывает ситуацию, в каждой из которых была предпринята попытка каждой из страниц P1-P4, вырабатывался vmexit, и разрешения изменялись таким образом, чтобы устранить доступ к исполнению и разрешить доступ к записи. Как отмечено выше, в различных состояниях, основываясь на эвристическом анализе, сканирование могут выполняться для определения того, можно ли распознать сигнатуру.

В состоянии 690 в этом примере предполагается, что была завершена вся запись (то есть распаковка). На этом этапе фиктивный модуль кода распаковщика из P5 завершает исполнение и пытается передать управление в исходную точку входа (которая находится где-то в P1-P4) распакованного исполняемого модуля. Предполагается, что страница P3 имеет исходную точку входа (OEP) для исходного распакованного исполняемого двоичного файла, и страница P5 пытается передать ему управление. Попытка исполнения где-либо на странице P3 вырабатывает vmexit. На этом этапе управление передается в VMM 420, и эвристический механизм общего распаковщика устанавливает управление. Механизм общего распаковщика на этом этапе может определить, что во все страницы P1-P4 производилась запись, и что это представляет собой первое нарушение исполнения в этой секции. Соответственно, как отмечено выше, существует высокая вероятность того, что OEP будет исполняться, и, следовательно, будет сканироваться вся секция.

Если на данном этапе страницы P1-Р4 содержат распакованную вредоносную программу, то вредоносную программу можно идентифицировать с помощью сканирования сигнатур. С другой стороны, если ничего не обнаружено, то разрешения для страницы P3 можно промаркировать как разрешающие доступ к исполнению и запрещающие доступ к записи. Исполнение может продолжаться до тех пор, пока vmexit не запустится снова и не будет удовлетворять новому эвристическому критерию. В конечном счете, если в дальнейшем эвристика не запускается, или страницы P1-P4 завершают исполнение после многочисленных итераций распаковки без какой-либо идентификации вредоносной программы, можно определить, что распакованный исполняемый модуль не является вредоносной программой (или по меньшей мере что сигнатура вредоносной программы не известна для распакованного двоичного файла).

Примеры

Следующие примеры относятся к дополнительным вариантам осуществления настоящего раскрытия.

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

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

3. Способ согласно примеру 2, в котором сканирование распакованного исполняемого модуля для вредоносной программы дополнительно содержит сканирование по меньшей мере одного из одного или более промежуточных самораспаковывающихся исполняемых модулей для вредоносной программы.

4. Способ согласно примеру 2, в котором окончательный распакованный исполняемый модуль не разрешен к исполнению в случае, если обнаружена вредоносная программа.

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

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

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

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

9. Способ согласно любому из предыдущих примеров, в котором сканирование распакованного исполняемого модуля выполняется до исполнения распакованного исполняемого модуля.

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

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

12. Способ согласно любому из предыдущих примеров, в котором разрешение первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль содержит управление исполнением первого распаковывающегося фиктивного модуля при разрешении первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль.

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

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

15. Система согласно примеру 14, в которой сканирование распакованного исполняемого модуля для вредоносной программы дополнительно содержит сканирование по меньшей мере одного из одного или более промежуточных самораспаковывающихся исполняемых модулей для вредоносной программы.

16. Система согласно примеру 14, в которой окончательный распакованный исполняемый модуль не разрешается исполнять, если обнаружена вредоносная программа.

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

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

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

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

21. Система согласно любому из предыдущих примеров, в которой сканирование распакованного исполняемого модуля выполняется до исполнения распакованного исполняемого модуля.

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

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

24. Система согласно любому из предыдущих примеров, в которой разрешение первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль содержит управление исполнением первого распаковывающегося фиктивного модуля при разрешении первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль.

25. Машиночитаемый носитель информации, содержащий компьютерно-исполняемые инструкции, которые на нем, чтобы побудить один или более блоков обработки: загрузить самораспаковывающийся исполняемый модуль в память, причем самораспаковывающийся исполняемый модуль содержит первый распаковывающийся фиктивный модуль и упакованный исполняемый модуль; разрешить первому распаковывающемуся фиктивному модулю распаковать упакованный исполняемый модуль в распакованный исполняемый модуль; обнаружить завершение первого распаковывающегося фиктивного модуля с использованием одной или более эвристик; и сканировать распакованный исполняемый модуль для вредоносной программы.

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

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

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

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

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

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

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

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

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

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

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

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

37. Устройство с возможностью распаковки самораспаковывающегося исполняемого модуля для обнаружения вредоносной программы, содержащее модули для: загрузки самораспаковывающегося исполняемого модуля в память, причем самораспаковывающийся исполняемый модуль содержит первый распаковывающийся фиктивный модуль и упакованный исполняемый модуль; разрешения первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль; обнаружения завершения первого распаковывающегося фиктивного модуля использовать одну или более эвристик; и сканирования распакованного исполняемого модуля для вредоносной программы.

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

39. Устройство согласно примеру 38, в котором сканирование распакованного исполняемого модуля для вредоносной программы дополнительно содержит сканирование по меньшей мере одного из одного или более промежуточных самораспаковывающихся исполняемых модулей для вредоносной программы.

40. Устройство согласно примеру 38, в котором окончательный распакованный исполняемый модуль не разрешается исполнять, если обнаружена вредоносная программа,.

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

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

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

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

45. Устройство согласно любому из предыдущих примеров, в котором сканирование распакованного исполняемого модуля выполняется до исполнения распакованного исполняемого модуля.

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

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

48. Устройство согласно любому из предыдущих примеров, в котором разрешение первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль содержит управление исполнением первого распаковывающегося фиктивного модуля при разрешении первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль.

49. Устройство с возможностью распаковки самораспаковывающегося исполняемого модуля для обнаружения вредоносной программы, содержащее: средство для загрузки самораспаковывающегося исполняемого модуля в память, причем самораспаковывающийся исполняемый модуль содержит первый распаковывающийся фиктивный модуль и упакованный исполняемый модуль; средство для разрешения первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль; средство для обнаружения завершения первого распаковывающегося фиктивного модуля с использованием одной или более эвристик независимо от знания первого распаковывающегося фиктивного модуля; и средство для сканирования распакованного исполняемого модуля для вредоносной программы.

50. Устройство согласно предыдущему примеру, в котором упакованный исполняемый модуль содержит последовательность самораспаковывающихся исполняемых модулей, причем каждый член последовательности за исключением последнего содержит распаковывающийся фиктивный модуль и самораспаковывающийся исполняемый модуль наследника, где последний член содержит окончательный распакованный фиктивный модуль и окончательный упакованный исполняемый модуль, где средство для разрешения первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль, содержат: средство для разрешения первому распаковывающемуся фиктивному модулю распаковывать упакованный исполняемый модуль в первый член последовательности самораспаковывающихся исполняемых модулей; и средство для разрешения каждому члену последовательности самораспаковывающихся исполняемых модулей распаковывать самораспаковывающийся исполняемый модуль наследника до тех пор, пока окончательный распакованный фиктивный модуль не распакует окончательный упакованный исполняемый модуль в окончательный распакованный исполняемый модуль, причем средство для сканирования распакованного исполняемого модуля для вредоносной программы содержит средство для сканирования окончательного распакованного исполняемого модуля для вредоносной программы.

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

Описанные выше примеры и варианты осуществления можно реализовать в виде компьютерно-исполняемых инструкций или кода, воплощенного в машиночитаемом носителе записи. Компьютерно-исполняемые инструкции или компьютерные программные продукты, а также любые данные, которые созданы и используются во время реализации раскрытых технологий, можно хранить на одном или более материальных машиночитаемых носителях записи, таких как носители на основе оптических дисков (например, DVD, CD), компоненты энергозависимой памяти (например, DRAM, SRAM) или компоненты энергонезависимой памяти (например, флэш-память, дисководы). Машиночитаемые носители записи могут содержаться в устройствах машиночитаемого носителя записи, таких как твердотельные накопители, флэш-диски USB и модулей памяти.

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

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

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

загрузить самораспаковывающийся исполняемый модуль в память, причем самораспаковывающийся исполняемый модуль содержит первый распаковывающий фиктивный модуль и упакованный исполняемый модуль;

разрешить первому распаковывающему фиктивному модулю распаковать упакованный исполняемый модуль в распакованный исполняемый модуль;

обнаружить попытку записи на странице памяти, код на которой был ранее исполнен, путем контроля разрешений доступа к страницам памяти с использованием виртуализации с поддержкой аппаратными средствами;

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

сканировать распакованный исполняемый модуль для обнаружения вредоносной программы,

в котором одна или более эвристик содержат:

определение, является ли запись на страницу памяти, генерирующую исключение записи страницы, записью на последнюю страницу секции страниц памяти.

2. Постоянный машиночитаемый носитель информации по п. 1,

в котором упакованный исполняемый модуль представляет собой итеративно упакованный исполняемый модуль, содержащий один или более промежуточных самораспаковывающихся исполняемых модулей,

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

разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в один из одного или более промежуточных самораспаковывающихся исполняемых модулей; и

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

где совокупность инструкций для побуждения одного или более блоков обработки сканировать распакованный исполняемый модуль для обнаружения вредоносной программы содержит инструкции для побуждения одного или более блоков обработки сканировать окончательный распакованный исполняемый модуль для обнаружения вредоносной программы.

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

4. Постоянный машиночитаемый носитель информации по п. 2, в котором не разрешено выполнять окончательный распакованный исполняемый модуль, если обнаружена вредоносная программа.

5. Постоянный машиночитаемый носитель информации по любому из пп. 1–4, в котором совокупность инструкций для побуждения одного или более блоков обработки разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль содержит инструкции для побуждения одного или более блоков обработки использовать виртуализацию с поддержкой аппаратными средствами для контроля разрешений доступа к страницам памяти с целью обнаружить попытку выполнить код, который был ранее записан на странице памяти первым распаковывающим фиктивным модулем.

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

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

собирать статистические данные эвристик во время паузы исполнения первого распаковывающего фиктивного модуля;

определить, следует ли сканировать память, на основе статистики эвристик;

сканировать память на основе результатов такого определения; и

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

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

8. Постоянный машиночитаемый носитель информации по любому из пп. 1–4, в котором одна или более эвристик дополнительно содержат:

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

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

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

собирать статистические данные эвристик во время паузы исполнения первого распаковывающего фиктивного модуля;

определить, следует ли сканировать память, на основе статистики эвристик;

сканировать память на основе результатов такого определения; и

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

10. Постоянный машиночитаемый носитель информации по любому из пп. 1–4, в котором сканирование распакованного исполняемого модуля осуществляется прежде исполнения этого распакованного исполняемого модуля.

11. Постоянный машиночитаемый носитель информации по любому из пп. 1–4, в котором упакованный исполняемый модуль был упакован с использованием неизвестного или необнаружимого алгоритма упаковки.

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

13. Постоянный машиночитаемый носитель информации по любому из пп. 1–4, в котором совокупность инструкций для побуждения одного или более блоков обработки разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль содержит инструкции для побуждения одного или более блоков обработки управлять исполнением первого распаковывающего фиктивного модуля, разрешая при этом первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль.

14. Способ распаковки самораспаковывающегося исполняемого модуля для обнаружения вредоносной программы, содержащий:

загрузку, с использованием процессора, самораспаковывающегося исполняемого модуля в память, этот самораспаковывающийся исполняемый модуль содержит первый распаковывающий фиктивный модуль и упакованный исполняемый модуль;

разрешение первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль;

обнаружение попытки записи на странице памяти, код на которой был ранее исполнен, путем контроля разрешений доступа к страницам памяти с использованием виртуализации с поддержкой аппаратными средствами;

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

сканирование распакованного исполняемого модуля для обнаружения вредоносной программы,

в котором одна или более эвристик содержат:

определение, является ли запись на страницу памяти, генерирующую исключение записи страницы, записью на последнюю страницу секции страниц памяти.

15. Способ по п. 14,

в котором упакованный исполняемый модуль представляет собой итеративно упакованный исполняемый модуль, содержащий один или более промежуточных самораспаковывающихся исполняемых модулей,

в котором разрешение первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль содержит:

разрешение первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в первый из одного или более промежуточных самораспаковывающихся исполняемых модулей; и

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

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

16. Способ по п. 15, в котором сканирование распакованного исполняемого модуля для обнаружения вредоносной программы дополнительно содержит сканирование по меньшей мере одного из одного или более промежуточных самораспаковывающихся исполняемых модулей для обнаружения вредоносной программы.

17. Способ по любому из пп. 14–16, в котором разрешение первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль содержит использование виртуализации с поддержкой аппаратными средствами для контроля разрешений доступа к страницам памяти с целью обнаружить попытку выполнить код, который был ранее записан на странице памяти первым распаковывающим фиктивным модулем.

18. Способ по п. 17, в котором разрешение первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль дополнительно содержит:

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

сбор статистических данных эвристик во время паузы исполнения первого распаковывающего фиктивного модуля;

определение, следует ли сканировать память, на основе статистики эвристик;

сканирование памяти на основе результатов такого определения; и

разрешение продолжения выполнения исполнения первого распаковывающего фиктивного модуля.

19. Способ по любому из пп. 14–16, в котором сканирование распакованного исполняемого модуля осуществляется прежде исполнения этого распакованного исполняемого модуля.

20. Способ по любому из пп. 14–16, в котором упакованный исполняемый модуль был упакован с использованием неизвестного или необнаружимого алгоритма упаковки.

21. Система, конфигурированная для распаковки самораспаковывающегося исполняемого модуля с целью обнаружения вредоносной программы, система содержит:

память; и

один или более блоков обработки, осуществляющих связь с памятью, где память хранит инструкции, которые побуждают один или более блоков обработки:

загрузить самораспаковывающийся исполняемый модуль в память, где этот самораспаковывающийся исполняемый модуль содержит первый распаковывающий фиктивный модуль и упакованный исполняемый модуль;

разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в распакованный исполняемый модуль;

обнаружить попытку записи на странице памяти, код на которой был ранее исполнен, путем контроля разрешений доступа к страницам памяти с использованием виртуализации с поддержкой аппаратными средствами;

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

сканировать распакованный исполняемый модуль для обнаружения вредоносной программы,

в котором одна или более эвристик содержат:

определение, является ли запись на страницу памяти, генерирующую исключение записи страницы, записью на последнюю страницу секции страниц памяти.

22. Система по п. 21,

в которой упакованный исполняемый модуль представляет собой итеративно упакованный исполняемый модуль, содержащий один или более промежуточных самораспаковывающихся исполняемых модулей,

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

разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль в первый из одного или более промежуточных самораспаковывающихся исполняемых модулей; и

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

где совокупность инструкций для побуждения одного или более блоков обработки сканировать распакованный исполняемый модуль для обнаружения вредоносной программы содержит инструкции для побуждения одного или более блоков обработки сканировать окончательный распакованный исполняемый модуль для обнаружения вредоносной программы.

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

24. Система по любому из пп. 21–23, в которой совокупность инструкций для побуждения одного или более блоков обработки разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль содержит инструкции для побуждения одного или более блоков обработки использовать виртуализацию с поддержкой аппаратными средствами для контроля разрешений доступа к страницам памяти с целью обнаружить попытку выполнить код, который был ранее записан на странице памяти первым распаковывающим фиктивным модулем.

25. Система по любому из пп. 21–23, в которой совокупность инструкций для побуждения одного или более блоков обработки разрешить первому распаковывающему фиктивному модулю распаковывать упакованный исполняемый модуль содержит инструкции для побуждения одного или более блоков обработки:

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

собирать статистические данные эвристик во время паузы исполнения первого распаковывающего фиктивного модуля;

определить, следует ли сканировать память, на основе статистики эвристик;

сканировать память на основе результатов такого определения; и

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



 

Похожие патенты:

Изобретение относится к вычислению функции от одних или нескольких входных данных. Технический результат – расширение арсенала технических средств вычисления функции от одних или нескольких входных данных.

Изобретение относится к безопасности компьютерных систем. Технический результат – обеспечение эффективной безопасности компьютерных систем.

Изобретение относится к области формирования и отображения картинки на криволинейных экранах с помощью проекторов. Технический результат – повышение качества отображения лицензионного зашифрованного контента на криволинейной поверхности.

Изобретение относится к системе и способу контроля доступа третьей стороны к охраняемому объекту. Технический результат заключается в обеспечении своевременного и достоверного определения неправомерного доступа третьей стороны к охраняемому объекту.

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

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

Группа изобретений относится к средствам для управления приложением в терминале. Технический результат - упрощение операции перемещения значка приложения.

Группа изобретений относится к технологиям применения коммерческих паролей в обеспечении информационной безопасности сети. Техническим результатом является обеспечение шифрования, идентификации и защиты сетевой информации.

Изобретение относится к вычислительной технике, в частности к средствам обмена данными между клиентом и сервером. Техническим результатом предложения является повышение скорости обработки информации при функционировании в защищенной среде.

Изобретение относится к администрированию серверов высокого уровня секретности. Технический результат – обеспечение высокого уровня безопасности при администрировании серверов.

Изобретение относится к устройству разблокировки. Технический результат заключается в уменьшении времени для разблокировки экрана. Такой результат достигается тем, что выполняют разблокировку экрана на основании команды разблокировки пользователя и переходят к внутреннему интерфейсу первого приложения на основании заранее настроенной информации о конфигурации, причем внутренний интерфейс первого приложения является интерфейсом приложения, не являющимся его исходным интерфейсом, и информация о конфигурации используется для отображения внутреннего интерфейса первого приложения. 3 н. и 6 з.п. ф-лы, 17 ил.

Изобретение относится к области интерфейсов прикладного программирования. Техническим результатом является управление доступом во время исполнения к интерфейсам прикладного программирования (API). Варианты осуществления изобретения дают возможность разработчикам библиотек более точно и легко управлять тем, какой из API их библиотек может вызываться динамически. Таким образом, их нагрузка по обслуживанию и управлению версиями может более надлежащим образом управляться. Дополнительно, разработчики приложений могут управлять тем, какие из таких API следует в дальнейшем исключать из сценариев динамических вызовов, с тем, чтобы минимизировать объем служебной информации для поддержки во время выполнения (например, запрещать формирование метаданных). 3 н. и 5 з.п. ф-лы, 6 ил.

Изобретение относится к способу и устройству для обнаружения несанкционированного использования веб-адресов. Технический результат заключается в повышении коэффициента распознавания несанкционированным образом используемых веб-адресов. Такой результат достигается за счет того, что выполняют получение веб-адреса, по которому в данный момент осуществлен доступ, и целевого веб-адреса перехода из текущей инструкции доступа по веб-адресу; определение безопасного веб-адреса перехода из веб-адреса, по которому в данный момент осуществлен доступ, согласно предыстории инструкций доступа по веб-адресу; и определение того, использован несанкционированным образом или нет целевой веб-адрес перехода, согласно безопасному веб-адресу перехода. В настоящем техническом решении безопасный веб-адрес перехода определяется согласно архивным инструкциям доступа по веб-адресу, так что то, использован несанкционированным образом или нет целевой веб-адрес перехода, определяется согласно безопасному веб-адресу перехода. Таким образом, анормальные переходы могут сразу обнаруживаться, и несанкционированное использование может оставаться без поддержки и выдачи помещенных в черный список веб-адресов заранее. 3 н. и 14 з.п. ф-лы, 15 ил.
Наверх