อัปเดตล่าสุด: 28 Sept, 2026

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

อธิบายความปลอดภัยของไฟล์ Excel: XLSX, XLSM, และความเสี่ยงของแมโคร

หลายทศวรรษที่ผ่านมา Microsoft Excel ได้เป็นเครื่องมือสากลสำหรับการดำเนินธุรกิจ มันช่วยจัดสมดุลงบประมาณของบริษัท, แสดงภาพชุดข้อมูลที่ซับซ้อน, ติดตามสินค้าคงคลัง, และขับเคลื่อนกระบวนการวิเคราะห์ข้อมูลในอุตสาหกรรมเกือบทุกประเภท.

อย่างไรก็ตาม ความยืดหยุ่นในการคำนวณเดียวกันทำให้สเปรดชีตเป็นที่ชื่นชอบอย่างต่อเนื่องของผู้โจมตีทางไซเบอร์ ผู้โจมตีได้ใช้สเปรดชีตเป็นอาวุธตั้งแต่ช่วงต้นของไวรัสมาโครในปลายทศวรรษ 1990 ในขณะที่ Microsoft และผู้ดูแลระบบได้แนะนำชั้นการป้องกันหลายชั้น—เช่น การแยกประเภทไฟล์และการบล็อกมาโครโดยค่าเริ่มต้น—การชักจูงทางสังคมและความเสี่ยงเชิงสถาปัตยกรรมที่ละเอียดอ่อนยังคงทำให้การโจมตีที่มุ่งเน้น Excel มีความเกี่ยวข้องต่อไป

เพื่อสร้างท่าทีด้านความปลอดภัยที่ทนทาน นักพัฒนา ผู้ดูแลระบบ และผู้ใช้ระดับสูงต้องมองลึกลงไปเหนืออินเทอร์เฟซของเวิร์กบุ๊ก การเข้าใจว่าโครงสร้าง 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

การเปลี่ยนแปลงโครงสร้างนี้ให้ประโยชน์ด้านความปลอดภัยทันที:

  1. DPI (Deep Packet Inspection) & Gateway Visibility: อุปกรณ์รักษาความปลอดภัย, พร็อกซี, และเอเจนต์ปลายทางสามารถแตกไฟล์เก็บข้อมูลได้ทันทีและวิเคราะห์โครงสร้าง XML แบบข้อความธรรมดาเพื่อระบุสตริงที่น่าสงสัย, URL ภายนอก, หรืออ็อบเจกต์ที่ฝังอยู่.
  2. Deterministic File Validation: หากไฟล์อ้างว่าเป็นเอกสาร OpenXML แต่ละเมิดข้อจำกัดของสกีม่า Excel จะปฏิเสธการเปิดไฟล์หรือทำงานในโหมดกู้คืนแบบแซนด์บ็อกซ์.
  3. Format Separation: Microsoft แยกสเปรดชีตคำนวณทั่วไปออกจากไฟล์ที่สามารถรันสคริปต์เชิงกระบวนการที่ฝังอยู่.

2. XLSX vs. XLSM: ขอบเขตสถาปัตยกรรม

ความแตกต่างหลักระหว่าง .xlsx และ .xlsm อยู่ที่ว่าโครงสร้างไฟล์อนุญาตให้รวมโครงการแมโครที่สามารถทำงานได้หรือไม่.

คุณลักษณะ / มิติ.xlsx (สเปรดชีต Excel OpenXML).xlsm (สเปรดชีตที่เปิดใช้งานแมโครใน Excel)
ประเภทเนื้อหา MIMEapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
คอนเทนเนอร์การจัดเก็บ VBAห้ามอย่างเคร่งครัด. ไม่สามารถจัดเก็บ vbaProject.binอนุญาต. มี xl/vbaProject.bin
ความเสี่ยงการดำเนินการแบบเนทีฟไม่มีนัยสำคัญต่อการทำงานของมาโคร; จำกัดเฉพาะการฉีดสูตร/DDEสูง; สามารถรันโค้ด VBA อัตโนมัติเมื่อมีการโต้ตอบกับเวิร์กบุ๊ก
สคีม่า OpenXML แบบเข้มงวดสอดคล้องกับคำนิยาม XML ที่เข้มงวดและไม่มีมาโครรวมคำนิยามสำหรับส่วนขยายการทำงานอัตโนมัติแบบเก่าและสมัยใหม่
ตัวบ่งชี้ภาพผู้ใช้ไอคอนสเปรดชีตสีเขียวมาตรฐานไอคอนสเปรดชีตที่มีเครื่องหมายอัศเจรีย์

