Останнє оновлення: 28 вересня 2026

XLSX vs. XLSM Security: How Spreadsheet Macros Expose Your Network

Безпека файлів Excel: XLSX, XLSM та ризики макросів

Протягом десятиліть Microsoft Excel залишався універсальним двигуном бізнес‑операцій. Він балансувує корпоративні бюджети, візуалізує складні набори даних, відстежує інвентар і живить аналітичні конвеєри майже в усіх галузях.

Проте саме ця обчислювальна гнучкість робить електронні таблиці постійним улюбленцем кіберзлочинців. Зловмисники використовують електронні таблиці як зброю ще з перших днів макровірусів у кінці 1990‑х. Хоча Microsoft і системні адміністратори впровадили кілька рівнів захисту — такі як розподіл форматів файлів та блокування макросів за замовчуванням — соціальна інженерія та тонкі архітектурні ризики продовжують підтримувати актуальність атак, орієнтованих на Excel.

Щоб створити стійку систему безпеки, розробникам, адміністраторам та досвідченим користувачам потрібно заглянути під інтерфейс робочої книги. Розуміння того, як функціонує базовий формат OpenXML, як .xlsx та .xlsm відрізняються на архітектурному рівні, і як працює механіка виконання макросів, є важливим для захисту сучасних кінцевих точок.

1. Будова сучасних файлів Excel: розбір OpenXML

До випуску Microsoft Office 2007 Excel зберігав файли переважно у пропрієтарних бінарних форматах, найвідомішим з яких був формат .xls (регульований Binary Interchange File Format, або BIFF8). У файлах .xls записи даних, визначення форматування, формули та потоки макросів Visual Basic for Applications (VBA) були упаковані в один контейнер структурованого сховища. Це ускладнювало програмний аналіз і дозволяло зловмисникам приховувати шкідливі скрипти навантаження всередині непрозорих бінарних секторів.

Починаючи з Excel 2007, Microsoft впровадив стандарт Office Open XML (OOXML) (стандартизований як ECMA-376 та ISO/IEC 29500). За OOXML робочі книги Excel більше не є монолітними бінарними блоками. Натомість це zip‑архіви, що містять ієрархічну структуру XML‑документів, таблиці зв’язків та вбудовані медіа‑ресурси.

Всередині ZIP‑контейнера

Якщо взяти будь‑яку стандартну сучасну книгу Excel і змінити її розширення на .zip, ви можете розпакувати її вміст за допомогою будь‑якої стандартної утиліти розпакування:

my_workbook.xlsx (extracted)
│
├── [Content_Types].xml        <-- Registry of MIME types and structural parts
├── _rels/                     <-- Package-level relationship mappings
│   └── .rels
├── docProps/                  <-- Metadata (author, creation date, revision)
│   ├── app.xml
│   └── core.xml
└── xl/                        <-- Core spreadsheet contents
    ├── workbook.xml           <-- Workbook-level parameters and sheet list
    ├── styles.xml             <-- Cell styles, fonts, and borders
    ├── sharedStrings.xml      <-- Unique string index for performance optimization
    ├── _rels/
    │   └── workbook.xml.rels  <-- Sheet and component dependencies
    └── worksheets/
        ├── sheet1.xml         <-- Raw cell values, formulas, and grid geometry
        └── sheet2.xml

Цей структурний зсув забезпечив негайні переваги безпеки:

  1. DPI (Deep Packet Inspection) & Gateway Visibility: Пристрої безпеки, проксі та агенти кінцевих точок можуть розпаковувати архів у режимі реального часу та аналізувати прості XML‑дерева, щоб виявляти підозрілі рядки, зовнішні URL‑адреси або вбудовані об’єкти.
  2. Deterministic File Validation: Якщо файл стверджує, що є документом OpenXML, але порушує обмеження схеми, Excel відмовляє у його відкритті або запускає його в режимі відновлення у пісочниці.
  3. Format Separation: Microsoft розділила звичайні обчислювальні електронні таблиці та файли, здатні виконувати вбудовані процедурні скрипти.

