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

Обновлено: 25.04.2024

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

Для чего нам нужен антивирус?

В первую очередь для того, чтобы своевременно обнаруживать и удалять вирусы и тому подобную заразу. Но для начала нам его нужно установить. Сразу оговоримся, что помимо вирусов как таковых существует еще целый ряд деструктивных сетевых действий, на борьбу с которыми рассчитан фаервол (он же брандмауэр), часто идущий в пакете с антивирусом в виде модуля расширения, который можно установить, а можно и отказаться от его установки, воспользовавшись услугами таких мэтров как Agnitum Outpost Firewall Pro - кстати, последний не уживается практически ни с какими сторонними разработками. Вообще роль брандмауэра в системе нельзя умалять, он закрывает неиспользуемые сетевые порты, "мониторит" их на предмет нецелевого использования, а также запрещает выход в сеть неугодным приложениям, отражает сканирование портов, DDoS атаки и выполняет еще массу различных и крайне необходимых мер безопасности, так что отнеситесь к нему с большим вниманием, а на штатное решение компании Microsoft особо полагаться не стоит. О фаерволах нужна отдельная статья, потому что они тоже делятся на классы и типы фильтрации сетевого трафика (динамическая и пакетная фильтрация), у которых, разумеется, тоже есть свои достоинства и недостатки.

Каждый производитель выпускает антивирусы для различных платформ, например существуют версии того же самого AVP как для различных Windows платформ, так и для Unix/Linux систем, MacOS. Уже многие компании начали выпуск антивирусных пакетов для мобильных устройств на базе SymbianOS, PalmOS и клоны Windows CE (WM, Pocket, Smartphone и т.п.). Многие юзеры, конечно, и не подозревают о том, что уже существуют вирусы и под эти платформы, а некоторые уже знают о них, получив через Bluetooth вирус Duts для WM 2002/2003 или Cabir для Symbian.

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

Где взять антивирус

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

В процессе установки разные антивирусы могут предлагать различные попутные настройки с обязательно установленной кнопкой в положение Recommended. Если вы не особо разбираетесь в работе антивируса, то лучше так и оставьте. Далее возможна ситуация, когда антивирус просканирует ОЗУ вашего кремниевого друга и удалит все вирусы из нее, после этого поступит предложение просканировать весь жесткий диск на предмет вирусов, до перезагрузки (если в памяти были найдены вирусы), не советую пренебрегать этим предложением. После сканирования перезагружаемся и если до этого в системе антивирус установлен не был, то наблюдаем более низкую скорость загрузки ОС, потерю нескольких десятков мегабайт ОЗУ, а если машина совсем уж слабенькая, то может наблюдаться и замедление работы — но поверьте, оно того стоит.

Как работает антивирус?

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

Начнем по порядку: с того, какие типы обнаружения вирусов существуют, а их всего три, это сигнатурный, эвристический и проактивный.

Сигнатурный метод обнаружения вирусов

Для начала давайте разберемся, что же такое сигнатура. Сигнатура - это участок кода вируса, который обнаружили антивирусные компании и добавили этот участок кода в базу сигнатур антивируса, и теперь во время сканирования антивирус будет проверять каждый файл на компьютере на наличие такой сигнатуры в коде (как бы прикладывая ее к телу файла). Если он ее отыщет, то она будет извлечена из тела файла, то есть файл окажется вылечен (этим занимаются фаги и полифаги). Многие пользователи не могут представить себе, как антивирус может вообще заглянуть в файл, и хотят посмотреть на примере участок кода (открою вам секрет: вирус не может заразить чисто текстовый файл таких форматов как txt, rtf или "чистый" html, и если вы посмотрите эти файлы с помощью HEX-редактора, то сразу поймете, почему). Итак, откроем файл adptif.dll из директории System32 программой ResHacker (она позволяет декомпилировать некоторые файлы для последующего анализа исходника).


На рисунке видна сигнатура, которую я специально добавил в тело "диллки" из существующего вируса под названием Email-Worm.Win32.Happy (из легендарного вируса!), примерно так и работает антивирус, декомпилируя файл и ища в нем сигнатуры вирусов (на самом деле, конечно же, код длинней, но и на сохраненные изменения в этом файле моя "Панда" отреагировала незамедлительно).

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