กลไกการบังคับใช้: ทำไม XLSX ไม่สามารถรันมาโครได้

คำถามทั่วไปในหมู่ผู้ดูแลระดับต้นและนักพัฒนาคือ: ถ้าโจมตีเอาไฟล์ .xlsm ที่เป็นอันตรายเข้ามา, แทรกโค้ดที่ทำงานได้, แล้วเปลี่ยนชื่อส่วนขยายไฟล์เป็น .xlsx จะเกิดอะไรขึ้น?

คำตอบสั้น ๆ: ไฟล์จะไม่ทำงานแมโคร.

Excel ไม่ได้พึ่งพาเพียงส่วนขยายไฟล์เพื่อกำหนดกฎการทำงาน เมื่อเปิดไฟล์ที่ชื่อว่า .xlsx:

  1. Excel ตรวจสอบ payload แบบ zip และอ้างอิงไฟล์ [Content_Types].xml.
  2. ในไฟล์ .xlsx ที่แท้จริง ประเภทเนื้อหาที่กำหนดทั้งหมดจะเป็นตัวแทนขององค์ประกอบข้อมูลมาตรฐาน (เช่น worksheet, sharedStrings หรือ styles).
  3. หากผู้โจมตีทำการแทรกสตรีม VBA ที่คอมไพล์แล้ว (xl/vbaProject.bin) ลงในแพคเกจ .xlsx ด้วยตนเองและอัปเดตความสัมพันธ์, Excel จะพบความขัดแย้งของสคีมาที่ชัดเจน:
    • มันเห็นส่วนขยาย .xlsx ที่ผูกกับประเภทเนื้อหาที่บ่งบอกถึงความสามารถของแมโคร.
    • Excel แสดงข้อผิดพลาดความสมบูรณ์แบบร้ายแรง: “Excel ไม่สามารถเปิดไฟล์ ‘filename.xlsx’ ได้เนื่องจากรูปแบบไฟล์หรือส่วนขยายไฟล์ไม่ถูกต้อง. ตรวจสอบว่าไฟล์ไม่ได้เสียหาย…”
  4. หากผู้โจมตีปล่อยให้ประเภทภายในคงอยู่โดยไม่ได้ลงทะเบียนไบนารี 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 โดยตรง.

เมื่อมาโครที่ไม่ได้รับความเชื่อถือทำงาน มันจะทำงานด้วย สิทธิ์ที่เหมือนกับผู้ใช้ที่เข้าสู่ระบบอย่างตรงกัน มันไม่ได้ถูกขังอยู่ใน sandbox แบบเบราว์เซอร์สไตล์ 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.

