RU2634171C1 - Способ выполнения кода интерпретатором - Google Patents

Способ выполнения кода интерпретатором Download PDF

Info

Publication number
RU2634171C1
RU2634171C1 RU2016148489A RU2016148489A RU2634171C1 RU 2634171 C1 RU2634171 C1 RU 2634171C1 RU 2016148489 A RU2016148489 A RU 2016148489A RU 2016148489 A RU2016148489 A RU 2016148489A RU 2634171 C1 RU2634171 C1 RU 2634171C1
Authority
RU
Russia
Prior art keywords
code
interpreter
execution
auxiliary
auxiliary code
Prior art date
Application number
RU2016148489A
Other languages
English (en)
Inventor
Василий Александрович Давыдов
Дмитрий Валерьевич Виноградов
Роман Юрьевич Гаврильченко
Дмитрий Александрович Кирсанов
Original Assignee
Акционерное общество "Лаборатория Касперского"
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Акционерное общество "Лаборатория Касперского" filed Critical Акционерное общество "Лаборатория Касперского"
Priority to RU2016148489A priority Critical patent/RU2634171C1/ru
Priority to US15/446,157 priority patent/US10275597B2/en
Priority to CN201710447504.1A priority patent/CN108228312B/zh
Priority to EP17176091.1A priority patent/EP3333746B1/en
Priority to JP2017126083A priority patent/JP6400794B2/ja
Application granted granted Critical
Publication of RU2634171C1 publication Critical patent/RU2634171C1/ru
Priority to US16/296,869 priority patent/US10579799B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