2. XLSX проти XLSM: Архітектурна межа

Основна різниця між .xlsx і .xlsm полягає в тому, чи дозволяє структура файлу включення виконуваних макропроектів.

Функція / Вимір.xlsx (Excel OpenXML електронна таблиця).xlsm (Електронна таблиця Excel з підтримкою макросів)
Тип MIME вмістуapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
Контейнер зберігання VBAСтрого заборонено. Не можна зберігати vbaProject.binДозволено. Містить xl/vbaProject.bin
Ризик нативного виконанняНезначний для виконання макросів; обмежений ін’єкцією формул/DDEВисокий; може виконувати автоматизований VBA‑код при взаємодії з робочою книгою
Схема OpenXML StrictВідповідає строгим, безмакросними XML‑визначеннямМістить визначення для застарілих та сучасних розширень автоматизації
Візуальний індикатор користувачаСтандартна зелена іконка електронної таблиціІконка електронної таблиці з вказівником «!».

Механізм впровадження: Чому XLSX не може запускати макроси

Поширене питання серед молодших адміністраторів та розробників: Що станеться, якщо зловмисник візьме шкідливий файл .xlsm, інжектує виконуваний код і перейменує розширення файлу на .xlsx?

Коротка відповідь: Файл не виконає макрос.

Excel не покладається виключно на розширення файлу для визначення правил виконання. При відкритті файлу з назвою .xlsx:

  1. Excel перевіряє zip‑вміст і посилається на [Content_Types].xml.
  2. У справжньому файлі .xlsx всі визначені типи вмісту представляють стандартні елементи даних (наприклад, worksheet, sharedStrings або styles).
  3. Якщо зловмисник вручну інжектує скомпільований VBA‑потік (xl/vbaProject.bin) у пакет .xlsx і оновлює зв’язки, Excel стикається з явним протиріччям схеми:
    • Він бачить розширення .xlsx, пов’язане з типами вмісту, що вказують на можливість макросу.
    • Excel викидає фатальну помилку цілісності: “Excel не може відкрити файл ‘filename.xlsx’, оскільки формат файлу або його розширення недійсні. Перевірте, чи файл не пошкоджений…”
  4. Якщо зловмисник залишає внутрішні типи незмінними без реєстрації бінарного файлу, Excel розглядає vbaProject.bin як непосилане, залишене вкладення у zip‑архіві і повністю відкидає його під час циклу завантаження.

Внаслідок цього, файл, що суворо працює як справжній контейнер .xlsx, не може виконувати рідний VBA‑код. Однак це не означає, що файли .xlsx вільні від усіх векторів атак, як розглядається далі в цьому посібнику.

3. Ризики макросів і життєвий цикл атаки

Макроси були створені для автоматизації повторюваних завдань бухгалтерії, фінансового моделювання та обробки даних за допомогою Visual Basic for Applications (VBA). Оскільки VBA був розроблений для автоматизації робочих процесів, йому надали широкі можливості доступу до базової операційної системи Windows через Component Object Model (COM), Windows Script Host (WSH) та прямі виклики Win32 API.

Коли виконується недовірений макрос, він працює з точно такими ж привілеями, як і залогінений користувач. Він не ізольований у віртуальному пісочниці типу браузера JavaScript.

+--------------------------------------------------------------------------------+
|                             ATTACK LIFECYCLE                                   |
+--------------------------------------------------------------------------------+
                                       │
                                       ▼
  [ Delivery & Evasion ]  ──────► Spear-phishing email with .xlsm, .xlam, or .zip.
                                       │
                                       ▼
  [ Social Engineering ]  ──────► Lures victim to bypass Protected View ("Enable Content").
                                       │
                                       ▼
  [ Auto-Execution ]      ──────► Auto_Open() or Workbook_Open() triggers automatically.
                                       │
                                       ▼
  [ System Invocation ]   ──────► VBA creates COM objects (WScript.Shell, WinHttp.WinHttpRequest).
                                       │
                                       ▼
  [ Payload Retrieval ]   ──────► Spawns hidden PowerShell/cURL to fetch staging binary.
                                       │
                                       ▼
  [ Post-Exploitation ]   ──────► In-memory execution, credential theft, lateral movement.

