Paskutinį kartą atnaujinta: 28 Rugs, 2026

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

Excel failų saugumas paaiškintas: XLSX, XLSM ir makrokomandų rizikos

Dešimtmečius „Microsoft Excel“ buvo universalus verslo operacijų variklis. Jis subalansuoja įmonių biudžetus, vizualizuoja sudėtingus duomenų rinkinius, seka atsargas ir maitina analitines duomenų srautus praktiškai visose pramonės šakose.

Vis dėlto ta pati skaičiavimo lankstumas daro skaičiuokles nuolatine kibernetinių priešininkų mėgstama priemone. Užpuolikai naudoja skaičiuokles kaip ginklus nuo ankstyvųjų makrovirusų laikų, dar 1990‑ųjų pabaigoje. Nors „Microsoft“ ir sistemos administratoriai įdiegė kelis gynybos sluoksnius – pavyzdžiui, failų formatų atskyrimą ir numatytąjį makrokomandų blokavimą – socialinė inžinerija ir subtilios architektūrinės rizikos vis dar išlaiko „Excel“ atakų aktualumą.

Norint sukurti atsparų saugumo požiūrį, kūrėjai, administratoriai ir patyrę naudotojai turi žiūrėti po darbalapio sąsaja. Suprasti, kaip veikia pagrindinis OpenXML formatas, kaip .xlsx ir .xlsm skiriasi architektūrinio lygio požiūriu ir kaip veikia makrokomandų vykdymo mechanizmai, yra būtina siekiant apsaugoti šiuolaikinius galinius taškus.

1. Šiuolaikinių Excel failų struktūra: OpenXML išskaidymas

Prieš Microsoft Office 2007 išleidimą, „Excel“ failus išsaugojo daugiausia naudojant nuosavus dvejetainių formatų, ypač .xls formatą (valdomą Binary Interchange File Format, arba BIFF8). .xls failuose duomenų įrašai, formatavimo apibrėžimai, formulės ir Visual Basic for Applications (VBA) makrokomandų srautai buvo supakuoti į vieną struktūruotą saugojimo konteinerį. Tai apsunkino programinį patikrinimą ir leido atakų vykdytojams paslėpti kenkėjiškus naudingumo scenarijus nepermatomose dvejetainėse sektoriuose.

Nuo Excel 2007 pradžios „Microsoft“ pristatė Office Open XML (OOXML) standartą (standartizuotą kaip ECMA-376 ir ISO/IEC 29500). Pagal OOXML, „Excel“ darbalapiai nebe yra monolitiniai dvejetainiai blokai. Vietoj to, jie yra suspausti archyvai, kuriuose yra hierarchinė XML dokumentų struktūra, ryšių lentelės ir įterpti medijos ištekliai.

ZIP konteinerio viduje

Jei paimsit bet kurią standartinę šiuolaikinę „Excel“ darbaknygę ir pervadinsite jos plėtinį į .zip, galėsite išskleisti jos turinį naudodami bet kokį standartinį išskleidimo įrankį:

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

Šis struktūrinis pokytis suteikė momentalių saugumo privalumų:

  1. DPI (giluminio paketo inspekcija) ir šliuzo matomumas: Saugumo įrenginiai, tarpiniai serveriai ir galinių taškų agentai gali išpakoti archyvą realiu laiku ir analizuoti paprastų tekstų XML medžius, kad identifikuotų įtartinus eilutes, išorinius URL arba įterptus objektus.
  2. Deterministinis failų tikrinimas: Jei failas teigia, kad yra OpenXML dokumentas, bet pažeidžia schemos apribojimus, „Excel“ atsisako jį atverti arba vykdo jį smėlio dėžės atkūrimo režime.
  3. Formato atskyrimas: „Microsoft“ atskyrė įprastus skaičiavimo skaičiuoklių lapus nuo failų, galinčių vykdyti įterptus procedūrinius skriptus.

2. XLSX vs. XLSM: Architektūrinė riba

Pagrindinis skirtumas tarp .xlsx ir .xlsm yra tas, ar failo struktūra leidžia įtraukti vykdomus makro projektus.