В некоторых случаях сигнатуры новых вирусов отправляют друг другу и компании антивирусного ПО. Да-да, это не шутка. Несмотря на маркетинговую политику, такое происходит, это поведал один руководитель крупной российской антивирусной компании в онлайн-интервью. А вообще в антивирусные компании ежедневно поступают из всех помянутых источников 200-300 свеженьких образцов различных "зверушек", написанных как профи, так и не очень опытными вирусописателями, некоторым образцам так и не суждено заразить ни одной машины, а некоторым, таким как Win95.CIH (он же "Чернобыль"), Sasser, NetSky, MyDom удается произвести настоящий шум.

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


Иногда в неделю добавляется сигнатур объемом в 350-400 кб, и после того как сигнатуры добавлены, файлы, находившиеся в карантине, будут вылечены (т.е. если вирусы, которыми они заражены, найдутся в базе).

Также иногда возникает спор на тему того, что у одного антивируса в базе 75 000 известных вирусов, а у другого их аж 125 000, и последний, как правило, в глазах несведущих пользователей выглядит привлекательней. Но тут тоже есть рекламная хитрость, дело в том, что у одного вируса может быть несколько мутаций (небольшое изменение кода вследствие модификации вредоносного кода), так вот, некоторые компании считают группу мутаций одного вируса (которая может достигать десятка) одним вирусом, другие считают каждую мутацию отдельным вирусом. Сигнатурный метод очень хорош тем, что в случае, когда вирус известен антивирусной компании и его сигнатура занесена в базы, он будет найден наверняка, на все 100%.

У сигнатурного метода обнаружения есть и слабые места, а именно: при увеличении файла(ов) сигнатур увеличиваются и требования к ресурсам компьютера, а еще такой метод поиска и обнаружения способен отыскать только те вирусы, которые заранее известны и не более того. Новые вирусы пишутся просто с бешеной скоростью, а на то, чтобы обнаружить новый вирус и добавить в базы, нужно время. Если учитывать, что на написание нового вируса у профи может уйти всего 15-20 минут, а на распространение и заражение сотен компьютеров в сети и того менее - 20-30 секунд (!), то станет понятно, что динамичным и надежным такой метод назвать трудно.

Эвристический метод обнаружения вирусов

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

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

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

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

Проактивный метод обнаружения вирусов (или поведенческий)

Этот метод обнаружения впервые появился в продукте "Антивирус Касперского 6.0" и произвел в некотором роде переворот в антивирусном ПО.

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

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

Полифаги и фаги

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

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

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

Также во время установки антивируса в систему он интегрируется в почтовые программы, такие как Outlook Express, Eudora, The Bat! и т.д.


Это очень важный аспект, поскольку во время получения почты нужно прямое сканирование трафика из протоколов POP3, SMTP, NNTP, IMAP и тому подобных, потому что многим типам червей, распространяющихся через эти протоколы, совершенно не нужно запуска, им главное попасть на ваш компьютер, дальше сработает механизм. Учтите это! Вам же не хочется, чтобы какой-нибудь червь с трояном отправили на все ваши адреса из почтовой программы ругательные письма. Представляете, что будет с вашим лицом через пару дней, когда до вас доберутся обиженные адресаты? :)

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


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


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

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

Общие сведения

Антивирусные программы - это программы, основной задачей которых является защита именно от вирусов, или точнее, от вредоносных программ.

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

Из всех методов антивирусной защиты можно выделить две основные группы:

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

Сигнатурный анализ

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

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

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

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

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

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

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

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

Эвристический анализ

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

Поиск вирусов, похожих на известные

Если сигнатурный метод основан на выделении характерных признаков вируса и поиске этих признаков в проверяемых файлах, то эвристический анализ основывается на (весьма правдоподобном) предположении, что новые вирусы часто оказываются похожи на какие-либо из уже известных. Постфактум такое предположение оправдывается наличием в антивирусных базах сигнатур для определения не одного, а сразу нескольких вирусов. Основанный на таком предположении эвристический метод заключается в поиске файлов, которые не полностью, но очень близко соответствуют сигнатурам известных вирусов.

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

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

Поиск вирусов, выполняющих подозрительные действия

Другой метод, основанный на эвристике, исходит из предположения, что вредоносные программы так или иначе стремятся нанести вред компьютеру. Метод основан на выделении основных вредоносных действий, таких как, например:

  • Удаление файла
  • Запись в файл
  • Запись в определенные области системного реестра
  • Открытие порта на прослушивание
  • Перехват данных вводимых с клавиатуры
  • Рассылка писем
  • И др.

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

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



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

