一、介紹
本文首先從Rootkit的生存期、可達成的效果,以及運用這項技術展開攻擊的可行性和windows Rootkit現狀分析四個角度展開討論,并結合歷史攻擊事件,分析掌握這項技術的APT組織所關注的目標群體和可能造成的影響,最后總結Rootkit在不同層次攻擊活動中所處的地位。
二、“低調”的Windows Rootkit
當你聽到Rootkit時,你的第一反應是什么,高難度、高隱藏?是的,近年來,隨著Windows安全機制的不斷完善,往Windows系統中植入一個Rootkit的技術門檻也被不斷拔高。可就算Rootkit在所有安全產品檢出的惡意軟件中占比率極低,也并不代表它帶來的威脅就可以忽略,恰恰相反,Rootkit的高門檻使其更多地被運用在更高質量的攻擊活動中,從這一角度來看,每一個客戶場景出現的Rootkit背后都可能隱藏著長期的攻擊活動。
對于攻擊者來說,高投入的同時也意味著高收益,開發一款Rootkit不算簡單,但發現一個Rootkit同樣不簡單,一個普通惡意樣本的生存期可能在投入使用時便結束了,而一個Rootkit的生存期可以長達數年,甚至更久。
從Vista開始Windows會對加載的驅動進行簽名驗證,這使得攻擊者的植入成本變高,而PatchGuard也增加了攻擊者對系統內核篡改的成本。基于此,Windows Rootkit在野的聲音仿佛小了許多,我們對它的關注度也在降低,但它帶來的威脅真的就可以忽視了嗎?還是說更應該理解為“小聲音,高威脅”。
從下圖我們可以看出,無論Windows Rootkit在野聲音有多小,它都未曾消失過
三、從生存期看Windows Rootkit
【安全學習文檔】可私信我領取
讓我們把APT攻擊的階段簡化,在初始打點階段攻擊者可能會采用漏洞利用或釣魚攻擊,毫無疑問,近幾年也是釣魚攻擊大行其道地幾年。
以文檔釣魚為例,收到的釣魚郵件可能會像這樣
當然,我們也可能收到偽裝成文檔的PE文件
它也有可能長成這樣
盡管形式還算多樣,但細心的你一定已經發現了,它們或多或少都存在著一些可識別的特征,在經歷過釣魚的反復洗禮后,甚至會有部分人不管什么郵件都直接丟VT跑一圈(當然這樣做不好,畢竟誤傳敏感文件還是比較嚴重的),這些特征讓攻擊活動變得非常容易暴露。
在假定攻擊活動已經進行到權限維持之后,我們也會排查到下述類似情況
當然,這樣做會顯得有些過于直接,攻擊者可能會采用更為復雜的手法,比如DLL劫持,一方面避免了持久化的痕跡,另一方面在免殺上也取得了一定效果,但我們仍然可以觀測到
這樣來看,發現一個異常也不算太難,對吧,畢竟攻擊者在每個環節都或多或少地留下了一些痕跡,無論我們哪個環節捕獲到了威脅,都可以向前和向后反溯,還原攻擊鏈路。但由于真實環境足夠復雜,也不是所有人員都具備安全知識和安全意識,導致攻擊活動通常也能成功,甚至持續很長時間不被發現。但至少,當你感知到它可能存在威脅時,還是能比較容易地發現它。
那么,這樣的威脅我們還是可以稱之為“擺在明面上”的威脅,你只需要更加耐心和細心地將它們找出來,而隨著安全體系建設地逐漸完整和全員安全意識地不斷提高,此類攻擊的生存期也會不斷縮短。
回過頭來,我們再看一看Windows Rootkit,歷史上APT組織Strider曾利用一款名為Remsec的惡意軟件對多個國家,包括政府機構在內的系統進行了長達五年之久的監控
其實這里少說了一個詞“至少”,該Rootkit幫助攻擊者完成了至少長達五年的攻擊活動,這期間包括俄羅斯、伊朗、盧旺達、中國、瑞典、比利時在內的多個國家的政府機構、科學研究中心、軍事組織、電信提供商和金融機構都有被感染。
且該Rootkit的功能非常完善,具有密碼竊取、鍵盤記錄、后門控制等多種功能,試想這樣一個惡意軟件對上述目標進行著長達至少五年的監控,是否足夠讓人警惕呢?
Remsec被發現之時,研究員們對它的評價是“一種幾乎不可能被檢測到的惡意軟件”,而這也是一直以來大家對Rootkit的認識,這一點是否非常值得我們深思呢,究竟是Windows Rootkit慢慢銷聲匿跡了,還是受限于能力不足導致其檢出率如此之低,而生存期又如此之長呢?
其實對于攻擊者來說,打點技巧是多種多樣的,并不一定要選擇像釣魚這樣會留下明顯痕跡的技巧,對于那些使用未知技巧,甚至是0day進行攻擊的活動,我們想要在打點階段捕獲它們的可能性較低,這種情況下,捕獲攻擊者在后門植入、持久化等階段留下的痕跡,并基于此反溯,還原攻擊鏈路會是一個不錯的選擇,而Rootkit會把這些痕跡通通隱藏,讓我們的命中難度劇增。下圖顯示了近年來在野0day數量
四、從達成效果看Windows Rootkit
那么Rootkit究竟能達成什么樣的效果呢?
以一個操作圖形接口的Rootkit為例,它在任務管理器中隱藏了calc.exe
換句話說,Rootkit可以把攻擊者不想讓你發現的攻擊痕跡進行隱藏,比如我們在進程異常排查中,會關注那些有著異常通信或是可疑模塊加載的進程。
以白加黑技術為例,該技術雖然能在免殺上取得良好效果,但如果同時存在異常通信和可疑模塊(未簽名的dll),我們就還是能較為容易地定位到異常點。
而通過一些簡單的技巧,就可以在一定程度上對白加黑利用中的惡意dll進行隱藏
.
而Rootkit能達成的隱藏效果,會遠勝于上圖情況,當使用Rootkit從分析工具中徹底隱去這些異常點時,你還能快速地判定該進程有問題嗎?
當然,此處僅是過濾了異常模塊,這也只是Rootkit能做到的一小部分,除此以外,服務、端口、流量等也都可以通過Rootkit進行操作,那么你想看到什么,攻擊者就可以讓你看到什么,“擺在明面上”的威脅就轉變成了“隱藏在暗地里”的威脅,想在主機上發現異常就會變得極其困難。
五、從可行性來看Windows Rootkit
前面的內容提到,Windows引入了兩大安全機制來對抗Rootkit,分別是簽名驗證和PatchGuard,我們將針對這兩個點分別展開討論。
1. 簽名驗證
關于這部分內容,國外安全研究員Bill Demirkapi在Black Hat 2021的議題《Demystifying Modern Windows Rootkits》中給出了答案,相應的解決方案分別為直接購買、濫用泄露證書和尋找“0day”驅動。
1.1 購買證書
這種方式其實沒什么好說的,攻擊者唯一需要考慮的問題,就是購買渠道是否足夠可靠,是否存在身份暴露的風險。
1.2 濫用泄露證書
從可行性上來說,Windows根本不關心證書是否已經過期或者已經被吊銷,通過泄露的證書,攻擊者就可以生成在任意Windows版本下都有效的驅動簽名
由于不需要購買證書,在降低成本的同時也避免了因購買渠道不可靠而暴露身份的風險,此外,通過這種方式進行植入所需的前置條件也不算多,與挖掘“0day”驅動的方式相比,技術難度降低很多,當然,掌握了泄露證書的情報后,相關安全廠商可以針對此類Rootkit進行查殺攔截
下圖是收集到的一些歷史泄露證書,從此圖可以看出泄露的情報并不少見
1.3 “0day”驅動利用
從可行性來說,一定存在著可被利用的“0day”驅動,而歷史上,就曾有知名的APT組織利用具有合法簽名驅動程序來進行惡意驅動的加載,該組織是俄羅斯APT黑客組織Turla,它利用的合法驅動為VirtualBox,下文是對該利用過程的描述
2. PatchGuard
網上有著包含win7、win10在內的不少開源項目,攻擊者可通過集成這些項目繞過PatchGuard,往內核中植入惡意代碼,實現Rootkit功能
六、從現狀來看Windows Rootkit
當我們嘗試在VT上進行Hunting,會發現無效證書的利用非常普遍
其實,就算你遇到一個有著合法簽名的Rootkit也不算什么新鮮事了
回過頭來單看2021,Windows Rootkit攻擊更多地集中在游戲行業(我想,這也是它們相對而言較快暴露的一個原因,傳播量變大的同時,也遭受了更多的關注),但當Rootkit調轉槍頭對準更高價值的目標時,當它們的目的不再是簡單地獲利時,當它們的動靜更小,隱藏更具針對性時,我們是否做好應對準備了呢?畢竟從技術角度而言,APT組織又有什么理由拒絕Rootkit呢?
值得注意的是,當APT組織拿起Rootkit這個武器時,它們槍頭要對準的將會是包括政府、軍事在內的各種重要組織機構,它們的目的將不再是簡單地獲利,而是對目標地長期監控和重要情報的竊取,這一點從歷史APT運用Rootkit進行的攻擊事件中不難發現。
七、總結
基于社工和釣魚結合的攻擊活動雖能以較小的成本拿下目標,但留下的明顯痕跡會導致其生存期驟減,很容易在打點階段就暴露,而通過其它未知渠道打點后,借助合法進程、機制完成惡意活動(如Lazarus對Get-MpPreference的利用),或通過白加黑(如dll劫持,LOLBINS)等方式進行后門安置和權限維持等,雖然在免殺層面有著不錯的效果,卻不能很好地隱匿攻擊痕跡。
Rootkit更多地對應在后門安置、持久化階段,掌握這項技術的攻擊者也會有著更高的技術水平,他們或許會更青睞于一些高級的打點技巧,以降低每個環節被捕獲的可能性,當然,越高價值的目標越會吸引更高成本的投入,我們想要從容應對也就更加困難,而事實上,是否有APT組織正利用著此技術進行攻擊活動也尚未可知。