Savybė / Matmuo.xlsx (Excel OpenXML skaičiuoklės lapas).xlsm (Excel makrokomandomis įgalintas skaičiuoklės darbalapis)
MIME turinio tipasapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
VBA saugojimo konteinerisGriežtai draudžiama. Negalima saugoti vbaProject.binLeista. Turi xl/vbaProject.bin
Vietinio vykdymo rizikaNereikšminga makrokomandų vykdymui; ribota iki formulės įterpimo/DDEAukšta; gali vykdyti automatizuotą VBA kodą, kai sąveikaujama su darbo knyga
OpenXML griežta schemaAtitinka griežtas, be makrokomandų XML apibrėžtisApima apibrėžimus senosioms ir šiuolaikinėms automatizavimo plėtiniams
Vartotojo vizualinis indikatoriusStandartinė žalia skaičiuoklės piktogramaSkaičiuoklės piktograma su šauktuko ženklu

Įgyvendinimo mechanizmas: Kodėl XLSX negali vykdyti makrokomandų

Dažnas klausimas tarp jaunesnių administratorių ir kūrėjų yra: Kas nutiks, jei įsilaužėlis paima kenksmingą .xlsm failą, įterpia vykdomą kodą ir pervadina failo plėtinį į .xlsx?

Trumpas atsakymas: Failas neįvykdys makrokomandos.

Excel nepasikliauja vien tik failo plėtiniu nustatydamas vykdymo taisykles. Atidarant failą pavadinimu .xlsx:

  1. Excel tikrina zip turinį ir nurodo [Content_Types].xml.
  2. Tikrame .xlsx faile visi apibrėžti turinio tipai atitinka standartinius duomenų elementus (pvz., worksheet, sharedStrings arba styles).
  3. Jei įsilaužėlis rankiniu būdu įterpia sukompiliuotą VBA srautą (xl/vbaProject.bin) į .xlsx paketą ir atnaujina ryšius, Excel susiduria su aiškiu schemos prieštaravimu:
    • Jis mato, kad .xlsx plėtinys susietas su turinio tipais, nurodančiais makrokomandų galimybę.
    • Excel išmeta kritinę vientisumo klaidą: "Excel negali atidaryti failo ‘filename.xlsx’, nes failo formatas arba failo plėtinys yra neteisingas. Patikrinkite, ar failas nebuvo sugadintas…"
  4. Jei užpuolikas palieka vidinius tipus nepakitusius nesuregistruodamas dvejetainį failą, „Excel“ laiko vbaProject.bin kaip nenuorodą, apleistą priedą zip archyve ir visiškai išmeta jį įkėlimo ciklo metu.

Todėl failas, griežtai veikiantis kaip tikras .xlsx konteineris, negali vykdyti natyvaus VBA kodo. Tačiau tai nereiškia, kad .xlsx failai yra visiškai be jokių atakų vektorų, kaip vėliau šiame vadove.

3. Makrokomandų rizikos ir atakų ciklas

Makrokomandos buvo sukurtos automatizuoti pasikartojančias apskaitos, finansinio modeliavimo ir duomenų manipuliavimo užduotis naudojant Visual Basic for Applications (VBA). Kadangi VBA buvo sukurta darbo vietų automatizavimui, jai suteikta plačia prieiga prie pagrindinės Windows operacinės sistemos per Component Object Model (COM), Windows Script Host (WSH) ir tiesioginius Win32 API iškvietimus.

Kai nepatikima makrokomanda vykdoma, ji veikia su tiksliai tomis pačiomis teisėmis kaip prisijungęs vartotojas. Ji nėra įstrigusi virtualioje JavaScript tipo naršyklės smėlio dėžėje.

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

Bendros makrokomandų įsiskverbimo technikos

  1. Automatinio vykdymo kabliukai: Užpuolikai savo įėjimo tašką patalpina į vidinius įvykių tvarkytuvus, tokius kaip Sub Auto_Open() arba Private Sub Workbook_Open(). Kai tik vartotojas suteikia vykdymo teises, šios procedūros suaktyvinamos be jokio paspaudimo skaičiuoklės viduje.

  2. Maskavimas ir Stompingas:

    • Eilučių maskavimas: Naudų (payload) slepia URL adresus ir sistemos iškvietimus naudodami simbolių masyvus, XOR kodavimą, Base64 dekodavimą arba aplinkos kintamųjų sujungimą (pvz., Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: VBA egzistuoja dviem formomis vbaProject.bin faile: interpretuojamu šaltiniu kodu ir sukompiliuotu p-kodu (pseudo-kodu, skirtu konkrečiai Office versijai, kuri jį sukūrė). Užpuolikai gali visiškai ištrinti aiškų šaltinio kodą, palikdami tik sukompiliuotą p-kodą. Daugelis paprastų antivirusinių sprendimų ir statinių analizatorių tik tikrina šaltinio srautą, todėl p-kodas lieka nepastebimas, kol jį įvykdo atitinkama Office versija.
  3. Gyvenimas iš žemės (LotL): Šiuolaikiniai kenkėjiški makrokomandų failai retai išmeta .exe failą tiesiai į diską, kas iš karto įspėtų Endpoint Detection and Response (EDR) agentus. Vietoj to, jie sąveikauja su įtaisomais sistemos įrankiais:

    • WScript.Shell sukūrimas (instancijavimas) komandų eilutės argumentų vykdymui.
    • Iškviečiant PowerShell.exe su vykdymo politika, apeinant (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • Kviečiant natūralias Win32 API per Declare PtrSafe Function CreateProcess arba VirtualAlloc, kad į sisteminę atmintį tiesiogiai įterptų shellcode.

4. Kiti skaičiuoklių grėsmių vektoriai (viršijant standartinį VBA)

Apsaugoti aplinką nuo .xlsm failų yra tik pusė kovos. Priešai taip pat naudoja mechanizmus, kurie veikia nepriklausomai nuo tradicinės VBA.

Dinaminis duomenų mainų (DDE) ir CSV įterpimas

„Excel“ turi seną protokolą, vadinamą Dynamic Data Exchange (DDE), sukurtą duomenų dalijimuisi tarp vykdomų programų (pavyzdžiui, tiesioginio akcijų kainų srauto transliavimui iš atskiros programos į „Excel“ langelį).

  • Kaip veikia formulės įterpimas: Kai skaičiuoklės langelis prasideda simboliais, tokiais kaip =, @, + arba -, „Excel“ interpretuoja turinį kaip formulę. Jei atakuotojas valdo įvestį, eksportuojamą į skaičiuoklę (pavyzdžiui, nesantrintas “Comments” laukas žiniatinklio programoje, eksportuotas į CSV arba XLSX), jis gali įterpti:
    =cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0
    
  • Atidarius „Excel“ įvertina formulę, įspėja vartotoją su pranešimu apie išorinės programos paleidimą ir, jei patvirtinta, paleidžia sistemos apvalkalą.

Excel 4.0 (XLM) senosios makrokomandos

Prieš 1993 m. pristatant VBA, Excel naudojo formulėmis pagrįstą makrokomandų sistemą, žinomą kaip Excel 4.0 (XLM) makros. Šios makros yra įkeltos į specialias makro lapus, o ne į atskirą VBA projektą.

Kadangi XLM makros rašomos kaip ląstelių formulės (pvz., =EXEC("calc.exe")), jos apeina daugelį įprastų VBA statinių patikrinimo variklių. Užpuolikai rinkosi XLM makrokomandas vėlai 2010‑ųjų pabaigoje ir ankstyvoje 2020‑ųjų pradžioje, kad išvengtų automatizuoto aptikimo, kol „Microsoft“ jų neįjungė pagal numatytuosius nustatymus šiuolaikiniuose įmonės versijose.

Kenkėjiški išoriniai ryšiai ir OLE objektai

Įprastas .xlsx darbaknyga vis dar gali kelti riziką per išorinius išteklius:

  • Įterpti OLE paketai: Užpuolikas gali įdėti vykdomąjį failą, maskuojamą kaip įterptas PDF piktograma, tiesiai į darbalapį.
  • Išorinės darbaknygos nuorodos ir internetinės užklausos: XLSX gali turėti išorines nuorodas, kurios automatiškai inicijuoja HTTP GET užklausas į užpuolio valdomus komandų ir valdymo (C2) serverius atidarant failą, dažniausiai naudojamas žvalgybai arba netNTLM maišos rinkimo atakoms.

5. Įmonės sustiprinimas ir gynybos gylio strategijos

Apsisaugoti nuo Excel kilusių grėsmių reikia daugiapakopio požiūrio, apimančio tinklo patikrinimą, sistemos konfigūraciją, prieigos kontrolę ir operacinius procesus.

+─────────────────────────────────────────────────────────+
|                  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. Įgyvendinti žymės „Mark of the Web“ (MotW) makrokomandų blokavimą

2022 m. „Microsoft“ atnaujino numatytąją „Office“ programų elgseną: makrokomandos failuose, kilusių iš interneto, yra numatytai blokuojamos.

Kai naudotojas atsisiunčia failą per naršyklę arba išorinį klientą, „Windows“ pažymi failą alternatyvia duomenų srautu (ADS) pavadinimu Zone.Identifier (3 zona nurodo internetą). Failams, turintiems šią žymą, „Excel“ visiškai išjungia makrokomandas ir rodo raudoną saugumo pranešimą: > "SAUGUMO RIZIKA: „Microsoft“ blokuoja makrokomandų vykdymą, nes šio failo šaltinis yra nepatikimas."

Administracinis veiksmas: Užtikrinkite, kad ši elgsena būtų įgyvendinta per grupės politiką ir jos negalėtų apeiti galutiniai naudotojai:

  • GPO kelias: User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center
  • Nustatymas: Įjungti "Blokuoti makrokomandas, vykdomas Office failuose iš interneto".

2. Konfigūruoti atakų paviršiaus sumažinimo (ASR) taisykles

Organizacijos, naudojančios „Microsoft Defender for Endpoint“, turėtų įjungti pagrindines „Attack Surface Reduction“ taisykles, sukurtas specialiai „Office“ programoms:

  • Blokuoti Office programų kūrimą vaikų procesų (GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)
    • Užkerta kelią, kad Excel paleistų PowerShell, CMD ar scenarijų variklius.
  • Blokuoti Office programų įterpimą kodo į kitas procesus (GUID: 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)
  • Blokuoti Win32 API iškvietimus iš Office makrokomandų (GUID: 92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)

3. Pasinaudoti Antimalware Scan Interface (AMSI)

Modernios Microsoft 365 versijos integruoja VBA vykdymą tiesiogiai su AMSI. Net jei atakuotojas taiko sudėtingą eilutės užkoduotę arba VBA „stomping“, VBA vykdymo variklis perduoda atkurti, nešifruotus komandas jūsų įdiegtam antivirusų/EDR varikliui lygiai milisekundę prieš vykdymą. Užtikrinkite, kad jūsų galutinio taško apsauga aktyviai stebėtų AMSI vykdymo įvykius.

4. Pereiti prie patikimų vietų ir skaitmeninių sertifikatų

Organizacijoms, priklausomoms nuo automatizuotų skaičiuoklių kasdieninėms operacijoms:

  • Pašalinti laisvai esančius XLSM failus vartotojo Atsiuntimų arba darbalaukio aplankaluose.
  • Naudoti patikimas vietas: Apriboti makrokomandų vykdymą tik į skaitymui skirtoms tinklo dalijimosi vietoms, kurias tvarko IT administratoriai.
  • Kodo pasirašymas: Reikalauti, kad visi viduje sukurti makrokomandų būtų kriptografiškai pasirašyti naudojant sertifikatą, išduotą įmonės viešojo rakto infrastruktūros (PKI). Konfigūruoti „Excel“, kad vykdytų tik skaitmeniniu būdu pasirašytus makrokomandas ir tyliai blokuotų nepasisirašytus.

6. Kūrėjo perspektyva: saugios automatizacijos kūrimas

Jei kuriate programinę įrangą, kuri analizuoja, generuoja arba naudoja Excel failus (pvz., Python duomenų srautus, naudojančius pandas/openpyxl, Node.js mikroservisus arba C#/.NET programas), taikykite šias kūrimo apsaugos priemones:

  1. Atmesti netikėtus failų formatus įkėlimo riboje: Jei jūsų programa tikisi finansinių ataskaitų, griežtai patikrinkite, ar gaunami failai atitinka .xlsx. Patikrinkite vidinius magiškus baitus (standartinį zip antraštės 50 4B 03 04) ir įsitikinkite, kad archyvo indekse nėra vbaProject.bin įrašų prieš išsaugodami į debesų kibirus arba duomenų bazės saugyklas.

  2. Išvalyti duomenis nuo formulės injekcijos: Eksportuojant vartotojo sukurtą įvestį į CSV arba XLSX failus, prieš bet kurią langelį, prasidedantį pavojingais simboliais (=, +, -, @, \t, \r), pridėkite apostrofą (') arba tarpą:

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. Perkelti iš VBA į Office Scripts arba Web priedus: Moderniai įmonės automatizacijai visiškai atsisakykite senosios VBA:

    • Office Scripts: Parašyti TypeScript kalba, Office Scripts veikia izoliuotoje debesų aplinkoje ir sklandžiai veikia tiek internetinėse, tiek darbalaukio versijose, neatskleisdami natūralių OS sisteminių iškvietimų.
    • Office Web Add-ins: Sukurti naudojant standartinį HTML, CSS ir modernų JavaScript, internetiniai priedai bendrauja per valdomas JavaScript API ir yra izoliuoti nuo vietinės operacinės sistemos.

7. Santraukinis kontrolinis sąrašas skaičiuoklių saugumui

  • Numatyta .xlsx įgyvendinimas: Reikalauti, kad visi įprasti naudotojų darbo procesai būtų išsaugomi kaip be makrokomandų .xlsx.
  • Blokuoti iš interneto kilusias makrokomandas: Patvirtinkite, kad MotW politikos įgyvendinimas yra paskelbtas visoje organizacijoje per GPO arba Intune.
  • Įjungti ASR taisykles: Drausti Office produktams kurti komandų interpretatorius ar vaiko procesus.
  • Nustoti naudoti Excel 4.0 (XLM): Užtikrinkite, kad pasenusi XLM makrokomandų varikliai būtų visam laikui išjungti visuose darbo kompiuteriuose.
  • Sanituoti programų eksporto procesus: Apsaugoti CSV ir Excel generavimo procedūras nuo CSV/formulės įterpimo.
  • Perkelti dėmesį į Office Scripts: Perkelti senas administracines makrokomandas į TypeScript pagrindu veikiančius Office Scripts ir valdomas API.

Traktuodami skaičiuokles ne tik kaip dokumentų failus, bet kaip struktūruotus programinės įrangos konteinerius, turinčius vykdymo galimybes, saugumo komandos ir kūrėjai gali efektyviai neutralizuoti vieną seniausių atakų vektorių įmonės skaičiavimuose.

Dažnai užduodami klausimai (DUK)

K1: Ar failas, baigiantis .xlsx, gali vykdyti kenkėjišką makrokomandą?

Ne, OpenXML standartas griežtai draudžia makrokomandų kodą .xlsx failuose, o Excel atmes arba pašalins bet kokį VBA projektą, įterptą į tikrą .xlsx konteinerį.

K2: Ką turėčiau daryti, jei “Excel” failas prašo manęs “Įjungti redagavimą” arba “Įjungti turinį”?

Suteikite leidimus tik tada, kai žinote siuntėją ir laukiate failo; šis pranešimas yra pagrindinis kontrolės taškas, leidžiantis nepatikimoms makrokomandoms vykdyti kodą.

K3: Kaip “Microsoft Excel” nustato, ar failas kilęs iš interneto?

Windows prideda paslėptą „Mark of the Web“ (Zone.Identifier) srautą prie atsisiųstų failų, kuris signalizuoja Excel atidaryti juos apsaugotoje peržiūroje ir numatytai blokuoti makrokomandas.

K4: Ar CSV failai yra saugesni nei XLSX ir XLSM failai?

CSV failai negali turėti natūralių VBA makrokomandų, tačiau jie lieka pažeidžiami formulės įterpimo atakoms, jei juose yra kenkėjiškų komandų, kurias Excel vykdo atidarant failą.

K5: Kaip šiuolaikiniai Office Scripts skiriasi nuo tradicinių VBA makrokomandų?

Office Scripts veikia TypeScript kalba izoliuotoje vykdymo aplinkoje, neleidžiančioje jiems pasiekti jūsų vietinės failų sistemos, komandų eilutės ar operacinės sistemos API.

Taip pat žiūrėkite