Загальні методи проникнення макросів

  1. Гачки автозапуску: Зловмисники розміщують свою точку входу в інтрінзичні обробники подій, такі як Sub Auto_Open() або Private Sub Workbook_Open(). Як тільки користувач надає дозволи на виконання, ці процедури запускаються без необхідності будь‑яких кліків у електронній таблиці.

  2. Обфускація та Stomping:

    • Обфускація рядків: Корисні навантаження приховують URL‑адреси та системні виклики, використовуючи масиви символів, XOR‑кодування, декодування Base64 або конкатенацію змінних середовища (наприклад, Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: VBA існує у двох формах у файлі vbaProject.bin: інтерпретований вихідний код і скомпільований p‑code (псевдокод, орієнтований на конкретну версію Office, яка його скомпілювала). Зловмисники можуть повністю стерти відкритий вихідний код, залишивши лише скомпільований p‑code. Багато базових антивірусних рішень та статичних аналізаторів перевіряють лише потік вихідного коду, залишаючи p‑code непоміченим до його виконання відповідною версією Office.
  3. Використання вбудованих засобів (LotL): Сучасні шкідливі макроси рідко залишають файл .exe безпосередньо на диск, що одразу сповіщало б агенти Endpoint Detection and Response (EDR). Натомість вони взаємодіють із вбудованими системними інструментами:

    • Створення екземпляру WScript.Shell для виконання аргументів командного рядка.
    • Виклик PowerShell.exe з обходом політики виконання (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • Виклик нативних Win32 API через Declare PtrSafe Function CreateProcess або VirtualAlloc для ін’єкції шелкоду безпосередньо в системну пам’ять.

4. Інші вектори загроз електронних таблиць (поза межами стандартного VBA)

Захист середовища від файлів .xlsm — лише половина боротьби. Зловмисники також використовують механізми, які працюють незалежно від традиційного VBA.

Динамічний обмін даними (DDE) та ін’єкція CSV

Excel містить застарілий протокол під назвою Dynamic Data Exchange (DDE), призначений для обміну даними між запущеними додатками (наприклад, потокове передавання живих даних біржових котирувань з окремої програми в клітинку Excel).

  • Як працює ін’єкція формул: Коли клітинка електронної таблиці починається символами, такими як =, @, + або -, Excel інтерпретує вміст як формулу. Якщо зловмисник контролює ввід, експортований у таблицю (наприклад, неочищене поле “Comments” у веб‑додатку, експортоване у CSV або XLSX), він може ін’єктувати:
    =cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0
    
  • Після відкриття Excel обчислює формулу, виводить користувачеві запит про запуск зовнішньої програми і, за підтвердженням, виконує системну оболонку.

Застарілі макроси Excel 4.0 (XLM)

Перш ніж у 1993 році був представлений VBA, Excel використовував макросну систему на основі формул, відому як Excel 4.0 (XLM) macros. Ці макроси розташовані у спеціальних листах макросів, а не в окремому VBA‑проекті.

Оскільки XLM‑макроси записуються як формули в клітинках (наприклад =EXEC("calc.exe")), вони обходять багато стандартних движків статичної інспекції VBA. Зловмисники віддавали перевагу XLM‑макросам наприкінці 2010‑х та на початку 2020‑х років, щоб уникнути автоматичного виявлення, перш ніж Microsoft вимкнув їх за замовчуванням у сучасних корпоративних збірках.

Зловмисні зовнішні підключення та OLE‑об’єкти

Звичайна книга .xlsx все ще може створювати ризик через зовнішні ресурси:

  • Embedded OLE Packages: Зловмисник може вставити виконуваний файл, замаскований під вбудовану іконку PDF, безпосередньо в аркуш.
  • External Workbook Links & Web Queries: XLSX може містити зовнішні посилання, які автоматично ініціюють HTTP GET‑запити до серверів командно‑керування (C2), контрольованих зловмисником, при відкритті файлу, головним чином для розвідки або атак з отриманням хешів netNTLM.

5. Стратегії жорсткого посилення підприємства та глибокої оборони

Захист від загроз, що поширюються через Excel, вимагає багаторівневого підходу, що охоплює мережеву інспекцію, конфігурацію системи, контроль доступу та операційні процеси.

+─────────────────────────────────────────────────────────+
|                  ENTERPRISE DEFENSE LAYERS               |
+─────────────────────────────────────────────────────────+
|  PERIMETER: Drop inbound .xlsm, .xla, and .xltm at mail |
|  gateway unless cryptographically signed or exempted.   |
+---------------------------------------------------------+
|  IDENTITY & POLICY: Enforce ASR rules and apply         |
|  Mark of the Web (MotW) macro execution blocks.         |
+---------------------------------------------------------+
|  RUNTIME: Hook AMSI into Office to evaluate dynamic     |
|  VBA buffers directly before execution.                 |
+---------------------------------------------------------+
|  STORAGE: Restrict macro execution exclusively to       |
|  managed, centralized Trusted Locations.                |
+─────────────────────────────────────────────────────────+

1. Забезпечити позначку веб‑сторінки (MotW) та блокування макросів

У 2022 році Microsoft оновила типову поведінку додатків Office: макроси у файлах, що походять з інтернету, за замовчуванням блокуються.

Коли користувач завантажує файл через браузер або зовнішній клієнт, Windows позначає файл альтернативним потоком даних (ADS) під назвою Zone.Identifier (Зона 3 вказує на Інтернет). Для файлів з такою міткою Excel повністю вимикає макроси та показує червоний банер безпеки: > “ЗАГРОЗА БЕЗПЕКИ: Microsoft заблокувала виконання макросів, оскільки джерело цього файлу ненадійне.”

Адміністративна дія: Переконайтеся, що ця поведінка застосовується через групову політику і не може бути змінена кінцевими користувачами:

  • Шлях GPO: User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center
  • Налаштування: Увімкнути “Блокувати виконання макросів у файлах Office з Інтернету”.

2. Налаштувати правила зменшення поверхні атаки (ASR)

Організації, які використовують Microsoft Defender for Endpoint, повинні активувати основні правила зменшення поверхні атаки, розроблені спеціально для додатків Office:

  • Block Office applications from creating child processes (GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)
    • Запобігає запуску Excel PowerShell, CMD або скриптових движків.
  • Блокувати Office‑застосунки від ін’єкції коду в інші процеси (GUID: 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)
  • Блокувати виклики Win32 API з макросів Office (GUID: 92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)

3. Використовувати інтерфейс сканування антивірусу (AMSI)

Сучасні версії Microsoft 365 інтегрують виконання VBA безпосередньо з AMSI. Навіть якщо зловмисник застосовує складне обфускування рядків або «stomping» VBA, движок виконання VBA передає відновлені, незашифровані команди вашому встановленому антивірусу/EDR‑движку за точну мілісекунду до виконання. Переконайтеся, що захист кінцевих точок активно моніторить події виконання AMSI.

4. Перехід до довірених розташувань та цифрових сертифікатів

Для організацій, які залежать від автоматизованих електронних таблиць у повсякденних операціях:

  • Видалити розкидані файли XLSM у папках Завантаження користувачів або на робочому столі.
  • Використовувати довірені місця: Обмежити виконання макросів виключно до мережевих спільних ресурсів лише для читання, якими керують ІТ‑адміністратори.
  • Підписання коду: Вимагати, щоб усі внутрішньо розроблені макроси були криптографічно підписані сертифікатом, виданим корпоративною інфраструктурою відкритих ключів (PKI). Налаштуйте Excel виконувати лише цифрово підписані макроси та безшумно блокувати неподписані.

6. Перспектива розробника: створення безпечної автоматизації

Якщо ви розробляєте програмне забезпечення, яке аналізує, генерує або споживає файли Excel (наприклад, Python‑конвеєри з використанням pandas/openpyxl, мікросервіси Node.js або застосунки C#/.NET), застосуйте такі засоби безпеки розробки:

  1. Відхиляти неочікувані формати файлів на межі завантаження: Якщо ваш застосунок очікує фінансові звіти, суворо перевіряйте, що вхідні файли відповідають формату .xlsx. Перевірте внутрішні магічні байти (стандартний заголовок zip 50 4B 03 04) та переконайтеся, що в індексі архіву немає записів vbaProject.bin перед збереженням у хмарні сховища або бази даних.

  2. Очищати дані від ін’єкції формул: При експорті введених користувачем даних у файли CSV або XLSX додавайте апостроф (') або пробіл до будь‑якої клітинки, що починається з небезпечних символів (=, +, -, @, \t, \r):

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. Перехід від VBA до Office Scripts або веб‑надбудов: Для сучасної автоматизації підприємств повністю відмовтеся від застарілого VBA:

    • Office Scripts: Написані на TypeScript, Office Scripts працюють у пісочничому хмарному середовищі та коректно функціонують як у веб‑, так і у десктоп‑версіях, не розкриваючи виклики нативних системних функцій ОС.
    • Веб-додатки Office: Побудовані за допомогою стандартного HTML, CSS та сучасного JavaScript, веб-додатки спілкуються через керовані JavaScript API та ізольовані від локальної операційної системи.

7. Підсумковий чек‑лист безпеки електронних таблиць

  • Застосовувати .xlsx за замовчуванням: Вимагати, щоб усі стандартні користувацькі робочі процеси зберігали файли у форматі без макросів .xlsx.
  • Блокувати макроси, що походять з Інтернету: Переконатися, що впровадження політики MotW здійснено у всій організації через GPO або Intune.
  • Увімкнути правила ASR: Заборонити продуктам Office запускати інтерпретатори команд або дочірні процеси.
  • Вивести з експлуатації Excel 4.0 (XLM): Забезпечити постійне відключення застарілих XLM-двигунів макросів на всіх робочих станціях.
  • Очищати експорт додатків: Захистити процеси генерації CSV та Excel від ін’єкцій CSV/формул.
  • Перейти до Office Scripts: Перетворити застарілі адміністративні макроси на Office Scripts, написані на TypeScript, та керовані API.

Розглядаючи електронні таблиці не лише як документи, а як структуровані програмні контейнери, що мають можливості виконання, команди безпеки та розробники можуть ефективно нейтралізувати один із найстаріших векторів атак у корпоративних обчисленнях.

Поширені запитання (FAQ)

Q1: Чи може файл з розширенням .xlsx запускати шкідливий макрос?

Ні, стандарт OpenXML суворо забороняє макроси у файлах .xlsx, і Excel відхилить або видалить будь‑який VBA‑проект, впроваджений у справжній контейнер .xlsx.

Q2: Що мені робити, якщо файл Excel просить “Увімкнути редагування” або “Увімкнути вміст”?

Надавайте дозволи лише якщо ви знаєте відправника і очікували файл; це повідомлення є головною точкою контролю, яка дозволяє ненадійним макросам виконувати код.

Q3: Як Microsoft Excel визначає, чи файл походить з інтернету?

Windows додає до завантажених файлів прихований потік «Mark of the Web» (Zone.Identifier), який сигналізує Excel відкривати їх у захищеному режимі та за замовчуванням блокувати макроси.

Q4: Чи є CSV‑файли безпечнішими, ніж файли XLSX та XLSM?

CSV‑файли не можуть містити вбудовані VBA‑макроси, проте вони залишаються вразливими до атак ін’єкції формул, якщо містять шкідливі команди, які Excel виконує під час відкриття.

Q5: Чим сучасні Office Scripts відрізняються від традиційних VBA‑макросів?

Office Scripts працюють на TypeScript у пісочничому середовищі виконання, що запобігає доступу до вашої локальної файлової системи, командного рядка або API операційної системи.

Дивіться також