Senast uppdaterad: 28 sept, 2026

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

Excel-filens säkerhet förklarad: XLSX, XLSM och makrorisker

I årtionden har Microsoft Excel varit den universella motorn för affärsverksamhet. Den balanserar företagsbudgetar, visualiserar komplexa datamängder, spårar lager och driver analytiska pipelines i praktiskt taget alla branscher.

Ändå gör samma beräkningsflexibilitet kalkylblad till en bestående favorit bland cybermotståndare. Angripare har beväpnat kalkylblad sedan de tidiga dagarna av makrovirus i slutet av 1990-talet. Medan Microsoft och systemadministratörer har infört flera försvarslager—såsom filformatsegregering och standardblockering av makron—fortsätter social ingenjörskonst och subtila arkitektoniska risker att hålla Excel‑inriktade attacker relevanta.

För att bygga en motståndskraftig säkerhetsställning måste utvecklare, administratörer och avancerade användare titta under arbetsbokens gränssnitt. Att förstå hur det underliggande OpenXML-formatet fungerar, hur .xlsx och .xlsm skiljer sig på en arkitektonisk nivå, och hur makroexekveringsmekanismer fungerar är avgörande för att försvara moderna slutpunkter.

1. Anatomi av moderna Excel-filer: OpenXML avklädd

Före lanseringen av Microsoft Office 2007 sparade Excel-filer främst med proprietära binära format, mest anmärkningsvärt .xls-formatet (styrt av Binary Interchange File Format, eller BIFF8). I .xls-filer paketerades dataregister, formateringsdefinitioner, formler och Visual Basic for Applications (VBA)-makroströmmar i en enda strukturerad lagringsbehållare. Detta gjorde programmatisk inspektion svår och möjliggjorde för angripare att dölja skadliga nyttolastskript i ogenomskinliga binära sektorer.

Från och med Excel 2007 introducerade Microsoft Office Open XML (OOXML)-standarden (standardiserad som ECMA-376 och ISO/IEC 29500). Under OOXML är Excel-arbetsböcker inte längre monolitiska binära klumpar. Istället är de zip-arkiv som innehåller en hierarkisk struktur av XML-dokument, relations-tabeller och inbäddade medieobjekt.

Inuti ZIP-behållaren

Om du tar någon standardmodern Excel-arbetsbok och byter dess filändelse till .zip kan du extrahera dess innehåll med vilket standarddekomprimeringsverktyg som helst:

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

Denna strukturella förändring gav omedelbara säkerhetsfördelar:

  1. DPI (Deep Packet Inspection) & Gateway Visibility: Säkerhetsapparater, proxys och slutpunktagenter kan packa upp arkivet i realtid och analysera klartext-XML-träd för att identifiera misstänkta strängar, externa URL:er eller inbäddade objekt.
  2. Deterministic File Validation: Om en fil påstår sig vara ett OpenXML-dokument men bryter mot schemabegränsningar, vägrar Excel att öppna den eller kör den i ett sandlådeläge för återställning.
  3. Format Separation: Microsoft separerade vanliga beräkningskalkylblad från filer som kan köra inbäddade procedurskript.

2. XLSX vs. XLSM: Den arkitektoniska gränsen

Den huvudsakliga skillnaden mellan .xlsx och .xlsm ligger i huruvida filstrukturen tillåter inkludering av körbara makroprojekt.

Funktion / Dimension.xlsx (Excel OpenXML-kalkylblad).xlsm (Excel-makroaktiverat kalkylblad)
MIME-innehållstypapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
VBA-lagringsbehållareSträngt förbjudet. Kan inte lagra vbaProject.binTillåtet. Innehåller xl/vbaProject.bin
Inbyggd exekveringsriskObetydligt för makroexekvering; begränsat till formelinjicering/DDEHög; kan köra automatiserad VBA-kod vid arbetsboksinteraktion
OpenXML strikt schemaFöljer strikta, makrofri XML-definitionerInkluderar definitioner för äldre och moderna automationsutökningar
Användarens visuella indikatorStandardgrön kalkylbladsikonKalkylbladsikon märkt med ett utropstecken

Tvingande mekanism: varför XLSX inte kan köra makron

En vanlig fråga bland junioradministratörer och utvecklare är: Vad händer om en angripare tar en skadlig .xlsm-fil, injicerar körbar kod och byter filändelsen till .xlsx?

