ЭВРИСТИЧЕСКИЙ СПОСОБ АНАЛИЗА КОДА
HEURISTIC CODE ANALYSIS METHOD

ПЕРЕКРЕСТНАЯ ССЫЛКА РОДСТВЕННЫЕ ЗАЯВКИ
Данная заявка притязает на приоритет заявки на патент (США) № 12/548747, поданной 27 августа 2009 года, которая притязает на приоритет предварительной заявки (США) № 61/092602, поданной 28 августа 2008 года.
C-E. НЕПРИМЕНИМО
УРОВЕНЬ ТЕХНИКИ
Настоящее раскрытие сущности относится к идентификации и анализу данных, передаваемых через сеть связи, а более конкретно к идентификации, обнаружению и анализу наносящего вред или злоумышленного программного обеспечения или данных.
По мере того как технологии и инфраструктура компьютерных сетей совершенствуются в последнее время, объем и скорость данных, передаваемых между устройствами компьютерной сети, радикально возрастает. Из этих передаваемых данных имеется класс данных, называемых вредоносными программами. Вредоносная программа или злоумышленное программное обеспечение - это компьютерная программа, выполненная с возможностью проникать в вычислительное устройство без ведома или согласия владельца устройства. Вредоносные программы стали общеупотребительным термином и означают общий класс программного обеспечения, включающий в себя множество враждебных, навязчивых или иным образом раздражающих форм программного обеспечения или машинного кода. Вредоносные программы включают в себя различные вирусы, программы-черви, программы типа "троянский конь" (или программы-"трояны"), руткиты, программы-шпионы, программы с навязчивой рекламой и любое другое нежелательное злоумышленное программное обеспечение. Различные типы вредоносных программ могут собирать персональную информацию, связанную с пользователем, и отправлять эту информацию обратно в устройство сбора информации. Другие типы вредоносных программ могут приводить к тому, что вычислительное устройство работает с ошибками или вообще не работает.
Одним средством идентификации и удаления вредоносных программ является антивирусное программное обеспечение. Традиционное антивирусное программное обеспечение использует последовательности поиска и основанный на правилах анализ, чтобы искать известные вредоносные программы. Тем не менее, код вредоносных программ может часто изменяться автором вредоносной программы, так что последовательности поиска и основанный на правилах анализ могут не обнаруживать обновленные программы.
Последнее антивирусное программное обеспечение использует более совершенные и сложные технологии идентификации, в частности, при попытке обнаруживать новые и неизвестные вредоносные программы. Существующие вредоносные программы могут совместно использовать похожие шаблоны команд, которые, независимо от фактического кодирования, используемого для того, чтобы реализовывать вредоносные программы, могут быть идентифицированы посредством антивирусного программного обеспечения. Тем не менее, такие способы являются не очень полезными для обнаружения новых или неизвестных вирусов, не имеющих ранее обнаруженного шаблона работы.
Чтобы разрешать эту проблему, недавно разработанные способы обнаружения в антивирусном программном обеспечении оценивают подозрительный режим работы программы. Если антивирусное программное обеспечение находит существенные отличия от того, что может называться "хорошие манеры", антивирусное приложение может допускать, что оно обнаруживает новый вирус или вредоносную программу. Эти способы могут упоминаться с использованием обобщенного термина "эвристических" способов обнаружения вредоносных программ. Как правило, эвристический анализ означает, что анализируемая программа запускается в некотором изолированном и безопасном окружении, и способ собирает сведения о ее выполнении. Способ пытается собирать максимально возможный объем информации и оценивать то, считать или нет выполнение анализируемой программы легитимным, либо то, нацелена или нет программа на что-либо нестандартное или опасное. Если подозрительная активность обнаружена, программа может классифицироваться как подозрительная или даже наносящий вред.
Эвристический анализ может предоставлять несколько преимуществ. Он работает независимо от того, анализировалась или нет анализируемая программа ранее. Он также может распознавать новые вирусы и программы-"трояны". Тем не менее, также имеются некоторые недостатки. Они включают в себя следующее:
Недостаточная точность
1) . Ни один из эвристических способов не может считаться полностью точным. Граница между корректным и наносящим вред режимом работы программного обеспечения может быть неопределенной. Следовательно, ложные оповещения по "чистым" программам, а также пропущенные обнаружения реальных вредоносных программ могут быть распространенными.
Необходимость большого количества времени
2) . Очень много времени отнимает то, чтобы запускать программу в безопасном окружении, в котором можно быть уверенным, что вред не будет нанесен.
Противодействия
3) . Авторы вредоносных программ используют ряд искусных приемов для того, чтобы предотвращать этот тип анализа. Чрезвычайно трудно обходить все ловушки и интриги.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Изобретение, описанное в этом документе, не ограничено конкретными описанными системами, технологиями или протоколами, поскольку они могут варьироваться. Термины, используемые в данном документе, служат только для цели описания конкретных вариантов осуществления и не имеют намерение ограничивать объем настоящего раскрытия сущности.
Следует отметить, что при использовании в данном документе и в прилагаемой формуле изобретения, формы единственного числа "a", "an" и "the" включают в себя несколько объектов ссылки, если контекст явно не предписывает иное. Если не указано иное, все технические и научные термины, использованные в данном документе, имеют значения, идентичные обычно понимаемым специалистами в данной области техники. При использовании в данном документе, термин "содержащий" означает "включающий в себя, но не только".
В одном общем аспекте, варианты осуществления раскрывают способ обнаружения вредоносных программ в вычислительном устройстве. Способ включает в себя анализ, посредством процессора вычислительного устройства, программы, содержащей последовательность программных инструкций, сохраненных на машиночитаемом носителе, функционально соединенном с процессором; определение, посредством процессора, того, удовлетворяет или нет каждая инструкция в любому критерию из группы критериев подозрительности; назначение, посредством процессора, количественного показателя на уровне инструкций для каждой инструкции, которая удовлетворяет любому из критериев подозрительности; суммирование, посредством процессора, количественных показателей на уровне инструкций для каждой инструкции, чтобы давать в результате количественный показатель на уровне программы; определение, посредством процессора, того, превышает или нет количественный показатель на уровне программы пороговое значение; и если количественный показатель на уровне программы превышает пороговое значение, создание, посредством процессора, сообщения, указывающего результат обнаружения вредоносных программ.
В другом общем аспекте, варианты осуществления раскрывают способ обнаружения вредоносных программ в вычислительном устройстве. Способ включает в себя этап выполнения, посредством процессора вычислительного устройства, программы анализа программного обеспечения. В частности, выполнение программы анализа программного обеспечения содержит загрузку, посредством процессора, последовательности программных инструкций, сохраненных на машиночитаемом носителе, функционально соединенном с процессором; анализ, посредством процессора, каждой программной инструкции в последовательности, когда она выполняется; определение, посредством процессора, того, удовлетворяет или нет каждая инструкция в последовательности любому критерию из группы критериев подозрительности во время выполнения; назначение, посредством процессора, количественного показателя на уровне инструкций для каждой инструкции, которая удовлетворяет любому из критериев подозрительности; суммирование, посредством процессора, количественных показателей на уровне инструкций для каждой инструкции, чтобы давать в результате количественный показатель на уровне программы; определение, посредством процессора, того, превышает или нет количественный показатель на уровне программы пороговое значение; и если количественный показатель на уровне программы превышает пороговое значение, создание, посредством процессора, сообщения, указывающего результат обнаружения вредоносных программ.
В одном общем аспекте, варианты осуществления раскрывают способ обнаружения вредоносных программ в вычислительном устройстве. Способ включает в себя анализ, посредством процессора вычислительного устройства, программы, содержащей последовательность программных инструкций, сохраненных на машиночитаемом носителе, функционально соединенном с процессором; определение, посредством процессора, того, удовлетворяет или нет каждая инструкция в последовательности любому критерию из группы критериев подозрительности, при этом группа критериев подозрительности содержит определение того, приводит или нет инструкция к преобразованию данных, определение того, приводит или нет инструкция к переходу к другой инструкции, и определение того, имеют или нет, по меньшей мере, две последовательные инструкции идентичный смысл; назначение, посредством процессора, количественного показателя на уровне инструкций для каждой инструкции, которая удовлетворяет любому из критериев подозрительности; суммирование, посредством процессора, количественных показателей на уровне инструкций для каждой инструкции, чтобы давать в результате количественный показатель на уровне программы; определение, посредством процессора, того, превышает или нет количественный показатель на уровне программы пороговое значение; и если количественный показатель на уровне программы превышает пороговое значение, создание, посредством процессора, сообщения, указывающего результат обнаружения вредоносных программ.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Аспекты, признаки, выгоды и преимущества настоящего изобретения должны становиться очевидными из последующего описания и прилагаемых чертежей, на которых:
Фиг.1 иллюстрирует примерный код, связанный с технически чистой программой;
Фиг.2 иллюстрирует примерный код, связанный со злоумышленной программой;
Фиг.3 иллюстрирует примерный процесс обнаружения вредоносных программ;
Фиг.4 иллюстрирует примерное вычислительное устройство для реализации процесса, описанного на фиг.3.
ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ
Настоящее раскрытие сущности описывает новые эвристические способы, которые анализируют потенциально подозрительную программу, которые работают без запуска программы в фактическом операционном окружении, тем самым, исключая возможность для подозрительной программы, чтобы выполнять наносящие вред действия. Как упомянуто выше, эвристические способы обнаружения вредоносных программ могут анализировать подозрительную программу в то время, когда она выполняется в безопасном окружении, причем этот способ упоминается в данном документе как "динамический" способ. Тем не менее, эти динамические подходы имеют различные недостатки, связанные со временем и ресурсами, требуемыми для того, чтобы выполнять программное обеспечение в безопасном окружении. В отличие от этого, способы, описанные ниже как "статический" способ эвристического анализа, анализируют подозрительный программный код без запуска подозрительной программы.
Настоящее раскрытие сущности дополнительно описывает статический способ для анализа программного кода. Этот анализ выполняется не просто на основе режима работы программы, а вместо этого, на основе технической чистоты. Этот способ ищет отличия в программном коде по сравнению с программным кодом, сформированным посредством стандартных "официальных" инструментальных средств. При использовании в данном документе, термин "официальные инструментальные средства" упоминается как обычно используемые компиляторы и средства сжатия данных в реальном времени. Способ, описанный в этом раскрытии сущности, предполагает, что программный код, созданный стандартным и корректным способом, может быть технически чистым, функционально однозначным и свободным от злоумышленных искусных приемов кодирования, включаемых для того, чтобы блокировать анализ.
Сама техническая чистота может помогать отличать корректный код от кода, который включает в себя различные нелогичные или избыточные инструкции, необязательные переходы, приблизительно неоптимизированную последовательность операций обработки и т.д. Чем в большей степени авторы вредоносных программ пытаются блокировать анализ, тем более похожие нелогичные результаты и технические ошибки могут обнаруживаться во вредоносном коде.
Фиг.1 иллюстрирует то, как может выглядеть примерная последовательность программных инструкций, создаваемых в официальном инструментальном средстве, в этом примере, Microsoft Visual C++ 6.0. Код, показанный на фиг.1A, является известной и безопасной программой WGET.EXE. Код WGET.EXE является технологически чистым и не имеет бесполезных или нелогичных операций.
В отличие от технически чистого кода, показанного на фиг.1, фиг.2 иллюстрирует полную противоположность, пример злоумышленной троянской программы-червя. Инструкции содержащиеся в троянской программе-черве, которые не имеют абсолютно никакого смысла в рамках данного контекста, т.е. их единственное предназначение состоит в том, чтобы блокировать анализ кода, и, следовательно, обнаружение кода как вредоносных программ отображается в другой штриховке (например, строки 1314555A и 1314555D).
Пример, показанный на фиг.2 иллюстрирует то, что троянская программа-червь содержит минимальные корректные и значимые инструкции (отображаются черным цветом), при этом большая часть программного кода состоит из незначащего "мусора". Если эксперт просматривает эту программу, эксперт может сразу сообщать то, что в коде что-то неправильно, и программа с большой вероятностью является злоумышленной. Таким образом, желательно программировать программное обеспечение для обнаружения вирусов программы так, чтобы оно выступало в качестве эксперта, анализируя техническую чистоту кода без "подвисания" на искусных приемах и технологиях кодирования, реализованных для того, чтобы обманывать антивирусное программное обеспечение.
Фиг.3 иллюстрирует примерный процесс 300 для эвристического анализа и обнаружения вредоносных программ. Первоначально, процесс загружает каждую последовательность программных инструкций, анализирует 302 одну из программных инструкций, включенных в программу. В зависимости от процесса или программного обеспечения для анализа либо операционного окружения программного обеспечения для анализа, каждая инструкция последовательности может загружаться по отдельности, или модуль, включающий в себя несколько инструкций, может загружаться сразу для анализа 302. Аналогично, одна инструкция может анализироваться за один раз или, на основе доступных ресурсов, несколько инструкций могут анализироваться одновременно. В целях простоты, в примерном процессе 300 одна инструкция анализируется за один раз.
Во время анализа 302, инструкция сравнивается 304 с критерием подозрительности. Совместно, критерии подозрительности оценивают каждую инструкцию на основе ожидаемого результата инструкции в ходе выполнения. Различные результаты анализируемой инструкции могут удовлетворять различным критериям подозрительности, и на основе этих результатов количественный показатель на уровне инструкций может назначаться каждой инструкции. Анализирующее программное обеспечение может анализировать каждую инструкцию и определять 306 то, нарушает или нет инструкция некоторые или все из следующих критериев:
1) Выполняет или нет фактически анализируемая инструкция некоторое действие. Например, если содержимое 32-битового регистра циклически сдвигается на 32 бита, данные должны оставаться неизменными. Система балльной оценки отмечает этот факт и "налагает" на такую инструкцию соответствующее число штрафов. Штрафом может быть отрицательный количественный показатель или им может быть назначенная система числовой балльной оценки, в которой общие количественные показатели, которые превышают заранее определенный уровень, предположительно указывают наличие вредоносных программ.
2) Принадлежит анализируемая инструкция группе инструкций, которая фактически не изменяет или изменяет данные. Например, два последовательных отрицания одной записи регистра означают, что содержимое записи регистра вообще не изменено. С другой стороны, при этом налагается обоснованное число штрафов.
3) Переходит или нет анализируемая инструкция в середину другой инструкции. Анализирующее программное обеспечение может иметь возможность распознавать такой искусный прием и налагать на него высокое число штрафов.
4) Имеют или нет две последовательные инструкции идентичный смысл. Например, если направление строковых операций посредством STD-инструкции задано, и сразу после этого данная инструкция выполняется снова, вторая инструкция является в некоторой степени избыточной, а, следовательно, подозрительной. На это также налагаются штрафы.
5) Задан или нет некоторый конкретный флаг, который дополнительно не используется, или он установлен независимо еще раз. Например, если сравнение выполняется, и затем другое сравнение выполняется, результат второго сравнения перезаписывает первый результат. Эта инструкция также штрафуется.
6) Является или нет циклический сдвиг данных значимым. Если некоторый сегмент записи регистра или запоминающего устройства циклически сдвигается на больше число битов, чем циклически сдвигается битовая ширина операнда, инструкция может считаться нелогичной, и она штрафуется.
7) Другие признаки, которые не являются очень подозрительными, но являются, по меньшей мере, необычными. Например: использование инструкций с плавающей запятой в точке входа, конкатенация префиксов, частое использование различных неравных переменных и т.д.
Любой из вышеописанных случаев, если обнаружен в инструкции, может приводить к обновлению 308 количественного показателя на уровне инструкций, чтобы отражать определенное число штрафов, назначаемых конкретному критерию, на основе опыта использования, сравнения с кодом или последовательностями инструкций, сформированными посредством официального инструментального средства. Точное число штрафов для конкретных случаев может быть определено на основе долговременного и комплексного тестирования. Штрафы могут пересматриваться для различных случаев, поскольку система приобретает опыт с дополнительными программами.
Если анализ определяет 306, что инструкция не нарушает конкретный критерий, или если инструкция нарушила критерий, и количественный показатель на уровне инструкций обновлен 308, процесс может определять 310 то, имеются или нет дополнительные критерии подозрительности, с которыми следует сравнивать 304 инструкцию. Если имеются дополнительные критерии, инструкция дополнительно сравнивается 304 и анализируется, возможно, приводя к еще одному обновлению 308 количественного показателя на уровне инструкций. Наоборот, если нет дополнительных критериев, с которыми следует сравнивать 304 инструкцию, общий количественный показатель на уровне инструкций может быть определен 312 для анализируемой инструкции.
Определение 314 может выполняться относительно того, имеются или нет дополнительные инструкции для анализа 302. Если имеются дополнительные инструкции в последовательности инструкций, процесс возвращается, чтобы анализировать 302 и сравнивать 304 дополнительные инструкции с критериями подозрительности. После того, как все инструкции проанализированы 302, сравнены 304, и все количественные показатели на уровне инструкций определены 312, общий количественный показатель для программы может быть суммирован 316. Это суммирование 316 может быть просто прибавлением каждого из количественных показателей на уровне инструкций или может включать в себя различные множители на основе числа отдельных критериев, которые нарушает программа. На основе этой суммы 316, программа определяется 318 либо как безопасная, либо как злоумышленная. Это определение 318 может быть основано на сравнении с похожей программой, кодированной посредством официального инструментального средства, к примеру, с кодом, проиллюстрированным на фиг.1. Это определение 318 также может быть основано исключительно на анализе количественного показателя программы и приемлемого порогового значения, установленного посредством анализирующей программы для идентификации вредоносных программ, т.е. если количественный показатель превышает определенное значение, программа идентифицируется как злоумышленная. После идентификации, может создаваться сообщение, указывающее результаты определения 318, и, в зависимости от приложения, дополнительный анализ программы может выполняться.
Фиг.4 иллюстрирует блок-схему примерных внутренних аппаратных средств, которые могут использоваться для того, чтобы содержать или реализовывать программные инструкции, такие как процесс обнаружения вредоносных программ, описанный на фиг.3. Шина 400 может выступать в качестве главной информационной магистрали, соединяющей другие проиллюстрированные компоненты аппаратных средств. CPU 405 может быть центральным процессором системы, выполняющим вычисления и логические операции, требуемые для того, чтобы выполнять программу. Постоянное запоминающее устройство (ROM) 410 и оперативное запоминающее устройство (RAM) 415 могут составлять примерные запоминающие устройства.
Контроллер 420 может взаимодействовать с одним или более необязательных запоминающих устройств 425 для системной шины 400. Эти запоминающие устройства 425 могут включать в себя, например, внешний или внутренний накопитель на DVD, накопитель на CD-ROM, жесткий диск, флэш-память, USB-флэш-память и т.п. Как указано ранее, эти различные накопители и контроллеры являются необязательными устройствами.
Программные инструкции могут сохраняться в ROM 410 и/или RAM 415. Необязательно, программные инструкции могут сохраняться на материальном машиночитаемом носителе, таком как компакт-диск, цифровой диск, флэш-память, карта памяти, USB-флэш-память, носитель хранения данных на оптических дисках, такой как диск Blu-Ray™ и/или другой носитель записи.
Необязательный интерфейс 430 дисплея может разрешать отображение информации из шины 400 на дисплее 435 в аудио-, видео-, графическом или буквенно-цифровом формате. Связь с внешними устройствами может осуществляться с использованием различных портов 440 связи. Примерный порт 440 связи может соединяться с сетью связи, такой как Интернет или сеть intranet.
Аппаратные средства также могут включать в себя интерфейс 445, который предоставляет возможность приема данных от устройств ввода, таких как клавиатура 450 или другое устройство 455 ввода, такое как мышь, джойстик, сенсорный экран, пульт дистанционного управления, указательное устройство, устройство видеоввода и/или устройство аудиоввода.
Следует отметить, что процесс эвристического анализа, поясненный в данном документе, может запускаться в любом сегменте программы. В некоторых ситуациях, может быть достаточным анализировать только часть кода, к примеру, первые 512 байтов в точке входа. В то время, как эмулятор должен запускать всю программу и проходить через циклы с миллионами повторений до того, как он фактически обнаруживает что-либо важное, вышеописанная эвристика может предоставлять результаты в течение нескольких миллисекунд.
Следует принимать во внимание, что различные из раскрытых выше и других признаков и функций либо их альтернатив предпочтительно могут быть комбинированы во множество других различных систем или вариантов применения. Кроме того, различные непрогнозируемые или непредвиденные в настоящее время альтернативы, модификации, варьирования или усовершенствования могут впоследствии выполняться специалистами в данной области техники, которые также имеют намерение охватываться посредством нижеприведенной формулы изобретения.