Как хакеры скрывают вирусы в документах Office

Вирус иконка

На самом деле правильнее было бы назвать эту статью «Как хакеры скрывают вирусы в документах Office а Microsoft на это наплевать» Но давайте по порядку.

В последних версиях Microsoft Office по умолчанию документы сохраняются в формате, основанном на Office Open XML, но Microsoft не во всем следует открытому стандарту. Вариант Microsoft часто называют MOX, Microsoft Open XML. Этот самый MOX имеет уязвимости, создающие угрозы безопасности. В этой статье мы подробно разберем одну из таких дыр, которая на момент статьи так и не закрыта.

Еще по теме: Лучшие сайты для поиска уязвимостей

Почти сразу после публикации чернового варианта OOXML началась битва за его стандартизацию. Вот краткая хронология версий.

Стандартизация стандарта OOXML

В 2016 году были выпущены дополнения к 5-ой версии: ISO/IEC 29500-1:2016 и ISO/IEC 29500-4:2016. Работа над стандартом продолжается, а компания Microsoft допускает все больше проприетарных особенностей его реализации в последних версиях Office. Хуже того: Microsoft не признает старые уязвимости, оставляя их в новых версиях. Вы не поверите, но описываемая в данной статье уязвимость известна с Office 2013 и актуальна вплоть до Office 2019.

ECMA-376 включает в себя три различные спецификации для каждого из трех основных типов документов Office — WordprocessingML для текстовых документов, SpreadsheetML для электронных таблиц и PresentationML для презентаций. Мы будем использовать WordprocessingML.

Я возьму на себя смелость указать на два критичных с точки зрения безопасности недостатка MOX, унаследованных от OOXML:

  • возможность легкого редактирования внутренней структуры документов;
  • отсутствие проверок на злонамеренную модификацию.

По сути, MOX и OOXML — это XML в ZIP. Это отличный hacker-friendly-формат, поскольку найти и заменить свойства объектов в нем исключительно просто даже без использования HEX-редакторов и прочих специфических утилит. Достаточно встроенной в Windows поддержки ZIP и «Блокнота». Весь код легко читается глазами и правится, как текст. Ни сверки контрольных сумм, ни каких-то иных специфических проверок при этом не выполняется. Word лишь проверяет целостность документа, которая не нарушается при подменах с соблюдением правил синтаксиса.

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

Статья предназначена для профессиональных пентестеров, руководителей службы CISO (информационной безопасности), а так же для «белых хакеров». Ни автор статьи, ни редакция сайта spy-soft.net не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Описание уязвимости

В базе уязвимостей MITRE есть много однотипных записей вида: «Microsoft Office… do not properly validate record information during parsing of (Excel spreadsheets / Word documents, Power Point presentations)… which allows remote attackers to execute arbitrary code or cause a denial of service (memory corruption) via a crafted file)». Проще говоря, проблемы парсинга XML в MS Office неисчерпаемы, как атом.

Я уже рассматривал одну из них в статье «Перехват хеша с помощью документа NTLMv2-SSP». Сейчас я познакомлю вас с другой атакой, также слегка изменив внутренности Word.

Начиная с Office 2013 в OOXML стал доступен класс WebVideoProperty. Он используется в разметке при вставке в документ онлайн-видео и описывает параметры его воспроизведения через набор атрибутов.

Нас интересует атрибут embeddedHtml. Он используется для вставки сторонних объектов и содержит ссылку на них (например, на видео с YouTube). Из-за того что данный параметр «знает», откуда открывать картинку видеозаписи, его невозможно опустить при парсинге.

Поиск объекта подмены

Давайте выполним простую атаку подмены и пощупаем уязвимость своими руками. Запускаем Word (требуется версия 2013 или выше, так как нам нужна полная поддержка ISO/IEC 29500 Strict) и открываем меню «Вставка».

Вставка обьекта в Microsoft Word

В появившемся окне в строчке напротив YouTube я просто вписал слово «видео» и выбрал первую понравившуюся картинку. Вставка ролика отобразилась на листе документа типичной превьюшкой.

Сохраним и закроем его. Обратите внимание, что размер файла почти не изменился. У меня он занимал несчастные килобайты. Значит, вставленное видео не сохраняется локально, а всегда запрашивается из интернета по известной ссылке.

Следующим шагом нам надо заглянуть в нутро документа. Меняем расширение .docx на .zip, открываем любым архиватором и видим содержимое.

