国产成人毛片毛片久久网_国产午夜激无码av毛片不_国产乱对白精彩在线播放_av资源站中文字幕_亚洲男人的天堂网站_国产成 人 综合 亚洲网_中国国产激情一区_少妇一级淫片免费放_亚洲一本大道av久在线播放_免费观看美女裸体网站

行業(yè)動(dòng)態(tài)

防御吧作為15年知名老牌域名服務(wù)商,CNNIC和CANN雙認(rèn)證域名注冊(cè)商,已經(jīng)
持續(xù)為500多萬個(gè)域名提供服務(wù),包括智能DNS/自由轉(zhuǎn)移/隱私保護(hù)等服務(wù)!
Advanced Windows TaskScheduler Playbook–Part Ⅰ
2022-06-29 13:44:14 【

這個(gè)系列是關(guān)于Windows計(jì)劃任務(wù)中一些更為本質(zhì)化的使用,初步估計(jì)大概四章。


相比于工具文檔或技術(shù)文章,我更傾向于將這幾篇文章作為傳統(tǒng)安全研究的思維筆記,一方面闡述研究過程與思維邏輯,另一方面記錄研究成果落地為實(shí)戰(zhàn)工具的過程。


武器化也好,安全開發(fā)也罷,將理論基礎(chǔ)作為依據(jù),以研究成果作補(bǔ)充,從實(shí)戰(zhàn)效果作證明的三板斧不能變。


希望在使用之余,能為大家?guī)硌芯克悸飞系膯l(fā)。


1

現(xiàn)象

對(duì)Windows對(duì)抗有一定研究的,大多都接觸過計(jì)劃任務(wù)的相關(guān)知識(shí)。


作為文檔化的組件之一,好處是有完整的官方文檔:


"http://docs.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page"


作為參考。例如,我們可以幾乎不費(fèi)力氣找到很常用的登錄自啟動(dòng)代碼:


"http://docs.microsoft.com/en-us/windows/win32/taskschd/logon-trigger-example--c---"


稍作修改即可直接使用。


壞處是,文檔太長(zhǎng)了,面向?qū)ο蟮拇a也太復(fù)雜了(相對(duì)于腳本尤其是安全工具而言)。


以上文登錄自啟動(dòng)的代碼為例,十幾個(gè)API調(diào)用,無故引入且無法去掉的taskschd.dll導(dǎo)入,為什么普通用戶執(zhí)行不成功,S-1-5-32-544是什么,TASK_LOGON_GROUP的定義又在哪?


好在我們是安全研究者,安全研究更擅長(zhǎng)從結(jié)論/狀況反推原因,現(xiàn)在來發(fā)揮所長(zhǎng):


我們知道計(jì)劃任務(wù)可以通過UI或者命令行方式進(jìn)行創(chuàng)建,其參數(shù)和選項(xiàng)大部分是對(duì)應(yīng)的。


我們知道計(jì)劃任務(wù)可以通過ITaskService接口或是TaskSchedulerClass類以及一系列對(duì)象進(jìn)行操作。


我們知道計(jì)劃任務(wù)可以導(dǎo)出一個(gè)XML,通過UI或是命令行均可再將其導(dǎo)入。


我們知道每一個(gè)計(jì)劃任務(wù)文件都存放于%SystemRoot%System32Tasks目錄下,內(nèi)容和導(dǎo)出的XML完全相同。


所以,從安全研究的角度,這里可以提出一個(gè)問題:計(jì)劃任務(wù)的本質(zhì)是什么?是那些類,還是XML?


如果是類的話,那么XML在其中充當(dāng)著什么角色,是如何解析的?


如果是XML的話,那么類充當(dāng)?shù)挠质鞘裁唇巧?/p>


2

依據(jù)

雖然Windows提供了絕大部分符號(hào),但在此時(shí)還沒有調(diào)試Windows服務(wù)的必要。我們?cè)跈M向移動(dòng)的過程中依然會(huì)用到計(jì)劃任務(wù)程序,那么首先抓個(gè)包:


