最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何防范PowerShell代碼注入漏洞繞過受限語言模式

 更新時間:2017年10月20日 08:51:48   作者:愣娃  
這篇文章主要介紹了如何防范PowerShell代碼注入漏洞繞過受限語言模式的相關資料,需要的朋友可以參考下

導語:受限語言模式是緩解PowerShell攻擊的一種方式,能夠阻止執(zhí)行任意未簽名的代碼。

介紹

受限語言模式是緩解PowerShell攻擊的一種方式,能夠阻止執(zhí)行任意未簽名的代碼。當Device Guard或者AppLocker處于強制模式時,它是最實際有效的強制安全措施,因為未被策略允許的任何腳本或者模塊都位于受限語言模式下,這嚴重限制了攻擊者執(zhí)行未簽名的代碼。通過限制語言模式限制了Add-Type的調用。限制Add-Type明顯是考慮到了它能編譯并加載任意的C#代碼到你的運行空間中去。

但策略允許的PowerShell代碼運行在“Full Language”模式下,允許執(zhí)行Add-Type。這樣,微軟簽名的PowerShell代碼就能調用Add-Type。不相信嗎?運行下面的命令你就會發(fā)現我是正確的。

利用

現在想象如果以下的PowerShell模塊代碼(暫且被稱為“VulnModule”)是由Microsoft簽名的。

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

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

讓我們一起思考下吧:

1. Add-Type作為類型定義傳遞給一個全局變量。因為它是全局的,它可以被任何人訪問,包括我們和攻擊者。
2. 問題是,簽名的代碼先于調用Add-Type就定義了全局變量,因此如果我們使用自定義的惡意C#代碼,這將會被合法的代碼覆蓋。

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

武器化

好的,為了從受限語言模式注入代碼到Add-Type,攻擊者需要將它們的惡意代碼定義為只讀變量,從而設置全局“Source”變量來拒絕簽名的代碼。這是一個武器化的概念證明:

  $Global:Source = @'
  public class Test {
    public static string PrintString(string inputString) {
      return inputString;
    }
  }'@
Add-Type -TypeDefinition $Global:Source

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

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

緩解攻擊

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

有個關于UMCI繞過二進制的有效的黑名單規(guī)則是文件名規(guī)則,其能基于PE文件中版本信息資源中的原始文件名來阻止程序執(zhí)行。PowerShell很明顯不是個PE文件,它是文本文件,因此文件名規(guī)則不適用。但是,你可以通過使用哈希規(guī)則強制阻止有漏洞的腳本。Okay…要是相同腳本有不止一個漏洞呢?目前為止你只阻止一個哈希。你開始注意這個問題了嗎?為了有效的阻止之前所有有漏洞的版本的腳本,你必須知道所有有漏洞的版本的哈希。微軟意識到了問題并盡最大努力來掃描所有之前發(fā)布的有漏洞腳本,且收集哈希將他們整合到了黑名單中。

通過他們的哈希阻止所有版本的有漏洞的腳本有一定挑戰(zhàn)性,但能一定程度上阻止攻擊。這就是為什么一直迫切需要只允許PowerShell 5的執(zhí)行并要開啟scriptblock日志記錄。Lee Holmes 有篇關于如何有效的阻止老版本的PowerShell的博文。

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

報告

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

總結

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

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

相關文章

  • Powershell小技巧之復合篩選

    Powershell小技巧之復合篩選

    這篇文章主要介紹了Powershell復合篩選的小技巧 ,需要的朋友可以參考下
    2014-09-09
  • PowerShell基本使用教程

    PowerShell基本使用教程

    這篇文章主要介紹了PowerShell的基本使用,幫助大家更好的理解和學習power shell,感興趣的朋友可以了解下
    2020-09-09
  • PowerShell 入門基礎教程

    PowerShell 入門基礎教程

    Windows PowerShell 是專為系統(tǒng)管理員設計的新 Windows 命令行外殼程序。該外殼程序包括交互式提示和腳本環(huán)境,兩者既可以獨立使用也可以組合使用
    2014-08-08
  • Powershell 查詢 Windows 日志的方法

    Powershell 查詢 Windows 日志的方法

    這篇文章主要介紹了Powershell 查詢 Windows 日志的方法,需要的朋友可以參考下
    2015-10-10
  • PowerShell Out-File禁止覆蓋文件的方法

    PowerShell Out-File禁止覆蓋文件的方法

    這篇文章主要介紹了PowerShell Out-File禁止覆蓋文件的方法,只要加一個NoClobber參數即可,需要的朋友可以參考下
    2014-08-08
  • 探索PowerShell(一) 初識 PowerShell

    探索PowerShell(一) 初識 PowerShell

    PowerShell是一個由微軟的提供的全新shell程序,使用了全新的命令提示和腳本環(huán)境
    2012-12-12
  • Windows Powershell Switch 循環(huán)

    Windows Powershell Switch 循環(huán)

    這篇文章主要介紹了Windows Powershell Switch 循環(huán)以及PowerShell中數組可以與switch語句結合,產生意想不到的效果。
    2014-10-10
  • Powershell中阻止”確認提示”的方法

    Powershell中阻止”確認提示”的方法

    這篇文章主要介紹了Powershell中阻止”確認提示”的方法,本文直接給出操作代碼示例,需要的朋友可以參考下
    2015-03-03
  • WMI入門教程之WMI中的類在哪里?

    WMI入門教程之WMI中的類在哪里?

    這篇文章主要介紹了WMI入門教程之WMI中的類在哪里?本文講解了WMI中類的層次結構、常用WMI類、WMI類查找手冊等內容,需要的朋友可以參考下
    2014-10-10
  • Powershell中Finally語句用法示例

    Powershell中Finally語句用法示例

    這篇文章主要介紹了Powershell中Finally語句用法示例,本文用一個播放音樂的腳本為例子,使用Finally語句在異常結束操作時執(zhí)行清理操作,需要的朋友可以參考下
    2015-03-03

最新評論

昭通市| 无棣县| 尤溪县| 盘锦市| 桃江县| 安图县| 扎鲁特旗| 南靖县| 临邑县| 镇平县| 都匀市| 米泉市| 土默特右旗| 侯马市| 洛隆县| 南江县| 贺州市| 咸丰县| 公主岭市| 搜索| 闻喜县| 延长县| 南郑县| 嘉兴市| 霍林郭勒市| 宁南县| 峡江县| 吕梁市| 黔江区| 崇文区| 恩平市| 库尔勒市| 合江县| 将乐县| 志丹县| 肥西县| 广灵县| 嘉兴市| 兴业县| 陕西省| 滨州市|