駭客透過無檔案式威脅,利用系統上原有的應用程式來攻擊系統。本文探討一些值得關注的攻擊事件和技巧,以及可偵測無檔案式威脅並防範相關攻擊的最佳實務原則。
在傳統的資安威脅中,駭客大多經由電子郵件、檔案或網站在受害系統上安裝惡意程式。但無檔案式威脅有別傳統惡意程式,不會透過惡意軟體或執行檔來感染系統,而是利用系統內建的工具和應用程式來發動攻擊,也就是利用系統工具來攻擊系統。
無檔案式威脅並無可辨識的特徵碼來觸發傳統資安軟體的偵測機制,所以才能越過傳統的資安防護,並且濫用了原本正當用途的工具。
何謂無檔案式攻擊?
無檔案式攻擊是一種利用系統內建應用程式來攻擊系統的惡意手法,有別於在系統上偷偷安裝惡意軟體的攻擊。無檔案式攻擊,基本上是濫用了系統原本受到信賴的應用程式、軟體或通訊協定,所以不需仰賴惡意程式來執行攻擊。
無檔案式威脅的典型感染過程:利用文件漏洞來發動,進而安裝惡意檔案,然後長期潛伏。
< 相關文章 >
- Hunting Threats on Twitter: How Social Media can be Used to Gather Actionable Threat Intelligence
- Inside the Smart Home: IoT Device Threats and Attack Scenarios
- Increasing Workload, Lack of Visibility, and Threat Hunting Challenges Cited as Top Concerns in SOCs
- Risks Under the Radar: Understanding Fileless Threats
- Three Ransomware Campaigns Cause Problems in Different Public Sectors
無檔案式攻擊的觸發方式之一,就是透過使用者操作,例如:使用者點選了一個暗藏惡意程式碼的附件檔案,該程式碼再呼叫系統上現有的應用程式。無檔案式攻擊主要潛藏在記憶體 (RAM) 內部,通常會利用 Windows 內建工具如 PowerShell 和 Windows Management Instrumentation (WMI) 來執行惡意指令。這些內建應用程式原本在端點裝置上就會執行一些系統管理工作,也因此成了駭客發動攻擊的最佳幫手。此外,無檔案式威脅也可能在攻擊當中搭配其他攻擊手法,如勒索病毒。
既然無檔案式威脅不需仰賴已下載的檔案,因此偵測及防範上就變得有些困難。不過,由於記憶體內的資料在關機之後就會消失,因此,重新開機之後感染通常就會消失。但這並不代表駭客無法利用系統弱點或其他技巧來常駐於系統。比方說,駭客可產生一段腳本並設定系統每次開機之後都執行這段腳本。
無檔案式威脅如何進入系統以及如何加以偵測?
惡意程式攻擊通常需要將惡意檔案寫入磁碟,或者需要使用者配合操作才能達成目的。但這樣會在系統留下某種形式的痕跡,成為鑑識分析的線索。反觀無檔案式威脅是常駐於記憶體內,執行後經常不留痕跡,也因為所有惡意內容都放在記憶體,不需寫入磁碟,使得記憶體式攻擊比檔案式威脅更難偵測。所以,無檔案式威脅需要透過追蹤一些非檔案式指標來偵測,例如特定的事件或行為。
無檔案式威脅成長 396%( 2018 年 1 月至 2019 年 6 月)
無檔案式攻擊因手法隱密、細膩而不斷壯大,從逐月比較的感染數字即可得知這類威脅多麼受到網路犯罪集團青睞。2018 年至 2019 上半年,無檔案式威脅偵測數量大幅攀升。這股突如其來的竄升趨勢,可歸因於歹徒不斷利用各種無檔案式技巧來躲避傳統的黑名單機制與解決方案。
以下是無檔案式威脅的運作方式以及一些值得注意的攻擊技巧:
1.經由文件或記憶體漏洞發動攻擊
SOREBRECT 勒索病毒如何利用執行程序掏空 (process hollowing) 技巧搭配 PsExec 工具
《延伸閱讀》無檔案式威脅和勒索病毒早已不是新聞,但若這兩者的特性結合起來,將變得相當危險。
無檔案式攻擊可經由傳統的惡意巨集 (如 JavaScript 或 VBScript) 來啟動,這些巨集會暗藏在壓縮檔或其他看似正常的檔案以及常見文件內,如:Microsoft Word、Excel 及 PDF 文件。當透過這些應用程式來執行惡意程式碼時,就能擁有與這些應用程式相同的執行權限。惡意巨集可使用腳本來執行一些正當用途的工具程式 (如 PowerShell),進而啟動、下載或執行惡意程式碼、腳本與檔案。此外,這些腳本還可經過加密編碼,因此企業很難偵測其中用來執行程式碼的關鍵字。不但如此,無檔案式攻擊也可藉由垃圾郵件或網路釣魚訊息入侵系統,誘騙收件人點選某個惡意連結以啟動感染程序。
無檔案式威脅有各種不同的方法從記憶體內執行。最近一起案例是從記憶體內發動 EternalBlue 漏洞攻擊,也就是利用 Server Message Block 1 (SMB 1) 通訊協定漏洞。還有一種手法是利用 DLL注入技巧來駭入正常執行程序,促使執行程序載入駭客的動態連結程式庫 (DLL),如此就不必將 DLL 寫入磁碟。另外,也可將執行程序內的一段程式碼換成惡意程式碼,就是所謂的「執行程序掏空」(process hallowing) 技巧。這些技巧都可直接在記憶體內執行程式碼,甚至在軟體關閉之後還繼續在背景執行。
2.藉由系統內建工具或腳本安裝惡意程式
駭客也可利用系統管理工具來實現無檔案式感染。駭客不會使用一般的執行檔,而是使用目標系統上現有的工具來執行攻擊。這些工具有的是指令列工具,例如:用來下載檔案及監控下載進度的 BITSAdmin (Background Intelligence Transfer Service) 程式、用於憑證服務與管理的 CertUtil,以及用於安裝、修改、執行 Windows 安裝套件的 msiexec。
< 相關文章 >
- Hunting Threats on Twitter: How Social Media can be Used to Gather Actionable Threat Intelligence
- Inside the Smart Home: IoT Device Threats and Attack Scenarios
- Hackers Exploit ERP App Flaw for Fraudulent Accounts in 62 Colleges, Universities
- Cybercrime and Exploits: Attacks on Unpatched Systems
- New Phishing Campaign Uses OneNote Audio to Lure Users to Fake Microsoft Login Page
根據我們的資料顯示,腳本攻擊是最常見的無檔案式威脅 (2019 上半年占 38%)。許多腳本攻擊都是使用解譯式腳本語言 (如 PowerShell、JavaScript、VBScript、WScript、mshta 等等),因為它們可直接在指令列上執行,而且能執行任何程式碼。例如,PowerShell 可在系統內執行暗藏的指令,這些指令可根據攻擊的時間長短做對應的安排。至今,已有許多類型的惡意程式是採用記憶體內執行的方式來達成無檔案式感染,藉此避開端點防護產品的偵測。
尤其,許多無檔案式威脅皆使用 PowerShell,因為 Windows 作業系統大多內建這項工具。此外,在 Microsoft 的架構下還可呼叫應用程式開發介面 (API) 來執行重要的系統與應用程式功能。它之所以獲得駭客青睞還有一項原因是不須將執行檔儲存在磁碟上,因而能以無檔案方式執行惡意內容和指令。對 IT 系統管理員來說,偵測 PowerShell 濫用的最佳方法就是透過行為偵測,也就是偵測是否有人透過加密指令列來執行 PowerShell 程式。
3.利用工作排程器、系統登錄或 WMI 來常駐系統
通常,駭客利用無檔案式威脅入侵,使用者只須重新開機就能阻止,因為惡意程式碼基本上都在記憶體內。然而,歹徒卻已經開發出一些技巧來讓無檔案式攻擊能常駐系統。駭客只要稍微修改系統登錄,就能在系統重新開機時再次執行惡意腳本。尤其值得注意的是,透過系統本身的指令來執行攻擊,有時候甚至可以避開一些監控機制。更何況,歹徒還可能將惡意程式碼儲存在 Windows 系統登錄的自動執行項目當中,如此一來,即使重新開機,攻擊還是能夠繼續維持下去。KOVTER 勒索病毒的無檔案式變種就是一個例子,資安人員發現它會產生一些系統登入機碼,這些機碼會在被感染的系統重新開機或執行批次檔時,將惡意程式碼載入記憶體內。
如何防範無檔案式威脅?
《延伸閱讀》相較於傳統惡意程式,無檔案式威脅較不易察覺,而且會利用各種手法來常駐於系統。無檔案惡意程式的幾種運作方式以及如何加以防範。
Windows 工作排程器可在預定的時間執行腳本程式,所以很可能被惡意程是用來常駐於系統。換句話說,無檔案式威脅可藉由排程工作來執行。駭客甚至可設定一些重複性工作,再配合一些系統登錄機碼,就能自動不斷重複感染系統。
網路系統管理員經常利用 PowerShell 或 Windows Management Instrumentation (WMI) 這類解譯式腳本工具來將系統管理自動化,而這些工具卻也被歹徒用來執行惡意腳本,不需將惡意程式寫入磁碟就能感染端點裝置。同樣的手法也能用來執行任意程式碼、在網路內橫向擴散,或者常駐於系統內。歹徒可利用 WMI 存放庫 (Repository) 來儲存惡意腳本,再藉由 WMI 的功能來呼叫這些腳本。值得注意的是,虛擬加密貨幣挖礦惡意程式也曾利用 WMI 來長期躲藏於系統內。