Microsoft office automation ще одна лазівка ​​для макровірусу

Пакет програм Microsoft Office - це не тільки фактичний стандарт офісного ПЗ, а й дуже складна і багатофункціональне середовище, що дозволяє створювати рішення, призначені насамперед для застосування можливостей Microsoft Office і автоматизації рутинних дій користувача при роботі з документами. Ця програмна платформа, яка називається Об'єктній Моделлю Microsoft Office (Microsoft Office Object Model), або ж Автоматизацією Microsoft Office (Microsoft Office Automation) заснована на Об'єктній Моделі COM і містить великий набір класів, що надають доступ практично до будь-якого елементу або дії, доступному користувачеві при роботі з Microsoft Office через графічний інтерфейс.


Об'єктна модель Microsoft Word (частково)

Говорячи про програмування для Microsoft Office, часто мають на увазі «внутрішні» програми - макроси, написані на VBA (Visual Basic for Applications, реалізація Visual Basic в Microsoft Office) і вбудовані безпосередньо в документи.


Створення макросу для Microsoft Excel

Microsoft office automation ще одна лазівка ​​для макровірусу

Пропозиція користувачеві дозволити макроси в документі, що містить шкідливий код

Об'єкти Microsoft Office доступні не тільки з макросів, а й з «зовнішніх» програм на будь-яких мовах, що підтримують COM. Останні можуть бути модульна програми на мовах на кшталт C ++ або Delphi, керованими додатками на Java або .Net, або ж скриптами на VBScript і PowerShell - COM технологія доступна практично для всього, здатного виконуватися під Windows.

Microsoft office automation ще одна лазівка ​​для макровірусу

Доступ до об'єктної моделі Microsoft Office з PowerShell

Об'єктна Модель Microsoft Office являє додатки Microsoft Office у вигляді COM-об'єктів. Але існує також можливість додавати в документи та інші COM-об'єкти - елементи ActiveX, що не відносяться до Microsoft Office, але присутні в операційній системі. Будучи включеними в документ, ці елементи можуть взаємодіяти з кодом макросів, або виконувати власний код, заснований на додаються в документ «властивості» - properties об'єкта. В умілих руках вбудовування елементів ActiveX також може призводити до виконання довільного коду, тому в останніх версіях Microsoft Office за замовчуванням заборонений запуск вбудованих ActiveX за винятком деякого «білого списку» елементів. Втім, користувач і в цьому випадку при бажанні може явно дозволити виконання.


Попередження про вбудованих ActiveX

Пропозиція дозволити (або заборонити) запуск активного вмісту надійде користувачеві при відкритті документа нормальним чином у відповідній програмі. Що ж трапиться, якщо відкрити той же документ, скориставшись Об'єктній Моделлю Microsoft Office?
Прикладів таких програм - безліч на різних мовах і під різні завдання:

Приклад на VBScript

Приклад на PowerShell

При вивченні подібних прикладів лише один раз нам попалася в коді цікава рядок:

Application.AutomationSecurity Property (Excel)
...
Returns or sets an MsoAutomationSecurity constant that represents the security mode Microsoft Excel uses when programmatically opening files.
...
MsoAutomationSecurity can be one of these MsoAutomationSecurity constants.

msoAutomationSecurityByUI. Uses the security setting specified in the Security dialog box. |
msoAutomationSecurityForceDisable. Disables all macros in all files opened programmatically without showing any security alerts.
msoAutomationSecurityLow. Enables all macros. This is the default value when the application is started.

Виявляється, якщо додаток Microsoft Office запущено як елемент автоматизації, то код макросів в відкриваються документах буде за замовчуванням виконаний. Якщо, звичайно, спеціально не змінити рівень безпеки керуючої програмою. Це замовчування не залежить від налаштувань, виставлених користувачем або адміністратором. Крім макросів, буде також завантажений і виконаний код будь-яких елементів ActiveX, доданих в документ.

Microsoft office automation ще одна лазівка ​​для макровірусу

Виконання макросу при відкритті документа через Автоматизацію

Ця неочевидна особливість, судячи з усього, досить рідко враховується. Наприклад, офісні програми інших виробників застосовують об'єктну модель Microsoft Office для імпорту і експорту даних в документи Word і Excel. Досить часто зустрічаються приклади для 1С:

Програми 1С, звані «обробками», також можуть використовувати COM взагалі і об'єктну модель Microsoft Office зокрема. Деякі корисні обробки надаються користувачам виробником, наприклад, обробка «ЗагрузкаДаннихІзТаблічногоДокумента.epf» дозволяє завантажувати в базу дані з зовнішніх табличних документів.

Microsoft office automation ще одна лазівка ​​для макровірусу

Виконання макросу при відкритті документа через обробку 1С

Як можна бачити, властивість AutomationSecurity було забуто і програмістами 1С.
З одного боку, це класичний приклад того, що необхідно думати про безпеку в процесі програмування, якою б мовою не використовувався. З іншого боку, яка причина змусила Microsoft при посиленні налаштувань безпеки Microsoft Office залишити незахищеною об'єктну модель?

Схожі статті