Область техники
Изобретение относится к интерпретаторам, а более конкретно к способам выполнения кода интерпретатором.
Уровень техники
Для анализа кода на наличие вредоносного функционала все чаще используются эмуляторы. В частности, таким способом обычно анализируется код, написанный на сценарных языках программирования. В общем случае эмулятор включает синтаксический анализатор (англ. parser) и интерпретатор. Синтаксический анализатор преобразовывает анализируемый программный код в промежуточный код (например, байт-код). Интерпретатор, используя промежуточный код и среду выполнения, последовательно выполняет (интерпретирует) инструкции промежуточного кода в соответствии с правилами интерпретации. Во время эмуляции у анализируемого кода нет доступа к ресурсам реального компьютера, т.к. его выполнение происходит в эмулируемой среде. Таким образом, выполняемый в эмуляторе анализируемый код не сможет удалить или изменить файлы на компьютере, считать данные из файлов и другим образом нанести ущерб компьютерной системе.
В то же время достаточно сложно реализовать эмулятор, который мог бы интерпретировать все объекты (функции, процедуры и методы, экземпляры классов и т.д.) выполняемого кода. Злоумышленники пользуются этим фактом и часто включают в свой программный код редко используемые объекты. Поэтому, если возвращаемое значение какой-либо функции не соответствует ожидаемому значению выполнения этой функции, вредоносный код «понимает», что он исполняется внутри эмулятора и прекращает свое дальнейшее исполнение или же не исполняет вредоносный функционал, чтобы не быть обнаруженным.
В свою очередь, производители антивирусных приложений стремятся оперативно добавлять в эмулятор правила интерпретации для новых объектов, включаемых злоумышленниками в свой вредоносный код. Однако для этого обычно требуется изменение программного кода самого эмулятора. После каждого такого изменения требуется тестирование и отладка программного кода эмулятора, и, таким образом, обновленная версия эмулятора не может быть оперативно предоставлена пользователям антивируса. Возникает техническая проблема, заключающаяся в необходимости интерпретации (т.е. выполнения интерпретатором) инструкций исследуемого программного кода, содержащих объекты, для которых у интерпретатора отсутствует правило интерпретации (т.е. программный код, результат выполнения которого соответствует результату выполнения соответствующей инструкции), без изменения самого программного кода интерпретатора. Объектом может быть процедура, экземпляр класса, метод или переменная экземпляра класса, сценарий или даже файл. Сценарий также называют скриптом (англ. script).
В работе (Min Gyung Kang et al., 2009)1 (1 Min Gyung Kang, Heng Yin, Steve Hanna, Stephen McCamant, Dawn Song. Emulating Emulation-Resistant Malware. VMSec'09, November 9, 2009, Chicago, Illinois, USA.) описан способ эмуляции кода, затрудняющего свою эмуляцию. Анализируемый код выполняется на эмуляторе и в так называемой «базовой системе» (англ. reference platform). Базовая система, в отличие от эмулятора, непригодна для анализа кода, однако она наиболее точно соответствует реальной компьютерной системе. На основе сравнения результатов выполнения на эмуляторе и в базовой системе определяют инструкции, после которых происходит расхождение в выполнении кода. Таким образом, найденные инструкции соответствуют коду, затрудняющему эмуляцию.
Однако описанный способ не позволяет выполнить инструкции кода, содержащие объекты, для которых у эмулятора (интерпретатора) отсутствует правило интерпретации и, таким образом, не решает упомянутую техническую проблему.
Раскрытие сущности изобретения
Технический результат заключается в улучшении качества выполнения интерпретатором исследуемого программного кода путем интерпретации вспомогательного программного кода.
Технический результат заключается в обеспечении выполнения интерпретатором инструкций исследуемого программного кода, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого интерпретатора путем интерпретации вспомогательного программного кода.
Согласно варианту реализации используется реализуемый компьютером способ выполнения программного кода интерпретатором, в котором: последовательно выполняют каждую инструкцию исследуемого кода; когда интерпретатор переходит к выполнению инструкции исследуемого кода, содержащей неизвестный объект, для которого у интерпретатора отсутствует правило интерпретации, приостанавливают дальнейшее выполнение исследуемого кода, при этом объект является одним из: процедурой; экземпляром класса; методом или переменной экземпляра класса; сценарием; файлом; получают вспомогательный код, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код содержит известные объекты, для которых в интерпретаторе присутствует правило интерпретации; последовательно выполняют каждую инструкцию вспомогательного кода; и после завершения выполнения вспомогательного кода возобновляют выполнение исследуемого кода на втором шаге со следующей инструкции исследуемого кода, пока не будет выполнена последняя инструкция исследуемого кода.
Согласно одному из частных вариантов реализации инициализируют среду выполнения интерпретатора.
Согласно другому частному варианту реализации вспомогательный код содержится в среде выполнения интерпретатора и на третьем шаге вспомогательный код получают из среды выполнения интерпретатора.
Согласно еще одному частному варианту реализации вспомогательный код получают из локальной базы.
Согласно одному из частных вариантов реализации инициализируют среду выполнения интерпретатора для вспомогательного кода.
Согласно другому частному варианту реализации получают упомянутый вспомогательный код из удаленной базы, когда упомянутый вспомогательный код отсутствует в локальной базе.
Согласно еще одному частному варианту реализации выполнение кода и выполнение вспомогательного кода включает следующие этапы: лексический анализ, синтаксический анализ, создание промежуточного кода и интерпретацию промежуточного кода согласно правилам интерпретации.
Согласно одному из частных вариантов реализации вспомогательный код дополнительно содержит по меньшей мере один другой неизвестный объект, для которого получают другой вспомогательный код, результат выполнения упомянутого другого вспомогательного кода соответствует результату выполнения другого неизвестного объекта.
Краткое описание чертежей
Дополнительные цели, признаки и преимущества настоящего изобретения будут очевидными из прочтения последующего описания осуществления изобретения со ссылкой на прилагаемые чертежи, на которых:
Фиг. 1 представляет общий вид системы настоящего изобретения.
На Фиг. 2 представлена подробная схема эмулятора.
На Фиг. 3 представлен способ осуществления настоящего изобретения.
Фиг. 4 представляет пример компьютерной системы общего назначения.
Осуществление изобретения
Объекты и признаки настоящего изобретения, способы для достижения этих объектов и признаков станут очевидными посредством отсылки к примерным вариантам осуществления. Однако настоящее изобретение не ограничивается примерными вариантами осуществления, раскрытыми ниже, оно может воплощаться в различных видах. Сущность, приведенная в описании, является ничем иным, как конкретными деталями, обеспеченными для помощи специалисту в области техники в исчерпывающем понимании изобретения, и настоящее изобретение определяется в объеме приложенной формулы.
Фиг. 1 представляет общий вид системы настоящего изобретения. Антивирус 101 является компьютерным приложением обеспечения информационной безопасности и передает анализируемый исходный программный код 102 эмулятору 200. В частном варианте реализации эмулятор 200 является частью антивируса 101. Исходный программный код 102 может быть написан на сценарном (скриптовом) языке программирования, таком как JavaScript, VB Script, Python и др. Эмулятор 200 включает в себя лексический анализатор 103, синтаксический анализатор 104, семантический анализатор 105 и генератор промежуточного кода 106. Основой эмулятора 200 является интерпретатор 107. Интерпретатор 107 связан со средством журналирования 115 и средством анализа 113. В частном варианте реализации интерпретатор 107 содержит виртуальную машину.
Лексический анализатор 103 считывает поток символов, составляющих исходный программный код 102, и группирует эти символы в значащие последовательности - лексемы. Для каждой лексемы строится выходной токен, который передается синтаксическому анализатору 104. Синтаксический анализатор 104 использует токены для создания древовидного промежуточного кода, описывающего грамматическую структуру потока токенов - синтаксическое дерево. Семантический анализатор 105 использует синтаксическое дерево для проверки исходного программного кода на семантическую согласованность с определением языка. Генератор промежуточного кода 106 создает промежуточный код, который получает на вход интерпретатор 107. Промежуточный код является единым вне зависимости от языка, на котором написан исходный код 102.
Выполнение кода в интерпретаторе 107 (или, что то же самое - интерпретация) происходит в среде выполнения 110. Среда выполнения 110 (англ. run-time environment) решает вопросы схемы размещения и памяти для именованных объектов выполняемого кода, предоставляет механизмы для доступа к переменным, связи между процедурами, механизмы передачи параметров, взаимодействие с операционной системой, устройствами ввода-вывода и другими программами. Соответственно инициализация среды выполнения 110 заключается в выделении памяти и в предоставлении доступа к переменным и данным интерпретатору 107. Следует отметить, что интерпретатор 107 может выполнять лишь промежуточный код, созданный генератором промежуточного кода 106. Для удобства изложения понятия исследуемый код и промежуточный код считаются равнозначными. Промежуточный или исследуемый код является машинно-независимым кодом (будет выполнен интерпретатором для различных компьютерных архитектур). Таким образом, вне зависимости от языка программирования, на котором был написан исходный код 102, в результате работы лексического, синтаксического и семантического анализаторов 103-105 и генератора промежуточного кода 106 будет создан исследуемый код единой языковой грамматики, который сможет выполнить интерпретатор 107.
Локальная база 111 связана со средой выполнения 110 и содержит правила интерпретации для объектов исследуемого кода. В частном варианте реализации объект является одним из: процедурой, экземпляром класса, методом или переменной экземпляра класса. В еще одном частном варианте реализации исследуемый код может содержать вложенный участок кода сценария 109, а также код для работы с файлами 108, которые также являются объектами. В этом случае выполнение кода интерпретатором 107 будет происходить рекурсивно. Сценарий также называют скриптом (англ. script). Вложенный сценарий, например, не преобразован в промежуточный код и, следовательно, не может быть выполнен интерпретатором 107. Таким образом, вложенный сценарий 109 необходимо будет заново отправить лексическому анализатору 103, чтобы генератор промежуточного кода 106 создал промежуточный код, который будет исполнен интерпретатором 107.
Если в процессе исполнения исследуемого кода был сохранен файл на диск 108, содержимое этого файла также может быть выполнено интерпретатором 107. Однако содержимое файла содержит непреобразованный код, поэтому файл будет передан антивирусу 101 с последующим преобразованием кода модулями 103-106 к промежуточному коду.
Стоит отметить, что настоящее изобретение в первую очередь предназначено для выполнения антивирусной проверки кода. Однако стоит также подчеркнуть, что изобретение не ограничивается областью компьютерной безопасности и может быть применено в любой другой области компьютерной техники, где может быть использовано выполнение кода интерпретатором, например, для упрощения способа обновления правил интерпретации в интерпретаторе кода.
Интерпретатор 107 может быть дополнительно связан со средством журналирования 115, которое может производить запись в журнал интерпретатора 114 в ходе выполнения каждой инструкции промежуточного кода в интерпретаторе 107.
Средство анализа 113 предназначено для проверки записей журнала интерпретатора 114 на совпадение с записями базы антивирусных записей 112 согласно антивирусным правилам. Антивирусные правила задают условия, при которых исследуемый файл признается вредоносным или не вредоносным. При совпадении указанных записей исследуемый код определяется вредоносным, и средство анализа 113 передает эту информацию интерпретатору 107. Интерпретатор 107 в этом случае прекращает дальнейшее выполнение кода и передает управление антивирусу 101, который оповещает пользователя компьютера о найденной угрозе (вредоносном файле) и выполняет соответствующие шаги по устранению вредоносного содержимого исследуемого кода.
В таблице 1 приведен пример антивирусных записей, которые совпадают в журнале интерпретатора 114 и в базе антивирусных записей 112. Обычно антивирусные записи называют сингнатурами. Первая запись таблицы содержит запись open, означающую, что сформирован запрос на получение файла, расположенного по адресу URL: "http://*****************exe***.jpg" («*» означает любые символы). Вторая запись означает, что сформированный запрос был отправлен по адресу URL. Третья запись означает сохранение данных в файл "c:\\temp\\*********.exe". И четвертая запись означает запуск на исполнение сохраненного файла. Очевидно, что последовательное выполнение указанных четырех действий обычно свойственно для вредоносного файла. Поэтому антивирусное правило в этом примере будет следующим: если в журнале интерпретатора 114 последовательно содержатся записи 1-4 таблицы 1, то исследуемому коду выносится вердикт "HEUR:Trojan-Downloader.Script.Generic:" (см. таблицу 2). Указанный вердикт означает, что исследуемый код и соответственно исходный код 102 являются вредоносным файлом - трояном-загрузчиком.
Figure 00000001
Figure 00000002
На Фиг. 2 представлена подробная схема настоящего изобретения.
Интерпретатор 107 служит для последовательного выполнения каждой инструкции исследуемого кода (промежуточного кода) 201. Когда интерпретатор 107 переходит к выполнению инструкции исследуемого кода 201, содержащей объект, для которого у интерпретатора отсутствует правило интерпретации (т.е. неизвестный объект), дальнейшее выполнение исследуемого кода 201 приостанавливается. Правило интерпретации - это программный код, результат выполнения которого соответствует результату выполнения соответствующей инструкции. Далее интерпретатор 107 получает вспомогательный код, результат выполнения которого соответствует результату выполнения неизвестного объекта, при этом вспомогательный код содержит те объекты (т.е. известные объекты), для которых в интерпретаторе 107 присутствует правило интерпретации. Затем интерпретатор последовательно выполняет каждую инструкцию вспомогательного кода, и после завершения выполнения вспомогательного кода интерпретатор 107 возобновляет выполнение исследуемого кода 201 со следующей инструкции исследуемого кода 201, пока не будет выполнена последняя инструкция исследуемого кода 201.
В частном варианте реализации объект является одним из: процедурой, экземпляром класса, методом или переменной экземпляра класса, сценарием, файлом.
На Фиг. 3 представлен способ осуществления настоящего изобретения.
Исследуемый код 201 поступает на вход интерпретатора 107 и, на шаге 301, интерпретатор 107 последовательно выполняет каждую инструкцию исследуемого кода 201 на этапе 202. Когда интерпретатор 107 переходит к выполнению инструкции исследуемого кода 201, содержащей объект (неизвестный объект), для которого у интерпретатора 107 отсутствует правило интерпретации (проверка на шаге 303), приостанавливают дальнейшее выполнение исследуемого кода на шаге 304, и на шаге 305 интерпретатор получает вспомогательный код 306, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код 306 содержит только те объекты (известные объекты), для которых в интерпретаторе 107 присутствует правило интерпретации. Далее вспомогательный код 306 передается на выполнение интерпретатору 107 на шаг 301, где последовательно выполняют каждую инструкцию вспомогательного кода 306, и после завершения выполнения вспомогательного кода 306, возобновляют выполнение исследуемого кода 201 на шаге 301 со следующей инструкции исследуемого кода 201. Проверка завершения выполнения вспомогательного кода 306 происходит на шаге 302 и 307. Работа способа изобретения происходит до момента, пока не будет выполнена последняя инструкция исследуемого кода 201. Указанное условие проверяется на шаге 302 и 307. После выполнения последней инструкции исследуемого кода 201 завершается работа интерпретатора 107 на шаге 308.
В частном варианте реализации на шаге 301 интерпретатор 107 инициализирует среду выполнения 110 интерпретатора 107 (этап 203). В еще одном частном случае вспомогательный код 306 содержится в среде выполнения 110 интерпретатора 107 и на шаге 305 вспомогательный код 306 получают из среды выполнения 110.
В частном варианте реализации вспомогательный код 306 получают из локальной базы 111. В этом случае может быть инициализирована среда выполнения (этап 203) для вспомогательного кода 306, т.к. среда выполнения 110 для интерпретатора 107 при своей инициализации не содержит объекты и переменные, используемые вспомогательным кодом 306.
В частном варианте реализации вспомогательный код 306 получают из удаленной базы (не отображена), когда указанный вспомогательный код 306 отсутствует в локальной базе 111.
В частном варианте реализации с помощью средства журналирования 115 производят запись в журнал интерпретатора 114 при выполнении каждой или части инструкций кода (на шаге 301). Список инструкций, для которых необходимо производить запись в журнал интерпретатора 114, может содержаться в эмуляторе 200. С помощью средства анализа 113 проверяют совпадение записей журнала интерпретатора 107 в базе антивирусных записей 112 согласно антивирусным правилам при произведении упомянутых записей. В случае совпадения указанных записей исследуемый код 102 определяют вредоносным.
В частном варианте реализации выполнение кода и выполнение вспомогательного кода включает следующие этапы: лексический анализ с использованием лексическим анализатора 103, синтаксический анализ с использованием синтаксического анализатора 104, семантический анализ с использованием семантического анализатора 105, создание промежуточного кода генератором промежуточного кода 106 и интерпретацию промежуточного кода согласно правилам интерпретации с помощью интерпретатора 107.
Стоит отметить, что вспомогательный код 306 может быть написан как на языке исходного кода 102, так и на языке преобразованного исследуемого кода 201, т.е. в преобразованном виде. Например, если исходный язык JavaScript, то преобразованный язык - байт-код виртуальной машины Java. В одном случае реализации, когда вспомогательный код 306 написан на языке исходного кода 102, вспомогательный код 306 будет вначале передан лексическому анализатору 103, затем синтаксическому анализатору 104 и семантическому анализатору 105 и, в итоге, генератор промежуточного кода 106 составит из вспомогательного кода 306 вспомогательный код в преобразованном виде, который уже будет выполняться интерпретатором 107. В частном варианте реализации, после преобразования вспомогательного кода 306, он может быть сохранен в преобразованном виде вместе с непреобразованным вспомогательным кодом 306 или в отдельном хранилище/кэше. При следующем запросе интерпретатором 107 этого вспомогательного кода интерпретатору 107 будет возвращен уже вспомогательный код в преобразованном виде.
В другом случае реализации, когда вспомогательный код 306 изначально представлен в преобразованном виде, вспомогательный код 306 будет отправлен сразу на исполнение интерпретатору 107.
Ниже в таблице 3 приведен пример части исходного кода 107, являющегося вредоносным. Для наглядного понимания приведен именно исходный код 102, а непреобразованный исследуемый код 201. Строка 4 содержит обращение к объекту «Scripting.Dictionary», для которого изначально отсутствовало правило интерпретации. В этом примере объект «Scripting.Dictionary» является неизвестным объектом. Поэтому на шаге 4 будет приостановлено исполнение исследуемого кода на интерпретаторе 107, и интерпретатору 107 будет передан вспомогательный код 306 из таблицы 4, результат выполнения которого соответствует результату выполнения при обращении к объекту «Scripting.Dictionary» в строке 4 таблицы 3. После исполнения вспомогательного кода 306 исполнение исследуемого кода будет возобновлено со строки 5 таблицы 3. Вспомогательный код 306 из таблицы 4 содержит только те объекты (известные объекты), для которых в интерпретаторе 107 присутствует правило интерпретации.
Стоит отметить, что обращение к редким объектам, например функциям, обычно свойственно вредоносным файлам - таким образом вредоносный файл проверяет, что он выполняется в эмуляторе, а не на реальном компьютере.
Figure 00000003
Figure 00000004
В еще одном частном варианте реализации вспомогательный код 306 может дополнительно содержать другие неизвестные объекты, для которых может быть получен соответствующих другой вспомогательный код, результат выполнения которого соответствует результату выполнения другого неизвестного объекта.
В таблице 5 приведен пример известных объектов. В таблице 6 приведен пример того, как вспомогательный код для неизвестных объектов содержит известные и неизвестные объекты.
Например, вспомогательный код для неизвестного объекта G содержит только известные объекты А, В, С. В то же время, вспомогательный код для неизвестного объекта Н содержит как известные объекты А, В, так и неизвестный другой объект G. Но для неизвестного другого объекта G также присутствует другой вспомогательный код, который зависит в свою очередь от известных объектов А, В, С.
Таким образом, в данном примере, когда в исследуемом коде 201 будет выполняться инструкция на шаге 202, содержащая неизвестный объект Н, выполнение исследуемого кода будет приостановлено на шаге 304. Далее будет получен вспомогательный код 306 для объекта Н на шаге 305, выполнение которого продолжится на шаге 202. Когда при выполнении вспомогательного кода для объекта Н, будет выполняться инструкция, содержащая другой неизвестный объект G, на шаге 305 будет получен уже другой вспомогательный код для другого неизвестного объекта G, выполнение которого продолжится на шаге 202. После завершения выполнения другого вспомогательного кода для объекта G продолжится выполнение вспомогательного кода 306 для объекта Н, а затем, после завершения выполнения вспомогательного кода 306 для объекта Н, будет продолжено выполнение исследуемого кода 201. При этом, очевидно, исследуемый код 201 может содержать другие неизвестные объекты, для которых снова потребуется получение вспомогательного кода. Кроме этого, «вложенность» зависимости неизвестных объектов от известных объектов может быть сколь угодно большой.
Figure 00000005
Figure 00000006
Первый технический результат, заключающийся в улучшении качества выполнения интерпретатором исследуемого программного кода, достигается путем интерпретации вспомогательного программного кода. Улучшение качества выполнения интерпретатором исследуемого программного кода заключается в том, что интерпретатор продолжает выполнение исследуемого программного кода даже тогда, когда исследуемый программный код содержит объекты, для которых у интерпретатора отсутствует правило интерпретации. Известные из уровня техники интерпретаторы и эмуляторы при выполнении инструкций, содержащих неизвестные функции, завершают свое выполнение ошибкой.
Второй технический результат, заключающийся в обеспечении выполнения интерпретатором инструкций исследуемого программного кода, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого интерпретатора, достигается путем интерпретации вспомогательного программного кода. Данный технический результат достигается, т.к. за счет выполнения вспомогательного кода интерпретатором выполнение исследуемого кода не будет остановлено из-за отсутствия какого-либо правила интерпретации для инструкций, для которых у интерпретатора отсутствует правило интерпретации.
Описанное изобретение решает техническую проблему, заключающуюся в необходимости интерпретации инструкций исследуемого программного кода, содержащих объекты, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого программного кода интерпретатора, т.к. в этом случае интерпретатор будет выполнять (интерпретировать) инструкции вспомогательного программного кода.
Фиг. 4 представляет пример компьютерной системы общего назначения, персональный компьютер или сервер 20, содержащий центральный процессор 21, системную память 22 и системную шину 23, которая содержит разные системные компоненты, в том числе память, связанную с центральным процессором 21. Системная шина 23 реализована как любая известная из уровня техники шинная структура, содержащая в свою очередь память шины или контроллер памяти шины, периферийную шину и локальную шину, которая способна взаимодействовать с любой другой шинной архитектурой. Системная память содержит постоянное запоминающее устройство (ПЗУ) 24, память с произвольным доступом (ОЗУ) 25. Основная система ввода/вывода (BIOS) 26, содержит основные процедуры, которые обеспечивают передачу информации между элементами персонального компьютера 20, например, в момент загрузки операционной системы с использованием ПЗУ 24.
Персональный компьютер 20 в свою очередь содержит жесткий диск 27 для чтения и записи данных, привод магнитных дисков 28 для чтения и записи на сменные магнитные диски 29 и оптический привод 30 для чтения и записи на сменные оптические диски 31, такие как CD-ROM, DVD-ROM и иные оптические носители информации. Жесткий диск 27, привод магнитных дисков 28, оптический привод 30 соединены с системной шиной 23 через интерфейс жесткого диска 32, интерфейс магнитных дисков 33 и интерфейс оптического привода 34 соответственно. Приводы и соответствующие компьютерные носители информации представляют собой энергонезависимые средства хранения компьютерных инструкций, структур данных, программных модулей и прочих данных персонального компьютера 20.
Настоящее описание раскрывает реализацию системы, которая использует жесткий диск 27, сменный магнитный диск 29 и сменный оптический диск 31, но следует понимать, что возможно применение иных типов компьютерных носителей информации 56, которые способны хранить данные в доступной для чтения компьютером форме (твердотельные накопители, флеш карты памяти, цифровые диски, память с произвольным доступом (ОЗУ) и т.п.), которые подключены к системной шине 23 через контроллер 55.
Компьютер 20 имеет файловую систему 36, где хранится записанная операционная система 35, а также дополнительные программные приложения 37, другие программные модули 38 и данные программ 39. Пользователь имеет возможность вводить команды и информацию в персональный компьютер 20 посредством устройств ввода (клавиатуры 40, манипулятора «мышь» 42). Могут использоваться другие устройства ввода (не отображены): микрофон, джойстик, игровая консоль, сканер и т.п. Подобные устройства ввода по своему обычаю подключают к компьютерной системе 20 через последовательный порт 46, который в свою очередь подсоединен к системной шине, но могут быть подключены иным способом, например, при помощи параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 47 или иной тип устройства отображения также подсоединен к системной шине 23 через интерфейс, такой как видеоадаптер 48. В дополнение к монитору 47 персональный компьютер может быть оснащен другими периферийными устройствами вывода (не отображены), например колонками, принтером и т.п.
Персональный компьютер 20 способен работать в сетевом окружении, при этом используется сетевое соединение с другим или несколькими удаленными компьютерами 49. Удаленный компьютер (или компьютеры) 49 являются такими же персональными компьютерами или серверами, которые имеют большинство или все упомянутые элементы, отмеченные ранее при описании существа персонального компьютера 20, представленного на Фиг. 4. В вычислительной сети могут присутствовать также и другие устройства, например маршрутизаторы, сетевые станции, пиринговые устройства или иные сетевые узлы.
Сетевые соединения могут образовывать локальную вычислительную сеть (LAN) 50 и глобальную вычислительную сеть (WAN). Такие сети применяются в корпоративных компьютерных сетях, внутренних сетях компаний и, как правило, имеют доступ к сети Интернет. В LAN- или WAN-сетях персональный компьютер 20 подключен к локальной сети 50 через сетевой адаптер или сетевой интерфейс 51. При использовании сетей персональный компьютер 20 может использовать модем 54 или иные средства обеспечения связи с глобальной вычислительной сетью, такой как Интернет. Модем 54, который является внутренним или внешним устройством, подключен к системной шине 23 посредством последовательного порта 46. Следует уточнить, что сетевые соединения являются лишь примерными и не обязаны отображать точную конфигурацию сети, т.е. в действительности существуют иные способы установления соединения техническими средствами связи одного компьютера с другим.
В соответствии с описанием компоненты, этапы исполнения, структура данных, описанные выше, могут быть выполнены, используя различные типы операционных систем, компьютерных платформ, программ.
В заключение следует отметить, что приведенные в описании сведения являются примерами, которые не ограничивают объем настоящего изобретения, определенного формулой.

Claims (13)

1. Реализуемый компьютером способ выполнения программного кода интерпретатором, в котором:
а) последовательно выполняют каждую инструкцию исследуемого кода;
б) когда интерпретатор переходит к выполнению инструкции исследуемого кода, содержащей неизвестный объект, для которого у интерпретатора отсутствует правило интерпретации, приостанавливают дальнейшее выполнение исследуемого кода, при этом объект является одним из: процедурой; экземпляром класса; методом или переменной экземпляра класса; сценарием; файлом;
в) получают вспомогательный код, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код содержит известные объекты, для которых в интерпретаторе присутствует правило интерпретации;
г) последовательно выполняют каждую инструкцию вспомогательного кода; и
д) после завершения выполнения вспомогательного кода возобновляют выполнение исследуемого кода на шаге б) со следующей инструкции исследуемого кода, пока не будет выполнена последняя инструкция исследуемого кода.
2. Способ по п. 1, в котором на шаге а) инициализируют среду выполнения интерпретатора.
3. Способ по п. 2, в котором вспомогательный код содержится в среде выполнения интерпретатора и на шаге в) вспомогательный код получают из среды выполнения интерпретатора.
4. Способ по п. 1, в котором на шаге в) вспомогательный код получают из локальной базы.
5. Способ по п. 4, в котором инициализируют среду выполнения интерпретатора для вспомогательного кода.
6. Способ по п. 4, в котором на шаге в) получают упомянутый вспомогательный код из удаленной базы, когда упомянутый вспомогательный код отсутствует в локальной базе.
7. Способ по п. 1, в котором выполнение кода и выполнение вспомогательного кода включает следующие этапы: лексический анализ, синтаксический анализ, создание промежуточного кода и интерпретацию промежуточного кода согласно правилам интерпретации.
8. Способ по п. 1, в котором вспомогательный код дополнительно содержит по меньшей мере один другой неизвестный объект, для которого получают другой вспомогательный код, результат выполнения упомянутого другого вспомогательного кода соответствует результату выполнения другого неизвестного объекта.
RU2016148489A 2016-12-12 2016-12-12 Способ выполнения кода интерпретатором RU2634171C1 (ru)

