СПОСОБ ПОВЕДЕНЧЕСКОГО ОБНАРУЖЕНИЯ ВРЕДОНОСНЫХ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ВИРТУАЛЬНОЙ МАШИНЫ-ИНТЕРПРЕТАТОРА
METHOD OF BEHAVIORAL DETECTION OF MALICIOUS PROGRAMS USING A VIRTUAL INTERPRETER MACHINE

Область техники, к которой относится изобретение и уровень техники
[0001] Настоящее изобретение относится к системам и способам защиты компьютерных систем от вредоносного программного обеспечения (ПО).
[0002] Вредоносное программное обеспечение, известное также как вредоносные программы, наносит ущерб большому количеству вычислительных систем по всему миру. Во множестве своих форм, таких как компьютерные вирусы, вирусы-черви, троянские программы и руткиты, вредоносные программы представляют собой серьезный риск для миллионов компьютерных пользователей, подвергая их, среди прочего, опасности потери данных, хищения личных данных и потери производительности. Кроме того, вредоносные программы могут отображать материалы, которые некоторые пользователи могут счесть непристойными, чрезмерно жестокими, назойливыми или нежелательными в другом отношении.
[0003] Для обнаружения вредоносных программ, заражающих вычислительную систему пользователя, а также для удаления или ограничения в доступе таких вредоносных программ может быть использовано программное обеспечение системы безопасности. Из уровня техники известно несколько способов обнаружения вредоносных программ. Некоторые из них основаны на сравнении фрагмента кода вредоносного объекта с библиотекой сигнатур, указывающих на вредоносность. Согласно другим известным способам обнаруживают набор поведенческих реакций вредоносного объекта, указывающих на его вредоносность.
[0004] Вредоносное программное обеспечение быстро развивается, чтобы опережать алгоритмы обнаружения. Отвечая на такие быстроизменяющиеся угрозы, поставщики программного обеспечения системы безопасности обычно корректируют способы обнаружения и/или параметры в течение нескольких минут или часов, например, посредством переобучения классификаторов для обнаружения новых версий вредоносных программ. Как правило, такое переобучение требует больших вычислительных затрат. Кроме того, введение нового алгоритма обнаружения определенного поведения или даже изменение существующего алгоритма обычно требует тщательного тестирования, а также повторной компиляции исходного кода соответствующего программного обеспечения системы безопасности. Только после этого новая версия программного обеспечения может быть передана клиентам, например, в виде обновления программного обеспечения. Напротив, в системах обнаружения на основе сигнатур новая сигнатура вредоносного ПО может быть добавлена к существующему набору сигнатур без каких-либо затруднений.
[0005] Поэтому существует большой интерес к разработке решений для защиты от вредоносных программ, способных быстро обновлять алгоритмы и/или параметры, чтобы не отставать от постоянно меняющегося характера вредоносного ПО.
Раскрытие сущности изобретения
[0006] Согласно одному из аспектов, клиентская система содержит по меньшей мере один аппаратный процессор, сконфигурированный формировать диспетчер подпрограмм, виртуальную машину-транслятор байт-кода и подсистему оценки поведения. Диспетчер подпрограмм сконфигурирован в ответ на обнаружение наступления события-триггера выбирать для выполнения противовредоносную байт-кодовую подпрограмму из нескольких противовредоносных байт-кодовых подпрограмм. При этом наступление события-триггера вызывается контролируемым процессом, выполняемым в клиентской системе. Виртуальная машина-транслятор байт-кода сконфигурирована выполнять противовредоносную байт-кодовую подпрограмму для определения, указывает ли наступление события-триггера на вредоносное ПО. При этом выполнение противовредоносной байт-кодовой подпрограммы включает трансляцию набора байт-кодовых команд противовредоносной байт-кодовой подпрограммы в последовательность нативных для процессора команд и выполнение этой последовательности. Подсистема оценки поведения сконфигурирована определять, содержит ли клиентская система вредоносную программу, в соответствии с результатом выполнения в виртуальной машине-трансляторе байт-кода противовредоносной байт-кодовой подпрограммы.
[0007] Согласно другому аспекту, осуществляемый с помощью компьютера способ включает применение по меньшей мере одного аппаратного процессора клиентской системы для выбора, в ответ на обнаружение наступления события-триггера, из нескольких противовредоносных байт-кодовых подпрограмм подпрограммы, сконфигурированной определять, указывает ли наступление события-триггера на вредоносное ПО. При этом событие-триггер вызывается контролируемым процессом, выполняемым в клиентской системе. Кроме того, этот способ включает применение по меньшей мере одного аппаратного процессора клиентской системы для трансляции, в ответ на выбор байт-кодовой подпрограммы, набора байт-кодовых команд противовредоносной байт-кодовой подпрограммы в последовательность нативных для процессора команд и выполнения этой последовательности. Кроме того, этот способ включает применение по меньшей мере одного аппаратного процессора клиентской системы для определения, содержит ли клиентская система вредоносное ПО, в соответствии с результатом выполнения последовательности нативных для процессора команд.
[0008] Согласно еще одному аспекту, долговременный машиночитаемый носитель хранит машинную программу, которая, при выполнении ее по меньшей мере одним аппаратным процессором клиентской системы, обеспечивает формирование клиентской системой диспетчера подпрограмм, виртуальной машины-транслятора байт-кода и подсистемы оценки поведения. Диспетчер подпрограмм сконфигурирован, в ответ на обнаружение наступления события-триггера, выбирать в соответствии с событием-триггером из нескольких противовредоносных байт-кодовых подпрограмм подпрограмму, сконфигурированную определять, указывает ли наступление события-триггера на вредоносное ПО. При этом событие-триггер вызывается контролируемым процессом, выполняемым в клиентской системе. Виртуальная машина-транслятор байт-кода сконфигурирована выполнять противовредоносную байт-кодовую подпрограмму. При этом выполнение противовредоносной байт-кодовой подпрограммы включает трансляцию набора байт-кодовых команд противовредоносной байт-кодовой подпрограммы в последовательность нативных для процессора команд и выполнение этой последовательности. Подсистема оценки поведения сконфигурирована определять, содержит ли клиентская система вредоносную программу, в соответствии с результатом выполнения в виртуальной машине-трансляторе байт-кода противовредоносной байт-кодовой подпрограммы.
[0009] Согласно еще одному аспекту, долговременный машиночитаемый носитель хранит противовредоносную байт-кодовую подпрограмму, выполняемую виртуальной машиной-транслятором байт-кода, сформированной в клиентской системе, содержащей по меньшей мере один аппаратный процессор. Причем выполнение противовредоносной байт-кодовой подпрограммы обеспечивает то, что аппаратный процессор определяет, указывает ли наступление события-триггера в клиентской системе на вредоносное ПО. Выполнение противовредоносной байт-кодовой подпрограммы включает трансляцию набора байт-кодовых команд противовредоносной байт-кодовой подпрограммы в последовательность нативных для процессора команд и выполнение этой последовательности. Кроме того, клиентская система содержит диспетчер подпрограмм и подсистему оценки поведения. Диспетчер подпрограмм сконфигурирован, в ответ на обнаружение наступления события-триггера, выбирать из нескольких байт-кодовых подпрограмм противовредоносной байт-кодовую подпрограмму в соответствии с событием-триггером. Подсистема оценки поведения сконфигурирована определять, содержит ли клиентская система вредоносную программу, в соответствии с результатом выполнения в виртуальной машине-трансляторе байт-кода противовредоносной байт-кодовой подпрограммы.
Краткое описание чертежей
[0010] Вышеупомянутые аспекты и преимущества настоящего изобретения могут быть лучше поняты из следующего подробного описания, сопровожденного ссылками на чертежи, где:
[0011] На фиг.1 показана клиентская система, защищенная от угроз компьютерной безопасности (например, от вредоносных программ) в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0012] На фиг.2 показан пример конфигурации аппаратных средств клиентской вычислительной системы в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0013] На фиг.3 показан пример структуры приложения безопасности в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0014] На фиг.4 проиллюстрирован пример алгоритма выполнения группы процессов в среде Windows, причем сплошными стрелками показан алгоритм в отсутствие перехватчиков событий, а пунктирными стрелками показаны изменения в алгоритме исполнения, внесенные посредством нескольких перехватчиков событий, работающих в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0015] На фиг.5 показан пример последовательности этапов, выполняемых приложением безопасности для конфигурации обнаружения вредоносного ПО в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0016] На фиг.6 показан пример байт-кодовой подпрограммы в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0017] На фиг.7 показан пример последовательности этапов, выполняемых диспетчером подпрограмм (фиг.3) в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0018] На фиг.8 показан пример последовательности этапов, выполняемых диспетчером подпрограмм для обработки очереди событий в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0019] На фиг.9 показан пример последовательности этапов, выполняемых виртуальной машиной-транслятором байт-кода (фиг.3) в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0020] На фиг.10 показан пример процесса обновления программного обеспечения в соответствии с некоторыми вариантами осуществления настоящего изобретения.
Осуществление изобретения
[0021] В нижеследующем описании подразумевается, что все соединения между схемами и устройствами могут представлять собой непосредственные действующие соединения или косвенные действующие соединения посредством промежуточных схем и устройств. Группа элементов включает один или несколько элементов. Любое упоминание элемента следует понимать, как относящееся к по меньшей мере одному элементу. Множество элементов включает по меньшей мере два элемента. Если не указано иного, любые описанные этапы способа не обязательно должны выполняться в определенном приведенном порядке. Первый элемент (например, данные), полученный из второго элемента, включает первый элемент, равный второму элементу, а также первый элемент, генерируемый посредством обработки второго элемента, и опционально другие данные. Принятие определения или решения в соответствии с параметром включает принятие определения или решения в соответствии с этим параметром и опционально в соответствии с другими данными. Если не дано другого определения, индикатор некоторого количества/данных может представлять собой само количество/данные, или индикатор, отличающийся от самого количества/данных. Компьютерная безопасность включает защиту пользователей и оборудования от непредусмотренного или неразрешенного доступа к данным и/или оборудованию, от непредусмотренной или неразрешенной модификации данных и/или оборудования и от повреждения данных и/или оборудования. Компьютерная программа представляет собой последовательность машинных команд, выполняющих задачу. Компьютерные программы, описанные в некоторых вариантах осуществления настоящего изобретения, могут представлять собой автономные программные объекты или подобъекты (например, подпрограммы, библиотеки) других компьютерных программ. Если не дано другого определения, процесс представляет собой частный случай машинной программы, например, приложение или часть операционной системы, и отличается тем, что имеет по меньшей мере поток выполнения и область виртуальной памяти, причем содержимое соответствующей области виртуальной памяти включает исполнимый код. Термин "платформа" используется для обозначения конкретной физической или виртуальной аппаратной конфигурации (например, содержащей определенную модель или семейство процессоров). Виртуальная платформа содержит виртуальное оборудование, например, виртуальный процессор. В настоящем описании термин "байт-код" относится к мультиплатформенному кодированию компьютерной программы - то есть, команды байт-кода могут быть переданы в одинаковой форме на разные платформы. В отличие от байт-кодовых команд, нативные для процессора команды содержат команды с архитектурой набора команд (Instruction Set Architecture, ISA), специфичные для физической или виртуальной платформы, выполняющей соответствующие нативные для процессора команды. Машиночитаемые носители включают долговременные носители, например, магнитные, оптические и полупроводниковые носители информации (например, жесткие диски, оптические диски, флеш-память, динамическую оперативную память), а также линии связи, например, токопроводящие кабели и волоконно-оптические линии связи. В соответствии с некоторыми вариантами осуществления изобретения среди прочего в настоящем изобретении предлагаются вычислительные системы, содержащие аппаратные средства (например, один или несколько микропроцессоров), запрограммированные для осуществления способов согласно настоящему изобретению, а также содержащиеся на машиночитаемых носителях команды на машинном языке для осуществления способов согласно настоящему изобретению.
[0022] В следующем описании раскрываются варианты осуществления настоящего изобретения посредством примеров, не обязательно носящих ограничительный характер.
[0023] На фиг.1 показан пример группы программных объектов, выполняющихся в клиентской системе 10, защищенной от угроз компьютерной безопасности в соответствии с некоторыми вариантами осуществления настоящего изобретения. Клиентская система 10 может представлять собой вычислительную систему (например, вычислительную машину конечного пользователя, корпоративный сервер и тому подобное). Другие примеры клиентской системы 10 включают мобильные устройства (например, ноутбуки, планшетные ПК), телекоммуникационные устройства (например, смартфоны), цифровые развлекательные устройства (телевизоры, игровые консоли и так далее), носимые вычислительные устройства (например, умные часы) или любое другое электронное устройство, имеющее процессор и память, и требующее защиту компьютерной безопасности.
[0024] В некоторых вариантах осуществления операционная система (ОС) 30 содержит программное обеспечение, предоставляющее интерфейс для аппаратных средств клиентской системы 10, и действует в качестве хоста для группы программных приложений 32a-c и 40. ОС 30 может представлять собой любую широкодоступную операционную систему, например, Windows, MacOS, Linux, iOS, или Android. Приложения 32a-c представляют собой стандартное программное обеспечение пользователя, например, приложение для обработки текстов, приложение для обработки изображений, приложение базы данных, браузер и приложение для электронной коммуникации. В некоторых вариантах осуществления приложение 40 безопасности выполняется одновременно с приложениями 32a-c и сконфигурировано определять, представляет ли какое-либо программное обеспечение, выполняемое в клиентской системе 10 (включая приложения 32a-c и ОС 30), угрозу компьютерной безопасности. Например, приложение 40 может обнаруживать вредоносное ПО (например, вирусы, шпионское ПО, рекламное ПО и тому подобное), функционирующее в клиентской системе 10. Кроме того, приложение 40 может быть сконфигурировано удалять такое вредоносное ПО или блокировать его иным образом и предупреждать пользователя клиентской системы 10 или системного администратора. Приложение 40 безопасности может представлять собой автономную программу, или оно может быть частью программного пакета, содержащего, помимо прочего, компоненты для защиты от вредоносных программ, спама и мошенничества. Ниже подробно описаны функции приложения 40 безопасности.
[0025] На фиг.2 показан пример аппаратной конфигурации клиентской системы 10, в которой клиентская система 10 представляет собой компьютерную систему. Специалисту в данной области понятно, что хотя аппаратная конфигурация других устройств, таких как планшетный ПК, мобильный телефон, умные часы и так далее, может отличаться от показанной конфигурации, настоящее описание может быть адаптировано к таким устройствам. Клиентская система 10 содержит группу физических устройств, включая аппаратный процессор 12, запоминающее устройство 14, группу устройств 16 ввода, группу устройств 18 вывода, группу устройств 20 хранения данных и группу сетевых адаптеров 22. Все эти устройства соединены между собой посредством контроллера-концентратора 24.
[0026] В некоторых вариантах осуществления настоящего изобретения процессор 12 содержит физическое устройство (например, микропроцессор, многоядерную микросхему, образованную на полупроводниковой подложке), выполненное с возможностью выполнения вычислительных и/или логических операций при помощи ряда сигналов и/или данных. В некоторых вариантах осуществления такие логические операции передают из запоминающего устройства 14 в процессор 12 в виде последовательности машинных команд (например, в виде машинного кода или программы другого типа). Запоминающее устройство 14 может содержать долговременный машиночитаемый носитель (например, оперативную память), хранящий данные/сигналы, полученные или сгенерированные процессором 12 в процессе выполнения команд. Устройства 16 ввода, помимо прочего, могут включать компьютерные клавиатуры, мыши и микрофоны, в том числе соответствующие аппаратные интерфейсы и/или адаптеры, позволяющие пользователю вводить данные и/или команды в систему 10. Устройства 18 вывода могут включать устройства отображения, например, мониторы и громкоговорители, а также аппаратные интерфейсы или адаптеры, например, графические платы, благодаря которым клиентская система 10 может передавать данные пользователю. В некоторых вариантах осуществления изобретения устройства 16 ввода и устройства 18 вывода, например, в случае устройств с сенсорным экраном, могут совместно использовать общую часть программного обеспечения. Устройства 20 хранения данных включают машиночитаемые носители, обеспечивающие возможность энергонезависимого хранения, чтения и записи машинных команд и/или данных. Пример устройства 20 хранения данных включает магнитные и оптические диски, устройства на основе флеш-памяти, а также съемные носители, например, CD-диски и/или DVD-диски и приводы. Благодаря группе сетевых адаптеров 22 клиентская система 10 может подключаться к вычислительной сети (например, к локальной сети, беспроводной сети) и/или другим устройствам/вычислительным системам. Контроллер-концентратор 24, в общем, представляет собой несколько систем, периферийных и/или внутрикристальных шин, и/или все другие схемы, обеспечивающие возможность обмена данными между процессором 12 и устройствами 14, 16, 18, 20 и 22. Например, контроллер-концентратор 22 может содержать северный мост, соединяющий процессор 12 с запоминающим устройством 14, и/или южный мост, соединяющий процессор 12 с устройствами 16, 18, 20 и 22.
[0027] В некоторых вариантах осуществления клиентская система 10 сконфигурирована задействовать виртуальную платформу (например, виртуальную машину). Такие конфигурации могут быть сконфигурированы с использованием технологии аппаратной виртуализации, например, гипервизора. Виртуальная платформа может содержать виртуализированные аппаратные компоненты, причем каждый такой виртуализированный компонент эмулирует, по меньшей мере частично, функциональные возможности соответствующего аппаратного компонента клиентской системы 10. Например, виртуальная платформа может включать виртуализированный процессор, виртуализированное запоминающее устройство и виртуальные устройства ввода/вывода. Операционная система 30, а также приложения 32a-c и приложение 40 безопасности могут выполняться на соответствующей виртуальной платформе, взаимодействуя при этом с виртуализированным оборудованием. Когда для выполнения программы используют виртуализированный процессор соответствующей платформы, говорят, что она выполняется на этой виртуальной платформе.
[0028] На фиг.3 показаны примеры компонентов приложения 40 безопасности, выполненного в соответствии с некоторыми вариантами осуществления настоящего изобретения. Приложение 40 безопасности содержит диспетчер 32 подпрограмм, подсистему 38 оценки поведения и виртуальную машину-транслятор 34 байт-кода (ВМТБ), соединенную с диспетчером 32 и подсистемой 38 оценки поведения. В некоторых вариантах осуществления приложение 40 дополнительно содержит вспомогательный модуль 36, соединенный с ВМТБ 34 и/или подсистемой 38 оценки поведения. Кроме того, диспетчер 32 подпрограмм может управлять очередью 31 событий, как подробно описано ниже.
[0029] В некоторых вариантах осуществления диспетчер 32 подпрограмм получает серию уведомлений 42 о событиях от группы перехватчиков 28a-c событий, установленных в различных программных объектах, выполняющихся в клиентской системе 10. Таким образом, уведомления 42 о событиях могут информировать диспетчер 32 о наступлении различных событий во время выполнения программы. Примеры сообщаемых событий в частности могут включать создание процесса или потока, внедрение кода, системный вызов, попытку создания на диске нового файла, попытку записи в файл, существующий на диске, попытку редактирования раздела системного реестра и попытку записи в конкретную область памяти. Некоторые из сообщаемых событий могут указывать на вредоносное ПО. Другие события могут сами по себе не указывать на угрозу безопасности, однако они могут сигнализировать о потенциальной угрозе, возникающей вместе с другими событиями. В ответ на получение уведомления (уведомлений) 42 диспетчер 32 может в соответствии с деталями уведомления 42 выбрать байт-кодовую подпрограмму и передать, вместе с группой параметров 47 сообщаемого события, соответствующую байт-кодовую подпрограмму в виртуальную машину-транслятор 34 байт-кода для выполнения. Выполнение соответствующей байт-кодовой подпрограммы может вызвать передачу в подсистему 38 оценки поведения индикатора 50 оценки. Подсистема 38 оценки поведения может содержать множество таких индикаторов оценки (например, баллов), и он может вызвать тревогу, если по меньшей мере один такой индикатор указывает на угрозу компьютерной безопасности. Подробно функции компонентов 32, 34 и 38 описаны ниже.
[0030] Чтобы проиллюстрировать работу перехватчиков 28a-c событий, на фиг.4 показан пример алгоритма выполнения группы программных объектов 60a-b в соответствии с некоторыми вариантами осуществления изобретения. Для простоты выбранные объекты 60a-b представляют собой процессы, выполняемые, например, в ОС Windows; аналогичные схемы могут быть представлены и для других операционных систем, например, Linux. Сплошные стрелки показывают алгоритм при отсутствии перехватчиков событий. Пунктирные стрелки показывают изменения в этом алгоритме, возникающие вследствие наличия перехватчиков 28a-c событий, выполняющихся в соответствии с некоторыми вариантами осуществления настоящего изобретения.
[0031] Пример процесса 60а загружает несколько динамически подключаемых библиотек (Dynamic Link Library, DLL) 62a-c. В примере, показанном на фиг.4, DLL 62c внедрена в процесс 60a (возможно вредоносным) процессом 60b. Если процесс 60a (или одна из его DLL) выполняет команду, запрашивающую какую-нибудь функцию системы, например, запись в дисковый файл или редактирование раздела регистра, то соответствующая команда вызывает прикладной программный интерфейс (Application Programming Interface - API) пользовательского режима, например, KERNEL32.DLL или NTDLL.DLL. В примере, показанном на фиг.4, соответствующее обращение к API пользовательского режима перехватывается перехватчиком событий 28a на уровне пользователя. Наряду с другими способами такие перехваты могут быть возможны посредством, например, внедрения или перехватывания DLL. «Перехватывание» представляет собой общий термин, применяемый в данной области для обозначения способа перехватывания обращений к функции, сообщений или событий, которыми обмениваются программные компоненты. Один из примеров использования перехватывания содержит изменение точки входа целевой функции посредством внедрения команды (в этом случае - перехватчика 28a событий), перенаправляющей выполнение к другой функции. После такого перехватывания другая функция может быть выполнена вместо целевой функции или перед целевой функцией. В примере, показанном на фиг.4, приложение 40 безопасности может подключаться к определенным функциям KERNEL32.DLL и/или NTDLL.DLL, чтобы дать соответствующим функциям команду на перенаправление выполнения на компонент приложения 40. Таким образом, приложение 40 может быть уведомлено всякий раз, когда процесс 60а пытается выполнить конкретное действие, идентифицированное в соответствии с функцией перехватывания.
[0032] В типичном алгоритме выполнения функция API пользовательского режима, вызванная объектом 60a, может запросить сервис у ядра операционной системы. В некоторых вариантах осуществления такие операции выполняются благодаря подаче системного вызова, например, SYSCALL и SYSENTER на платформах x86. В показанном на фиг.4 примере такие системные вызовы перехватываются перехватчиком 28b событий. В некоторых вариантах осуществления такой перехват, например, включает модификацию программы обработки системных вызовов посредством изменения значения, хранящегося в моделезависимом регистре (model-specific register, MSR) процессора 12, который эффективно перенаправляет выполнение соответствующей подпрограммы обработчика на перехватчик 28b или прямо в компонент приложения 40. Такие способы известны в данной области, как перехватывание с применением MSR. Благодаря этим способам приложение 40 безопасности может быть извещено о том, что программный объект пытается осуществить определенные системные вызовы.
[0033] После системного вызова управление процессором обычно передается ядру ОС 30. В некоторых вариантах осуществления перехватчик 28c событий на уровне ядра выполнен с возможностью перехватывать определенные действия ядра ОС и, следовательно, определять то, что оцениваемый процесс пытается выполнить определенные операции, которые могут указывать на вредоносность. Чтобы перехватить такие действия, некоторые варианты осуществления могут использовать ряд механизмов фильтрации, встроенных в ОС 30 и предоставляемых ОС 30. Например, в ОС Windows FltRegisterFilter может применяться для перехвата таких операций, как создание, открытие, запись в файл и удаление файла. В еще одном варианте осуществления перехватчик 28c событий может использовать ObRegisterCallback, чтобы перехватывать, создавать или дублировать операции с дескриптором объекта, или PsSetCreateProcessNotifyRoutine, чтобы перехватывать создание нового процесса. В еще одном варианте осуществления с применением CmRegisterCallbackEx могут перехватываться операции с реестром Windows, например, создание и установка разделов и значений реестра. Для других операционных систем, например, Linux, в данной области известны аналогичные механизмы фильтрации событий. В ответ на обнаружение наступления определенного события/действия перехватчик 28 событий может передать уведомление (уведомления) 42 в приложение 40 безопасности.
[0034] На фиг.5 показан пример последовательности этапов, выполняемых приложением 40 безопасности для конфигурирования обнаружения угроз компьютерной безопасности в соответствии с некоторыми вариантами осуществления настоящего изобретения. Показанная последовательность этапов может быть выполнена, например, при запуске приложения 40 безопасности. На этапе 102 приложение 40 устанавливает перехватчики 28a-c событий, например, при помощи перехвата различных функций ОС 30, изменения записи таблицы диспетчеризации и так далее. В данной области техники известны различные способы установки таких перехватчиков (например, установка "патчей", перехват с применением MSR, внедрение кода и так далее). Этап 104 устанавливает очередь 31 событий, применяемую в некоторых вариантах осуществления диспетчера подпрограмм для хранения информации о сообщенных событиях и последовательности, в которой произошли эти события. В некоторых вариантах осуществления очередь 31 событий организована, как очередь с обработкой в порядке поступления (first-in-first-out, FIFO). Пример очереди 31 может представлять собой незакрытую очередь с простой связью для нескольких производителей и для нескольких потребителей.
[0035] Последовательность этапов 106-108 обращается к базе данных 26 подпрограмм (см., например, фиг.3) и загружает из базы данных 26 в область памяти группу байт-кодовых подпрограмм. База данных 26 может содержаться в запоминающих устройствах 20 клиентской системы 10 или на машиночитаемом носителе, связанном с клиентской системой 10.
[0036] В некоторых вариантах осуществления каждая байт-кодовая подпрограмма, хранящаяся в базе данных 26, содержит ряд байт-кодовых команд, которые при выполнении в ВМТБ 34 обеспечивают то, что ВМТБ 34 выполняет определенную задачу, связанную с компьютерной безопасностью. Один из примеров байт-кодовых подпрограмм применяет ряд эвристических тестов для обнаружения, является ли определенный программный объект (или группа объектов) вредоносным. Другой пример байт-кодовой подпрограммы проверяет наступление в клиентской системе 10 определенной последовательности событий (поведенческой сигнатуры). Не все события этой последовательности должны быть вызваны одним и тем же объектом. Однако наступление такой последовательности событий может указывать на вредоносность. В одном из таких примеров вредоносные действия разделены между группой объектов, причем каждый член группы выполняет небольшую часть вредоносных действий. Таким образом, байт-кодовая подпрограмма, настроенная на корреляцию событий, соответствующих таким распределенным действиям, может выявить целую группу вредоносных объектов.
[0037] Другие примеры байт-кодовых подпрограмм выполняют счетные и/или статистические задачи (например, подсчет событий, связанных с параметрами событий). Другие байт-кодовые подпрограммы могут изменять метод взаимодействия программного обеспечения и/или пользователя клиентской системы 10 с ОС 30 и/или аппаратными устройствами (например, подпрограмма может предотвращать запись программного объекта на диск или доступ к сетевым адаптерам 22). Каждая байт-кодовая подпрограмма может осуществлять отдельный метод обнаружения и/или эвристическую процедуру. В некоторых вариантах осуществления каждая байт-кодовая подпрограмма может быть сконфигурирован обнаруживать наличие конкретной категории, семейства, типа или версии вредоносного агента. При обнаружении одной категории, семейства, типа или варианта вредоносного агента могут взаимодействовать несколько отдельных подпрограмм. В некоторых вариантах осуществления отдельная подпрограмма может участвовать в обнаружении нескольких категорий, типов, семейств или вариантов вредоносного ПО.
[0038] На фиг.6 показан пример байт-кодовой подпрограммы 70 в соответствии с некоторыми вариантами осуществления настоящего изобретения. Подпрограмма 70 содержит триггерный индикатор 72 и секцию 74 байт-кода. В некоторых вариантах осуществления триггерный индикатор 72 кодирует одно или несколько условий для выполнения соответствующей байт-кодовой подпрограммы. Соответствующее условие (соответствующие условия) могут быть оценены диспетчером 32 подпрограмм и/или ВМТБ 34 для определения того, должна ли выполняться соответствующая байт-кодовая подпрограмма в ответ на обнаружение наступления события определенного типа. Например, условие требует определения того, имеет ли конкретное триггерное выражение значение TRUE или FALSE, и это условие считается выполненным, если выражение имеет значение TRUE. В некоторых вариантах осуществления соответствующее триггерное выражение содержит индикатор типа события (например, образование процесса, определенный системный вызов и тому подобное). Кроме того, триггерное выражение может содержать параметры события, такие как путь, имя файла, идентификатор процесса и тому подобное. В некоторых вариантах осуществления триггерные выражения могут содержать переменные, используемые ВМТБ 34 и/или диспетчером 32 подпрограмм (см. пример ниже).
[0039] Триггерный индикатор 72 может дополнительно содержать метку, указывающую, как следует выполнять соответствующую секцию подпрограммы/байт-кода - синхронно или асинхронно. Здесь термин "синхронно" используется для обозначения метода выполнения байт-кодовой подпрограммы, при котором выполнение процесса, генерирующего событие, вызвавшее выполнение соответствующей подпрограммы (в данном случае для простоты именуемый инициирующим процессом) приостанавливается, пока выполняется соответствующая подпрограмма. В некоторых вариантах осуществления контекст исполнения потока инициирующего процесса используется для выполнения соответствующей байт-кодовой подпрограммы, которая неявно приостанавливает выполнение инициирующего процесса или по меньшей мере потока соответствующего процесса на время выполнения этой подпрограммы. Приостановка и/или возобновление выполнения инициирующего процесса может быть вызвано перехватчиком соответствующего события. Например, перехватчик 28a-c может перехватить поток инициирующего процесса и/или возобновить выполнение инициирующего процесса только в ответ на сигнал, полученный от диспетчера 32 подпрограмм. В отличие от синхронного выполнения, асинхронное выполнение относится к методу выполнения байт-кодовой подпрограммы, при котором инициирующему процессу разрешено продолжать выполнение, в то время как событие, вызвавшее соответствующее уведомление, помещается в очередь событий для последующей обработки. Наличие метки синхронизации, связанной с каждой подпрограммой или секцией байт-кода, может помочь диспетчеру 32 подпрограмм определить, как обрабатывать уведомления о событиях (подробности приведены ниже).
[0040] В некоторых вариантах осуществления секция 74 байт-кода содержит последовательность команд 74a-c байт-кода, вызывающих выполнение ВМТБ 34 задачи по защите компьютерной безопасности, связанной с подпрограммой 70. В некоторых вариантах осуществления каждая байт-кодовая команда представляет собой собственную команду виртуального процессора ВМТБ 34. В примере осуществления ВМТБ 34 представляет собой виртуальную машину Java, а команды 74a-c байт-кода являются командами языка Java. Для того, чтобы байт-кодовая команда выполнялась аппаратным процессором 12, соответствующая байт-кодовая команда сначала транслируется (интерпретируется или компилируется) в последовательность нативных для процессора команд, например, в команды архитектуры набора команд (ISA) процессора 12. Эти трансляции по меньшей мере частично выполняет ВМТБ 34. Когда приложение 40 безопасности выполняется на виртуальной платформе, ВМТБ 34 может транслировать каждую команду байт-кода в последовательность машинных команд, являющихся нативными для виртуального процессора соответствующей виртуальной платформы.
[0041] Пример системы байт-кодовых команд, в частности, может содержать команды байт-кода для установки значений, сравнения значений, выполнения переходов, команды цикла и команды вызова внешних функций (таких как функции вспомогательного модуля 36 на фиг.3). В некоторых варианта осуществления каждая байт-кодовая команда включает поле 76 кода операции, указывающее на операцию, и поле 78 операнда, указывающее на по меньшей мере один операнд.
[0042] Некоторые байт-кодовые подпрограммы могут иметь несколько сегментов, каждый из которых может иметь отдельный триггерный индикатор. В таких конфигурациях каждая секция подпрограммы может быть запущена отдельным условием. В таком примере байт-кодовая подпрограмма 70 может быть нацелена на обнаружение вымогательского ПО, то есть, вредоносных программ, шифрующих файлы пользователя и требующих, чтобы пользователь заплатил выкуп, прежде чем дешифровать соответствующие файлы. В частности, примеры вымогательского ПО включают программы-вымогатели CryptoWall, CryptoLocker и CTB-Locker. Такие вредоносные программы обычно вызывают шифрование API, перечисляют файлы пользователя и отображают сообщение о выкупе. Пример байт-кодовой подпрограммы, обнаруживающий такое вымогательское ПО, может включать четыре сегмента:
Сегмент 1: Триггер: EventType = вызов криптографической функции
Выход: установить статическую переменную CryptoAPICall = TRUE
Сегмент 2: Триггер: [EventType = перечислить файлы, применяя FindFirstFile API и CryptoAPICall = TRUE]
Произвести действие: проверить расширение перечисленных файлов
Выход: установить статическую переменную RansomDocSearch = TRUE, если перечисленные файлы имеют расширение PDF, DOCX, JPG, ...
Сегмент 3: Триггер: [EventType = попытка записи в дисковый файл и RansomDocSearch = TRUE]
Произвести действие: определить, входит ли файл в перечисленные файлы
Выход: установить RansomActivity = TRUE и увеличить оценочный бал на 30 пунктов
Сегмент 4: Триггер: [EventType = изменение экранного фона и RansomActivity = TRUE]
Выход: увеличить оценочный бал на 20 пунктов
В вышеприведенном примере сегмент 2 может выполняться только в том случае, если сегмент 1 выполнен хотя бы один раз, сегмент 3 может выполняться только при выполнении сегмента 2 и так далее.
[0043] В некоторых вариантах осуществления каждая байт-кодовая подпрограмма содержит секцию инициализации, секцию очистки и секцию, выполняемую в случае ошибки. Секция инициализации может содержать инициализацию переменных, она может выполняться один раз, когда соответствующая байт-кодовая подпрограмма загружается в память (например, на этапе 108 на фиг.5). Секция очистки может быть выполнена после завершения соответствующей подпрограммы. Секция, выполняющаяся в случае ошибки, может содержать команды, выполняемые в случае наступления ошибки во время выполнения любой другой секции байт-кодовой подпрограммы.
[0044] В некоторых вариантах осуществления на этапе 110 (фиг.5), приложение 40 безопасности может анализировать загруженные байт-кодовые подпрограммы и создавать ассоциативный индикатор (например, таблицу или хеш-индекс), отражающий ассоциацию между типами событий и байт-кодовыми подпрограммами, запускаемыми соответствующими типами событий. Благодаря такой ассоциации диспетчер 32 подпрограмм может выбрать подпрограммы для выполнения в ответ на обнаружение наступления определенных событий.
[0045] На фиг.7 показан пример последовательности этапов, выполняемых диспетчером 32 подпрограмм в соответствии с некоторыми вариантами осуществления настоящего изобретения. Последовательность этапов 112-114 ожидает от перехватчиков 28a-c уведомления о событиях. В ответ на получение уведомления 42 о событии, этап 116 определяет набор параметров 47 соответствующего сообщенного события. Эти параметры могут быть специфичными для события. В частности, пример параметров события включают идентификатор процесса или потока (например, идентификационный номер процесса), выполняющего сообщенное действие, имя файла, путь, адрес запоминающего устройства и операнд машинной команды. Параметры события могут быть определены перехватчиками 28a-c и содержаться в уведомлении 42 о событии, или они могут быть определены диспетчером 32 подпрограмм в ответ на получение уведомления 42. В одном из примеров, в котором сообщенным событием является попытка создания нового дискового файла, параметры события могут включать имя создаваемого файла. Соответствующее имя файла может быть определено перехватчиком событий и передано в диспетчер 32 подпрограмм, как часть уведомления 42. В другом примере идентификатор процесса, выполняющего конкретное действие, может быть определен непосредственно диспетчером 32 подпрограмм, например, посредством анализа структуры данных, используемых ОС 30 для управления процессами, выполняющимися в данный момент времени. В операционной системе Windows каждый процесс представляется, как блок процесса (EPROCESS), который, помимо прочего, содержит дескрипторы для каждого потока соответствующего процесса и уникальный идентификационный номер процесса, благодаря которому ОС 30 может идентифицировать соответствующий процесс из множества выполняющихся процессов. Для других операционных систем, например, Linux, имеются аналогичные представления процесса/потока.
[0046] Наступление определенных событий может потребовать синхронного выполнения связанной с ними байт-кодовой подпрограммы. Примеры таких событий, помимо прочего, включают себя события со значительными и/или необратимыми последствиями для соответствующей клиентской системы, такие как прекращение процесса, удаление файла и удаление раздела реестра. Для управления синхронным выполнением некоторые варианты осуществления диспетчера 32 подпрограмм могут содержать список кортежей <событие, подпрограмма>, где каждый кортеж указывает, что соответствующая подпрограмма должна выполняться синхронно в ответ на наступление соответствующего события. Такие кортежи могут быть статическими, например, некоторые подпрограммы (или сегменты подпрограммы) обязательно выполняются синхронно при каждом наступлении соответствующего триггера. Статические кортежи могут быть идентифицированы, например, в соответствии со значением метки синхронизации, связанной с соответствующей подпрограммой/секцией (см. выше). Другие кортежи <событие, подпрограмма> могут быть ситуативными, то есть они могут действовать только при определенных обстоятельствах. Такие кортежи могут быть динамически добавлены и/или удалены из списка, например, в ответ на наступление других событий и т.д. В некоторых вариантах осуществления список кортежей <событие, подпрограмма>, зарегистрированных для синхронной обработки, может изменяться в соответствии с набором опций, указанным пользователем (например, администратором) соответствующей клиентской системы. В общем, синхронная обработка/выполнение байт-кодовых подпрограмм может обеспечить более высокую безопасность, но негативно повлиять на взаимодействие с пользователем, замедляя некоторые задачи. Различные пользователи могут выбирать разные параметры безопасности. В некоторых вариантах осуществления каждая настройка (например, желательный уровень безопасности) может соответствовать отдельной структуре списка <событие, подпрограмма>.
[0047] На этапе 120 диспетчер 32 подпрограмм определяет, требует ли наступление инициирующего события, указанного в текущем уведомлении о событии, синхронной обработки, например, путем определения, существует ли по меньшей мере один кортеж <событие, подпрограмма>, содержащий соответствующее событие. Определение на этапе 120 может продолжаться в соответствии с типом соответствующего события, в соответствии с меткой синхронизации уведомления 42 или в соответствии с триггерным индикатором для байт-кодовой подпрограммы.
[0048] Если наступление соответствующего события не требует синхронной обработки, на этапе 122 диспетчер 32 подпрограмм помещает соответствующее событие в очередь 31 событий. Следующий этап 124 передает сигналы в перехватчик (перехватчики) 28a-c, чтобы возобновить выполнение процесса/потока, вызывающего соответствующее уведомление о событии.
[0049] Когда наступление сообщаемого в настоящее время события требует синхронной обработки, на этапе 126 диспетчер 32 подпрограмм выбирает байт-кодовую подпрограмму в соответствии с соответствующим событием. Этап 126 может включать идентификацию подмножества байт-кодовых подпрограмм, связанных с типом текущего события, и оценку условий триггера для каждой такой подпрограммы. Этап 130 содержит запуск экземпляра ВМТБ 34, созданного с помощью соответствующей байт-кодовой подпрограммы. В некоторых вариантах осуществления потока выполнения инициирующего процесса используют для выполнения соответствующего экземпляра ВМТБ 34. Если этап 126 идентифицирует более одной байт-кодовой подпрограммы, инициируемой текущим уведомлением о событии, последовательность операций 128-130 может быть повторно выполнена для каждой такой подпрограммы.
[0050] В некоторых вариантах осуществления на этапе 132 диспетчер 32 подпрограмм ожидает ответа от подсистемы 38 оценки поведения и/или ВМТБ 34, показывающего результат оценки безопасности процесса, вызывающего уведомление 42. Оценка, например, может показывать, является ли соответствующий процесс вредоносным. В альтернативном варианте осуществления на этапе 132 диспетчер 32 может ждать, пока ВМТБ 34 не завершит выполнение текущей байт-кодовой подпрограммы. Если выполнение соответствующей подпрограммы завершено, и/или закончена оценка безопасности, диспетчер 32 может передать перехватчику (перехватчикам) 28a-c событий сигнал, чтобы возобновить выполнение процесса, вызывающего уведомление 42 о событии.
[0051] На фиг.8 показан пример последовательности этапов, выполняемых диспетчером 32 подпрограмм для обработки очереди 31 событий в соответствии с некоторыми вариантами осуществления настоящего изобретения. Последовательность этапов 142-144 ожидает, пока очередь 31 не будет содержать хотя бы один элемент. Этап 146 удаляет событие из очереди. Если очередь 31 имеет тип FIFO, события удаляются в том порядке, в котором они были помещены. На этапе 148 диспетчер 32 подпрограмм оценивает условия триггера в соответствии с типом и/или параметрами события, чтобы идентифицировать подмножество байт-кодовых подпрограмм, инициируемых соответствующим событием. В последовательности этапов 150-152-154 диспетчер 32 выбирает каждую такую подпрограмму и отправляет ее для выполнения в ВМТБ 34.
[0052] На фиг.9 показан пример последовательность этапов, выполняемых виртуальной машиной-транслятором 34 байт-кода при выполнении байт-кодовой подпрограммы. В некоторых вариантах осуществления ВМТБ 34 содержит программную эмуляцию компьютерной системы, содержащей виртуальный процессор, виртуальную память и набор виртуальных регистров. Виртуальный процессор ВМТБ 34 рассматривает команды байт-кода как набор нативных команд. Однако, поскольку команды байт-кода не являются нативными для платформы, на которой выполняется приложение 40 безопасности, выполнение байт-кодовых команд включает трансляцию каждой команды байт-кода в последовательность машинных команд, являющихся нативными для процессора командами соответствующей платформы. В некоторых вариантах осуществления ВМТБ 34 содержит интерпретатор кода, сконфигурированный интерпретировать и выполнять по очереди байт-кодовые команды. В альтернативном варианте осуществления ВМТБ 34 может включать компилятор по принципу «точно вовремя» (Just-In-Time, JIT-компилятор), сконфигурированный компилировать все команды байт-кодовой подпрограммы в подпрограмму в нативном коде. Затем целиком выполняется скомпилированная подпрограмма в нативном коде. В некоторых вариантах осуществления ВМТБ 34 содержит библиотеку функций (например, классов), закодированных в наборе нативных для процессора 12 команд, причем каждый тип команды байт-кода соответствует отдельной функции этой библиотеки. В таких случаях интерпретация команды байт-кода может содержать идентификацию соответствующей функции в соответствии с командой байт-кода и выполнение соответствующей функции. Примеры виртуальных машин-трансляторов байт-кода включают, в частности, виртуальные машины Java и Lua.
[0053] В некоторых вариантах осуществления область виртуальной памяти ВМТБ 34 разделена на несколько областей, причем каждая область хранит отдельный тип переменных. Некоторые переменные могут быть переменными типа LOCAL; значения таких переменных могут быть уникальными для текущего экземпляра соответствующей секции подпрограммы или байт-кода. Другие переменные могут быть переменными типа STATIC (предназначенными для подпрограммы определенного типа, совместно используемыми во всех секциях кода подпрограммы этого конкретного типа и сохраняющими свое значение в нескольких экземплярах одной и той же секции подпрограммы/байт-кода). Другие переменные могут быть переменными типа GLOBAL (совместно используемыми во всех подпрограммах и экземплярах байт-кода). Некоторые варианты осуществления ВМТБ 34 также могут работать с переменными типа PROCESS. Эти переменные могут быть однозначно привязаны к кортежу подпрограмма-процесс, совместно используемому во всех секциях кода подпрограммы этого конкретного типа, и сохранять свое значение в нескольких экземплярах одной и той же секции подпрограммы/байт-кода, но отличаться от одного процесса к другому. Если виртуальная память ВМТБ 34 сконфигурирована хранить переменные типа PROCESS, такие переменные могут быть инициализированы один раз для каждого процесса, контролируемого перехватчиками 28a-c событий, и удалены после завершения соответствующего процесса.
[0054] В некоторых вариантах осуществления приложение 40 безопасности поддерживает пул потоков для использования ВМТБ 34. В одном примере пул потоков содержит такое же число потоков, что и число логических ЦП процессора 12. Все потоки пула потоков могут быть установлены на один и тот же уровень приоритета. При диспетчеризации байт-кодовых подпрограмм диспетчер 32 может ожидать следующего доступного потока. Таким образом, отдельные экземпляры ВМТБ 34 могут работать независимо и одновременно в произвольных контекстах памяти. В некоторых вариантах осуществления экземпляры ВМТБ 34 могут выполняться вне очереди, то есть, не обязательно в том же порядке, в котором инициализировавшие их события были помещены в очередь 31 событий.
[0055] В ответ на прием индикатора 46 подпрограммы (например, адрес памяти для байт-кодовой подпрограммы) от диспетчера 32, подпрограмм ВМТБ 34 может обратиться к секции 74 байт-кода. Нижеследующие показанные этапы описывают вариант осуществления, в котором ВМТБ 34 интерпретирует и выполняет по очереди каждую команду байт-кода, без утраты общности. Специалисту в данной области техники понятно, что описанное может быть адаптировано для описания работы варианта осуществления, использующего JIT-компиляцию. В последовательности этапов 166-168 ВМТБ 34 может интерпретировать команду байт-кода и выполнить ряд операций, указанных соответствующей командой.
[0056] Некоторые команды байт-кода требуют сложной функциональности, например, функциональности, предоставляемой ОС 30. Чтобы свести сложность ВМТБ 34 к минимуму и уменьшить число уязвимых мест ВМТБ 34, некоторые варианты осуществления обеспечивают такую функциональность ВМТБ 34 посредством прикладного программного интерфейса (API), выполненного в виде вспомогательного модуля 36 (фиг.3). Модуль 36 может содержать набор вспомогательных функций, сконфигурированных содействовать ВМТБ 34, в частности, выполняя такие задачи, как проверка существования файла, попытка сопоставить содержимое раздела памяти с сигнатурой, указывающей на вредоносность, перечисление файлов и задание оценочных баллов. Когда текущая байт-кодовая команда вызывает вспомогательную функцию, на этапе 170 виртуальная машина-транслятор 34 байт-кода передает во вспомогательный модуль 36 вызов 48 API. Вспомогательный модуль 36 может дополнительно взаимодействовать с OC 30.
[0057] В некоторых вариантах осуществления вспомогательный модуль 36 может иметь функциональные возможности, позволяющие в ответ на вызов API из виртуальной машины-транслятора 34 байт-кода добавлять новые события в очередь 31 событий (как видно, например, на фиг.3). В одном таком примере первая часть байт-кодовой подпрограммы выполняется синхронно. Затем ВМТБ 34 может вызвать вторую часть соответствующей подпрограммы, выполняемую позже (асинхронно), путем вызова вспомогательного модуля 36, чтобы добавить в очередь 31 новое событие, выбранное для запуска выполнения второй части подпрограммы. В другом примере описанный механизм может использоваться для выполнения каскада байт-кодовых подпрограмм, причем каждая подпрограмма определяет выполнение следующего элемента каскада посредством подачи команды вспомогательному модулю 36 на вставку нового события в очередь 31 событий.
[0058] Некоторые байт-кодовые подпрограммы выдают индикатор 50 оценки в подсистему 38 оценки поведения, например, посредством вызова API для подсистемы 38 или вспомогательного модуля 36. Индикатор 50 оценки может включать оценочные баллы, отражающие вероятность того, что конкретный контролируемый объект (например, процесс) является вредоносным. Другой пример индикатора 50 оценки включает приращение, на которое должен быть увеличен оценочный балл, сохраняемый для соответствующего объекта подсистемой 38 оценки поведения. Еще один пример индикатора 50 включает вердикт (например, чистый/вредоносный). В некоторых вариантах осуществления последовательность этапов 174-176 определяет, выполнено ли условие оценки (например, рассчитано ли приращение баллов), и, если это условие выполнено, передает индикатор 50 в подсистему 38 оценки поведения.
[0059] На этапе 178 могут проверить, выполнено ли условие завершения, и если это условие не выполнено, ВМТБ 34 может перейти к следующей команде байт-кода текущей подпрограммы (см. этап 166). В некоторых вариантах осуществления этап 178 может содержать определение того, была ли выполнена последняя байт-кодовая команда текущей секции подпрограммы/байт-кода. Некоторые байт-кодовые подпрограммы могут быть сконфигурированы для выполнения в течение максимального времени; в таких случаях этап 178 может определять, прошел ли максимально допустимый период времени с момента запуска текущей секции подпрограммы/байт-кода. Еще один пример условия завершения может выполняться всякий раз, когда возникает ошибка во время выполнения соответствующей секции подпрограммы/байт-кода. Если условие завершения выполнено, этап 180 может прервать текущую исполняемую ВМТБ 34 и выпустить соответствующий поток в пул потоков.
[0060] В некоторых вариантах осуществления подсистема 38 оценки поведения поддерживает централизованную базу знаний контролируемых программных объектов, таких как процессы и потоки, выполняемые в клиентской системе 10. Для каждого такого объекта подсистема 38 оценки поведения может сохранять индикатор отношений родства (например, для индикации отношений «родительский процесс - дочерний процесс», отношений между процессами, которые внедряют код, и получателями внедряемого кода и так далее). Некоторые варианты осуществления подсистемы 38 оценки поведения дополнительно сохраняют набор оценочных баллов, связанных с каждым контролируемым объектом. Каждая такая оценка может быть определена в соответствии с особым критерием (например, каждую оценку обновляют посредством конкретной байт-кодовой подпрограммы). В некоторых вариантах осуществления подсистема 38 оценки поведения сконфигурирована определять в соответствии с такими оценками, представляет ли каждый контролируемый объект угрозу компьютерной безопасности. Если такая угроза идентифицирована, подсистема 38 оценки поведения может принять меры против вредоносного ПО соответствующего вредоносного объекта, например, чтобы прервать выполнение соответствующего программного объекта или заблокировать его иным образом. Кроме того, подсистема 38 оценки поведения может предупредить пользователя клиентской системы 10 и/или системного администратора.
[0061] Системы и способы, описанные выше в качестве примера, позволяют защитить клиентскую систему от таких угроз компьютерной безопасности, как вредоносное и шпионское ПО. Для каждого из множества исполняемых объектов, таких как процессы и потоки, выполняемого в клиентской системе, приложение безопасности поддерживает набор оценочных баллов, указывающих на вероятность того, что соответствующий объект представляет угрозу. В некоторых вариантах осуществления такие оценки создают в ответ на выполнение множества подпрограмм обнаружения, причем каждая подпрограмма сконфигурирована оценивать контролируемый объект в соответствии с критериями, специфичными для каждой подпрограммы обнаружения. Подпрограммы обнаружения могут реализовывать различные эвристические правила компьютерной безопасности; отдельные подпрограммы могут соответствовать различным эвристическим правилам. Например, одна подпрограмма может определять, выполняет ли контролируемый объект последовательность действий, указывающую на вредоносность и известную в данной области, как поведенческая сигнатура. Выполнение подпрограмм обнаружения может быть инициировано выборочно, в ответ на обнаружение наступления определенных событий-триггеров.
[0062] В некоторых вариантах осуществления настоящего изобретения подпрограммы обнаружения составляются в байт-коде, то есть с использованием пользовательского набора команд, которые без труда выполнены процессором соответствующей клиентской системы быть не могут. Вместо этого подпрограммы обнаружения, прежде чем выполнять соответствующие команды, выполняются в виртуальной машине-трансляторе байт-кода, использующей интерпретацию или способы JIT-компиляции, чтобы транслировать каждую байт-кодовую подпрограмму в набор машинных команд, являющихся нативными для процессора командами соответствующей платформы.
[0063] В обычных системах компьютерной безопасности подпрограммы обнаружения обычно предварительно компилируются в нативный для целевой платформы код и упаковываются вместе с остальными компонентами приложения безопасности. Хотя такие конфигурации позволяют оптимизировать и быстро выполнять соответствующие подпрограммы обнаружения, разрабатывать, обновлять и развертывать их в клиентских вычислительных системах может быть сложно. Например, любое небольшое изменение в подпрограмме обнаружения или введение новой подпрограммы/эвристики обнаружения может потребовать повторной компиляции большого блока кода приложения безопасности и применения относительно большого обновления программного обеспечения (например, несколько мегабайт). Более того, ошибка программного обеспечения в обновлении может потенциально привести к сбою всего приложения безопасности, поэтому перед доставкой клиентам обновления обычно требуют тщательного тестирования.
[0064] Напротив, использование байт-кодовых подпрограмм обнаружения позволяет некоторым вариантам осуществления настоящего изобретения существенно сократить время выхода на рынок решения защиты, а также упростить процесс обновления программного обеспечения. Поскольку байт-кодовые подпрограммы обнаружения интерпретируются или компилируются "на лету", они могут быть разработаны и доставлены клиентам отдельно от основных компонентов решения защиты. Новые эвристики обнаружения могут быть разработаны и реализованы совершенно независимо от существующих подпрограмм. Как показано на фиг.10, обновление программного обеспечения может содержать только набор байт-кодовых подпрограмм 70, составляющих всего несколько сотен байт. Чтобы активировать новые возможности обнаружения, соответствующая байт-кодовая подпрограмма (подпрограммы) могут быть внедрены в обычную базу данных 26 подпрограмм, а затем зарегистрированы в диспетчере 32 подпрограмм. Кроме того, поскольку каждая подпрограмма обнаружения выполняется в экземпляре виртуальной машины-транслятора байт-кода и отдельно от других компонентов приложения безопасности, ошибка или ошибка программного обеспечения, имеющаяся в байт-кодовой подпрограмме, менее вероятно повлияют на работу другого программного обеспечения.
[0065] В некоторых вариантах осуществления настоящего изобретения, чтобы обеспечить интерпретацию и/или JIT-компиляцию подпрограмм обнаружения, может использоваться широкодоступная виртуальная машина-транслятор байт-кода, такая как виртуальная машина Java или Lua. Однако, чтобы минимизировать архитектурную сложность и уменьшить число уязвимых мест виртуальной машины-транслятора байт-кода, некоторые варианты осуществления используют специальную виртуальную машину-транслятор, обладающую минимальной функциональностью. Когда в подпрограмме обнаружения требуется более сложная функциональность, некоторые варианты осуществления обеспечивают требуемую функциональность через отдельный вспомогательный API.
[0066] Поскольку каждый экземпляр виртуальной машины-транслятора байт-кода может выполняться в рамках отдельного независимого контекста памяти, некоторые варианты осуществления настоящего изобретения могут предоставлять такие же преимущества безопасности, как те, что предоставляются, например, благодаря контейнеризации. Другие преимущества настоящего изобретения включают переносимость. Хотя в отношении некоторых компонентов предлагаемого решения защиты может потребоваться отдельная компиляция для каждого типа клиентского устройства (например, вычислительной системы, смартфона и т.д.), байт-кодовые подпрограммы не зависят от платформы в том смысле, что на все платформы и клиентские устройств могут доставляться идентичные подпрограммы обнаружения, включая обновления.
[0067] Эти преимущества настоящего изобретения могут быть достигнуты за счет затрат на память и скорости обработки. Хотя предварительно скомпилированные решения оптимизированы для максимальной производительности конкретной платформы, интерпретация и/или JIT-компиляция подпрограмм обнаружения могут сделать некоторые варианты настоящего изобретения более медленными, чем предварительно скомпилированные приложения безопасности.
[0068] Специалисту понятно, что вышеописанные варианты могут быть изменены во многих отношениях, не выходя за объем защиты настоящего изобретения. Таки образом, объем изобретения определен следующей формулой изобретения и ее юридическими эквивалентами.