Det korta svaret: Filen kommer inte att köra makrot.

Excel förlitar sig inte enbart på filändelsen för att bestämma körningsregler. När en fil med namnet .xlsx öppnas:

  1. Excel granskar zip-payloaden och refererar till [Content_Types].xml.
  2. I en äkta .xlsx-fil representerar alla definierade innehållstyper standarddatakomponenter (såsom worksheet, sharedStrings eller styles).
  3. Om en angripare manuellt injicerar en kompilerad VBA-ström (xl/vbaProject.bin) i ett .xlsx-paket och uppdaterar relationerna, stöter Excel på en explicit schemakonflikt:
    • Den ser en .xlsx-ändelse bunden till innehållstyper som indikerar makrokapacitet.
    • Excel kastar ett kritiskt integritetsfel: “Excel kan inte öppna filen ‘filename.xlsx’ eftersom filformatet eller filändelsen inte är giltig. Verifiera att filen inte har blivit korrupt…”
  4. Om angriparen lämnar de interna typerna intakta utan att registrera den binära filen, behandlar Excel vbaProject.bin som en orefererad, föräldralös bilaga i zip‑arkivet och kastar bort den helt under inläsningscykeln.

Följaktligen kan en fil som strikt fungerar som en äkta .xlsx-behållare inte köra inbyggd VBA‑kod. Det betyder dock inte att .xlsx‑filer är fria från alla attackvektorer, vilket utforskas senare i den här guiden.

3. Makro risker & attackens livscykel

Makron konstruerades för att automatisera repetitiva bokförings-, finansiella modellerings- och datamanipuleringsuppgifter via Visual Basic for Applications (VBA). Eftersom VBA byggdes för arbetsplatsautomatisering fick den omfattande åtkomst till det underliggande Windows‑operativsystemet via Component Object Model (COM), Windows Script Host (WSH) och direkta Win32‑API‑anrop.

När ett icke‑betrott makro körs, kör det med exakt samma behörigheter som den inloggade användaren. Det är inte fångat i en virtualiserad JavaScript‑liknande webbläsarsandlåda.

+--------------------------------------------------------------------------------+
|                             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.

