成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用PowerShell代碼注入漏洞繞過受限語言模式

安全 漏洞
受限語言模式是一種非常有效的機制,能阻止在PowerShell中執行任意未簽名的代碼。本文則利用Add-Type繞過了這種限制實現了對PowerShell代碼注入漏洞。

[[202751]]

一、 前言

受限語言模式是一種非常有效的機制,能阻止在PowerShell中執行任意未簽名的代碼。當Device Guard或者AppLocker處于強制模式時,它是最實際有效的強制安全措施,因為未被策略允許的任何腳本或者模塊都位于受限語言模式下,這嚴重限制了攻擊者執行未簽名的代碼。通過限制語言模式限制了Add-Type的調用。限制Add-Type明顯是考慮到了它能編譯并加載任意的C#代碼到你的運行空間中去。但策略允許的PowerShell代碼運行在“Full Language”模式下,允許執行Add-Type。這樣,微軟簽名的PowerShell的代碼就能調用Add-Type。不相信嗎?運行下面的命令你就會發現我是正確的。

二、漏洞利用

現在,想像一下如果下面的PowerShell模塊代碼(姑且稱為“VulnModule”)有微軟的簽名:

  1. ls C:\* -Recurse -Include '*.ps1', '*.psm1' | 
  2.  Select-String -Pattern 'Add-Type' | 
  3.  Sort Path -Unique | 
  4.  % { Get-AuthenticodeSignature -FilePath $_.Path } | 
  5.  ? { $_.SignerCertificate.Subject -match 'Microsoft' } 

那么有什么可以影響來自受限語言模式的Add-Type的輸入呢?

好了,讓我們一起思考下吧:

1. Add-Type作為類型定義傳遞給一個全局變量。因為它是全局的,它可以被任何人訪問,包括我們和攻擊者。

2. 問題是,簽名的代碼先于調用Add-Type就定義了全局變量,因此如果我們使用自定義的惡意的C#代碼,這將會被合法的代碼覆蓋。

3. 你知道能用Set-Variable cmdlet來設置變量只讀嗎?你知道我現在在想什么了吧?

三、武器化利用

好了,為了從受限語言模式注入代碼到Add-Type中,攻擊者需要定義他們的惡意代碼為一個只讀變量,拒絕簽名代碼設置全局變量“Source”。下面是PoC:

  1. $Global:Source = @' 
  2.     public class Test { 
  3.         public static string PrintString(string inputString) { 
  4.             return inputString; 
  5.         } 
  6.     }'@ 
  7. Add-Type -TypeDefinition $Global:Source 

簡要說明下Add-Type注入缺陷。受限語言模式的一個限制是你不能調用非白名單類的.NET方法,但有兩個例外:屬性(getter方法)和ToString方法。在上面的PoC中,我選擇了實現一個靜態的ToString方法,因為ToString允許傳遞參數(getter不行)。我的類也是靜態的,因為.NET類的白名單只在New-Object實例化對象時適用。

那么上面的漏洞代碼是否聽起來不切實際呢?你可以這么認為,但是Microsoft.PowerShell.ODataUtils 模塊中的Microsoft.PowerShell.ODataUtils也有這個漏洞。微軟在 CVE-2017-0215, CVE-2017-0216, CVE-2017-0219中修復了它。說實話,我不太記得了。Matt Nelson 和我都報告了這些注入bug。

四、阻止措施

最簡單的阻止這種注入攻擊的方式是,直接在Add-Type使用單引號的here-string給TypeDefinition。單引號的字符串不會擴展任何內嵌的變量或者表達式。當然,這個場景假設了你是編譯靜態代碼。如果你動態生成代碼給Add-Type,要特別注意攻擊者可能影響你的輸入。為了理解影響PowerShell中代碼執行的方法,可以參見我在PSConf.EU上的演講“Defensive Coding Strategies for a High-Security Environment”。

五、緩解措施

盡管微軟在推動解決這個漏洞,我們有什么可以做的呢?