เทคนิคการเข้าถึงมาโครทั่วไป

  1. จุดเชื่อมต่อการทำงานอัตโนมัติ: ผู้โจมตีวางจุดเข้าของพวกเขาไว้ในตัวจัดการเหตุการณ์ภายในเช่น Sub Auto_Open() หรือ Private Sub Workbook_Open() ทันทีที่ผู้ใช้ให้สิทธิ์การดำเนินการ รูทีนเหล่านี้จะทำงานโดยไม่ต้องคลิกใด ๆ ภายในสเปรดชีต

  2. การทำให้ซับซ้อนและการเขียนทับ:

    • การทำให้สตริงซับซ้อน: Payloads ซ่อน URL และการเรียกระบบโดยใช้แอเรย์อักขระ, การเข้ารหัส XOR, การถอดรหัส Base64, หรือการต่อสตริงตัวแปรสภาพแวดล้อม (เช่น Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: VBA มีอยู่ในสองรูปแบบภายใน vbaProject.bin: โค้ดต้นฉบับที่ตีความและ p-code ที่คอมไพล์ (pseudo-code ที่มุ่งเป้าไปที่เวอร์ชัน Office เฉพาะที่คอมไพล์มัน) ผู้โจมตีสามารถลบโค้ดต้นฉบับที่เป็นข้อความธรรมดาได้อย่างสมบูรณ์, เหลือเพียง p-code ที่คอมไพล์ไว้เท่านั้น. แอนตี้ไวรัสพื้นฐานหลายตัวและตัววิเคราะห์แบบสแตติกตรวจสอบเฉพาะสตรีมต้นฉบับ, ทำให้ p-code ไม่ถูกตรวจพบจนกว่าจะถูกเรียกใช้โดยเวอร์ชัน Office ที่ตรงกัน
  3. การใช้ทรัพยากรระบบ (LotL): แมโครอันตรายสมัยใหม่มักไม่ทิ้งไฟล์ .exe ลงดิสก์โดยตรง, ซึ่งจะทำให้ตัวตรวจจับ Endpoint Detection and Response (EDR) แจ้งเตือนทันที. แทนที่จะทำเช่นนั้น, พวกมันจะโต้ตอบกับเครื่องมือระบบที่มีอยู่ในตัว:

    • สร้างอินสแตนซ์ของ WScript.Shell เพื่อดำเนินการอาร์กิวเมนต์บรรทัดคำสั่ง.
    • การเรียกใช้ PowerShell.exe พร้อมนโยบายการทำงานที่ข้าม (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • การเรียกใช้ API ของ Win32 แบบดั้งเดิมผ่าน Declare PtrSafe Function CreateProcess หรือ VirtualAlloc เพื่อฉีด shellcode ลงในหน่วยความจำของระบบโดยตรง.

4. เวกเตอร์ภัยคุกคามสเปรดชีตอื่น ๆ (นอกเหนือจาก VBA มาตรฐาน)

การปกป้องสภาพแวดล้อมจากไฟล์ .xlsm เป็นเพียงครึ่งหนึ่งของการต่อสู้ ผู้โจมตียังใช้กลไกที่ทำงานแยกจาก VBA แบบดั้งเดิมอีกด้วย.

การแลกเปลี่ยนข้อมูลแบบไดนามิก (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) macros. แมโครเหล่านี้อยู่ในแผ่นแมโครเฉพาะแทนที่จะเป็นโครงการ VBA แยกต่างหาก.

เนื่องจากแมโคร XLM ถูกเขียนเป็นสูตรในเซลล์ (เช่น =EXEC("calc.exe")), พวกมันจึงข้ามการตรวจสอบแบบสแตติกของ VBA หลายตัว. ผู้โจมตีนิยมใช้แมโคร XLM ในช่วงปลายทศวรรษ 2010 และต้นทศวรรษ 2020 เพื่อหลบหลีกการตรวจจับอัตโนมัติก่อนที่ Microsoft จะปิดการใช้งานโดยค่าเริ่มต้นในรุ่นองค์กรสมัยใหม่.

การเชื่อมต่อภายนอกที่เป็นอันตรายและวัตถุ OLE

ไฟล์งาน .xlsx ปกติยังสามารถสร้างความเสี่ยงผ่านทรัพยากรภายนอกได้:

  • Embedded OLE Packages: ผู้โจมตีสามารถแทรกไฟล์ปฏิบัติการที่ปลอมเป็นไอคอน PDF ฝังไว้โดยตรงในแผ่นงาน.
  • External Workbook Links & Web Queries: ไฟล์ XLSX สามารถมีการอ้างอิงภายนอกที่ทำการส่งคำขอ HTTP GET ไปยังเซิร์ฟเวอร์ command-and-control (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. บังคับใช้ Mark of the Web (MotW) เพื่อบล็อกแมโคร

ในปี 2022, Microsoft ได้อัปเดตพฤติกรรมเริ่มต้นของแอปพลิเคชัน Office: แมโครในไฟล์ที่มาจากอินเทอร์เน็ตจะ ถูกบล็อกโดยค่าเริ่มต้น.

เมื่อผู้ใช้ดาวน์โหลดไฟล์ผ่านเบราว์เซอร์หรือไคลเอนต์ภายนอก, Windows จะใส่แท็กให้ไฟล์ด้วยสตรีมข้อมูลสำรอง (ADS) ชื่อ Zone.Identifier (โซน 3 หมายถึงอินเทอร์เน็ต). สำหรับไฟล์ที่มีเครื่องหมายนี้, Excel จะปิดการทำงานของแมโครทั้งหมดและแสดงแบนเนอร์ความปลอดภัยสีแดง: > “ความเสี่ยงด้านความปลอดภัย: Microsoft ได้บล็อกแมโครไม่ให้ทำงานเนื่องจากแหล่งที่มาของไฟล์นี้ไม่เชื่อถือได้.”

การดำเนินการของผู้ดูแลระบบ: ตรวจสอบให้แน่ใจว่าพฤติกรรมนี้ถูกบังคับใช้ผ่าน Group Policy และไม่สามารถถูกผู้ใช้ปลายทางแก้ไขได้:

  • เส้นทาง 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. ใช้ประโยชน์จาก Antimalware Scan Interface (AMSI)

เวอร์ชันล่าสุดของ Microsoft 365 ผสานการทำงานของ VBA เข้ากับ AMSI โดยตรง แม้ว่าผู้โจมตีจะใช้การทำให้สตริงซับซ้อนหรือการสตอมป์ VBA, เอนจินรันไทม์ของ VBA จะส่งคำสั่งที่ถูกสร้างใหม่และไม่ได้เข้ารหัสไปยังเครื่องมือป้องกันไวรัส/EDR ที่ติดตั้งไว้ของคุณในช่วงมิลลิวินาทีที่แน่นอนก่อนการดำเนินการ ตรวจสอบให้แน่ใจว่าการป้องกันปลายทางของคุณเฝ้าติดตามเหตุการณ์รันไทม์ของ AMSI อย่างต่อเนื่อง

4. ย้ายไปยังตำแหน่งที่เชื่อถือได้และใบรับรองดิจิทัล

สำหรับองค์กรที่พึ่งพาแผ่นงานอัตโนมัติในงานประจำวัน:

  • กำจัดไฟล์ XLSM ที่หลุดรอบในโฟลเดอร์ดาวน์โหลดหรือเดสก์ท็อปของผู้ใช้.
  • ใช้ตำแหน่งที่เชื่อถือได้: จำกัดการทำงานของมาโครให้เฉพาะแชร์เครือข่ายแบบอ่านอย่างเดียวที่จัดการโดยผู้ดูแลระบบ IT.
  • การลงนามโค้ด: กำหนดให้มาโครทั้งหมดที่พัฒนาภายในต้องถูกลงนามด้วยการเข้ารหัสโดยใช้ใบรับรองที่ออกโดยโครงสร้างพื้นฐานคีย์สาธารณะ (PKI) ขององค์กร ตั้งค่า Excel ให้ทำงานกับมาโครที่ลงนามดิจิทัล เท่านั้น และบล็อกมาโครที่ไม่ได้ลงนามโดยเงียบ

6. มุมมองของนักพัฒนา: การสร้างระบบอัตโนมัติที่ปลอดภัย

หากคุณกำลังพัฒนาซอฟต์แวร์ที่ทำการแยกวิเคราะห์, สร้าง, หรือใช้ไฟล์ Excel (เช่น pipeline ของ Python ที่ใช้ pandas/openpyxl, microservice ของ Node.js, หรือแอปพลิเคชัน C#/.NET) ให้ใช้มาตรการป้องกันการพัฒนาต่อไปนี้:

  1. ปฏิเสธรูปแบบไฟล์ที่ไม่คาดคิดที่จุดอัปโหลด: หากแอปพลิเคชันของคุณคาดหวังรายงานการเงิน ให้ตรวจสอบอย่างเคร่งครัดว่าไฟล์ที่เข้ามาตรงตามรูปแบบ .xlsx. ตรวจสอบไบต์พิเศษภายใน (ส่วนหัว zip มาตรฐาน 50 4B 03 04) และยืนยันว่าไม่มีรายการ vbaProject.bin อยู่ในดัชนีของไฟล์อาร์ไคฟ์ก่อนบันทึกลงใน bucket ของคลาวด์หรือฐานข้อมูล

  2. ทำความสะอาดข้อมูลเพื่อป้องกันการฉีดสูตร: เมื่อส่งออกข้อมูลที่ผู้ใช้สร้างเป็นไฟล์ CSV หรือ XLSX ให้ใส่เครื่องหมายอัญประกาศเดี่ยว (') หรือช่องว่างไว้หน้าตารางใด ๆ ที่เริ่มต้นด้วยอักขระอันตราย (=, +, -, @, \t, \r):

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. ย้ายจาก VBA ไปยัง Office Scripts หรือ Web Add-ins: สำหรับการอัตโนมัติขององค์กรสมัยใหม่ ให้ยกเลิกการใช้ VBA เก่าอย่างสมบูรณ์:

    • Office Scripts: เขียนด้วย TypeScript, Office Scripts ทำงานภายในสภาพแวดล้อมคลาวด์แบบ sandboxed และทำงานได้อย่างราบรื่นบนเวอร์ชันเว็บและเดสก์ท็อปโดยไม่เปิดเผยการเรียกระบบปฏิบัติการพื้นฐาน
    • Office Web Add-ins: สร้างโดยใช้ HTML, CSS มาตรฐานและ JavaScript สมัยใหม่, web add-ins สื่อสารผ่าน JavaScript APIs ที่จัดการและแยกจากระบบปฏิบัติการท้องถิ่น.

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 ขอให้ฉัน “Enable Editing” หรือ “Enable Content”?

ให้สิทธิ์เฉพาะเมื่อคุณรู้จักผู้ส่งและคาดหวังไฟล์นั้น; คำเตือนนี้เป็นจุดตรวจสอบหลักที่ทำให้แมโครที่ไม่ได้รับความเชื่อถือสามารถรันโค้ดได้

Q3: Microsoft Excel กำหนดว่าไฟล์มาจากอินเทอร์เน็ตอย่างไร?

Windows จะแนบสตรีม “Mark of the Web” (Zone.Identifier) ที่ซ่อนอยู่ไปกับไฟล์ที่ดาวน์โหลด, ซึ่งบ่งบอกให้ Excel เปิดไฟล์เหล่านั้นในมุมมอง Protected View และบล็อกแมโครโดยค่าเริ่มต้น

Q4: ไฟล์ CSV ปลอดภัยกว่าไฟล์ XLSX และ XLSM หรือไม่?

ไฟล์ CSV ไม่สามารถมีแมโคร VBA แบบเนทีฟได้, แต่ยังคงเสี่ยงต่อการโจมตีแบบสูตรฉีดถ้าภายในมีคำสั่งอันเป็นอันตรายที่ Excel รันเมื่อเปิดไฟล์

Q5: Office Scripts สมัยใหม่แตกต่างจากมาโคร VBA แบบดั้งเดิมอย่างไร?

Office Scripts ทำงานบน TypeScript ภายในสภาพแวดล้อมการรันแบบ sandbox, ป้องกันไม่ให้เข้าถึงระบบไฟล์ในเครื่องของคุณ, คำสั่ง command line, หรือ API ของระบบปฏิบัติการ

ดูเพิ่มเติม