Priority Applications (6)

Application Number Priority Date Filing Date Title
RU2016148489A RU2634171C1 (ru) 2016-12-12 2016-12-12 Способ выполнения кода интерпретатором
US15/446,157 US10275597B2 (en) 2016-12-12 2017-03-01 System and method of execution of code by an interpreter
CN201710447504.1A CN108228312B (zh) 2016-12-12 2017-06-14 通过解释器执行代码的系统和方法
EP17176091.1A EP3333746B1 (en) 2016-12-12 2017-06-14 System and method of execution of code by an interpreter
JP2017126083A JP6400794B2 (ja) 2016-12-12 2017-06-28 インタプリタによるコード実行のシステム及び方法
US16/296,869 US10579799B2 (en) 2016-12-12 2019-03-08 System and method for execution of objects lacking rules of interpretation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2016148489A RU2634171C1 (ru) 2016-12-12 2016-12-12 Способ выполнения кода интерпретатором

Publications (1)

Publication Number Publication Date
RU2634171C1 true RU2634171C1 (ru) 2017-10-24

Family

ID=60153948

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2016148489A RU2634171C1 (ru) 2016-12-12 2016-12-12 Способ выполнения кода интерпретатором

Country Status (4)

Country Link
US (2) US10275597B2 (ru)
JP (1) JP6400794B2 (ru)
CN (1) CN108228312B (ru)
RU (1) RU2634171C1 (ru)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110321699A (zh) * 2019-05-22 2019-10-11 北京瀚海思创科技有限公司 一种基于数据监测保护业务系统安全的系统及方法
CN111198689B (zh) * 2019-12-30 2023-04-28 北京明略软件系统有限公司 一种代码执行方法、装置及计算机可读存储介质
US20240111555A1 (en) * 2022-10-04 2024-04-04 International Business Machines Corporation Unknown object sub-class identification
CN115878127A (zh) * 2022-11-17 2023-03-31 北京思明启创科技有限公司 python解释器的输入信号确定方法、装置、设备及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5678032A (en) * 1995-09-06 1997-10-14 Bull Hn Information Systems Inc. Method of optimizing the execution of program instuctions by an emulator using a plurality of execution units
US7058932B1 (en) * 1999-04-19 2006-06-06 Unisys Corporation System, computer program product, and methods for emulation of computer programs
RU101217U1 (ru) * 2010-03-02 2011-01-10 Закрытое акционерное общество "Лаборатория Касперского" Система ускорения эмуляции процессов
RU2514141C1 (ru) * 2012-09-28 2014-04-27 Закрытое акционерное общество "Лаборатория Касперского" Способ эмуляции вызовов системных функций для обхода средств противодействия эмуляции
US20150310212A1 (en) * 2011-04-13 2015-10-29 Microsoft Technology Licensing, Llc Detecting Script-Based Malware using Emulation and Heuristics

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5930145A (ja) * 1982-08-12 1984-02-17 Fujitsu Ltd 動的プログラム修正による再実行処理方式
US7039904B2 (en) * 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
EP1527396A4 (en) * 2002-05-28 2008-03-12 Droplet Technology Inc SYSTEMS AND METHOD FOR PARALLEL PROCESSORS WITH PILE PROCESSING
US20040044988A1 (en) 2002-08-29 2004-03-04 Schene Christopher Robin Generation of compiled code for simulator speed up
US7664626B1 (en) * 2006-03-24 2010-02-16 Symantec Corporation Ambiguous-state support in virtual machine emulators
US20080083012A1 (en) * 2006-06-26 2008-04-03 Dachuan Yu Program instrumentation method and apparatus for constraining the behavior of embedded script in documents
US8151352B1 (en) * 2006-07-14 2012-04-03 Bitdefender IPR Managament Ltd. Anti-malware emulation systems and methods
JP2008027306A (ja) * 2006-07-24 2008-02-07 Aplix Corp ユーザ空間仮想化システム
US8763125B1 (en) * 2008-09-26 2014-06-24 Trend Micro, Inc. Disabling execution of malware having a self-defense mechanism
US20110035732A1 (en) * 2009-08-06 2011-02-10 Wynne Crisman Method and apparatus for defining and compiling or converting language and user interface system agnostic view definitions to runnable code
EP2306356B1 (en) 2009-10-01 2019-02-27 Kaspersky Lab, ZAO Asynchronous processing of events for malware detection
US9501644B2 (en) * 2010-03-15 2016-11-22 F-Secure Oyj Malware protection
RU2454714C1 (ru) * 2010-12-30 2012-06-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ повышения эффективности обнаружения неизвестных вредоносных объектов
CN102262537B (zh) * 2011-07-21 2014-10-29 复旦大学 一种工作于混合模式执行引擎中的异常处理方法
US9063760B2 (en) * 2011-10-13 2015-06-23 International Business Machines Corporation Employing native routines instead of emulated routines in an application being emulated
WO2014204446A1 (en) * 2013-06-18 2014-12-24 Empire Technology Development Llc Remediating rogue applications
RU2553056C2 (ru) * 2013-10-24 2015-06-10 Закрытое акционерное общество "Лаборатория Касперского" Система и способ сохранения состояния эмулятора и его последующего восстановления
US10606965B2 (en) * 2014-07-18 2020-03-31 Leviathan Security Group, Inc. System and method for emulation of unprivileged code in a simulated environment
US10242190B2 (en) * 2014-07-23 2019-03-26 Leviathan Security Group, Inc. System and method for detection of malicious code by iterative emulation of microcode

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5678032A (en) * 1995-09-06 1997-10-14 Bull Hn Information Systems Inc. Method of optimizing the execution of program instuctions by an emulator using a plurality of execution units
US7058932B1 (en) * 1999-04-19 2006-06-06 Unisys Corporation System, computer program product, and methods for emulation of computer programs
RU101217U1 (ru) * 2010-03-02 2011-01-10 Закрытое акционерное общество "Лаборатория Касперского" Система ускорения эмуляции процессов
US20150310212A1 (en) * 2011-04-13 2015-10-29 Microsoft Technology Licensing, Llc Detecting Script-Based Malware using Emulation and Heuristics
RU2514141C1 (ru) * 2012-09-28 2014-04-27 Закрытое акционерное общество "Лаборатория Касперского" Способ эмуляции вызовов системных функций для обхода средств противодействия эмуляции

