本文主要針對Linux系統研究相關惡意程式攻擊之如何進行防護與檢測,前情背景會介紹Linux系統相關內容與敘述Rootkit惡意攻擊的詳細資訊,最後展示如何從Linux系統中檢測出Rootkit惡意攻擊的整個相關流程。
現今網路普及的運用,電腦內部夾帶許多個人相關重要資訊,網路安全比起過去顯得至關重要,電腦的運行從接收來源到應用程式的使用,所有的過程都存在一定的風險。作業系統主要功能是控制整個電腦的運作、讓電腦硬體與軟體的資源得到管理,可以說是整個電腦的核心,本文主要研究Linux作業系統遭受知名惡意軟體Rootkit的攻擊檢測,透過了解Rootkit的型態來選擇適合的檢測工具。
作業系統早在多年前已開發成熟,不過近年來的駭客攻擊層出不窮,作業系統當然也不可倖免,隱藏於系統中的Rootkit是知名的惡意程式攻擊,此類攻擊會隨著系統的不同而有不一樣的攻擊手法,當然許多專業人員也為此開發出應付各式各樣惡意程式的檢測工具,再透過專業知識的了解,選擇適當的檢測工具來完成整個檢查流程。
LKM(Loadable Kernel Modules) Rootkit是Linux系統中討論度較高的攻擊方式,可在系統中做到藏匿與任意編譯改寫程序,基於Rootkit中的攻擊手法:Reptile算是檢測難度較高的,本文主要針對Reptile Rootkit方法做相關分析與檢測。
背景知識說明
先簡單介紹Linux作業系統、Rootkit、Reptile,以及Unhide檢測工具與ss指令,然後再進入主題,開始實際操做示範。
Linux
作業系統(Operation System,OS)簡單來說就是讓硬體設備運行的一個工具,也是使用者如何與硬體設備間溝通的一個橋樑,現今的作業系統有多種選擇,也有公司專門開發屬於自身電腦產品所使用的作業系統,而Linux為開放原始碼(Open Source)系統,但有不同的發行商選擇不同的套件組合來發布系統,如Red Hat、SUSE等。表1所示是目前較為廣泛運用的系統。
作業系統的不同,也帶來不一樣的優缺點,也會因使用者使用的方式與工作的不同而各自選擇合適的作業系統,以下是Linux的主要優點如下:
‧系統穩定:由UNIX系統建構發展出的作業系統,相較其他系統較為穩定。
‧安全性:Linux承襲UNIX系統,在權限控管上較Windows嚴格,而開放原始碼的特性使得任何人都能檢視其原始碼,發現潛在的漏洞,進而提升安全性。
‧多使用者:與其他作業系統不同的是,此系統可同時允許多人連線登入,同時使用同一台主機的資源,系統檔案的屬性分為可讀、可寫、可執行,也為這些屬性做相關分類,不但方便多使用者的管理,也擁有較佳的資料保密性。
‧多種選擇:Linux系統各開發商有各種不同的版本,可以依照使用者需求去使用想要的版本,或是自行搭配安裝不同的軟體來運作。
而Linux的主要缺點,如下所示:
‧入門門檻較高:若想學習使用Linux作業系統,它的安裝過程較繁複,上手難度也比較高。
‧普及率:雖目前已有越來越多用戶,但本身並不像Windows公司會有相關行銷,從小學時期在台灣的教育中絕大部分都還是以Windows作業系統為主要學習的項目,要再接觸其多樣化環境,當然會較難以接受。
‧後續的維運狀況:Linux系統本身及其使用的應用程式是藉由眾人之力完成,但相對來說就少有能維護的公司,因此要找到合適的維護廠商較為困難。 ‧圖形化介面:雖然現今Linux系統已經有許多開發商研發出圖形化介面,但許多的設定及控制還是需要在文字列模式(Terminal)進行較為方便。圖形化介面對於使用者的使用體驗,仍有很大的進步空間。
Linux系統沒有專屬的安裝套件,換句話說,它有多樣化的Linux套件,可能是由個人、組織或是團體製作,裡面擁有Linux核心與一些相關的安裝工具,會因為安裝的套件不同導致圖形化介面與工具有些許不同,圖1所示是Ubuntu套件開啟Linux的桌面介面。
Rootkit
Rootkit本用於隱藏行程的功能,可對系統進行存取或將系統核心中所使用的行程隱藏起來,避免使用者在操作時不小心而影響到系統運作,出發點並非惡意。然而,當駭客利用此手法變向操作發展為將木馬程式隱藏到作業系統中,從而造成意料之外的危險,所以已有許多從業人士將此Rootkit視為一套惡意軟體。
若將root與kit拆開來解讀,root為Linux最高權限使用者,kit為工具箱,合起來就是最高權限的相關工具程式,一旦擁有最高權限,一方面便於隱藏自身的蹤跡,透過執行程式碼讓使用者混淆資訊真偽;另一方面可直接入侵電腦內部做非法的執行。
Rootkit目前已有許多不同的攻擊種類,若針對作業系統大致分為「核心模式」與「使用者模式」,一旦Rootkit進入到系統的核心模式,就相當於可接管系統的所有軟硬體資源,後果將不堪設想;即使只進入「使用者模式」,也足以影響使用者的資料安全。表2敘述了Rootkit種類與特性。
Rootkit的藏匿性高,不易察覺,不管藏於「核心模式」還是「使用者模式」,原理大同小異。一般都是使用「hook」方法來修改原來的程式執行,「hook」指的是能攔截系統中的程式來修改執行先後順序,透過這樣的手法,駭客能不經意地將惡意程序帶進系統裡面執行,調整順序後讓使用者察覺不到,不過此方法通常是在「使用者模式」進行。
而Rootkit中的「核心模式」則是運用DKOM(Direct Kernel Object Manipulation)隱藏技術,這技術層面更高階,一旦藏於系統核心內,將可能造成嚴重的損害。
LKM可加載內核模式—Reptile
Linux LKM Rootkit是透過核心模式進行隱藏,典型針對Linux核心系統進行突破,這類的攻擊模式較經典的是Reptile。Reptile是基於LKM下x86-64核心模式的Rootkit,可以任意地將系統中的文件檔、行程或連結進行隱藏,甚至可以任意地提高權限。為了將Reptile隱藏在系統中,只要將內容包含在特殊命令語法「文件內容 」中,Rootkit便可實現隱藏文件中的內容。
Unhide檢測工具與ss指令
為了要檢測出藏匿在作業系統中的Rootkit,檢測人員要先具備對Rootkit基礎的背景知識,再配上合適的工具,即可提升檢測的成功率,以下是檢測Reptile的背景知識說明,詳細流程將於文章後半段實際說明:
Unhide
有些檢測工具也許支援多種作業系統,但有些為了增加檢測的功能或準確性而只有單一作業系統才可支援。由於這次針對的是Linux作業系統所遭受的攻擊做檢測,所以採用Unhide工具(http://www.unhide-forensics.info/),其符合系統環境,是一款用於查找Linux LKM、Rootkit或其他技術隱藏的工具。
ss指令
ss(Socket Statistics)指令可用於找出更多相關TCP/UDP及連線狀態的資訊,透過這些連線數據能夠更清楚地了解攻擊者來源與目的,且ss是由Kernel直接讀取數據,所以速度較快,不易漏掉必要資訊。
實際操作示範
若要將LKM-Reptile順利地檢測出來,首先要知道攻擊手法的細節流程,知道攻擊真相與原理後,再運用合適的檢測工具找出隱藏於Linux系統中的惡意程式。
以下就來說明Reptile的操作程序,以及檢測過程。
Reptile的操作程序
若要植入經典的Reptile惡意程式,只不過是在載入與輸出時放入執行兩個Shell脚本。在目標主機上,如圖2所示,從「https://github.com/f0rb1dd3n/Reptile/releases」網址下載Source Code(tar.gz),解壓縮後進入「Reptile-2.0」目錄下,再執行「./setup.sh install」指令進行安裝。
前置作業完成後,即可解壓縮,進入「Reptile-2.0」目錄下,執行「./setup.sh install」指令開始安裝,如圖3所示。
大部分均使用預設的設定,只有Reverse Shell的設定可先指定要連線的IP,如圖4所示,設定所要連線的IP為10.101.3.179、連線所用的通訊埠為4444,至此完成整個安裝Reptile流程。
安裝完成後,到攻擊方的主機上,安裝libreadline-dev程式庫,比照上述程序下載Reptile的原始碼,如圖5所示,這次則使用「./setup.sh client」來編譯Client端程式,之後就可進入「bin」目錄下執行client。
然後進行最後一個步驟,為了攻擊目標主機須先設定相關參數,來達成與目標連線完成,如圖6所示,全部設定完成後就能夠順利執行,看到目標主機的相關訊息。
一完成連線,就能進行下載或上傳檔案的動作,例如如圖7所示使用download指令將「/etc/passwd」下載至我們的主機,或是執行Shell來登入目標主機。
但是,在登入目標主機後,可以發現到「/reptile」這個目錄被隱藏了,可透過執行「/reptile/reptile_cmd show」指令將這個目錄顯示出來,如圖8所示。
如圖9所示,使用「netstat -atulnp」指令時,並沒發現到可疑連線,再使用另一台主機10.101.3.61對目標主機進行SSH連線,這時透過netstat指令也確實有出現,但可再使用「/reptile/reptile_cmd tcp 10.101.3.61 40356 hide」指令將這段訊息隱藏起來,如圖10所示。
透過上述的層層步驟,Reptile惡意軟體已經隱藏於作業系統中,所有的功能可以更改與操作,也增加了挖掘蹤跡的困難度。不過要注意的是,在安裝前須確定相關的核心程式都已安裝完成,以Ubuntu來說,可透過如圖11所示的指令將Reptile變身成root,所使用的平台為Ubuntu 18.04 4.15.0-29-generic。
檢測過程
既然已經知道Reptile惡意軟體的安裝與操作流程,即可從中找出弱點而選擇適合的工具進行檢測,以下是針對Reptile的檢測流程。
首先,透過安裝Unhide工具來找出被隱藏起來的程序,使用「unhide proc reverse sys」,就可發現剛被隱藏的SSH連線,如圖12所示。
另外,可透過ss指令來找出目前有建立連線的訊息。ss這個指令為顯示Socket Statistics,可以看到連線的細節,而使用「ss -tn」指令就會顯示目前使用TCP連線與相關通訊埠號碼等相關訊息,便可發現被隱藏的蹤跡,找出過去建立過的訊息,如圖13所示。
情境演練
話說有一家知名上市科技公司名為台黃電,主要研發物聯網與工業電腦相關應用,身為上市上櫃的資深工程師小明,是一位名副其實的拼命三郎,整天都在為公司賣命,在研發部門的小明可以說是不眠不休地在開發新的物聯網應用,寫程式對他來說就是家常便飯。一如往常工作的小明終於在過年前準備開發出一套能為公司增加產值上億轟動全國的物聯網產品,只差程式碼的優化與產品的整合,就能問世。
誰知道就在公司準備要發表的前一周,與他們競爭的另一家公司黃海科技竟然早在台黃電發表前開記者會公布這套新物聯網的產品,小明百思不得其解,明明是自己親手研發出來的,為什麼別家公司會研發出一模一樣的東西,又這麼剛好在要發表的前一周提前搶先公開,專利營利所有東西就在一夕之間被搶走。就當小明失落走在大街上時,回想事情並不單純。就在一個月前,他的大學同學阿哲有來公司找他寒暄聊天。
阿哲是黃海科技的資深工程師,大學時期都與小明一起寫程式,阿哲心裡明白程式能力一直都不及他的好朋友小明,所以就在那天到了台黃電找小明時,趁小明去倒咖啡時偷偷動了他的電腦,將早已準備好的Rootkit惡意軟體植入進去。
阿哲先在小明的電腦裡執行「./setup.sh install」,將事先準備好的Reptile程式碼進行安裝並設定好參數(圖14)。完成後,再透過指令將Reptile技術變成Root(圖15),藉此任意操作相關功能並可獲得更高的權限,想從中觀察看看小明近期是否有那些大作要產出,結果還真的發現該公司準備要發表這麼轟動的產品,於是背叛了小明將資料竊取出來,再經過整合後搶先發表。
雖然小明心有懷疑,但也無憑無據,不敢去找阿哲求證,只好展開調查,從頭到尾將自己所有電腦設備中的軟體做安全性的檢查,卻怎麼也找不到任何蛛絲馬跡,只好跑去尋求公司內部的資安部門小王。小王經驗老到也是公司的得意主力,經過摸索後才發覺是在Linux系統中被植入了Reptile Rootkit惡意軟體,因為在開發物聯網時,多數使用Linux作業系統做開發,小明平時沒注意到作業系統原來也會遭受到攻擊,這套惡意軟體的藏匿性又很高,才會讓小明不自覺地掉入陷阱,不過這下終於可以找阿哲理論了。
小王經過專業的分析與工具的妥善運用,先運用Unhide工具來檢測是否有程序被隱藏(圖16),然後透過ss指令找出是否有建立連線的蹤跡(圖17),終於檢測出狡猾的惡意程式藏匿位置,讓真相水落石出。
結語
本文針對Linux作業系統做相關的資安檢測與防護,雖然只有針對其中一種攻擊手法做詳細的研究,不過在對Rootkit惡意攻擊的狀態已能掌握一部分,可透過Unhide檢測工具與ss指令查出惡意攻擊的真相,算是讓Linux系統有了多一層安全防護。
未來也可能會因系統的更新,使得Rootkit有更棘手的變化,或是有更難以預防的其他惡意攻擊出現。目標攻擊作業系統的討論度已遠不及應用程式的安全防護,但在開發新科技時都必須使用底層的系統作為輔助開發之一,像是人工智慧物聯網、5G通訊設備,各國家的相關建設等等。也就是說,作業系統提供軟體開發與運作的環境,必須有基於安全的作業系統,一旦遭受入侵,所有運行其上的軟體將不再安全。
現今網路攻擊越來越多樣化,變化多端的惡意程式總是讓人措手不及,必須重視一般使用者對資安的背景知識以及相關安全操作教學,才不易掉入駭客的陷阱。
<本文作者:黃彥哲,ESAM網管與傳播中心技術工程師並為國立台北大學密碼編碼與計算理論實驗室成員,實驗室創立於2009年,主持人為資訊工程學系特聘教授張仁俊,實驗室的研究領域除包含與資訊安全相關的密碼技術、編碼技術、計算理論外,也涵蓋車載資通訊安全、網路安全、數位影像處理與版權保護、醫學影像、數據分析等領域。>