看到了滿屏的RPC調(diào)用,對(duì)其解密后可以看到以下信息:


我們看到了幾個(gè)重點(diǎn),首先調(diào)用號(hào)(Opnum)為1;其次RPC Stub Data即調(diào)用的參數(shù)中明顯出現(xiàn)了新任務(wù)名稱,以及隨后的XML。

以windows task scheduler rpc為關(guān)鍵字搜索,我們可以找到MS-TSCH協(xié)議:

"http://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tsch/21e8e86e-ee5a-469d-917f-28a41f3c25a4"

依文檔所述,這是建立在RPC協(xié)議之上、用于遠(yuǎn)程對(duì)計(jì)劃任務(wù)進(jìn)行增刪改查的接口,同時(shí),我們也看到了熟悉的ITaskSchedulerService:


參考:

"ITaskSchedulerService SchRpcRegisterTask (Opnum 1)"

"http://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tsch/849c131a-64e4-46ef-b015-9d4c599c5167"

在這一章,對(duì)比參數(shù)可基本進(jìn)行確認(rèn):


最后,以impacket作為佐證,眾所周知atexec.py采用計(jì)劃任務(wù)方式進(jìn)行利用,其中創(chuàng)建遠(yuǎn)程計(jì)劃任務(wù)同樣通過SchRpcRegisterTask調(diào)用:


于是,我們得到了一個(gè)理論依據(jù):微軟通過MS-DCERPC協(xié)議,在上層構(gòu)建了MS-TSCH協(xié)議,該協(xié)議通過XML作為參數(shù),實(shí)現(xiàn)了對(duì)計(jì)劃任務(wù)的管理。

3

本質(zhì)

有了MS-TSCH作為理論依據(jù),讓我們換個(gè)思路,嘗試從設(shè)計(jì)者角度進(jìn)行思考。

現(xiàn)在,你是一名架構(gòu)師了。

假設(shè)現(xiàn)在一無所有,你會(huì)如何設(shè)計(jì)一個(gè)計(jì)劃任務(wù)程序?

首先,所有人都可能調(diào)用計(jì)劃任務(wù),意味著進(jìn)程應(yīng)當(dāng)常駐后臺(tái);

低權(quán)限用戶并不能以高權(quán)限用戶身份進(jìn)行操作,所以進(jìn)程需要高權(quán)限,并實(shí)現(xiàn)模擬機(jī)制;

高權(quán)限后臺(tái)進(jìn)程要考慮到特權(quán)提升的問題,所以需要存在合理的鑒權(quán)機(jī)制;

計(jì)劃任務(wù)不涉及硬件管理,也并非系統(tǒng)運(yùn)行所必需,所以無需進(jìn)入內(nèi)核。

其次,接受其它進(jìn)程調(diào)用需要有一個(gè)合理的通信機(jī)制。Windows進(jìn)程間通信方式眾多,出于鑒權(quán)考慮,命名管道和alpc均可作為可選項(xiàng);

在易用性方面,alpc和命名管道均有RPC上層封裝可用;在性能方面,alpc是毫無疑問的首選(詳參微軟官方博客al***ort相關(guān))。

之后,出于管理需要,需要支持遠(yuǎn)程調(diào)用?紤]到穩(wěn)定性,遠(yuǎn)程通信的方式大多建立在TCP上層;

考慮到防火墻與安全性因素,支持加密的http/SMB/RPC/DCOM是幾個(gè)可選項(xiàng);

鑒于遠(yuǎn)程管理往往有著最小配置與降級(jí)原則,RPC由于可獨(dú)立配置、能夠通過ncacn_np使用SMB協(xié)議通信且不受額外選項(xiàng)干擾,在此優(yōu)于DCOM;

鑒于API統(tǒng)一的原則,統(tǒng)一了本地通信與遠(yuǎn)程通信的RPC是唯一可選項(xiàng)。

