本文轉譯:北京市人民檢察院科技信息基地 劉伯辰
多數惡意程序都有自我刪除功能,所留下的痕跡僅會存在內存中,因此保存犯罪行為下的易揮發性數據,已是網絡取證調查中不可或缺的一部分。通過分析內存中ELF格式文件來了解惡意程序的行為,有助於增加對未知惡意程序的了解並做為逆向分析的參考。
[本文開頭,大段落介紹背景知識,是為了便於大家了解基礎知識]
「道高一尺,魔高一丈」,隨著時代的發展,不法人士進行犯罪的方式也與傳統的犯罪模式有著天壤之別。早期多半是綁架勒索的傳統刑事案件,通常以要求支付現金為最常見的手法。
隨著科技日新月異的進步,傳統綁架勒索案件也有了不同的變化,取而代之的是成本較低、影響卻更大的網絡攻擊。
有別於以往的黑客是為了證明自己實力、增加知名度而進行攻擊行為,現今更多的黑客是基於有利可圖謀取暴利的目的,促使網絡犯罪開始組織化,例如黑客針對企業發動分散式拒絕服務(DDoS)攻擊,藉此進行勒索行為,因此依賴傳統證據的取證方式已不足以對抗科技導向的信息安全犯罪模式。
2017年初臺灣爆發有史以來第一次券商集體遭受DDoS攻擊勒索事件,券商若不付款則會遭到Tb級的DDoS攻擊。這將會造成券商下單網站因此停擺,使得交易量降低,影響200億股票的交易安全。而全球史上第一次的Tb級DDoS攻擊則發生於2016年。2016年9月下旬,號稱全球第三大、法國最大的雲端服務與網站託管供應商OVH,表示自家IT架構大升級,然而客戶尚未享用到升級後的好處,接連四天,OVH不僅受到多次Gb級的DDoS攻擊,其中最高峰甚至達到每秒1.5Tb流量。此事件不僅震驚全球,也刷新了DDoS攻擊流量紀錄。根據此事件分析結果,發動此次大規模DDoS攻擊的殭屍大軍,是來自全球的CCTV網絡攝影機,其源頭是名為Mirai的惡意程序。
Mirai主要感染的對象為物聯網(Internet of Things,IoT)連接設備,而在Mirai之前,早在2014年便出現過名為Gafgyt(別名Bashlite、Lizard Stresser)的惡意程序,主要感染的對象同樣也是IoT連接設備。且在雲端計算、大數據與無線網絡技術快速發展,促使物聯網興起的時代,IoT連接設備隨處可見。由此可推斷,未來的殭屍大軍只會越來越多,其所造成的傷害將非同小可。因此,對於IoT連接設備的安全問題是不可忽視的議題。
IoT連接設備絕大多數是基於Linux系統開發的,相較於市場佔有率高達90%的Windows系統,Linux系統的使用者較少。且由於多數缺乏信息安全觀念的一般使用者常常也是Windows系統使用者,使得Windows系統較多受到黑客的攻擊,也逐漸形成大多數的人普遍認為「Windows系統不安全,而Linux系統較為安全」的印象。而Mirai的出現,所帶來的Tb級DDoS攻擊。此一現象也打破了「Linux系統較安全」的陳舊觀念,Linux系統潛藏的信息安全風險不容小覷。
若不幸發生信息安全攻擊事件,多半需要尋求執法機關的協助以保障自身權益。因此,取證人員經常使用取證工具以找出隱藏的電子證據,並且藉由分析電子證據從中找出蛛絲馬跡,推測其攻擊手法及攻擊來源,還原整起信息安全攻擊事件。
然而,由於Windows系統較多受到黑客攻擊,因此現有的分析工具多半以支援Windows系統為主,支援Linux系統的分析工具不僅數量少,且多數為商用軟體,而開源(Open Source)工具則較不完善,對於近年來興起的Linux系統網絡攻擊事件的取證更是雪上加霜。
不僅如此,若惡意程序在攻擊後具有自我刪除功能,也將使得取證人員於取證過程中面臨阻礙。但是,根據洛卡德交換原理(Locard Exchange Principle, Locard's Theory),只要有接觸過,必定會留下痕跡,也就是所謂「凡走過必留下痕跡」。任何應用程式執行時,系統都會將資料暫存於隨機存取存儲器(以下簡稱內存)中,使其得以順利執行,這也充分地顯示出內存取證的重要性。
何謂殭屍網絡Botnet
殭屍網絡(Botnet)廣義來說是由殭屍網絡管理者(Botmaster)、殭屍電腦(Bot)以及命令與控制伺服器(Command and Control Server,C&C Server)此三部分組成。
殭屍網絡管理者,也就是黑客本身利用木馬、字典攻擊等方式使易受攻擊的系統感染惡意程序,這些易受攻擊的系統可能是電腦、行動裝置,亦或是IoT連接設備等,而用戶本身通常不知道自己已成為殭屍網絡中的殭屍電腦。
當已有足夠數量的殭屍電腦時,殭屍網絡管理者便可通過命令與控制伺服器以一對多的方式控制殭屍電腦,指示這些殭屍電腦執行某些行為,如DDoS攻擊等,如圖1所示。
▲圖1 殭屍網絡
殭屍電腦如同傀儡般任殭屍網絡管理者擺布,執行各種惡意行為。以殭屍網絡管理者與殭屍電腦通訊方式作為分類,主要可區分為以下兩大類型:
C&C的殭屍網絡
C&C的殭屍網絡又稱為集中式殭屍網絡(Centralized Botnet),是一種高度集中式的網絡架構。如圖2所示,包含了以網絡聊天(Internet Relay Chat,IRC)及以超文本傳輸協議(HyperText Transfer Protocol,HTTP)作為網絡協議的殭屍網絡。
▲圖2 C&C的殭屍網絡
由於殭屍網絡管理者僅通過C&C Server便可快速地將攻擊指令傳送給殭屍電腦,因此採用此種架構的殭屍網絡執行速率較快。然而,C&C Server因需要大量的交換信息,容易被取證人員發現。
倘若C&C Server被破壞,則IRC或HTTP/HTTPS的殭屍網絡也會瓦解。
P2P的殭屍網絡
此種架構的殭屍網絡,如圖3所示,沒有集中式的C&C Server,取而代之的是殭屍電腦可能是客戶端(Client),也可能是服務端(Server),又或者是兩者兼具。除了接收指令外,也可當作媒介傳送攻擊指令。
▲圖3 P2P的殭屍網絡
由於殭屍網絡管理者可以通過其中的任一臺殭屍電腦作為主控殭屍來控制整個殭屍網絡,倘若其中一臺殭屍電腦被破壞,主控殭屍與其他殭屍電腦依然可以保持連接與溝通,因此無法阻止其惡意行為。這顯示P2P的殭屍網絡韌性較好,然而相較於C&C的殭屍網絡,殭屍網絡管理者要傳達攻擊指令給殭屍電腦的速度較慢,導致接收攻擊指令會延遲。
2018年卡巴斯基第一季度全球DDoS報告顯示,在檢測到的所有攻擊量中,Linux的殭屍網絡佔了61%。換句話說,殭屍網絡絕大多數是基於Linux系統。針對Linux的殭屍網絡惡意程序,其中較知名的是公開原始程序代碼的Mirai。
分析方式探討
目前已知有多種Linux殭屍惡意程序在執行後為了隱藏蹤跡會自我刪除,因此取證人員僅能從受感染設備的內存中取得此殭屍惡意程序,並做後續分析,也說明了內存取證技術的必要性。
在Linux系統中,可執行文件主要以ELF格式儲存於內存中,結構如表1所示。倘若要在Linux系統上執行惡意程序,此惡意程序亦須為ELF文件格式。
因此,這裡嘗試於內存中使用分析ELF格式的方法,流程如圖4所示,從惡意程序中找出其所會使用的函數,藉此初步了解此惡意程序所會觸發的行為。
▲圖4 Linux惡意程序取證分析流程
分析ELF Header
ELF格式文件以ELF Header為起始點,主要記錄了整個文件的結構信息。以表2之ELF Header作為說明,所包含的數據結構如表3所示。
其中所要探討的部分以e_shoff、e_shentsize及e_shnum為主,表4說明了這三個數據結構所表示的信息。
分析Section Header
得知Section Header Table位置後,便可找到每一個Section Header,以表5之Section Header Table為例。而Section Header中的數據結構整理如表6所示,主要以sh_name、sh_offset及sh_size為主,如表7所示,以得到每一個Section的信息。並找出.shstrab、.strtab及.symtab此三個Section,相關信息如表8所示。
進行統計
依照上述方法取得資料庫中的惡意程序樣本所使用的函數,以陣列方式儲存。另外,隨機選一個惡意程序樣本的函數以字典方式儲存。
將所有陣列與字典比對,若符合則字典中的Value數值加1,反之則新增為字典的Key,如圖5所示。
▲圖5 函數統計流程
情境模擬說明
近日,路由器製造商行銷部主任強尼正為自身產品遲遲無法提升市場佔有率而煩惱,強尼認為,想要提高市場佔有率,最重要的是要能夠研發出更符合客戶實際需求的產品,於是便與研發部主任約翰一同討論策略。
兩人首先仔細地檢驗查看了現有產品功能的使用效率,通過統計資料作為參考,了解自身產品目前有哪些功能可以符合客戶真正的需求,又或者有哪些功能需求量較小,能夠以其他更重要的功能取代。
然而,在檢驗查看的過程中,約翰發現型號1的路由器的網絡流量紀錄遠高於其他型號的路由器紀錄。依照過往經驗,約翰認為型號1的路由器極有可能被黑客當成了殭屍大軍。為了保障自身產品的安全性,約翰馬上率領其團隊進行研究測試。
研究測試團隊從被黑路由器中搜集了多個惡意程序樣本。由於此路由器是基於Linux系統開發,因此可知惡意程序執行文件為ELF格式。於是研究測試人員便通過分析ELF格式,取得所需的資料,以便更進一步地了解惡意程序。通過此方式並進行統計,測試人員可以得到資料庫當中所有殭屍網絡惡意程序所使用的函數,以做為防禦策略的參考。
為清楚說明,此處以Gafgyt殭屍網絡行為作為分類,說明各分類中使用的函數。因為資料庫中包含有變種的Gafgyt殭屍網絡,所使用的函數會有所出入,因此選擇出現頻率較高的函數作為說明。
Gafgyt惡意程序主要行為及所使用的相關函數,分別說明如下:
與C &C Server建立連接
與C &C Server建立Socket連接所使用的函數如表9所示。其中函數mainCommSock是用來通知系統建立一個新的通訊埠,便於後續發送數據及接收數據。
掃描過程中回傳信息到C &C Server及接收信息
函數sockprintf中使用send將受感染的連接設備相關信息經由Socket回傳給C &C Server,如函數ioctl可取得MAC地址等。而函數recv則是用來接受來自於遠端C &C Server經由指定Socket傳來的數據,如表10所示。
處理C &C Server所傳來的指令
指令主要都存於可執行文件processcmd內,指令簡述如表11所示。其中比較特殊的是SCANNER指令,如表12所示。當一個殭屍電腦接收到這個指令時,將以fork的方式啟動一個子進程,而此子進程不管是否有與主控端連接,都會對公網隨機IP的23埠進行掃描。
此外,在掃描開始之前會通過使用getrlimit函數計算最大能同時打開的文件數,並將該值的四分之三作為同時掃描的最大IP數,以防止掃描數量過多,影響被感染設備的正常運轉而被受害人察覺。而其餘攻擊指令相關函數,則如表13所示。
研究測試人員通過上述介紹的方法分析殭屍網絡惡意程序後,可快速地了解其所會發生的攻擊行為,便可在最短時間內進行防禦,避免攻擊所造成的影響擴大。
此外,也可從所使用的函數中發現惡意程序攻擊的途徑是通過字典掃描的方式入侵。簡單來說,型號1的路由器之所以會被感染,是因為使用了預設密碼或者弱密碼,導致攻擊者可以控制被黑的路由器,使其成為殭屍網絡的一部分。
【編者注】惡意程序的自我刪除是存在期待可能性的。
轉自:資訊時代的犯罪偵查
解析NanoCore犯罪軟體攻擊鏈