有個關于UMCI繞過二進制的有效的黑名單規則是文件名規則,其能基于PE文件中版本信息資源中的原始文件名來阻止程序執行。PowerShell很明顯不是個PE文件,它是文本文件,因此文件名規則不適用。但是,你可以通過使用哈希規則強制阻止有漏洞的腳本。Okay…要是相同腳本有不止一個漏洞呢?目前為止你只阻止一個哈希。你開始注意這個問題了嗎?為了有效的阻止之前所有有漏洞的版本的腳本,你必須知道所有有漏洞的版本的哈希。微軟意識到了問題并盡最大努力來掃描所有之前發布的有漏洞腳本,且收集哈希將他們整合到了黑名單中。通過他們的哈希阻止所有版本的有漏洞的腳本有一定挑戰性,但能一定程度上阻止攻擊。這就是為什么一直迫切需要只允許PowerShell 5的執行并要開啟scriptblock日志記錄。Lee Holmes 有篇關于如何有效的阻止老版本的PowerShell的博文。

另一種方式是系統中大部分腳本和二進制都是catalog和Authenticode簽名的。Catalog簽名不是意味著腳本有內嵌的Authenticode簽名,而是它的哈希存儲在微軟簽名的catalog文件中。因此當微軟更新時,老版本的哈希將會過期,將不再是被簽名的了?,F在,一個攻擊者也能將老的簽名的catalog文件插入到catalog存儲中。你不得不提權執行操作,關于這個,有很多方法可以繞過Device Guard UMCI。作為一個搜索有漏洞腳本的研究員,首先要尋找具有內嵌Authenticode簽名的有漏洞腳本(有字符串“SIG # Begin signature block”的提示)。Matt Nelson說這種bypass腳本存在。

六、報告

如果你找到了一種繞過,請將它上報給secure@microsoft.com ,你將得到一個CVE。PowerShell團隊積極解決注入缺陷,但是他們也主動解決用于影響代碼執行的一些方式。

七、總結

盡管受限語言模式能有效的阻止未簽名代碼的執行,PowerShell和它的簽名過的模塊或腳本還是有很多攻擊面。我鼓勵每個人都來尋找更多的注入缺陷,上報他們,通過官方的MSRC獲得榮譽,并使得PowerShell生態變得更加安全。同時希望,PowerShell的代碼作者要自我檢視。

現在我解釋了所有的內容,但是因為設計缺陷允許利用競爭條件,所以調用Add-Type還是有注入的漏洞。我希望能繼續闡述這些問題,且希望微軟將考慮解決這個基礎問題。

責任編輯:趙寧寧 來源: 安全客
相關推薦

2015-10-12 11:37:07

2021-05-26 14:36:21

漏洞蘋果惡意軟件

2017-05-08 08:32:51

2014-02-28 17:29:06

2015-09-28 09:56:14

2017-08-09 17:09:47

2009-10-12 11:23:38

2022-11-28 15:38:47

2017-11-06 05:52:52

2025-02-17 14:38:49

2025-04-11 15:31:34

2013-04-19 13:20:14

2021-06-30 10:21:29

瀏覽器

2021-08-14 20:21:21

漏洞勒索軟件攻擊

2021-02-26 13:18:38

Node.js漏洞代碼

2017-08-22 13:45:27

2021-07-07 10:00:00

漏洞微軟挽留過攻擊

2011-10-26 10:33:42

phpMyFAQ

2013-01-11 16:23:29

2013-03-27 14:15:25

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品自在在线观看 | 亚洲国产精品成人无久久精品 | 亚洲精品在线播放 | 免费av毛片 | 天天干天天操天天射 | 91视频三区| 国产成人99久久亚洲综合精品 | 欧洲视频一区二区 | 91伊人网| 日日操日日干 | 一级看片免费视频 | 亚洲成人三级 | 国产精品久久二区 | 国内精品视频在线观看 | 国产精品国产三级国产aⅴ中文 | 久久日韩精品 | 91在线精品一区二区 | 久久久青草 | 成人在线精品 | 亚洲精品18 | 久久精品国产亚洲一区二区 | 91视频精选| 亚洲精品国产a久久久久久 午夜影院网站 | 久久成人一区 | www亚洲成人 | 国产免费xxx | 免费美女网站 | 色噜噜色综合 | av黄色在线观看 | 五月婷婷在线视频 | 亚洲精品资源 | 日韩1区2区 | 亚洲欧洲中文 | 日韩影院在线观看 | 人人射人人插 | 亚洲欧美综合 | 国产在线观看不卡一区二区三区 | 久久国内 | 亚洲成人一区 | 国产激情网 | 亚洲一区中文字幕 |