Локации вирусного ПО

  • Сканирование произвольных файлов и папок, вплоть до целых дисков.
  • Сканирование памяти. Сканируются все загруженные в память процессы и их dll.
  • Сканирование загрузочных записей дисков (Master Boot Records — MBR).
  • Сканирование системы на предмет следов вредоносного ПО. Проверка системных папок вроде %APPDATA%, %WINDIR% на предмет определенных файлов и папок. Сканирование реестра, также на предмет следов в автозагрузке и настройках.

Виды сканирования.

Сканирование делится на два основных вида: сигнатурный и эвристический.

Сканирование на основе сигнатур.

Другое название — хэш-скан (hash scan). Сканер проверяет файлы путем сравнения сигнатур файлов со словарем.
Обычно сигнатурой антивируса является MD5-хэш (16 байт) сгенерированный на основе тела известного вируса.
Таким образом, файл считается зараженным, если его хэш найден в базе сигнатур. Для локализации выявления вредоноса, хэш может вычисляться только для exe-файлов на основе PE-заголовка.
Такой вид сканирования позволяет определить вид атаки с высокой долей вероятности, без ложных срабатываний (чем грешит эвристическое сканирование).
К недостаткам хэш-скана относят неспособность выявить новые вирусы, которые отсутствуют в базе. А также беззащитность перед полиморфными или шифрующимися вирусами, в связи с чем требуются регулярные обновления базы сигнатур.
Также слабым местом хэш-скана является скорость проверки. Если бы не закон Мура, ни один современный компьютер уже не смог бы закончить сканирование с такой массой сигнатур в разумное время.

Эвристическое сканирование

Компоненты и вспомогательные модули сканера

Драйвер прямого доступа к диску

Необходим для обхода руткитов. В зараженной системе, руткиты используются
для заметания следов своего присутствия. Лучшим способом для этого является подмена вызовов API-функций.
В частности для работы с файлами: CreateFile, ReadFile итд. Когда антивирусная программа сканирует систему,
вызывая эти функции, то руткит может возвращать FALSE, когда такой вызов относится к нему. Чтобы обойти это,
сканер содержит в себе модуль непосредственного посекторного считывания с диска, без использования WinAPI.

Черно-Белые списки

Служат для фильтрации обнаружений, которые на самом деле не являются зловредами. Таким образом, антивирус не предупреждает об опасности, в случае ложного срабатывания.
Современные антивирусы, хранят базу в среднем от 5 млн. сигнатур. Причем довольно часто, для одного вируса, может существовать с десяток сигнатур. Возможная ситуация, что из нескольких тысяч системных файлов, найдется подходящий под сигнатуру файл. А это грозит тем, что антивирус удалит его, или переместит в карантин, что может привести к отказу системы вовсе.
Минимизировать ложные срабатывания — главный приоритет любой антивирусной компании.
Чтобы пройти самый престижный антивирусный тест — virus bulletin, антивирус должен показать 100% результат обнаружения, при этом не выдав единого ложного срабатывания.
Белый список — содержит список файлов, которые не вредят системе, но так или иначе обнаруживаются сканером.
Черный список — содержит список вирусов, которым мы доверяем (также не наносят вреда системе).

Распаковщики, дешифровшики

Чтобы достичь приемлемого уровня обнаружения вируса, сканер должен отрабатывать exe-шники, зашифрованные exe-пакером (Например UPX). Тогда перед вычислением хэша, сканер обнаруживает, что файл зашифрован и сначала обращается к дешифровщику, а затем уже на этой основе, вычисляется хэш и сравнивает с имеющимся в базе.
Второй вид архивов — это всем известные zip, rar, 7z итд. Антивирус также должен уметь распаковывать эти архивы, и сканировать содержимое.
Третий вид — это распаковка NTFS ADS (NTFS Alternative Data Streams). В файловой системе NTFS, исполняемый файл может быть замаскирован под обычный, например текстовый. Альтернативный поток этого файла, будет ссылаться непосредственно на вирус.


О том, как мы разрабатывали модуль машинного обучения, почему отказались от нейронных сетей в сторону классических алгоритмов, какие атаки выявляются за счет расстояния Левенштейна и нечеткой логики, и какой метод обнаружения атак (ML или сигнатурный) работает эффективнее.

Применение машинного обучения для обнаружения атак

Посмотрев на рост популярности запросов ML (как и Cybersecurity) в Google:


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

