Последнее обновление: 28 сент., 2026

Безопасность файлов Excel: XLSX, XLSM и риски макросов
На протяжении десятилетий Microsoft Excel служит универсальным движком бизнес‑операций. Он балансирует корпоративные бюджеты, визуализирует сложные наборы данных, отслеживает запасы и обеспечивает аналитические конвейеры практически во всех отраслях.
Тем не менее, именно эта вычислительная гибкость делает электронные таблицы постоянным объектом интереса киберпротивников. Злоумышленники используют таблицы с начала эпохи макровирусов в конце 1990‑х. Хотя Microsoft и системные администраторы внедрили несколько уровней защиты — такие как сегрегация форматов файлов и блокировка макросов по умолчанию — социальная инженерия и скрытые архитектурные риски продолжают поддерживать актуальность атак, ориентированных на Excel‑focused attacks relevant.
Чтобы построить устойчивую систему безопасности, разработчикам, администраторам и продвинутым пользователям необходимо заглянуть за интерфейс рабочей книги. Понимание того, как работает базовый формат 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
Это структурное изменение предоставило немедленные преимущества в области безопасности:
- DPI (Deep Packet Inspection) & Gateway Visibility: Устройства безопасности, прокси и агенты конечных точек могут распаковывать архив «на лету» и разбирать открытые XML‑деревья, чтобы выявлять подозрительные строки, внешние URL‑адреса или встроенные объекты.
- Deterministic File Validation: Если файл утверждает, что является документом OpenXML, но нарушает ограничения схемы, Excel отказывается его открывать или запускает в режиме изолированного восстановления.
- Format Separation: Microsoft отделила обычные вычислительные таблицы от файлов, способных выполнять встроенные процедурные скрипты.
2. XLSX vs. XLSM: Архитектурная граница
Основное различие между .xlsx и .xlsm заключается в том, позволяет ли структура файла включать исполняемые макропроекты.
| Функция / Параметр | .xlsx (Excel OpenXML таблица) | .xlsm (Электронная таблица Excel с поддержкой макросов) |
|---|---|---|
| Тип MIME содержимого | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | application/vnd.ms-excel.sheet.macroEnabled.12 |
| Контейнер хранения VBA | Строго запрещено. Нельзя хранить vbaProject.bin | Разрешено. Содержит xl/vbaProject.bin |
| Риск нативного выполнения | Практически незначительно для выполнения макросов; ограничено внедрением формул/DDE | Высокий; может выполнять автоматизированный VBA‑код при взаимодействии с книгой |
| Схема OpenXML Strict | Соответствует строгим, не содержащим макросов XML‑определениям | Включает определения для устаревших и современных расширений автоматизации |
| Визуальный индикатор пользователя | Стандартный зелёный значок таблицы | Значок таблицы с восклицательным знаком |
Механизм принудительного выполнения: Почему XLSX не может выполнять макросы
Распространённый вопрос среди младших администраторов и разработчиков: Что происходит, если злоумышленник берёт вредоносный файл .xlsm, внедряет исполняемый код и переименовывает расширение файла в .xlsx?
Краткий ответ: Файл не выполнит макрос.
Excel не полагается исключительно на расширение файла при определении правил выполнения. При открытии файла с именем .xlsx:
- Excel проверяет zip‑payload и ссылается на
[Content_Types].xml. - В подлинном файле
.xlsxвсе определённые типы содержимого представляют стандартные элементы данных (например,worksheet,sharedStringsилиstyles). - Если злоумышленник вручную внедряет скомпилированный поток VBA (
xl/vbaProject.bin) в пакет.xlsxи обновляет отношения, Excel сталкивается с явным противоречием схемы:- Он видит, что расширение
.xlsxсвязано с типами содержимого, указывающими на возможность макросов. - Excel выдаёт фатальную ошибку целостности: "Excel не может открыть файл ‘filename.xlsx’, потому что формат файла или расширение недействительны. Убедитесь, что файл не повреждён…"
- Он видит, что расширение
- Если злоумышленник оставляет внутренние типы неизменными, не регистрируя бинарный файл, 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.
Общие техники внедрения макросов
Хуки автоисполнения: Злоумышленники размещают точку входа во встроенных обработчиках событий, таких как
Sub Auto_Open()илиPrivate Sub Workbook_Open(). Как только пользователь предоставляет разрешения на выполнение, эти процедуры запускаются без необходимости каких-либо кликов внутри таблицы.Обфускация и затирание:
- Обфускация строк: Полезные нагрузки скрывают URL‑адреса и системные вызовы, используя массивы символов, XOR‑кодирование, декодирование Base64 или конкатенацию переменных окружения (например,
Chr(112) & Chr(111) & Chr(119)...). - VBA затирание: VBA существует в двух формах внутри
vbaProject.bin: интерпретируемый исходный код и скомпилированный p‑code (псевдокод, ориентированный на конкретную версию Office, в которой он был скомпилирован). Злоумышленники могут полностью удалить открытый исходный код, оставив только скомпилированный p‑code. Многие базовые антивирусные решения и статические анализаторы проверяют только поток исходного кода, поэтому p‑code остаётся незамеченным до тех пор, пока не будет выполнен соответствующей версией Office.
- Обфускация строк: Полезные нагрузки скрывают URL‑адреса и системные вызовы, используя массивы символов, XOR‑кодирование, декодирование Base64 или конкатенацию переменных окружения (например,
Использование встроенных средств (LotL): Современные вредоносные макросы редко сохраняют файл
.exeнепосредственно на диск, что сразу же привлекло бы внимание агентов Endpoint Detection and Response (EDR). Вместо этого они взаимодействуют со встроенными системными инструментами:- Создание экземпляра
WScript.Shellдля выполнения аргументов командной строки. - Вызов
PowerShell.exeс обходом политики выполнения (-ExecutionPolicy Bypass -WindowStyle Hidden). - Вызов нативных API Win32 через
Declare PtrSafe Function CreateProcessилиVirtualAllocдля внедрения шеллкода непосредственно в системную память.
- Создание экземпляра
4. Другие векторы угроз электронных таблиц (за пределами стандартного VBA)
Обеспечение защиты среды от файлов .xlsm — лишь половина задачи. Противники также используют механизмы, работающие независимо от традиционного VBA.
Dynamic Data Exchange (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) устаревшие макросы
До того как VBA был введён в 1993 году, Excel использовал основанную на формулах систему макросов, известную как Excel 4.0 (XLM) макросы. Эти макросы находятся в специальных листах макросов, а не в отдельном проекте VBA.
Поскольку XLM макросы пишутся как формулы ячеек (например =EXEC("calc.exe")), они обходят многие стандартные движки статической проверки VBA. Злоумышленники предпочитали XLM макросы в конце 2010‑х и начале 2020‑х годов, чтобы избежать автоматического обнаружения, пока Microsoft не отключил их по умолчанию в современных корпоративных сборках.
Вредоносные внешние соединения и OLE‑объекты
Обычная рабочая книга .xlsx всё ещё может представлять риск через внешние ресурсы:
- Встроенные OLE‑пакеты: Злоумышленник может вставить исполняемый файл, замаскированный под встроенный значок PDF, непосредственно в лист.
- Внешние ссылки на книги и веб‑запросы: 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 заблокировала выполнение макросов, потому что источник этого файла ненадежен.”
Administrative Action: Убедитесь, что это поведение применяется через групповую политику и не может быть переопределено конечными пользователями:
- Путь GPO:
User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center - Настройка: Включить “Блокировать выполнение макросов в Office‑файлах из Интернета”.
2. Настроить правила снижения поверхности атаки (ASR)
Организациям, использующим Microsoft Defender for Endpoint, следует активировать основные правила снижения поверхности атаки, разработанные специально для приложений Office:
Блокировать создание дочерних процессов приложениями Office(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. Даже если злоумышленник применяет сложное обфусцирование строк или VBA stomping, движок выполнения VBA передаёт восстановленные, незашифрованные команды вашему установленному антивирусу/EDR‑движку в точную миллисекунду перед выполнением. Убедитесь, что защита конечных точек активно мониторит события выполнения AMSI.
4. Перейти к доверенным расположениям и цифровым сертификатам
Для организаций, зависящих от автоматизированных электронных таблиц в ежедневной работе:
- Устранить разрозненные файлы XLSM в папках «Загрузки» или на рабочем столе пользователей.
- Использовать доверенные места: Ограничить выполнение макросов исключительно до сетевых ресурсов только для чтения, управляемых ИТ‑администраторами.
- Подпись кода: Требовать, чтобы все внутренне разработанные макросы были криптографически подписаны сертификатом, выданным корпоративной инфраструктурой открытых ключей (PKI). Настроить Excel на выполнение только цифрово подписанных макросов и тихо блокировать неподписанные.
6. Точка зрения разработчика: создание безопасной автоматизации
Если вы разрабатываете программное обеспечение, которое анализирует, генерирует или использует файлы Excel (например, конвейеры Python с использованием pandas/openpyxl, микросервисы Node.js или приложения C#/.NET), примените следующие меры защиты при разработке:
Отклонять неожиданные форматы файлов на границе загрузки: Если ваше приложение ожидает финансовые отчёты, строго проверяйте, что входящие файлы соответствуют формату
.xlsx. Проверьте внутренние магические байты (стандартный заголовок zip50 4B 03 04) и убедитесь, что в индексе архива нет записейvbaProject.binперед сохранением в облачные корзины или базы данных.Очистка данных от внедрения формул: При экспорте пользовательского ввода в файлы CSV или XLSX добавляйте апостроф (
') или пробел к любой ячейке, начинающейся с опасных символов (=,+,-,@,\t,\r):def sanitize_for_spreadsheet(value: str) -> str: if value and value[0] in ('=', '+', '-', '@', '\t', '\r'): return f"'{value}" return valueПерейти от VBA к Office Scripts или веб‑надстройкам: Для современной корпоративной автоматизации полностью откажитесь от устаревшего VBA:
- Office Scripts: Написанные на TypeScript, Office Scripts работают в изолированной облачной среде и корректно функционируют как в веб‑, так и в настольных версиях, не раскрывая нативные системные вызовы ОС.
- Office Web Add-ins: Созданы с использованием стандартного 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 операционной системы.