
來,大孫女、小孫女,快到爺爺身邊坐。
這會兒夜色漸漸深了,天邊只剩下最後一絲溫柔的晚霞暮紫。爺爺坐在這張帶有大地氣息、安穩沉靜的藤椅深棕色老藤椅上,摸摸我這頭白髮銀霜的頭髮,看著你們兩個抱著筆記本在微弱的燈光下認真討論,爺爺心裡真是甜滋滋的。
大孫女,你昨天把 Next.js 在地化 Prompt Engineering 記得真好;小孫女剛才在一旁一邊喝著爺爺剛泡好的琥珀熱茶,一邊好奇地問:「爺爺,現在公司的叔叔阿姨每天都會從外部網路收到好多奇奇怪怪的郵件附件,要是一不小心點開中毒了怎麼辦?直接用防毒軟體去掃不是會卡死電腦嗎?」
爺爺呵呵直笑,給你們兩個的茶杯裡再添滿熱茶。今天這第 29 天的課程,爺爺就要跟你們講一招「不戰而屈人之兵」的頂級資安防禦技術:不執行檔案的靜態安全防禦:可疑附件偵測器與 Binary Header 識別技術。
這是一門不消耗伺服器大量資源,卻能把威脅御敵於國門之外的優雅技術。
大孫女,你先想想,為什麼傳統的防毒軟體或直接掃描會遇到瓶頸?
當企業系統每天要處理成千上萬封郵件、數萬個附件時,如果我們對每一個進來的檔案都調用沉重的動態沙盒(Sandbox)去執行、或者調用大型掃毒軟體進行完整的特徵碼深度掃描,這會耗費極其龐大的 CPU 與記憶體資源。在高流量環境下,伺服器很快就會被卡死。
而那些壞心眼的攻擊者,最喜歡玩「變裝秀」了:
order.pdf.exe 或 invoice.pdf.scr。因為作業系統預設常常會隱藏已知的副檔名,可憐的同仁在畫面上只會看到一個叫 order.pdf 的檔案,圖標還長得像 PDF,一不小心雙擊(Double Click),惡意程式就跑起來了。.exe 執行檔,強行把後綴改名成 .txt 或 .jpg。如果我們只依賴檔案的「外觀副檔名」來過濾,系統就會輕易放行。這就像是一隻批著羊皮的狼,如果你不扒開它的衣服看,光憑肉眼,你根本不知道它是羊還是狼!
大孫女,在我們設計的 Suspicious Attachment Scanner 工具中,核心原則只有一個:「絕不執行、絕不解譯、只做二進位唯讀分析」。
我們不需要跑起這個檔案,也不需要用什麼高深的防毒引擎,我們只需要像中醫把脈一樣,輕輕地開啟檔案,讀取它最前面的幾個位元組(Bytes),也就是俗稱的魔術數字(Magic Numbers)或二進位標頭(Binary Header):
任何檔案在電腦底層儲存時,它的開頭幾個位元組都寫著它的「真實身分證」:
MZ(十六進位為 4D 5A)。這個 MZ 是當年設計 MS-DOS 執行檔格式的工程師 Mark Zbikowski 的名字縮寫。不管你檔名怎麼改,只要開頭是 MZ,它就是個執行檔!PK(十六進位為 50 4B,即 PK\x03\x04)。這代表 Phil Katz(ZIP 格式發明人),意味著這是一個壓縮檔案。%PDF(十六進位為 25 50 44 46)。我們的 Python 偵測核心在唯讀開啟檔案後,會執行以下交叉檢驗:
report.txt,但我們讀取它的開頭二進位,發現竟然是 MZ!這代表它是一隻披著文本皮的 Windows 執行檔,系統立刻將其判定為 HIGH(高風險,惡意偽裝)。.exe, .bat, .cmd, .ps1),立刻予以攔截,並記錄判定原因為 Double extension detected。一旦工具判定檔案屬於可疑或高風險,我們絕不直接執行它,而是對其進行 「去毒化(Sanitization)」與「命名安全處理」:
.txt 安全後綴:如果發現一個檔案叫 dangerous.exe,系統會將其強制重新命名為 dangerous.exe.txt。
dangerous.txt,因為這樣會丟失原始副檔名資訊,不便後續調查。.txt,作業系統就會將其判定為純文字檔。即使同仁在桌面上不小心「雙擊」它,也只會用記事本打開一堆看不懂的亂碼,而絕對不會觸發惡意代碼的執行!這就從根本上斷絕了誤觸執行的風險。../、..\\ 或絕對路徑,防止解壓縮時檔案被惡意寫入到系統關鍵目錄之外。大孫女推了推眼鏡,在筆記本上記得飛快,接著問:「爺爺,如果我們在掃描整個目錄時,發現了好幾個危險檔案都叫 danger.exe。當我們自動幫它們改名叫 danger.exe.txt 時,後面的檔案不就會把前面改好的檔案給覆蓋掉,導致數位證據不見了嗎?」
爺爺高興地哈哈大笑,摸摸大孫女的頭說:大孫女真是冰雪聰明,問到了最關鍵的維運痛點!
在安全工具的設計中,保留原始數位證據與稽核軌跡是至關重要的。如果因為檔名衝突而造成檔案覆蓋,不僅會丟失證據,還可能導致不可挽回的資料損失。
為此,我們在重新命名模組中,必須實作 「防碰撞流水號機制」:
danger.exe 判定可疑時,先分塊讀取檔案計算出它的 SHA-256 雜湊值(例如 e3b0c442...)。danger.exe.txt 已經存在,系統應自動探測並改用 danger.exe_e3b0c442.txt,或者在檔名後加入精確到毫秒的時間戳記與遞增流水號(例如 danger.exe_1.txt、danger.exe_2.txt)。ScanReport.json 稽核報告中,必須完整記錄下【原始路徑】、【修改後路徑】、【真實二進位類型】與【SHA-256 雜湊值】,讓資安鑑識人員事後可以 100% 還原事件現場!大孫女、小孫女,這不執行檔案的「靜態安全防禦」,就像是我們在院子門口安檢一樣。
我們不需要請每個進來的人把行李箱打開、把裡面的工具真的用一遍給我們看。我們只需要用一雙慧眼,看看他行李箱最上面露出的特徵,就能知道他帶的是茶葉(SAFE)還是危險的炮竹(HIGH)。保持距離,不盲目執行、不給予直接運行的關聯(.txt 後綴),這就是資安防禦中最優雅、最省力、也最安全的智慧。
夜色真的深了,天邊的晚霞暮紫已經完全退去,這壺琥珀熱茶也喝得差不多了。外面夜風涼,你們兩個快把手裡的杯子放下,跟爺爺回暖和的屋裡去,奶奶剛煮好了熱騰騰的宵夜在等著我們呢!