Vanliga makrointrångstekniker

  1. Auto‑exekveringskrokar: Angripare placerar sin inträdespunkt i inbyggda händelsehanterare såsom Sub Auto_Open() eller Private Sub Workbook_Open(). Så snart användaren beviljar körningsbehörighet, triggas dessa rutiner utan att någon klickning krävs i kalkylbladet.

  2. Förvrängning och Stomping:

    • Strängförvrängning: Payloads döljer URL:er och systemanrop med hjälp av teckenarrayer, XOR-kodning, Base64-avkodning eller sammanslagning av miljövariabler (t.ex. Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: VBA finns i två former i vbaProject.bin: tolkad källkod och kompilerad p-kod (pseudo-kod riktad mot den specifika Office-version som kompilerade den). Angripare kan radera den klartextkällkod helt, och lämna endast den kompilerade p-koden. Många grundläggande antiviruslösningar och statiska analysverktyg inspekterar endast källströmmen, vilket gör att p-koden förblir oupptäckt tills den körs av en matchande Office-version.
  3. Utnyttja befintliga verktyg (LotL): Moderna skadliga makron släpper sällan en .exe-fil direkt till disk, vilket omedelbart skulle larma Endpoint Detection and Response (EDR)-agenter. Istället interagerar de med inbyggda systemverktyg:

    • Instansiering av WScript.Shell för att köra kommandoradsargument.
    • Anropa PowerShell.exe med exekveringspolicy som kringgår (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • Anropa inbyggda Win32‑API:er via Declare PtrSafe Function CreateProcess eller VirtualAlloc för att injicera shellcode direkt i systemminnet.

4. Andra hotvektorer för kalkylblad (bortom standard-VBA)

Att säkra en miljö mot .xlsm‑filer är bara halva striden. Motståndare använder också mekanismer som fungerar oberoende av traditionell VBA.

Dynamisk datautbyte (DDE) och CSV injektion

Excel har ett äldre protokoll som heter Dynamic Data Exchange (DDE), avsett att möjliggöra datadelning mellan körande applikationer (till exempel att strömma live‑aktiekurser från ett separat program till en Excel‑cell).

  • Hur formelinjicering fungerar: När en kalkylbladscell börjar med tecken som =, @, + eller - tolkar Excel innehållet som en formel. Om en angripare kontrollerar indata som exporteras till ett kalkylblad (t.ex. ett osanitärt fält “Comments” i en webbapplikation som exporteras till CSV eller XLSX), kan de injicera:
    =cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0
    
  • När filen öppnas utvärderar Excel formeln, varnar användaren med en prompt om att starta ett externt program och, om detta godkänns, kör systemets skal.

Excel 4.0 (XLM) äldre makron

Innan VBA introducerades 1993 använde Excel ett formelbaserat makrosystem känt som Excel 4.0 (XLM) makron. Dessa makron finns i dedikerade makroblad snarare än i ett separat VBA‑projekt.

Eftersom XLM‑makron skrivs som cellformler (t.ex. =EXEC("calc.exe")), kringgår de många vanliga VBA‑statiskinspektionsmotorer. Angripare föredrog XLM‑makron under slutet av 2010‑talet och början av 2020‑talet för att undvika automatiserad upptäckt innan Microsoft inaktiverade dem som standard i moderna företagsbyggen.

Skadliga externa anslutningar och OLE-objekt

En vanlig .xlsx‑arbetsbok kan fortfarande utgöra en risk via externa resurser:

  • Inbäddade OLE‑paket: En angripare kan infoga en körbar fil förklädd som en inbäddad PDF‑ikon direkt i kalkylbladet.
  • Externa arbetsboks‑länkar & webbfrågor: En XLSX kan innehålla externa referenser som automatiskt initierar HTTP‑GET‑förfrågningar till angriparkontrollerade command-and-control (C2)‑servrar när filen öppnas, främst använda för rekognosering eller netNTLM‑hash‑insamling.

5. Företagsförstärkning och djupgående försvarsstrategier

Försvar mot hot som sprids via Excel kräver ett lagerbaserat tillvägagångssätt som omfattar nätverksinspektion, systemkonfiguration, åtkomstkontroller och operativa processer.

+─────────────────────────────────────────────────────────+
|                  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. Tvinga Mark of the Web (MotW) makroblockering

År 2022 uppdaterade Microsoft standardbeteendet för Office‑program: makron i filer som kommer från internet är blockerade som standard.

När en användare laddar ner en fil via en webbläsare eller extern klient, märker Windows filen med ett alternativt dataström (ADS) som heter Zone.Identifier (Zon 3 indikerar Internet). För filer som har denna markering inaktiverar Excel makron helt och visar en röd säkerhetsbanner: > "SÄKERHETS RISK: Microsoft har blockerat makron från att köras eftersom källan till den här filen är opålitlig."

Administrativ åtgärd: Se till att detta beteende verkställs via grupprincip och inte kan åsidosättas av slutanvändare:

  • GPO‑sökväg: User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center
  • Inställning: Aktivera "Blockera makron från att köras i Office‑filer från Internet".

2. Konfigurera regler för Attack Surface Reduction (ASR)

Organisationer som använder Microsoft Defender for Endpoint bör aktivera kärnregler för Attack Surface Reduction som är specifikt utformade för Office‑program:

  • Block Office applications from creating child processes (GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)
    • Förhindrar att Excel startar PowerShell, CMD eller skriptmotorer.
  • Block Office applications from injecting code into other processes (GUID: 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)
  • Block Win32 API calls from Office macros (GUID: 92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)

3. Utnyttja Antimalware Scan Interface (AMSI)

Moderna versioner av Microsoft 365 integrerar VBA‑körning direkt med AMSI. Även om en angripare använder komplex strängförvrängning eller VBA‑stomping, vidarebefordrar VBA‑körningsmotorn de rekonstruerade, okrypterade kommandona till ditt installerade antivirus‑/EDR‑system exakt en millisekund före körning. Se till att ditt endpoint‑skydd aktivt övervakar AMSI‑körningshändelser.

4. Övergå till betrodda platser och digitala certifikat

För organisationer som är beroende av automatiserade kalkylblad för den dagliga verksamheten:

  • Eliminera lösa XLSM‑filer i användarens Nedladdningar eller skrivbordsmappar.
  • Använd betrodda platser: Begränsa makrokörning uteslutande till skrivskyddade nätverksdelningar som hanteras av IT‑administratörer.
  • Kodsignering: Kräv att alla internt utvecklade makron kryptografiskt signeras med ett certifikat utfärdat av företagets Public Key Infrastructure (PKI). Konfigurera Excel för att köra endast digitalt signerade makron och tyst blockera osignerade.

6. Utvecklarens perspektiv: Bygga säker automatisering

Om du bygger mjukvara som analyserar, genererar eller konsumerar Excel-filer (t.ex. Python-pipelines som använder pandas/openpyxl, Node.js-mikrotjänster eller C#/.NET-applikationer), tillämpa dessa utvecklingsåtgärder:

  1. Avvisa oväntade filformat vid uppladdningsgränsen: Om din applikation förväntar sig finansiella rapporter, validera strikt att inkommande filer följer .xlsx. Inspektera de interna magiska bytena (standard zip‑huvudet 50 4B 03 04) och verifiera att inga vbaProject.bin‑poster finns i arkivindexet innan du sparar till molnbuckets eller databassystem.

  2. Sanera data mot formel‑injektion: När du exporterar användargenererad inmatning till CSV- eller XLSX-filer, lägg till ett apostrof (') eller ett mellanslag framför varje cell som börjar med farliga tecken (=, +, -, @, \t, \r):

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. Migrera från VBA till Office Scripts eller webb‑tillägg: För modern företagsautomation, fasa ut äldre VBA helt och hållet:

    • Office Scripts: Skrivet i TypeScript kör Office Scripts i en sandlådad molnmiljö och fungerar smidigt i både webb‑ och skrivbordsversioner utan att exponera inbyggda OS‑systemanrop.
    • Office Web-tillägg: Byggda med standard-HTML, CSS och modern JavaScript, kommunicerar webb‑tillägg via hanterade JavaScript‑API:er och är isolerade från det lokala operativsystemet.

7. Sammanfattande checklista för kalkylbladsäkerhet

  • Tvinga .xlsx som standard: Kräv att alla vanliga användarflöden sparas som makrofri .xlsx.
  • Blockera makron från internet: Bekräfta att MotW‑policytillämpning har distribuerats i hela organisationen via GPO eller Intune.
  • Aktivera ASR-regler: Förbjuda Office‑produkter att starta kommandotolkar eller underprocesser.
  • Fasa ut Excel 4.0 (XLM): Säkerställ att äldre XLM‑makro‑motorer är permanent inaktiverade på alla arbetsstationer.
  • Sanera applikationsexporter: Skydda CSV- och Excel‑genereringsrutiner mot CSV-/formel‑injektion.
  • Skifta mot Office Scripts: Överför äldre administrativa makron till TypeScript‑drivna Office Scripts och hanterade API:er.

Genom att betrakta kalkylblad inte bara som dokumentfiler utan som strukturerade mjukvarukontainrar som har exekveringsförmåga kan säkerhetsteam och utvecklare effektivt neutralisera en av de äldsta attackvektorerna inom företags‑IT.

Vanliga frågor (FAQ)

Q1: Kan en fil som slutar på .xlsx köra ett skadligt makro?

Nej, OpenXML-standarden förbjuder strikt makrokod i .xlsx-filer, och Excel kommer att avvisa eller ta bort alla VBA-projekt som injiceras i en äkta .xlsx-behållare.

Q2: Vad ska jag göra om en Excel-fil ber mig att “Aktivera redigering” eller “Aktivera innehåll”?

Ge endast behörigheter om du känner avsändaren och förväntade dig filen; den här prompten är den primära kontrollpunkten som tillåter opålitliga makron att köra kod.

Q3: Hur avgör Microsoft Excel om en fil kom från internet?

Windows bifogar en dold “Mark of the Web” (Zone.Identifier)-ström till nedladdade filer, vilket signalerar till Excel att öppna dem i skyddad vy och blockera makron som standard.

Q4: Är CSV-filer säkrare än XLSX och XLSM filer?

CSV-filer kan inte innehålla inbyggda VBA-makron, men de är fortfarande sårbara för formelinjektionsattacker om de innehåller skadliga kommandon som körs av Excel vid öppning.

Q5: Hur skiljer sig moderna Office Scripts från traditionella VBA-makron?

Office Scripts körs på TypeScript i en sandlådemiljö, vilket förhindrar dem från att komma åt ditt lokala filsystem, kommandorad eller operativsystemets API:er.

Se även