В папке \word нам нужен файл document.xml. Разархивируем и откроем его на редактирование (подойдет и простой Notepad, хотя Notepad++ намного удобнее из-за подсветки синтаксиса).

В скудной документации о классе WebVideoProperty указано, что в теле документа он именуется wp15:webVideoPr. Находим эту секцию и смотрим ее содержание.

wp15:webVideoPr в структуре файла document.xml
wp15:webVideoPr в структуре файла document.xml

Конструкция изначально выглядит следующим образом:

Атрибут embeddedHtml содержит iframe YouTube, который при замене на HTML или JavaScript будет выполняться. А это не что иное, как уязвимость!

Эксплуатация уязвимости

Если внимательно посмотреть на содержимое секции, то можно заметить, что символы < и > заменены на &lt; и &gt;. Это способ записи символьных данных без использования раздела CDATA. Они указывают парсеру на то, что эта часть документа не содержит разметки. Так же мы должны поступить со всеми нашими спецсимволами.

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

Ошибка Word при неправильном синтаксисе document.xml
Ошибка Word при неправильном синтаксисе document.xml

Давайте удалим все, что находится между кавычками, и попробуем вставить свой HTML-код. Сначала добавим отображаемую часть ссылки:

В нашем случае она будет выглядеть следующим образом:

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

В качестве «вредоносного сервера» я поднял дистрибутив Ubuntu 16.4 с Apache2 и положил в каталог /var/www/html два файла: условного зловреда и простую HTML-страницу со ссылкой на него. IP-адрес сервера в локальной сети — 192.168.1.20.

Далее нам необходимо все это указать в embeddedHtml:

Теперь сохраним наш измененный файл и запустим его.

Для первой проверки я подготовил имитацию жертвы — компьютер с Windows 10 (1803) и MS Office 2016 Professional Plus VL x86, который мы и будем атаковать.

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

Действие после активации воспроизведения
Действие после активации воспроизведения

В реальном сценарии вместо хакер лучше написать что-то более подходящее для фишинга. Например, Click to begin playback.

Может быть, со времен Office 2016 уязвимость уже пофиксили? Давайте проверим, сработает ли этот способ в Microsoft Office Pro Plus 2019 и Windows 10 (1803).

Открываем тот же файл и пробуем запустить видео. Слово «хакер» так же подчеркнуто и выступает в качестве ссылки. При клике на него открывается браузер Edge с нашей страницей на «злом сервере». На ней все та же ссылка для загрузки зловреда.

Открытие фишинговой ссылки при клике в окне предпросмотра видеоролика
Открытие фишинговой ссылки при клике в окне предпросмотра видеоролика

Примечания

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

Почему так происходит?

При нажатии левой кнопки мыши с клавишей Ctrl и без нее Word обращается к разным секциям документа. В первом случае он считывает подмененную ссылку из word\document.xml и предлагает выполнить переход по ней. Во втором — считывает оригинальную ссылку на видеоролик из word\_rels\document.xml.rels и запускает его.

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

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

В зависимости от версий ОС и Office, а также настроек безопасности у жертвы могут сработать другие компоненты защиты. Например, Office 2010 ограниченно поддерживает OOXML. Он предложит разрешить редактирование документа прежде, чем позволит кликнуть на превью видео. В Windows 7 IE выдаст предупреждение при открытии ссылки.

Предупреждение в Windows 7
Предупреждение в Windows 7

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

Для дополнительной проверки я открывал файл с измененной ссылкой в следующих офисных пакетах:

  • Open Office 4.1.6;
  • Libre Office 6.1.3;
  • Soft Maker Office 2018.

Все они официально поддерживают OOXML, причем в точном соответствии со стандартом ISO/IEC 29500. Ни один из них не подвержен рассмотренной уязвимости, поскольку все вольности Microsoft игнорируются. Получает, что пользователь лучше защищен благодаря отсутствию поддержки проприетарной функции вставки онлайн-видео… но ведь, кроме роликов, в документы можно вставлять и другие объекты.

Выводы

В данном примере мы рассмотрели, как модифицировать XML-разметку офисных документов, чтобы выполнить подмену ссылки и подсунуть жертве зловреда. При проведении пентеста вместо пугающей надписи «Хакер» можно подобрать что-нибудь более привлекательное. Например, указать, что для воспроизведения ролика необходимо скачать плагин или обновить плеер. Красиво оформляем страницу загрузки, внушаем, что все безопасно, и дело в белой шляпе.

Еще по теме: Как хакеры создают трояны для Андроид

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий