Cập nhật lần cuối: 28 Tháng 9, 2026

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

Bảo mật Tệp Excel được Giải thích: XLSX, XLSM và Rủi ro Macro

Trong nhiều thập kỷ, Microsoft Excel đã trở thành động cơ toàn cầu cho các hoạt động kinh doanh. Nó cân bằng ngân sách doanh nghiệp, trực quan hoá các bộ dữ liệu phức tạp, theo dõi tồn kho và cung cấp năng lượng cho các quy trình phân tích trên hầu hết mọi ngành công nghiệp.

Tuy nhiên, cùng một tính linh hoạt tính toán đó khiến bảng tính trở thành mục tiêu ưa thích lâu dài của các đối thủ mạng. Kẻ tấn công đã vũ khí hoá bảng tính kể từ những ngày đầu của virus macro vào cuối những năm 1990. Trong khi Microsoft và các quản trị viên hệ thống đã giới thiệu nhiều lớp phòng thủ—như việc phân tách định dạng tệp và chặn macro mặc định—kỹ thuật xã hội và các rủi ro kiến trúc tinh vi vẫn tiếp tục duy trì tính liên quan của các cuộc tấn công tập trung vào Excel.

Để xây dựng một tư thế bảo mật kiên cường, các nhà phát triển, quản trị viên và người dùng nâng cao phải nhìn sâu bên dưới giao diện sổ làm việc. Hiểu cách định dạng OpenXML nền tảng hoạt động, cách .xlsx và .xlsm khác nhau ở mức kiến trúc, và cách cơ chế thực thi macro hoạt động là điều quan trọng để bảo vệ các điểm cuối hiện đại.

1. Cấu trúc của Các Tệp Excel Hiện Đại: OpenXML Được Giải Mã

Trước khi Microsoft Office 2007 được phát hành, Excel lưu các tệp chủ yếu bằng các định dạng nhị phân độc quyền, đáng chú ý nhất là định dạng .xls (được quản lý bởi Binary Interchange File Format, hay BIFF8). Trong các tệp .xls, các bản ghi dữ liệu, định nghĩa định dạng, công thức và luồng macro Visual Basic for Applications (VBA) được đóng gói vào một container lưu trữ có cấu trúc duy nhất. Điều này khiến việc kiểm tra chương trình trở nên khó khăn và cho phép kẻ tấn công ẩn các đoạn mã độc hại bên trong các sector nhị phân mờ.

Bắt đầu từ Excel 2007, Microsoft đã giới thiệu tiêu chuẩn Office Open XML (OOXML) (được tiêu chuẩn hoá là ECMA-376 và ISO/IEC 29500). Dưới OOXML, các sổ làm việc Excel không còn là các khối nhị phân đơn khối nữa. Thay vào đó, chúng là các tệp nén zip chứa cấu trúc phân cấp của các tài liệu XML, bảng quan hệ và các tài sản media được nhúng.

Trong Container ZIP

Nếu bạn lấy bất kỳ sổ làm việc Excel hiện đại tiêu chuẩn nào và đổi phần mở rộng của nó thành .zip, bạn có thể giải nén nội dung của nó bằng bất kỳ công cụ giải nén tiêu chuẩn nào:

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

Sự chuyển đổi cấu trúc này đã mang lại lợi ích bảo mật ngay lập tức:

  1. DPI (Kiểm tra gói sâu) & Tầm nhìn Cổng: Các thiết bị bảo mật, proxy và tác nhân đầu cuối có thể giải nén kho lưu trữ ngay lập tức và phân tích các cây XML dạng văn bản thuần để xác định các chuỗi đáng ngờ, URL bên ngoài hoặc các đối tượng nhúng.
  2. Xác thực tệp quyết định: Nếu một tệp khẳng định là tài liệu OpenXML nhưng vi phạm các ràng buộc schema, Excel sẽ từ chối mở nó hoặc chạy nó trong chế độ khôi phục có sandbox.
  3. Tách biệt định dạng: Microsoft đã tách các bảng tính tính toán thông thường ra khỏi các tệp có khả năng thực thi các script thủ tục nhúng.

2. XLSX vs. XLSM: Ranh giới Kiến trúc

Sự khác biệt chính giữa .xlsx và .xlsm nằm ở việc cấu trúc tệp có cho phép bao gồm các dự án macro có thể thực thi hay không.

Tính năng / Kích thước.xlsx (Bảng tính Excel OpenXML).xlsm (Bảng tính Excel có Macro)
Kiểu Nội dung MIMEapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
Bộ chứa lưu trữ VBACấm tuyệt đối. Không thể lưu trữ vbaProject.binĐược phép. Chứa xl/vbaProject.bin
Rủi ro Thực thi GốcKhông đáng kể đối với việc thực thi macro; chỉ giới hạn ở việc tiêm công thức/DDECao; có thể chạy mã VBA tự động khi tương tác với sổ làm việc
Lược đồ OpenXML nghiêm ngặtTuân thủ các định nghĩa XML nghiêm ngặt, không có macroBao gồm các định nghĩa cho các phần mở rộng tự động hoá cổ điển và hiện đại
Chỉ báo trực quan cho người dùngBiểu tượng bảng tính màu xanh lá tiêu chuẩnBiểu tượng bảng tính có dấu chấm than

Cơ chế Thực thi: Tại sao XLSX không thể chạy Macro

Một câu hỏi phổ biến trong số các quản trị viên và nhà phát triển trẻ là: Điều gì sẽ xảy ra nếu kẻ tấn công lấy một tệp .xlsm độc hại, chèn mã thực thi và đổi phần mở rộng của tệp thành .xlsx?

Câu trả lời ngắn gọn: Tệp sẽ không thực thi macro.

Excel không chỉ dựa vào phần mở rộng tệp để xác định quy tắc thực thi. Khi mở một tệp có tên .xlsx:

  1. Excel kiểm tra payload zip và tham chiếu tới [Content_Types].xml.
  2. Trong một tệp .xlsx thực sự, tất cả các loại nội dung được định nghĩa đại diện cho các phần tử dữ liệu tiêu chuẩn (như worksheet, sharedStrings, hoặc styles).
  3. Nếu kẻ tấn công tự tay chèn một luồng VBA đã biên dịch (xl/vbaProject.bin) vào gói .xlsx và cập nhật các mối quan hệ, Excel sẽ gặp một mâu thuẫn lược đồ rõ ràng:
    • Nó nhận thấy phần mở rộng .xlsx được liên kết với các loại nội dung cho thấy khả năng macro.
    • Excel phát sinh lỗi toàn vẹn nghiêm trọng: "Excel không thể mở tệp ‘filename.xlsx’ vì định dạng tệp hoặc phần mở rộng tệp không hợp lệ. Kiểm tra xem tệp có bị hỏng không…"
  4. Nếu kẻ tấn công để nguyên các loại nội bộ mà không đăng ký nhị phân, Excel sẽ coi vbaProject.bin là một tệp đính kèm không được tham chiếu, bị bỏ rơi trong kho lưu trữ zip và loại bỏ hoàn toàn nó trong quá trình tải.

Do đó, một tệp chỉ hoạt động như một container .xlsx thực sự không thể chạy mã VBA gốc. Tuy nhiên, điều này không có nghĩa là các tệp .xlsx hoàn toàn không có các vector tấn công, như sẽ được khám phá sau trong hướng dẫn này.

3. Rủi ro Macro & Vòng đời Tấn công

Macro được thiết kế để tự động hoá các tác vụ kế toán, mô hình tài chính và xử lý dữ liệu lặp đi lặp lại thông qua Visual Basic for Applications (VBA). Vì VBA được xây dựng cho việc tự động hoá công việc, nó được cấp quyền truy cập rộng rãi vào hệ điều hành Windows nền tảng thông qua Component Object Model (COM), Windows Script Host (WSH), và các cuộc gọi API Win32 trực tiếp.

Khi một macro không đáng tin cậy được thực thi, nó chạy với cùng mức đặc quyền chính xác như người dùng đã đăng nhập. Nó không bị giam giữ trong một sandbox kiểu trình duyệt JavaScript ảo hoá.

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

Các kỹ thuật xâm nhập Macro phổ biến

  1. Các hook tự thực thi: Kẻ tấn công đặt điểm vào của chúng trong các trình xử lý sự kiện nội tại như Sub Auto_Open() hoặc Private Sub Workbook_Open(). Ngay khi người dùng cấp quyền thực thi, các thủ tục này sẽ được kích hoạt mà không cần bất kỳ cú nhấp chuột nào trong bảng tính.

  2. Che giấu và Stomping:

    • Che giấu chuỗi: Payload ẩn URL và các lời gọi hệ thống bằng cách sử dụng mảng ký tự, mã hoá XOR, giải mã Base64, hoặc nối biến môi trường (ví dụ, Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: VBA tồn tại dưới hai dạng trong vbaProject.bin: mã nguồn được diễn giải và p-code đã biên dịch (mã giả được nhắm mục tiêu cho phiên bản Office cụ thể đã biên dịch). Kẻ tấn công có thể xóa hoàn toàn mã nguồn dạng văn bản thuần, chỉ để lại p-code đã biên dịch. Nhiều giải pháp antivirus cơ bản và công cụ phân tích tĩnh chỉ kiểm tra luồng mã nguồn, để p-code không bị phát hiện cho đến khi được thực thi bởi phiên bản Office phù hợp.
  3. Sử dụng tài nguyên sẵn có (LotL): Các macro độc hại hiện đại hiếm khi thả một tệp .exe trực tiếp lên đĩa, điều này sẽ ngay lập tức cảnh báo các tác nhân Phát hiện và Phản hồi Điểm cuối (EDR). Thay vào đó, chúng tương tác với các công cụ hệ thống tích hợp:

    • Khởi tạo WScript.Shell để thực thi các đối số dòng lệnh.
    • Gọi PowerShell.exe với chính sách thực thi bỏ qua (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • Gọi các API Win32 gốc thông qua Declare PtrSafe Function CreateProcess hoặc VirtualAlloc để tiêm shellcode trực tiếp vào bộ nhớ hệ thống.

4. Các vector Đe dọa Bảng tính khác (Ngoài VBA chuẩn)

Bảo vệ môi trường khỏi các tệp .xlsm chỉ là một nửa cuộc chiến. Kẻ tấn công cũng sử dụng các cơ chế hoạt động độc lập với VBA truyền thống.

Trao đổi Dữ liệu Động (DDE) và CSV Tiêm

Excel có một giao thức kế thừa gọi là Dynamic Data Exchange (DDE), được thiết kế để cho phép chia sẻ dữ liệu giữa các ứng dụng đang chạy (ví dụ, truyền dữ liệu ticker cổ phiếu trực tiếp từ một chương trình riêng vào một ô Excel).

  • Cách hoạt động của Injection công thức: Khi một ô bảng tính bắt đầu bằng các ký tự như =, @, + hoặc -, Excel sẽ diễn giải nội dung thành một công thức. Nếu kẻ tấn công kiểm soát dữ liệu đầu vào được xuất ra bảng tính (chẳng hạn trường “Comments” chưa được làm sạch trong một ứng dụng web xuất ra CSV hoặc XLSX), họ có thể tiêm:
    =cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0
    
  • Khi mở, Excel sẽ đánh giá công thức, cảnh báo người dùng bằng một thông báo về việc khởi động ứng dụng bên ngoài và, nếu người dùng chấp nhận, sẽ chạy shell hệ thống.

Macro Di sản Excel 4.0 (XLM)

Trước khi VBA được giới thiệu vào năm 1993, Excel sử dụng một hệ thống macro dựa trên công thức được gọi là Excel 4.0 (XLM) macros. Các macro này nằm trong các trang macro riêng biệt thay vì một dự án VBA riêng.

Vì các macro XLM được viết dưới dạng công thức ô (chẳng hạn =EXEC("calc.exe")), chúng có thể vượt qua nhiều công cụ kiểm tra tĩnh VBA tiêu chuẩn. Kẻ tấn công ưa chuộng macro XLM trong cuối thập niên 2010 và đầu thập niên 2020 để tránh bị phát hiện tự động trước khi Microsoft vô hiệu hoá chúng theo mặc định trong các bản dựng doanh nghiệp hiện đại.

Kết nối bên ngoài độc hại và các đối tượng OLE

Một tệp .xlsx thông thường vẫn có thể gây rủi ro thông qua các tài nguyên bên ngoài:

  • Embedded OLE Packages: Kẻ tấn công có thể chèn một tệp thực thi được ngụy trang dưới dạng biểu tượng PDF nhúng trực tiếp vào bảng tính.
  • External Workbook Links & Web Queries: Một tệp XLSX có thể chứa các tham chiếu bên ngoài mà tự động khởi chạy các yêu cầu HTTP GET tới các máy chủ command-and-control (C2) do kẻ tấn công kiểm soát khi mở tệp, chủ yếu được dùng cho việc trinh sát hoặc các cuộc tấn công thu thập hash netNTLM.

5. Củng cố doanh nghiệp & Chiến lược phòng thủ sâu

Việc phòng thủ trước các mối đe dọa từ Excel đòi hỏi một phương pháp đa lớp, bao gồm kiểm tra mạng, cấu hình hệ thống, kiểm soát truy cập và quy trình vận hành.

+─────────────────────────────────────────────────────────+
|                  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. Thực thi Đánh dấu Web (MotW) để chặn macro

Vào năm 2022, Microsoft đã cập nhật hành vi mặc định của các ứng dụng Office: macro trong các tệp có nguồn gốc từ internet bị chặn theo mặc định.

Khi người dùng tải xuống một tệp qua trình duyệt hoặc khách hàng bên ngoài, Windows gắn thẻ tệp bằng một luồng dữ liệu thay thế (ADS) có tên Zone.Identifier (Vùng 3 chỉ Internet). Đối với các tệp có dấu này, Excel vô hiệu hoá hoàn toàn macro và hiển thị một biểu ngữ bảo mật màu đỏ: > “RỦI RO BẢO MẬT: Microsoft đã chặn macro chạy vì nguồn của tệp này không đáng tin cậy.”

Hành động quản trị: Đảm bảo hành vi này được thực thi qua Chính sách Nhóm và không thể bị người dùng cuối ghi đè:

  • Đường dẫn GPO: User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center
  • Cài đặt: Bật “Chặn macro chạy trong các tệp Office từ Internet”.

2. Cấu hình các quy tắc Giảm bề mặt tấn công (ASR)

Các tổ chức sử dụng Microsoft Defender for Endpoint nên kích hoạt các quy tắc giảm bề mặt tấn công cốt lõi được thiết kế riêng cho các ứng dụng Office:

  • Chặn các ứng dụng Office tạo tiến trình con (GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)
    • Ngăn Excel khởi chạy PowerShell, CMD hoặc các công cụ kịch bản.
  • Chặn các ứng dụng Office khỏi việc tiêm mã vào các tiến trình khác (GUID: 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)
  • Chặn các cuộc gọi Win32 API từ macro Office (GUID: 92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)

3. Tận dụng Giao diện Quét Phần mềm chống mã độc (AMSI)

Các phiên bản hiện đại của Microsoft 365 tích hợp việc thực thi VBA trực tiếp với AMSI. Ngay cả khi kẻ tấn công áp dụng việc làm rối chuỗi phức tạp hoặc VBA stomping, công cụ chạy VBA sẽ truyền các lệnh đã được tái tạo, chưa mã hoá tới engine antivirus/EDR đã cài đặt của bạn ngay trước giây thực thi. Đảm bảo bảo vệ điểm cuối của bạn luôn giám sát các sự kiện thời gian chạy AMSI.

4. Chuyển sang Vị trí đáng tin cậy và Chứng chỉ số

Đối với các tổ chức phụ thuộc vào bảng tính tự động cho các hoạt động hàng ngày:

  • Loại bỏ các tệp XLSM rải rác trong thư mục Tải xuống hoặc Desktop của người dùng.
  • Sử dụng Vị trí Được Tin Cậy: Hạn chế việc thực thi macro chỉ trên các chia sẻ mạng chỉ đọc được quản trị viên IT quản lý.
  • Chữ ký Mã: Yêu cầu tất cả macro được phát triển nội bộ phải được ký mật mã bằng chứng chỉ do Cơ sở Hạ tầng Khóa Công cộng (PKI) doanh nghiệp cấp. Cấu hình Excel để chỉ thực thi các macro đã ký số và tự động chặn các macro chưa ký.

6. Góc nhìn của nhà phát triển: Xây dựng tự động hóa an toàn

Nếu bạn đang xây dựng phần mềm phân tích, tạo hoặc tiêu thụ các tệp Excel (ví dụ, các pipeline Python sử dụng pandas/openpyxl, microservice Node.js, hoặc ứng dụng C#/.NET), hãy áp dụng các biện pháp bảo vệ phát triển sau:

  1. Từ chối các định dạng tệp không mong đợi tại ranh giới tải lên: Nếu ứng dụng của bạn yêu cầu các báo cáo tài chính, hãy kiểm tra chặt chẽ rằng các tệp đến tuân theo định dạng .xlsx. Kiểm tra các byte ma thuật nội bộ (đầu mục zip tiêu chuẩn 50 4B 03 04) và xác nhận không có mục vbaProject.bin trong chỉ mục lưu trữ trước khi lưu vào bucket đám mây hoặc cơ sở dữ liệu.

  2. Làm sạch dữ liệu để ngăn chặn tấn công công thức: Khi xuất dữ liệu do người dùng tạo vào các tệp CSV hoặc XLSX, hãy thêm một dấu nháy đơn (') hoặc một khoảng trắng vào bất kỳ ô nào bắt đầu bằng các ký tự nguy hiểm (=, +, -, @, \t, \r):

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. Di chuyển từ VBA sang Office Scripts hoặc Web Add-ins: Đối với tự động hoá doanh nghiệp hiện đại, hãy loại bỏ hoàn toàn VBA lạc hậu:

    • Office Scripts: Được viết bằng TypeScript, Office Scripts chạy trong môi trường đám mây được cô lập và hoạt động mượt mà trên cả phiên bản web và desktop mà không tiết lộ các lời gọi hệ thống OS gốc.
    • Office Web Add-ins: Được xây dựng bằng HTML, CSS tiêu chuẩn và JavaScript hiện đại, các web add-in giao tiếp qua các API JavaScript được quản lý và được cô lập khỏi hệ điều hành địa phương.

7. Danh sách kiểm tra tóm tắt cho bảo mật bảng tính

  • Áp dụng .xlsx làm mặc định: Yêu cầu tất cả các quy trình làm việc tiêu chuẩn của người dùng lưu dưới dạng .xlsx không chứa macro.
  • Chặn macro có nguồn gốc từ Internet: Xác nhận rằng việc thực thi chính sách MotW đã được triển khai trên toàn tổ chức của bạn qua GPO hoặc Intune.
  • Kích hoạt quy tắc ASR: Ngăn chặn các sản phẩm Office khởi tạo trình thông dịch lệnh hoặc tiến trình con.
  • Ngừng sử dụng Excel 4.0 (XLM): Đảm bảo các động cơ macro XLM cũ được vô hiệu hoá vĩnh viễn trên tất cả các máy trạm.
  • Làm sạch xuất khẩu ứng dụng: Bảo vệ các quy trình tạo CSV và Excel khỏi việc tiêm mã CSV/công thức.
  • Chuyển sang Office Scripts: Chuyển đổi các macro quản trị lạc hậu sang Office Scripts dựa trên TypeScript và các API được quản lý.

Bằng cách xem bảng tính không chỉ là các tệp tài liệu, mà còn là các container phần mềm có cấu trúc mang khả năng thực thi, các đội bảo mật và nhà phát triển có thể hiệu quả vô hiệu hoá một trong những vector tấn công lâu đời nhất trong môi trường máy tính doanh nghiệp.

Câu hỏi thường gặp (FAQ)

Câu 1: Tệp có phần mở rộng .xlsx có thể chạy macro độc hại không?

Không, tiêu chuẩn OpenXML nghiêm ngặt cấm mã macro trong các tệp .xlsx, và Excel sẽ từ chối hoặc loại bỏ bất kỳ dự án VBA nào được chèn vào một container .xlsx hợp lệ.

Câu 2: Tôi nên làm gì nếu một tệp Excel yêu cầu tôi “Bật Chỉnh sửa” hoặc “Bật Nội dung”?

Chỉ cấp quyền nếu bạn biết người gửi và đang chờ đợi tệp; lời nhắc này là điểm kiểm tra chính cho phép macro không đáng tin cậy thực thi mã.

Câu 3: Microsoft Excel xác định một tệp đến từ internet như thế nào?

Windows gắn một luồng ẩn “Mark of the Web” (Zone.Identifier) vào các tệp đã tải xuống, tín hiệu này khiến Excel mở chúng trong Chế độ Xem Bảo vệ và chặn macro theo mặc định.

Câu 4: Các tệp CSV có an toàn hơn các tệp XLSX và XLSM không?

Các tệp CSV không thể chứa macro VBA gốc, nhưng chúng vẫn dễ bị tấn công tiêm công thức nếu chứa các lệnh độc hại được Excel thực thi khi mở.

Câu 5: Các Office Scripts hiện đại khác biệt như thế nào so với macro VBA truyền thống?

Office Scripts chạy trên TypeScript trong môi trường thực thi được cô lập, ngăn chúng truy cập hệ thống tệp cục bộ, dòng lệnh hoặc API hệ điều hành của bạn.

Xem Thêm