最后,考慮到拓展的需要,需要可拓展的存儲(chǔ)方式?紤]到MS-TSCH至少有著十五年的歷史,采用XML兼顧可讀性與拓展性無可厚非。

于是,有了基于MS-DCERPC與直接XML傳遞的MS-TSCH協(xié)議。

在微軟的實(shí)現(xiàn)中,Schedule服務(wù)以SYSTEM權(quán)限運(yùn)行,同時(shí)擁有SeImpersoante、SeAssignPrimaryToken等特權(quán)提供不同用戶權(quán)限的切換。

服務(wù)通過注冊(cè)ncalrpc、ncacn_np(atsvc)以及向epmapper注冊(cè)三種方式公開了本地與遠(yuǎn)程的RPC調(diào)用端點(diǎn)(EndPoint),為調(diào)用方提供MS-TSCH協(xié)議規(guī)定的服務(wù)。

好的,我們有了一個(gè)通過XML進(jìn)行通信、且會(huì)進(jìn)行透明鑒權(quán)的計(jì)劃任務(wù)服務(wù)。

現(xiàn)在,把思路再次轉(zhuǎn)回調(diào)用者。

現(xiàn)在,你是一名程序員。這個(gè)功能很重要,怎么實(shí)現(xiàn)沒人管,明天上線。

不可否認(rèn),對(duì)照模板編寫XML這一做法,對(duì)于懶人(我特指初級(jí)代碼開發(fā)人員,無貶義)固然有著無以倫比的方便。但對(duì)接過API的都知道,世界上第一痛苦的API就是調(diào)用萬能接口,第二絕對(duì)是通過XML進(jìn)行數(shù)據(jù)傳遞。

MS-TSCH出生在至少十五年前,很不幸,兩毒俱全。來想象一下你是個(gè)防守方,現(xiàn)在應(yīng)用一個(gè)臨時(shí)緩解措施,需要建立并下發(fā)以下計(jì)劃任務(wù)監(jiān)控:當(dāng)事件ID 1234觸發(fā)時(shí),執(zhí)行powershell命令調(diào)用某個(gè)API。

想到要看協(xié)議文檔就很頭疼對(duì)吧,想到要寫C來調(diào)用RPC就更頭大了對(duì)吧。

所以微軟通過COM,在Taskschd.dll內(nèi)對(duì)MS-TSCH進(jìn)行面向?qū)ο蠓庋b,其CLSID為0F87369F-A4E5-4CFC-BD3E-73E6154572DD,并提供了一系列幫助接口提供Trigger、Action、Folder的抽象。

為了支持腳本功能,為這個(gè)類注冊(cè)了名為Schedule.Service的ProgId,并實(shí)現(xiàn)了IDispatch接口,使得VBS/Powershell等腳本語言能夠進(jìn)行快速調(diào)用。

這些是純粹的封裝與幫助類,和實(shí)際的協(xié)議完全無關(guān)。

到這里,TaskScheduler服務(wù)(Service或RPC EP)的本質(zhì)也就呼之欲出:鑒權(quán),接收一個(gè)XML(無論是幫助類生成的還是自己構(gòu)建的),注冊(cè)到自己業(yè)務(wù)環(huán)境內(nèi)。

從這個(gè)角度看來,計(jì)劃任務(wù)的本質(zhì)和傳統(tǒng)WEB并沒有任何區(qū)別,甚至可以直接用下面這張圖進(jìn)行類比:


RPC對(duì)應(yīng)HTTP,OPNUM對(duì)應(yīng)Action/Method,XML對(duì)應(yīng)Body。語法、語義、時(shí)序完全對(duì)應(yīng),是的,完美。

實(shí)際上,除卻純粹二進(jìn)制的領(lǐng)域,至少一半的Windows組件能夠用這樣的方式進(jìn)行類比。

最后,我們把思維轉(zhuǎn)回安全角度。

“放開我,我是信息安全工程師.jpg”