Перед тем, как приступить к разработке, cформулируем задачу:

Используя общую схему классификации строк




и адаптацию под нашу задачу:

Этап 1. Обработка трафика.

Этап 2. Определение признаков.

Этапы 3 и 4. Фильтрация.

Этапы относятся больше к осмысленному тексту, поэтому для решения задачи они не требуются, исключаем.

Этап 5. Преобразование в векторный вид.

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

Этап 6. Выделение словаря признаков.

Забираем результат работы алгоритма TFIDF и уменьшаем число признаков (управляя,
например, параметром частоты встречаемости).

Этап 7. Обучение алгоритма.

Производим выбор алгоритма и его обучение. После обучения (при распознавании) работают только блоки 1, 5, 6 + recognition.

Выбор алгоритма


При выборе алгоритма обучения рассматривались практически все, входящие в пакет scikit-learn.


Глубинное обучение обеспечивает высокую точность, но:
— требует больших затрат на ресурсы, как для процесса обучения (на GPU), так и для процесса распознавания (inference может быть и на CPU);
— время, затрачиваемое на обработку запросов, существенно превышает время обработки с использованием классических алгоритмов.


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

Классический алгоритм Многослойные нейронные сети
1. Высокая точность только при хорошей обучающей выборки.
2. Не требователен к аппаратному обеспечению.
1. Высокие требования к аппаратному обеспечению (GPU).
2. Время обработки запросов существенно превышает время обработки с помощью классических алгоритмов.

WAF для защиты веб-приложений — инструмент необходимый, но не каждый имеет возможность приобретения или аренды дорогостоящего оборудования с GPU для его обучения. Кроме этого, время обработки запросов (в стандартном режиме IPS) является критичным показателем. Исходя из изложенного, мы решили остановиться на классическом алгоритме обучения.

Стратегия разработки ML

При разработке модуля машинного обучения (Nemesida AI) была использована следующая стратегия:
— Фиксируем уровень ложных срабатываний на значении (до 0.04% на 2017 г., до 0.01% на 2018 г.);
— Увеличиваем до максимума уровень обнаружения при заданном уровне ложных срабатываний.

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

Обучающая выборка нелегитимного трафика базируется на существующей базе атак, получаемых из различных источников, а легитимного трафика — на основе запросов, приходящих на защищаемое веб-приложение и распознанных сигнатурным анализатором как легитимные. Такой подход позволяет адаптировать систему обучения Nemesida AI под конкретное веб-приложение, снижая уровень ложных срабатываний до минимума. Объем формируемой выборки легитимного трафика зависит от объема свободной оперативной памяти сервера, на котором функционирует модуль машинного обучения. Рекомендуемым параметром для обучения моделей является значение в 400.000 запросов при 32 ГБ свободной ОЗУ.


Кросс-валидация: подбираем коэффициент

Используя оптимальное значение коэффициентов для кросс-валидации, был выбран метод на основе случайного леса (Random Forest), который позволил нам достичь следующих показателей:
— количество ложных срабатываний (FP): 0.01%
— количество пропусков (FN) 0.01%
Таким образом, точность выявления атак на веб-приложение модулем Nemesida AI составляет 99.98%.

Результат работы модуля ML

Блокирование brute-force атак

Выявление brute-force атак (BF) — важный компонент современного WAF. Выявлять такие атаки проще, чем атаки класса SQLi, XSS и прочие. Кроме этого, выявление BF-атак производится на копии трафика, не влияя на время отклика веб-приложения.

В Nemesida AI выявление brute-force атак производится по следующему принципу:
1. Анализируем копии запросов, поступающих на веб-приложение.
2. Извлекаем необходимые для принятия решений данные (IP, URL, ARGS, BODY).
3. Фильтруем полученные данные, исключая нецелевые URI для уменьшения количества ложных срабатываний.
4. Рассчитываем взаимные расстояния между запросами (мы выбрали расстояние Левенштейна и нечеткую логику).
5. Выбираем запросы с одного IP на конкретный URI по мере их близости или запросы со всех IP на конкретный URI (для выявления распределенных BF-атак) в рамках определенного временного окна.
6. Блокируем источник(и) атаки при превышении пороговых значений.

Машинное обучение или сигнатурный анализ

Вывод: для выявления атак на веб-приложение нужен комбинированный подход на основе машинного обучения и сигнатурного анализа.

Читайте также: