多數惡意程式都有自我刪除功能,所留下的足跡僅會存在記憶體中,因此保有犯罪行為當下的揮發性數據,已是網路取證調查中不可或缺的一部分。透過分析記憶體中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所示。
殭屍電腦如同傀儡般任殭屍網路管理者擺布,執行各種惡意行為。以殭屍網路管理者與殭屍電腦通訊方式做為分類,主要可區分為以下兩大類型:
C&C的殭屍網路
C&C的殭屍網路又稱為集中式殭屍網路(Centralized Botnet),是一種高度集中式的網路架構。
如圖2所示,包含了以網際網路中繼聊天(Internet Relay Chat,IRC)及以超文本傳輸協定(HyperText Transfer Protocol,HTTP)作為網路協定的殭屍網路。
由於殭屍網路管理者僅透過C&C Server便可快速地將攻擊指令傳送給殭屍電腦,因此採用此種架構的殭屍網路執行速率較快。然而,C&C Server因需要大量的交換訊息,容易被調查人員發現。
倘若C&C Server被破壞,則IRC或HTTP/HTTPS的殭屍網路也會瓦解。
P2P的殭屍網路
此種架構的殭屍網路,如圖3所示,沒有集中式的C&C Server,取而代之的是殭屍電腦可能是客戶端(Client),也可能是伺服端(Server),又或者是兩者兼具。除了接收指令外,也可當作媒介傳送攻擊指令。
由於殭屍網路管理者可以透過其中的任一台殭屍電腦作為主控殭屍來控制整個殭屍網路,倘若其中一台殭屍電腦被破壞,主控殭屍與其他殭屍電腦依然可以保持連線與溝通,因此無法阻止其惡意行為。這顯示P2P的殭屍網路韌性較好,然而相較於C&C的殭屍網路,殭屍網路管理者要傳達攻擊指令給殭屍電腦的速度較慢,導致接收攻擊指令會延遲。
2018年卡巴斯基第一季度全球DDoS報告顯示,在檢測到的所有攻擊量中,Linux的殭屍網路占了61%。換句話說,殭屍網路絕大多數是基於Linux系統。針對Linux的殭屍網路惡意程式,其中較知名的是公開原始程式碼的Mirai。
分析方式探討
目前已知有多種Linux殭屍惡意程式在執行後為了隱藏蹤跡會自我刪除,因此鑑識人員僅能從受感染當下的記憶體中取得此殭屍惡意程式,並做後續分析,也說明了記憶體鑑識技術的必要性。
在Linux系統中,可執行檔案主要以ELF格式儲存於記憶體中,結構如表1所示。倘若要在Linux系統上執行惡意程式,此惡意程式亦須為ELF檔案格式。
因此,這裡嘗試於記憶體中使用分析ELF格式的方法,流程如圖4所示,從惡意程式中找出其所會使用的函數,藉此初步了解此惡意程式所會觸發的行為。
分析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所示。
情境模擬說明
近日,路由器製造商行銷部主任強尼正為自身產品遲遲無法提升市占率而煩惱,強尼認為,想要提高市占率,最重要的是要能夠研發出更符合客戶實際需求的產品,於是便與研發部主任約翰一同討論策略。
兩人首先仔細地檢視了現有產品功能的使用效率,透過統計資料作為參考,了解自身產品目前有哪些功能可以符合客戶真正的需求,又或者有哪些功能需求量較小,能夠以其他更重要的功能取代。
然而,在檢視的過程中,約翰發現路由器型號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的路由器之所以會被感染,是因為使用了預設密碼或者弱密碼,導致攻擊者可以控制受駭的路由器,使其成為殭屍網路的一部分。
<本文作者:中央警察大學資訊密碼暨建構實驗室(ICCL),民國87年12月成立,目前由王旭正教授領軍,實驗室成員共有20名,並致力於資訊安全、資料隱藏與資料快速搜尋之研究,以確保人們於網際網路世界的安全。(http://hera.im.cpu.edu.tw)>