從攻擊者視角看,由于絕大部分文檔都僅僅講述對(duì)COM API的調(diào)用,進(jìn)而可猜想,絕大部分防御措施會(huì)針對(duì)Taskschd.dll,通過RPC進(jìn)行繞過可能是一個(gè)可行的突破方案。

而從防御者視角看,繞過Taskschd.dll這一wrapper可能會(huì)對(duì)自身防御體系造成繞過甚至擊穿(這里“擊穿”二字絕非危言聳聽)。

4

COM&RPC

了解到部分本質(zhì)之后,我們開始進(jìn)行更為簡(jiǎn)潔,更貼近于安全思維的調(diào)用。

在參考c++版本示例代碼的時(shí)候,我們可以看到微軟同時(shí)提供了XML參考:

"http://docs.microsoft.com/en-us/windows/win32/taskschd/logon-trigger-example--xml-"

并提示了可以使用ITaskFolder::RegisterTask通過XML直接注冊(cè)計(jì)劃任務(wù)。

隨后調(diào)用ITaskFolder::RegisterTask來替代之前的繁瑣方式(參考代碼依然來自MSDN):

image.png


同樣的:


"MS-TSCH 6.3 Appendix A.3: SchRpc.idl"


"http://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tsch/96c9b399-c373-4490-b7f5-78ec3849444e"


提供了完整的IDL,通過編譯IDL即可直接進(jìn)行簡(jiǎn)單的RPC調(diào)用:

image.png


至少在本文發(fā)布的時(shí)候,利用直接RPC調(diào)用可以繞過相當(dāng)一部分防護(hù)軟件對(duì)計(jì)劃任務(wù)自啟動(dòng)的攔截。


5

總結(jié)

本章從協(xié)議層面,講述了Windows計(jì)劃任務(wù)程序從設(shè)計(jì)、協(xié)議、實(shí)現(xiàn)均基于XML格式這一基礎(chǔ)事實(shí),并以此為基礎(chǔ)介紹了更為簡(jiǎn)單方便的調(diào)用。


基礎(chǔ)之所以是基礎(chǔ),在于后續(xù)相關(guān)知識(shí)與應(yīng)用一定會(huì)與其具備強(qiáng)關(guān)聯(lián),而絕非單純的淺顯易懂。


我一直認(rèn)為,編程思想與設(shè)計(jì)模式才是最基礎(chǔ)的安全技術(shù)。在這冗長(zhǎng)而無趣的第一章中,我們通過面向?qū)ο笾谐橄、封裝這兩大基礎(chǔ)概念,以及背后隱藏的Transport/Channel這個(gè)被微軟大肆使用的名詞(相信如果搜索了上面幾節(jié)其中的關(guān)鍵字,并且看了原文就一定有印象)來從側(cè)面分析微軟的設(shè)計(jì)思想,從而能夠更好地理解組件的運(yùn)作方式,最終找到其中的薄弱點(diǎn),并加以利用。


后續(xù)幾章無一例外,均將以此為基礎(chǔ),來講幾個(gè)有趣的應(yīng)用案例。


】【打印關(guān)閉】 【返回頂部
分享到QQ空間
分享到: 
上一篇竊取450G的AMD內(nèi)部數(shù)據(jù),這些黑客.. 下一篇高危漏洞并不意味著要最先修復(fù)

立足首都,輻射全球,防御吧專注云防御及云計(jì)算服務(wù)15年!

聯(lián)系我們

服務(wù)熱線:13051179500 18910191973
企業(yè)QQ:1245940436
技術(shù)支持:010-56159998
E-Mail:xihedata.com
Copyright ? 2003-2016 fangyuba. 防御吧(完美解決防御與加速) 版權(quán)所有 增值許可:京B2-20140042號(hào)
售前咨詢
公司總機(jī):18910191973
24小時(shí)電話:010-56159998
投訴電話:18910191973
值班售后/技術(shù)支持
售后服務(wù)/財(cái)務(wù)
備案專員
緊急電話:18610088800