Also Published As

Publication number Publication date
US20180165450A1 (en) 2018-06-14
US10579799B2 (en) 2020-03-03
JP2018097841A (ja) 2018-06-21
CN108228312B (zh) 2021-11-05
US20190205538A1 (en) 2019-07-04
CN108228312A (zh) 2018-06-29
JP6400794B2 (ja) 2018-10-03
US10275597B2 (en) 2019-04-30

Similar Documents

Publication Publication Date Title
RU2622627C2 (ru) Способ обнаружения вредоносных исполняемых файлов, содержащих интерпретатор, посредством комбинирования эмуляторов
US9063766B2 (en) System and method of manipulating virtual machine recordings for high-level execution and replay
US8707263B2 (en) Using a DSL for calling APIS to test software
RU2634171C1 (ru) Способ выполнения кода интерпретатором
KR101740604B1 (ko) 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹
US8850414B2 (en) Direct access of language metadata
US9928042B2 (en) Automatic classification of compilers
RU2553056C2 (ru) Система и способ сохранения состояния эмулятора и его последующего восстановления
CN111194437B (zh) 使用存储中代码执行的数据处理卸载
US9075601B1 (en) Providing a scripting interface to existing code
US8904346B1 (en) Method and system for automated load testing of web applications
US9501591B2 (en) Dynamically modifiable component model
US9672015B2 (en) Automatic determination of compiler configuration
CN110727476A (zh) 一种授权配置文件的生成方法、装置、设备及存储介质
KR101219874B1 (ko) 코드 모핑
EP3333746B1 (en) System and method of execution of code by an interpreter
CN114168151B (zh) 基于容器的程序编译方法、装置、电子设备及存储介质
KR102323621B1 (ko) 펌웨어 퍼징 장치 및 방법
RU2659742C1 (ru) Способ эмуляции исполнения файлов, содержащих инструкции, отличные от машинных
US20160350155A1 (en) Synthesizing inputs to preserve functionality
RU2815242C1 (ru) Способ и система перехвата .net вызовов посредством патчей на промежуточном языке
WO2021149119A1 (ja) 推定システム及び推定プログラム
RU2659734C1 (ru) Способ эмуляции исполнения файлов
Jaghori Efficient Serverless Computing with WebAssembly
RU2546588C2 (ru) Способ перевызова оригинальной функции после ее перехвата с сохранением стека параметров