Ostatnia aktualizacja: 28 wrz 2026

Bezpieczeństwo plików Excel wyjaśnione: XLSX, XLSM i ryzyko makr
Od dziesięcioleci Microsoft Excel jest uniwersalnym silnikiem operacji biznesowych. Równoważy budżety korporacyjne, wizualizuje złożone zestawy danych, śledzi zapasy i napędza analityczne pipeline’y w praktycznie każdej branży.
Jednak ta sama elastyczność obliczeniowa sprawia, że arkusze kalkulacyjne są trwałym ulubieńcem cyberprzeciwników. Atakujący wykorzystują arkusze kalkulacyjne od wczesnych dni wirusów makr pod koniec lat 90. Microsoft i administratorzy systemów wprowadzili wiele warstw obrony — takich jak segregacja formatów plików i domyślne blokowanie makr — jednak inżynieria społeczna oraz subtelne ryzyka architektoniczne nadal sprawiają, że ataki ukierunkowane na Excel pozostają istotne.
Aby zbudować odporną postawę bezpieczeństwa, programiści, administratorzy i zaawansowani użytkownicy muszą spojrzeć pod powierzchnię interfejsu skoroszytu. Zrozumienie, jak działa podstawowy format OpenXML, jak .xlsx i .xlsm różnią się na poziomie architektonicznym oraz jak działają mechanizmy wykonywania makr, jest kluczowe dla ochrony współczesnych punktów końcowych.
1. Budowa współczesnych plików Excel: OpenXML rozłożone na części
Przed wydaniem Microsoft Office 2007 Excel zapisywał pliki głównie w własnych formatach binarnych, najważniejszym z nich był format .xls (oparty na Binary Interchange File Format, czyli BIFF8). W plikach .xls rekordy danych, definicje formatowania, formuły oraz strumienie makr Visual Basic for Applications (VBA) były pakowane w pojedynczy kontener strukturalny. Utrudniało to programową inspekcję i pozwalało atakującym ukrywać złośliwe skrypty ładunków w nieprzejrzystych sektorach binarnych.
Od wersji Excel 2007 Microsoft wprowadził standard Office Open XML (OOXML) (zstandaryzowany jako ECMA-376 i ISO/IEC 29500). W ramach OOXML skoroszyty Excela nie są już monolitycznymi blokami binarnymi. Zamiast tego są to archiwa zip zawierające hierarchiczną strukturę dokumentów XML, tabele relacji oraz osadzone zasoby multimedialne.
Wewnątrz kontenera ZIP
Jeśli weźmiesz dowolny standardowy nowoczesny skoroszyt Excel i zmienisz jego rozszerzenie na .zip, możesz wyodrębnić jego zawartość przy użyciu dowolnego standardowego narzędzia do dekompresji:
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
Ta zmiana strukturalna przyniosła natychmiastowe korzyści bezpieczeństwa:
- DPI (Deep Packet Inspection) & Widoczność Bramy: Urządzenia zabezpieczające, proxy i agenty końcowe mogą rozpakowywać archiwum w locie i analizować drzewa XML w formie czystego tekstu, aby wykrywać podejrzane ciągi, zewnętrzne adresy URL lub osadzone obiekty.
- Deterministyczna Walidacja Plików: Jeśli plik twierdzi, że jest dokumentem OpenXML, ale narusza ograniczenia schematu, Excel odmawia jego otwarcia lub uruchamia go w trybie odzyskiwania w piaskownicy.
- Separacja Formatu: Microsoft oddzielił zwykłe arkusze kalkulacyjne od plików zdolnych do wykonywania osadzonych skryptów proceduralnych.
2. XLSX vs. XLSM: Granica architektoniczna
Główna różnica między .xlsx a .xlsm polega na tym, czy struktura pliku pozwala na dołączenie wykonywalnych projektów makr.
| Funkcja / Wymiar | .xlsx (Arkusz kalkulacyjny Excel OpenXML) | .xlsm (Arkusz kalkulacyjny Excel z obsługą makr) |
|---|---|---|
| Typ treści MIME | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | application/vnd.ms-excel.sheet.macroEnabled.12 |
| Kontener przechowywania VBA | Ściśle zabronione. Nie można przechowywać vbaProject.bin | Dozwolone. Zawiera xl/vbaProject.bin |
| Ryzyko natywnego wykonywania | Znikomy wpływ na wykonywanie makr; ograniczony do wstrzykiwania formuł/DDE | Wysoki; może uruchamiać zautomatyzowany kod VBA przy interakcji z skoroszytem |
| Ścisły schemat OpenXML | Zgodny ze ścisłymi, wolnymi od makr definicjami XML | Zawiera definicje dla starszych i nowoczesnych rozszerzeń automatyzacji |
| Wskaźnik wizualny użytkownika | Standardowa zielona ikona arkusza kalkulacyjnego | Ikona arkusza kalkulacyjnego oznaczona wykrzyknikiem |
Mechanizm egzekwowania: Dlaczego XLSX nie może uruchamiać makr
Częste pytanie wśród młodszych administratorów i programistów brzmi: Co się stanie, jeśli atakujący weźmie złośliwy plik .xlsm, wstrzyknie kod wykonywalny i zmieni rozszerzenie pliku na .xlsx?
Krótka odpowiedź: Plik nie wykona makra.
Excel nie opiera się wyłącznie na rozszerzeniu pliku, aby określić zasady wykonywania. Przy otwieraniu pliku o nazwie .xlsx:
- Excel analizuje zawartość zip i odwołuje się do
[Content_Types].xml. - W prawdziwym pliku
.xlsxwszystkie zdefiniowane typy zawartości reprezentują standardowe elementy danych (takie jakworksheet,sharedStringslubstyles). - Jeśli atakujący ręcznie wstrzyknie skompilowany strumień VBA (
xl/vbaProject.bin) do pakietu.xlsxi zaktualizuje relacje, Excel napotyka wyraźny konflikt schematu:- Widzi rozszerzenie
.xlsxpowiązane z typami zawartości wskazującymi na możliwość makr. - Excel zgłasza krytyczny błąd integralności: “Excel nie może otworzyć pliku ‘filename.xlsx’, ponieważ format pliku lub jego rozszerzenie jest nieprawidłowe. Sprawdź, czy plik nie został uszkodzony…”
- Widzi rozszerzenie
- Jeśli atakujący pozostawi wewnętrzne typy nienaruszone, nie rejestrując pliku binarnego, Excel traktuje
vbaProject.binjako nieodwołany, osierocony załącznik w archiwum zip i całkowicie odrzuca go podczas cyklu ładowania.
W konsekwencji, plik działający wyłącznie jako prawdziwy kontener .xlsx nie może uruchamiać natywnego kodu VBA. Jednak nie oznacza to, że pliki .xlsx są wolne od wszystkich wektorów ataku, co zostanie omówione później w tym przewodniku.
3. Ryzyka makr i cykl życia ataku
Makra zostały zaprojektowane w celu automatyzacji powtarzalnych zadań księgowych, modelowania finansowego i manipulacji danymi przy użyciu Visual Basic for Applications (VBA). Ponieważ VBA został stworzony do automatyzacji w miejscu pracy, zapewniono mu rozległy dostęp do podstawowego systemu operacyjnego Windows poprzez Component Object Model (COM), Windows Script Host (WSH) oraz bezpośrednie wywołania API Win32.
Gdy nieufne makro zostaje uruchomione, działa z dokładnie takimi samymi uprawnieniami jak zalogowany użytkownik. Nie jest ono zamknięte w wirtualnym piaskownicy przeglądarki w stylu 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.
Typowe techniki wprowadzania makr
Haki automatycznego uruchamiania: Atakujący umieszczają punkt wejścia w wbudowanych obsługach zdarzeń, takich jak
Sub Auto_Open()lubPrivate Sub Workbook_Open(). Gdy tylko użytkownik przyzna uprawnienia do wykonania, te procedury uruchamiają się bez konieczności klikania w arkuszu kalkulacyjnym.Maskowanie i Stomping:
- Maskowanie ciągów: Ładunki ukrywają adresy URL i wywołania systemowe przy użyciu tablic znaków, kodowania XOR, dekodowania Base64 lub konkatenacji zmiennych środowiskowych (np.
Chr(112) & Chr(111) & Chr(119)...). - VBA Stomping: VBA istnieje w dwóch formach w pliku
vbaProject.bin: interpretowany kod źródłowy i skompilowany p-code (pseudo-kod skierowany do konkretnej wersji Office, która go skompilowała). Atakujący mogą całkowicie usunąć czytelny kod źródłowy, pozostawiając jedynie skompilowany p-code. Wiele podstawowych rozwiązań antywirusowych i analizatorów statycznych sprawdza tylko strumień źródłowy, pozostawiając p-code niewykrytym aż do uruchomienia przez odpowiednią wersję Office.
- Maskowanie ciągów: Ładunki ukrywają adresy URL i wywołania systemowe przy użyciu tablic znaków, kodowania XOR, dekodowania Base64 lub konkatenacji zmiennych środowiskowych (np.
Wykorzystywanie wbudowanych narzędzi (LotL): Nowoczesne złośliwe makra rzadko zapisują plik
.exebezpośrednio na dysku, co natychmiast powiadomiłoby agenty Endpoint Detection and Response (EDR). Zamiast tego współdziałają z wbudowanymi narzędziami systemowymi:- Tworzenie instancji
WScript.Shellw celu wykonania argumentów wiersza poleceń. - Wywoływanie
PowerShell.exez pominięciem polityki wykonywania (-ExecutionPolicy Bypass -WindowStyle Hidden). - Wywoływanie natywnych interfejsów Win32 API za pomocą
Declare PtrSafe Function CreateProcesslubVirtualAlloc, aby wstrzyknąć shellcode bezpośrednio do pamięci systemowej.
- Tworzenie instancji
4. Inne wektory zagrożeń w arkuszach kalkulacyjnych (poza standardowym VBA)
Zabezpieczenie środowiska przed plikami .xlsm to dopiero połowa walki. Przeciwnicy korzystają również z mechanizmów działających niezależnie od tradycyjnego VBA.
Dynamiczna wymiana danych (DDE) i wstrzykiwanie CSV
Excel posiada starszy protokół o nazwie Dynamic Data Exchange (DDE), zaprojektowany do udostępniania danych pomiędzy uruchomionymi aplikacjami (na przykład strumieniowanie danych z żywego notowania giełdowego z osobnego programu do komórki w Excelu).
- Jak działa wstrzykiwanie formuł:
Gdy komórka arkusza zaczyna się od znaków takich jak
=,@,+lub-, Excel interpretuje zawartość jako formułę. Jeśli atakujący kontroluje dane eksportowane do arkusza (na przykład nieoczyszczone pole “Comments” w aplikacji internetowej eksportowane do CSV lub XLSX), może wstrzyknąć:=cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0 - Po otwarciu Excel ocenia formułę, wyświetla użytkownikowi komunikat o uruchomieniu zewnętrznej aplikacji i, po zatwierdzeniu, uruchamia powłokę systemową.
Makra dziedziczone Excel 4.0 (XLM)
Zanim w 1993 roku wprowadzono VBA, Excel używał systemu makr opartego na formułach, znanego jako Excel 4.0 (XLM) macros. Te makra znajdują się w dedykowanych arkuszach makr, a nie w osobnym projekcie VBA.
Ponieważ makra XLM są zapisywane jako formuły komórek (np. =EXEC("calc.exe")), omijają wiele standardowych silników statycznej inspekcji VBA. Atakujący preferowali makra XLM pod koniec 2010‑tych i na początku 2020‑tych, aby uniknąć automatycznego wykrywania, zanim Microsoft wyłączył je domyślnie w nowoczesnych wersjach korporacyjnych.
Złośliwe połączenia zewnętrzne i obiekty OLE
Zwykły skoroszyt .xlsx nadal może wprowadzać ryzyko poprzez zasoby zewnętrzne:
- Embedded OLE Packages: Atakujący może wstawić plik wykonywalny ukryty jako wbudowaną ikonę PDF bezpośrednio w arkusz.
- External Workbook Links & Web Queries: Plik XLSX może zawierać odwołania zewnętrzne, które automatycznie inicjują żądania HTTP GET do serwerów command-and-control (C2) kontrolowanych przez atakującego po otwarciu pliku, głównie wykorzystywane do rozpoznania lub ataków zbierających hashe netNTLM.
5. Wzmacnianie przedsiębiorstwa i strategie obrony warstwowej
Obrona przed zagrożeniami pochodzącymi z Excela wymaga warstwowego podejścia obejmującego inspekcję sieci, konfigurację systemu, kontrolę dostępu oraz procesy operacyjne.
+─────────────────────────────────────────────────────────+
| 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. Wymuś znacznik sieci (MotW) i blokowanie makr
W 2022 roku Microsoft zaktualizował domyślne zachowanie aplikacji Office: makra w plikach pochodzących z internetu są domyślnie blokowane.
Gdy użytkownik pobiera plik za pośrednictwem przeglądarki lub zewnętrznego klienta, Windows oznacza plik alternatywnym strumieniem danych (ADS) o nazwie Zone.Identifier (Strefa 3 wskazuje na Internet). Dla plików z tym oznaczeniem Excel całkowicie wyłącza makra i wyświetla czerwony pasek bezpieczeństwa: > “RYZYKO BEZPIECZEŃSTWA: Microsoft zablokował uruchamianie makr, ponieważ źródło tego pliku jest niepewne.”
Działanie administracyjne: Upewnij się, że to zachowanie jest egzekwowane za pomocą Group Policy i nie może być nadpisane przez użytkowników końcowych:
- Ścieżka GPO:
User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center - Ustawienie: Włącz “Blokuj uruchamianie makr w plikach Office pochodzących z Internetu”.
2. Skonfiguruj reguły redukcji powierzchni ataku (ASR)
Organizacje korzystające z Microsoft Defender for Endpoint powinny aktywować podstawowe reguły redukcji powierzchni ataku zaprojektowane specjalnie dla aplikacji Office:
Blokuj aplikacje Office przed tworzeniem procesów potomnych(GUID:D4F940AB-401B-4EFC-AADC-AD5F3C50688A)- Zapobiega uruchamianiu przez Excel PowerShell, CMD lub silników skryptowych.
Zablokuj aplikacje Office przed wstrzykiwaniem kodu do innych procesów(GUID:75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)Zablokuj wywołania Win32 API z makr Office(GUID:92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)
3. Wykorzystaj interfejs skanowania antymalware (AMSI)
Nowoczesne wersje Microsoft 365 integrują wykonywanie VBA bezpośrednio z AMSI. Nawet jeśli atakujący zastosuje złożone zaciemnianie ciągów lub VBA stomping, silnik uruchomieniowy VBA przekazuje odtworzone, niezaszyfrowane polecenia do zainstalowanego silnika antywirusa/EDR w dokładnie tę milisekundę przed wykonaniem. Upewnij się, że ochrona punktu końcowego aktywnie monitoruje zdarzenia uruchomieniowe AMSI.
4. Przejście do zaufanych lokalizacji i certyfikatów cyfrowych
Dla organizacji, które polegają na zautomatyzowanych arkuszach kalkulacyjnych w codziennej działalności:
- Usuń luźne pliki XLSM w folderach Pobieranie użytkownika lub na pulpicie.
- Użyj Zaufanych Lokalizacji: Ogranicz wykonywanie makr wyłącznie do udziałów sieciowych tylko do odczytu zarządzanych przez administratorów IT.
- Podpisywanie kodu: Nakaz, aby wszystkie wewnętrznie opracowane makra były kryptograficznie podpisane przy użyciu certyfikatu wydanego przez przedsiębiorstwą Infrastrukturę Klucza Publicznego (PKI). Skonfiguruj Excel tak, aby wykonywał tylko cyfrowo podpisane makra i cicho blokował te niepodpisane.
6. Perspektywa dewelopera: budowanie bezpiecznej automatyzacji
Jeśli tworzysz oprogramowanie, które parsuje, generuje lub konsumuje pliki Excel (np. potoki Pythona używające pandas/openpyxl, mikroserwisy Node.js lub aplikacje C#/.NET), zastosuj następujące zabezpieczenia programistyczne:
Odrzuć nieoczekiwane formaty plików na granicy przesyłania: Jeśli Twoja aplikacja oczekuje raportów finansowych, ściśle weryfikuj, czy przychodzące pliki są w formacie
.xlsx. Sprawdź wewnętrzne bajty magiczne (standardowy nagłówek zip50 4B 03 04) i upewnij się, że w indeksie archiwum nie ma wpisówvbaProject.binprzed zapisaniem ich do chmurowych koszyków lub baz danych.Sanitizuj dane przed wstrzykiwaniem formuł: Podczas eksportowania danych wprowadzonych przez użytkownika do plików CSV lub XLSX, poprzedź apostrofem (
') lub spacją każdą komórkę zaczynającą się od niebezpiecznych znaków (=,+,-,@,\t,\r):def sanitize_for_spreadsheet(value: str) -> str: if value and value[0] in ('=', '+', '-', '@', '\t', '\r'): return f"'{value}" return valuePrzejdź z VBA na Office Scripts lub dodatki internetowe: W nowoczesnej automatyzacji przedsiębiorstw całkowicie wycofaj przestarzały VBA:
- Office Scripts: Napisane w TypeScript, Office Scripts działają w odizolowanym środowisku chmurowym i działają płynnie zarówno w wersjach webowych, jak i desktopowych, nie udostępniając natywnych wywołań systemu operacyjnego.
- Office Web Add-ins: Zbudowane przy użyciu standardowego HTML, CSS i nowoczesnego JavaScript, dodatki internetowe komunikują się za pośrednictwem zarządzanych interfejsów API JavaScript i są odizolowane od lokalnego systemu operacyjnego.
7. Podsumowująca lista kontrolna bezpieczeństwa arkuszy kalkulacyjnych
- Wymuś
.xlsxdomyślnie: Wymagaj, aby wszystkie standardowe przepływy pracy użytkowników zapisywały pliki jako.xlsxbez makr. - Blokuj makra pochodzące z Internetu: Potwierdź, że egzekwowanie polityki MotW jest wdrożone w całej organizacji za pomocą GPO lub Intune.
- Włącz reguły ASR: Zabroń produktom Office uruchamiania interpreterów poleceń lub procesów potomnych.
- Wycofaj Excel 4.0 (XLM): Upewnij się, że starsze silniki makr XLM są trwale wyłączone na wszystkich stacjach roboczych.
- Sanityzuj eksporty aplikacji: Chroń procedury generowania CSV i Excel przed wstrzykiwaniem CSV/formuł.
- Przejdź na Office Scripts: Przenieś starsze makra administracyjne do Office Scripts opartych na TypeScript i zarządzanych interfejsów API.
Traktując arkusze kalkulacyjne nie tylko jako pliki dokumentów, ale jako ustrukturyzowane kontenery oprogramowania posiadające możliwości wykonywania, zespoły ds. bezpieczeństwa i programiści mogą skutecznie neutralizować jeden z najstarszych wektorów ataku w korporacyjnym przetwarzaniu danych.
Najczęściej zadawane pytania (FAQ)
Q1: Czy plik kończący się na .xlsx może uruchomić złośliwe makro?
Nie, standard OpenXML surowo zabrania kodu makr w plikach .xlsx, a Excel odrzuci lub usunie każdy projekt VBA wstrzyknięty do prawdziwego kontenera .xlsx.
Q2: Co powinienem zrobić, jeśli plik Excel prosi mnie o “Włączenie edycji” lub “Włączenie zawartości”?
Udzielaj uprawnień tylko wtedy, gdy znasz nadawcę i oczekujesz pliku; to okno dialogowe jest głównym punktem kontrolnym, który pozwala niezweryfikowanym makrom wykonywać kod.
Q3: Jak Microsoft Excel określa, czy plik pochodzi z internetu?
Windows dołącza ukryty strumień “Mark of the Web” (Zone.Identifier) do pobranych plików, co powoduje, że Excel otwiera je w Widoku chronionym i domyślnie blokuje makra.
Q4: Czy pliki CSV są bezpieczniejsze niż pliki XLSX i XLSM?
Pliki CSV nie mogą zawierać natywnych makr VBA, ale pozostają podatne na ataki wstrzykiwania formuł, jeśli zawierają złośliwe polecenia wykonywane przez Excel po otwarciu.
Q5: Czym nowoczesne Office Scripts różnią się od tradycyjnych makr VBA?
Office Scripts działają w TypeScript w środowisku uruchomieniowym w piaskownicy, co uniemożliwia im dostęp do lokalnego systemu plików, wiersza poleceń lub interfejsów API systemu operacyjnego.