Где живут макровирусы?
АрхивПоявление в сентябре этого года первого макровируса для умеренно популярной в наших краях системы "1С:Предприятие" ознаменовало очередной крах иллюзорных надежд производителей программного обеспечения. Вопреки здравому смыслу они продолжают уповать на то, что желание напакостить ближнему когда-нибудь да ослабнет.
Появление в сентябре этого года первого макровируса для умеренно популярной в наших краях системы «1С:Предприятие» ознаменовало очередной крах иллюзорных надежд производителей программного обеспечения. Вопреки здравому смыслу они продолжают уповать на то, что желание напакостить ближнему когда-нибудь да ослабнет. Увы, увы… Странно было вообще ожидать, что вирусописатели пройдут мимо системы, предназначенной для хранения в том числе и конфиденциальной информации.
Обилие инструментария для начинающего взломщика в системах такого класса просто обескураживает. Пользователя загоняют в совершенно анекдотическое положение, когда прав и возможностей у него куда меньше по сравнению с неизвестно откуда появившимся программным кодом. Более того, причинить вред значительно проще, нежели использовать программу по прямому назначению. Что толку от паролей и уровней привилегий, если вирус или, того хуже, троянец уже сидит внутри и может беспрепятственно воспользоваться всеми функциями поражаемой системы? Это напоминает КПП воинской части, вокруг которой нет никакого ограждения.
Безопасность опять принесена в жертву ради удобства работы программистов. По-видимому, здесь наблюдается отрицательная обратная связь: ориентация на потребителей с минимальными компьютерными знаниями снижает требования к квалификации разработчиков. А чем еще можно объяснить упорное игнорирование накопленного опыта? И сколько еще будут платиться деньги за сейф без задней стенки?
Эра макровирусов началась в 1995 году, когда появился Word.Concept, обитающий в 6-м Word’e и Windows 3.1. Выпуск Windows 95 перекрыл кислород многим DOS-вирусам, но злобные макросы оказались для Microsoft неприятным сюрпризом. Их попросту не ждали и продолжали наращивать мощь макроязыков, полагая, видимо, что проблема рассосется сама собой.
Создавая Windows 95, Microsoft пыталась доказать, что для нее нет ничего невозможного. Помнится, в начале 1990-х годов, когда разразилась эпидемия DOS-вирусов, эксперты по безопасности опровергали слухи о вирусах в электронных письмах. Они утверждали, что для опасений нет никаких оснований. Наивные люди. Пока они убаюкивали пользователей, тысячи сотрудников уже отнюдь не микроскопических софтверных фирм ковали как раз те самые основания, благодаря которым NIMDA сегодня ставит на уши Internet-сообщество.
Макровирусы оказались побочным эффектом идеи тотальной автоматизации приложений. Спору нет, это очень удобно для программистов: не требуется заново изобретать велосипед, применяя по мере необходимости готовые решения. Грамотный пользователь может расширить возможности используемого программного обеспечения. Проблема в том, что нет никаких ограничителей. Ядро автоматизации составляет Visual Basic for Application (VBA) - сплав мощности и простоты. Оснащенное им приложение фактически превращается в интерпретатор языка высокого уровня, которому доступны все возможности операционной системы. Сегодня он есть фактически на каждом Windows-компьютере в составе популярных приложений и обеспечивает благоприятные условия для вирусных эпидемий.
Разработать эффективную вредоносную программу вполне под силу начинающему программисту. В статье «Curious Basic» я приводил примеры, поясняющие, что скрывается за парадным фасадом автоматизации «по-редмондовски». Word элементарно можно запрограммировать так, что он станет менеджером задач или будет править Реестр (Registry). Зачем это офисному приложению? Естественно, применение таким способностям найдется только в неправедных целях.
Не реагировать на растущее недовольство клиентов (дожили ведь до того, что, открыв документ, можно потерять всю информацию на винчестере) компания Microsoft уже не может, а признавать ошибочность своего выбора еще не хочет. Пока она ограничивается косметическими заплатами, одновременно промывая мозги доверчивым клиентам: проблема, дескать, решена. По мнению разработчиков, основная проблема - люди. Это они пишут вирусы, тащат на свой компьютер всякую дрянь, а беднеющий на глазах производитель замечательного ПО ни в чем не виноват.
Ну что ж, посмотрим для начала на самый популярный среди вирусописателей объект MS Word. DOC-формат сейчас является самым распространенным форматом для обмена данными. Начиная с 8-й версии (Word 97) макросы могут содержаться как в шаблонах (DOT), так и в обычных документах (DOC). Рекомендации использовать для пересылки документов формат RTF, в котором макросов не должно быть по определению, не учитывают один «пустяк». Если документ содержит растровую графику, то при конвертации в RTF она почему-то оказывается в формате BMP (не иначе как для лучшей совместимости, с кем только?), увеличивая размеры файла в десятки раз. Так, черновик этой статьи со вставленными TIF-иллюстрациями имеет размер 135 килобайт в DOC-формате, а в RTF - «всего-то» 6,19 МЕГАбайт. WinRAR при максимальном сжатии может упаковать его до 199 Кбайт, хотя исходный DOC уменьшается до 89 Кбайт. И это при использовании скриншотов, а когда речь пойдет о настоящих картинках, размеры RTF-копии могут оказаться в сотни раз больше исходника!
Чтобы снизить риск заражения, в программы пакета MS Office введено предупреждение о наличии макросов в открываемом документе (рис. 1).
Word 2000 имеет три уровня такой «защиты» от макровирусов (меню Сервис® Макрос®Безопасность…). Зря все-таки зоилы говорят, что Microsoft не дает пользователям права выбора (рис. 2).
Выбор более чем широк. От возможности подцепить заразу без предупреждения (Низкая), до полного незнания о ее существовании (Высокая). Поскольку творцы вирусов обходились пока без цифровой подписи, их макросы будут автоматически отключены, а юзер даже и не догадается, что у него опасный файл. Жить в нем бацилла будет до тех пор, пока не попадется на глаза антивирусному сканеру. До тех пор она может кочевать с компьютера на компьютер и где-нибудь да сработает. Чтобы избежать таких конфузов и не стать распространителем инфекции, выбирайте средний уровень. В этом случае за решение о запуске макросов из ненадежных источников отвечает сам пользователь.
Уровень безопасности уже нельзя изменить, как было ранее, из VBA с помощью объекта Word.Application, присвоив Options.VirusProtection = False. Теперь он определяется строковым параметром Level ключа Реестра HKCU\Software\Microsoft\Office\9.0\Word\Security. По «счастливой случайности» Word 2000 содержит функцию PrivateProfileString, умеющую работать как раз со строковыми параметрами Registry. Вот ни с какими другими (двоичный, DWORD) не умеет, а со строками - пожалуйста. Простейший пример программного отключения защиты приведен в «Curious Basic». Чем думали - туда и поставили.
Получив предупреждение, отключите макросы и проверьте файл антивирусной программой. Не торопитесь разрешать макросы при отсутствии известных зараз. Для гарантии лучше воспользоваться Организатором (рис. 3). Добраться до него можно через меню Сервис®Шаблоны и надстройки, кнопка Организатор (рис. 4).
Этот инструмент применяется для обмена стилями, макросами, панелями инструментов и элементами автотекста между документами и шаблонами. При этом файлы не требуется открывать в Word’е. Открыв диалоговое окна Организатора (рис. 3), нажмите любую кнопку Закрыть файл. Ее название сменится на Открыть файл. Найдите «подозреваемый» файл и выберите вкладку Макросы. Если в окне появится хоть одно из названий - AutoExec, AutoNew, AutoOpen, AutoClose или AutoExit, - есть повод серьезно задуматься. Это имена автоматически исполняемых макросов, используемых вирусами для внедрения в главный шаблон - normal.dot.
Наличие автоматически исполняемых макросов обеспечивает вирусам легкий механизм заражения главного шаблона и последующего расползания по открываемым документам. Чтобы их заблокировать, нужно держать нажатой клавишу Shift при запуске Word’а, при создании нового документа, при открытии или закрытии документа, а также при завершении работы с текстовым процессором. Когда вам это надоест, создайте в шаблоне normal.dot макрос с именем AutoExec, содержащий всего одну строку:
WordBasic.DisableAutoMacros
Это запретит автоматическое исполнение макросов в любом случае. Возможная потеря функциональности отдельных документов с лихвой компенсируется снижением риска инфицирования. Если же в вашей работе автомакросы необходимы постоянно, считайте, что вам не повезло. Но тогда, по крайней мере, включите запрос на сохранение normal.dot (меню Сервис®Параметры, вкладка Сохранение). Будете хотя бы получать предупреждение об изменении главного шаблона, если, конечно, вирус таковое не отключит (Options.SaveNormalPrompt = False). Поэтому нужно иметь резервную копию, чтобы потом не мучиться, вспоминая характеристики своих стилей, изменения в панелях и прочие украшательства.
Кстати, обратите внимание на то, что механизм запрещения автоматически исполняемых макросов принадлежит оставленному пока для совместимости WordBasic’у - предшественнику VBA и первой платформе для макровирусов. Уж не собираются ли умники из Редмонда вообще отменить такую функцию?
Удалить подозрительные макросы из документа, превратив его в безопасный, можно прямо в Организаторе. Правда, для этого они не должны быть заблокированы для просмотра. Убивать нужно все макросы, а не только автоматические. Дело в том, что VBA позволяет перекрывать внутренние функции приложений, и у вирусов появляется дополнительный шанс выжить, например, при сохранении или печати документа. Не говоря уже о том, что в подменяемые команды вставляются разнообразные пакости. Список всех имен Word’овских функций доступен для просмотра в окне «Настройка клавиатуры» (рис. 5), получаемого из меню Сервис®Настройка, кнопка Клавиатура…
Думаете, на этом уязвимые направления исчерпаны? Как бы не так. Изобретательный micro-народ придумал возможность автоматической загрузки документов и шаблонов при запуске Word’а. Их список вы увидите с помощью меню Сервис®Шаблоны и надстройки (рис. 4). Такие шаблоны надо размещать в папке для автозагружаемых файлов (на рис. 6 - STARTUP).
Как вы понимаете, там тоже водятся макросы, причем в больших количествах. Механизм автооткрываемых шаблонов применяется для связи Word’а с шибко умными внешними приложениями: переводчиками, словарями, распознавателями текста и т. д., без которых немыслима работа современного офиса. По умолчанию все такие файлы-посредники предполагаются безопасными (рис. 7).
То есть зараженный документ в startup-папке чаще всего не проверяется. Мало кто из пользователей до этой настройки добирается. Ежели снять доверительную птичку и установить контроль на общих основаниях, Word будет доставать вопросами при каждом запуске на среднем уровне безопасности. Перейдя на высокий, мы потеряем предупреждение об угрозе, да и функциональность оказывается под вопросом: не все макросы имеют цифровую подпись, которую можно объявить надежной.
Доверяй, но проверяй. Подвох может оказаться в файле из самого надежного источника. К тому же защита не так уж редко бывает дырявой, пропуская макросы без предупреждения. А произвольный внешний код, используя COM-свойства Word’а, может вставить макрос прямо в normal.dot, игнорируя все защитные барьеры, цифровые подписи и прочую успокоительную дребедень.
Первым симптомом заражения обычно бывает блокировка пунктов меню Сервис® Макрос®Макросы и Редактор Visual Basic. Вирусу это необходимо, чтобы затруднить свое обнаружение и удаление. Помочь в таких случаях может резервный макрос, дающий доступ к редактору VB:
Sub GiveVBA()
ShowVisualBasicEditor = True
End Sub
Ему нужно обязательно назначить клавиатурную комбинацию (рис. 5), иначе в критическом случае до него не добраться. Если зараза не диагностируется антивирусом, ее все же можно увидеть в редакторе VB и выкинуть лишние макросы. Резервная копия главного шаблона normal.dot поможет менее любопытным пользователям быстро его восстановить, но отдельные документы все равно придется проверять вручную. Или кричать «SOS!».
[i41944]