→ Выделение сигнатур из антивирусных баз

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

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

Например, в случае Email-Worm.Win32.Bagle.a для KAV (и его лицензированного аналога от F-Secure) получим следующие смещения в файле, используемые для расчета хеша:
0-1-60-61-62-63-200-201-202-203-220-221-240-241-242-243-460-461-462-463-469-470-471-9688-9689
Байты, выделенные полужирным соответствуют критическим участкам PE-заголовка - сигнатуры MZ, PE+00, смещение на PE-заголовок.
Выделенные курсивом байты также являются частью PE-заголовка.
Сами же значения байтов следующие:
4D-5A-C8-00-00-00-50-45-00-00-E0-00-8A-31-00-00-00-10-00-00-04-00-00-FA-FF

Во вложении доступны инструменты, применяемые в этом эксперименте: программа generate.exe выдает в подкаталог files измененные версии указанной вредоносной программы, перл-скрипт парсит лог проверки KIS данного каталога.
Запуск KIS можно выполнить из командной строки, например, так:
C:\KIS\avp.exe SCAN files /R:log10.txt /i0

Оригинальная идея E. Filiol & M. Christodorescu.
Reblog this post [with Zemanta]

About this Entry

This page contains a single entry by Павел Збицкий published on December 22, 2009 6:20 PM.

Operla 0.1 was the previous entry in this blog.

Operla 0.2 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.