謝萱萱,李俊娥,李福陽,許逸凡,劉林彬,陳錦山
(1.空天信息安全與可信計算教育部重點實驗室 (武漢大學國家網絡安全學院),武漢市 430072;2.國網福建省電力有限公司電力科學研究院,福州市 350000)
“雙碳”目標下,隨著分布式能源的大規(guī)模接入和源網荷儲的協(xié)同消納,海量智能終端接入新型電力系統(tǒng)[1],系統(tǒng)暴露面日益擴大,信息物理系統(tǒng)(cyber physical system,CPS)的耦合效應使得網絡攻擊對電網安全穩(wěn)定運行的威脅也日益增大[2]。
分析現有的典型網絡攻擊事件[3-5]可知,后門常被攻擊者用來繞過安全機制。攻擊者可以在系統(tǒng)中留下后門以保持秘密通道,再次入侵時便可繞過身份驗證等安全機制[4]。并且后門還具有隱藏自身或其他惡意代碼、清除訪問痕跡等功能[6-8],使得攻擊潛伏期更長、更隱秘,更不易被檢測到。例如,SSH后門被BlackEnergy利用來連接C&C服務器,下載KillDisk組件清空系統(tǒng)日志和刪除覆蓋相關文件,并清除攻擊痕跡[9]。新型電力系統(tǒng)中,由于網絡空間的開放性,智能終端的后門更容易被攻擊者利用。因此,對電力智能終端開展后門檢測可以及時發(fā)現和清除隱患,極大程度上避免遭受攻擊,保障電力系統(tǒng)安全運行。
現有后門檢測方法包括可執(zhí)行路徑分析法、特征碼對比法、行為檢測法、基于虛擬機的檢測方法和基于機器學習的檢測方法等[10]。由于智能終端計算和存儲資源有限,下文按照資源開銷大小將各類方法進行分類綜述。
現有方法中,可執(zhí)行路徑分析法、特征碼對比法和行為檢測法的資源開銷較少??蓤?zhí)行路徑分析法主要是通過建立每個系統(tǒng)調用的執(zhí)行路徑,以檢測異常系統(tǒng)調用。例如,文獻[11]基于細粒度控制流完整性(control flow integrity,CFI),提出了基于狀態(tài)機和CFI約束規(guī)則的檢測模型,可檢測內核級代碼復用攻擊。這類方法適用性窄,且實現較為復雜。特征碼對比法使用靜態(tài)特征(如字節(jié)序列、字符串和匯編指令等)進行后門檢測。例如,文獻[12]通過文件檢測和可加載內核模塊(loadable kernel modules,LKM)檢測后門的文件修改行為和內核可疑行為;文獻[13]基于文件特征、內核關鍵數據結構等進行后門檢測;文獻[14]基于API調用序列提出基于馬爾科夫鏈的惡意軟件檢測方法。這類方法檢測效率高,但單特征檢測方法的準確率不高。行為檢測主要是用于檢測惡意代碼的功能行為。例如,文獻[15]利用惡意代碼必須改變控制流或數據結構的特點,根據虛擬內存訪問模式對惡意行為分類,可檢測內核Rootkit后門;文獻[16]針對Rootkit隱蔽性強的問題,提出基于Rootkit隱藏行為特征的取證方法,可對未知惡意代碼進行取證;文獻[17]提出一種基于網絡流量差異的分析方法,可檢測具有網絡連接特征的后門。這類方法檢測準確率高,但誤報率也高。
基于虛擬機的檢測方法和基于機器學習的檢測方法資源開銷較大?;谔摂M機的檢測將被監(jiān)控系統(tǒng)和檢測系統(tǒng)安裝在不同的虛擬機中運行,通過檢測操作系統(tǒng)內核對象視圖的變化來判斷系統(tǒng)是否感染后門。例如,文獻[18]通過在虛擬機中跟蹤內核系統(tǒng)調用,采用非線性、相空間算法以標記感染和未感染主機之間的差異;文獻[19]基于虛擬機自省技術,提出一種Rootkit檢測方法,可定位Rootkit文件并清除;文獻[20]通過跟蹤內核活動來過濾Rootkit的LKM。文獻[21]提出一種基于虛擬機架構的計數追蹤檢測方法,將理想狀態(tài)和實際的內核函數調用情況進行對比,實現異常檢測。這類方法計算和存儲資源開銷大,且需要虛擬機進行輔助?;跈C器學習的檢測則是利用機器學習算法進行模型訓練和檢測。例如,文獻[22]基于硬件性能計數器和機器學習檢測Rootkit后門;文獻[23-26]將惡意代碼轉換為二維圖像,使用深度學習模型進行紋理分析以檢測Rootkit后門或惡意代碼;文獻[27-28]將機器學習和虛擬機內存取證等結合,可檢測內核Rootkit后門;文獻[29]考慮攻擊流量自相似特征,提出了一種基于長短期記憶網絡的檢測方法;文獻[30]提出了基于改進生成對抗網絡和極端隨機樹的攻擊檢測模型。但這類方法模型訓練時間長、計算和存儲資源開銷大、數據集要求高。
綜上所述,現有后門檢測技術用于電力智能終端后門檢測時存在如下不足:
1)電力智能終端后門樣本量少,無法使用基于大樣本數據的后門檢測方法,例如基于虛擬機和機器學習的檢測方法;
2)現有特征碼對比法可用于電力智能終端后門檢測,但其通?;趩我惶卣鬟M行檢測,無法完整表征后門異常行為,準確率不高;
3)現有檢測方法多是基于單一檢測技術,每種檢測技術有各自的優(yōu)缺點和適用場景,單一檢測技術的準確率不高。
針對電力智能終端后門樣本量少和基于單一特征的檢測方法準確率不高的問題,本文基于現有后門樣本詳細分析其特性、行為及代碼特征,從字符串特征和函數調用序列特征兩方面入手,構建多特征融合的后門特征庫,實現對后門的多方位靜態(tài)檢測;針對靜態(tài)檢測方法不適用加密、多態(tài)、變形等后門變體或加殼程序的問題,本文提出基于運行狀態(tài)的檢測方法,從文件狀態(tài)、網絡狀態(tài)和隱藏行為三方面實現對后門異常行為的動態(tài)檢測,進一步提高后門檢測的覆蓋率與準確率。
對電力智能終端類型及其使用的操作系統(tǒng)進行調研,結果如附錄A表A1所示。由附錄A表A1可知,電力系統(tǒng)主站系統(tǒng)類終端大多使用Unix、Linux及Windows系列操作系統(tǒng);末端節(jié)點裝置類終端大多使用Linux、VxWorks等嵌入式操作系統(tǒng),部分使用μC/OS-II或WinCE。因此本文主要針對Unix/Linux操作系統(tǒng)的后門進行分析,研究其后門類型、代碼特征和運行機制。
Unix/Linux操作系統(tǒng)中后門種類較多,現有研究大多針對Rootkit后門展開,而針對具有網絡連接特征的后門研究較少,因此本文選取幾類典型的具有網絡連接特征的后門樣本,分析代碼特征及運行機理,為后續(xù)后門檢測提供理論支撐。
1)Ping-back是最簡單的ICMP shell后門,代碼量不到100行,卻具備Unix/Linux ICMP后門的完整功能。程序運行后只要接收到對應大小的ICMP包即可激活,實現相應的功能。
2)ICMP-backdoor具有ICMP shell后門和Bind shell后門的功能,還具有從網絡中下載ELF文件并執(zhí)行的功能。
3)Prism是輕量級的用戶態(tài)后門,具有兩種模式。STATIC模式下將主動連接到指定的IP和端口;ICMP模式下通過接收含有特定口令的ICMP包激活連接,反向shell連接到攻擊者的主機,使攻擊主機獲得后門主機的控制權。Prism還可以清除iptables規(guī)則,從而避免自身的網絡報文被過濾。
4)Liinux是Bind shell后門與Rootkit后門結合的復合型后門,含有網絡連接模塊及Rootkit模塊,具有實現程序轉移及反向shell連接功能,并且可以通過vfs hook實現進程的隱藏和root權限的保持。
5)RatHole是C/S類型的網絡連接型后門,由運行于攻擊主機的連接程序Rat和運行于后門主機的后門程序Hole組成,Rat和Hole程序間通過口令驗證連接,不需要root權限運行程序就可實現后門功能。
上述后門樣本的詳細信息如表1所示。
表1 后門樣本的類型、特征及行為Table 1 Types,characteristics and behaviors of backdoor samples
通過1.1節(jié)的分析可知,不同種類的后門有不同的功能,多種后門相互配合可以實現和保持攻擊者對后門主機的訪問和控制。例如Rootkit后門主要通過隱藏其文件、端口和進程等方式實現對后門攻擊行為的隱藏。因此,對電力智能終端后門的檢測,需要考慮到后門特性及電力系統(tǒng)的特點。
針對電力智能終端后門樣本量少的問題,本文不考慮使用需要大樣本數據集的機器學習等算法,而是基于搜集到的現有后門樣本,詳細分析其特性、行為及代碼特征,以進行針對性地檢測。
由于電力智能終端運行時,其運行的程序和執(zhí)行的功能是固定的,因此其系統(tǒng)狀態(tài)具有以下特點:1)文件狀態(tài)周期性變化,即文件訪問對象固定、文件創(chuàng)建和刪除操作周期性出現,且一般只針對固定目錄;2)網絡狀態(tài)基本保持不變,即端口開放固定,網絡流量周期性變化,通信對象固定、無異常網絡訪問;3)運行進程基本保持不變,即進程運行列表基本不變,端口開放情況基本不變。
因此,本文提出一種面向新型電力系統(tǒng)的智能終端后門檢測方法,方案如圖1所示。
圖1 面向新型電力系統(tǒng)的智能終端后門檢測方案Fig.1 The intelligent terminal backdoor detection scheme for modern power system
圖1中,基于代碼特征的靜態(tài)檢測是針對系統(tǒng)運行代碼進行靜態(tài)檢測,包括字符串檢測和函數調用序列檢測,能快速檢測到代碼中異常的功能字符串、函數調用序列等,檢測準確率也較高。但是,基于特征碼的靜態(tài)檢測方法依賴樣本特征庫的完備程度,也不適用加密、多態(tài)、變形等后門變體或加殼程序。
因此,本文針對電力智能終端行為固定的特點,進一步提出了基于系統(tǒng)運行狀態(tài)的動態(tài)檢測方法,通過實時監(jiān)控智能終端運行時系統(tǒng)的文件、網絡等狀態(tài),檢測系統(tǒng)是否發(fā)生異常行為,將對后門的檢測轉變?yōu)閷箝T惡意行為的檢測。該方法不僅適用智能終端上線前和更新后,也適用運行階段。
上述兩種方法對后門的檢測涵蓋智能終端的上線前、運行時和更新后多階段,并且檢測方式和適用階段不同,可互為補充,以提高后門檢測準確率?;诖a特征的靜態(tài)檢測方法可以在智能終端上線前對其運行代碼做細致的安全檢測,及時發(fā)現后門,避免上線后造成損失?;谶\行狀態(tài)的動態(tài)檢測方法則是在終端處于運行態(tài)時,實時監(jiān)控系統(tǒng)的運行狀態(tài),可發(fā)現后門的惡意行為,適用靜態(tài)方法無法檢測到的加密、多態(tài)、變形等后門變體,以及不在代碼特征庫樣本范圍內的后門。
由1.1節(jié)及表1可知,電力智能終端后門可能引起的異常行為包括反向shell、異常網絡連接請求、異常文件操作、異常指令等幾類。這些行為在代碼層面通常會呈現出一些特征,按照其存在形式,可分為字符串特征和函數調用序列特征。
字符串特征指后門代碼中的關鍵字符串,如Linux命令等;函數調用序列特征指程序調用的系統(tǒng)函數序列,如網絡端口監(jiān)聽、外部文件下載執(zhí)行等異常行為對應的調用序列。分析后門樣本并總結得到智能終端后門異常行為的典型代碼特征,如表2所示。
表2 智能終端后門異常行為及其代碼特征Table 2 Abnormal behavior and code characteristics of intelligent terminal backdoor
1)字符串特征。
字符串特征是指智能終端后門為實現某些異常行為而在二進制文件中留下的字符串,包括命令字符串和特定字符串。
命令字符串主要包括shell字符串和Linux命令字符串。shell字符串主要出現在反向shell連接異常行為中,可利用shell字符串對Unix/Linux的命令程序和服務進行檢測,查看其內部是否被植入了反向shell的代碼。Linux命令字符串主要包括文件管理、文件傳輸、磁盤管理、網絡通信、系統(tǒng)管理及設備管理等各類Linux命令,它是異常指令的代碼特征。
特定字符串則是分析后門樣本中得到的提示或簽名信息或其他可疑字符串。
2)函數調用序列特征。
函數調用序列特征是指智能終端后門為實現某些異常行為而調用的函數的序列。表2中的函數調用序列特征說明如下。
dup2 + dup2 + dup2 + exec族調用序列可以重定向shell的標準輸入、標準輸出和標準錯誤輸出流,廣泛出現在所有的后門程序中,主要實現反向shell功能。
socket + bind + listen + accept調用序列實現網絡端口的監(jiān)聽,主要出現在Bind shell后門中,也是網絡連接中服務器端的函數調用序列。
socket + connect調用序列實現主動向外連接,主要出現在ICMP shell后門中,也是網絡連接中客戶端的函數調用序列。
open + open + read + write調用序列可以實現文件的轉移,出現在Liinux后門中。
read + write + fexecve調用序列實現外部文件的下載和執(zhí)行,主要出現在ICMP-backdoor中。
后門程序在實現相應的功能時,通常是多種函數調用序列組合使用。例如,Bind shell后門通過端口監(jiān)聽接收攻擊主機發(fā)起的連接,再進行反向shell連接,其函數調用序列特征則為監(jiān)聽端口+反向shell連接,即socket + bind + listen + accept + dup2 + dup2 + dup2 +exec族;ICMP shell后門通過解析ICMP包激活,向外連接至攻擊主機,并進行反向shell連接,其函數調用序列特征則為向外連接+反向shell連接,即socket + bind + listen + accept + dup2 + dup2 + dup2 +exec族;ICMP-backdoor從網絡下載ELF文件并執(zhí)行,其函數調用系列特征則為向外連接+外部文件執(zhí)行,即socket + connect + read + write + fexecve。
2.2.1 代碼特征庫
基于2.1節(jié)的異常行為代碼特征,根據特征對應的異常行為的危害程度,為每個特征設定危險等級,以此構建代碼特征庫,包括字符串特征庫和函數調用序列特征庫。
1)字符串特征庫。
字符串特征庫內存儲的信息包括字符串特征、字符串特征解釋、字符串特征對應的異常行為和字符串特征的危險等級等。字符串特征庫字段構成如表3所示。
表3 字符串特征庫結構Table 3 Structure of string feature database
2)函數調用序列特征庫。
函數調用序列特征庫內存儲的信息包括函數調用序列特征、函數調用序列特征解釋、函數調用序列對應的異常行為和函數調用序列的危險等級。函數調用序列特征庫字段構成如表4所示。
表4 函數調用序列特征庫結構Table 4 Structure of function call sequence feature database
2.2.2 字符串特征檢測
字符串特征檢測的對象是可執(zhí)行程序。為了更快速全面地進行檢測,本文采用模式匹配的方法對可執(zhí)行程序代碼進行字符串特征檢測。字符串特征檢測方法如算法1所示,其基本思路為,識別可執(zhí)行程序的所有字符串,利用哈希算法,快速查找字符串是否在特征庫中。
算法1字符串特征檢測1234567Input:stringFeatureLib,exeFile//字符串特征、可執(zhí)行文件Output:detectionResult//檢測結果strFeature←hash(stringFeatureLib);//將特征庫離散分布printableString←isPrint(exeFile);for string in printableStringif exist(string,strFeature) then//快速判斷是否存在detectionResult←append(getInfo(feature,str));endifendfor
2.2.3 函數調用序列特征檢測
函數調用序列特征與字符串特征性質不同,字符串特征的字符必須是連續(xù)和固定的,字符串內不能有其他的字符,而函數調用序列強調的是序列,即使序列中出現了其他函數調用,也不會影響到序列本身,因此檢測方法也不同。
函數調用序列檢測的對象是待檢測程序的函數調用序列列表,為了實現完整準確的檢測,本文采用模糊匹配方法,搜索程序的函數調用序列是否包含特征序列。
函數調用序列特征檢測方法如算法2所示,其基本思路為,判斷特征序列的函數在程序調用序列中是否全部出現,且順序是否一致。
算法2函數調用序列特征檢測1234567891011121314151617Input:funcSeqList,funcSeqFeaLib//函數調用序列列表、函數調用序列特征庫Output:detectionResultfor funSeq in funcSeqListfor funcSeqFea in funcSeqFeaLib index←0; preNum←-1; clear(isVisited[]); curNum←findInUnvisited(funcSeqFea[index],fun-Seq); while curNum>preNumdo isVisited[curNum]←true;preNum←curNum;index←index+1; curNum←findInUnvisited(funcSeqFea[index],funSeq); endwhile if index>=size(funcSeqFea)then detectionResult←append(getInfo(funcSeqFea,fun-Seq));endif endforendfor
上述基于異常行為代碼特征的靜態(tài)檢測無法檢測加密、多態(tài)、變形等后門變體或加殼程序。此外,后門的某些行為沒有特定的字符串,也無法以規(guī)范的函數調用序列表示,如后門的隱藏行為。因此,為了充分發(fā)現電力系統(tǒng)中的后門,需要進一步基于系統(tǒng)行為進行動態(tài)檢測。
傳統(tǒng)的基于系統(tǒng)行為的動態(tài)檢測方法,通常需要修改系統(tǒng)代碼,如hook系統(tǒng)調用函數,需要編譯并加載新的功能模塊,當用于系統(tǒng)上線前檢測,由于電力系統(tǒng)代碼非開源,這種方法顯然不適用。因此,本文提出基于系統(tǒng)運行狀態(tài)的后門檢測方法,無需修改系統(tǒng)代碼即可進行后門異常行為檢測。
文件狀態(tài)監(jiān)測對象是數據文件。為了保持對指定文件的狀態(tài)監(jiān)測,又不過多占用計算資源,本文采用定時循環(huán)檢測的方式,以固定時間為周期,每一個周期針對文件狀態(tài)庫里的文件進行一輪監(jiān)測。文件狀態(tài)監(jiān)測方法如算法3所示。
算法3文件狀態(tài)監(jiān)測1234567891011Input:fileStateLibOutput:monitorResultfilename,fileAddr,fileMD5,checkNum,checkTime←read(fileStateLib);//文件名、文件地址、文件MD5值、檢測次數、檢測時間for i←0 tosize(fileStateLib) oldFileMD5←fileMD5[i]; newFileMD5←calculateMD5OfFile(fileAddr[i]); if newFileMD5!=fileMD5[i]then//文件被修改monitorResult←append(getInfo(filename[i],fileAddr,newFileMD5)) endif checkNum[i]←checkNum[i]+1; checkTime[i]←getTime();endforwrite(fileStateLib,checkNum,checkTime);
3.2.1 網絡狀態(tài)
網絡狀態(tài)主要指端口開放、網絡流量及網絡訪問情況。電力系統(tǒng)運行時,其運行的程序和執(zhí)行的功能是固定的,因此其網絡狀態(tài)基本保持不變,即端口開放固定,網絡流量周期性變化、無異常網絡訪問。在網絡狀態(tài)的監(jiān)測中,需要監(jiān)測系統(tǒng)中有無可疑進程打開端口,網絡流量是否突然增大或減少,有無外部地址的網絡連接。
1)端口開放狀態(tài)可量化為端口開放總數及開放的端口號列表。
2)網絡流量狀態(tài)較為復雜,可分為兩個階段。第一個階段是日常運行階段,此階段末端節(jié)點定時給主站上送測量值和信號量,網絡流量恒定。第二個階段是發(fā)布控制命令階段,此階段主站給末端節(jié)點下發(fā)命令,由末端節(jié)點執(zhí)行相應操作,并將執(zhí)行情況上送給主站,會有網絡流量的激增,隨后緩慢下降到日常運行狀態(tài)。
3)網絡訪問狀態(tài)可量化為網絡訪問信息四元組,即
3.2.2 網絡狀態(tài)監(jiān)測
1)端口開放狀態(tài)讀取與監(jiān)測。
為了實時監(jiān)測端口開放的狀態(tài),并且不占用過多計算資源,本文采取雙重檢測的方式對端口開放狀態(tài)進行檢測。端口開放狀態(tài)檢測算法的具體步驟為:
步驟1:讀取系統(tǒng)初始狀態(tài)記錄模塊中的記錄端口開放總數PortNumber和記錄端口開放列表PortList,進入循環(huán)定時監(jiān)測。
步驟2:每隔一個周期,讀取并計算一次系統(tǒng)實時端口開放總數,并與PortNumber進行比較。
步驟3:如果相同,則等待下一個周期的檢測。
步驟4:如果不相同,則依次讀取系統(tǒng)開放的每個端口,查找其是否在PortList中,如果不在,則輸出端口號及提示信息。
2)網絡流量狀態(tài)讀取與監(jiān)測。
由于電力系統(tǒng)運行的不同階段中,網絡流量的特點不同,因此本文分階段對網絡流量狀態(tài)進行監(jiān)測,將其分為日常運行和下發(fā)控制命令兩個階段執(zhí)行。
因網絡流量變動性較大,對日常運行狀態(tài)下的平均網絡流量dailyAvgTraffic和最大網絡流量dailyMaxTraffic的記錄要在運行平穩(wěn)時選取,對控制命令下發(fā)階段的最大網絡流量exeMaxTraffic和恢復至日常運行狀態(tài)的時間recoveryTime的記錄要在下發(fā)不同的指令時進行統(tǒng)計選取。網絡流量狀態(tài)的讀取,可使用Linux下iftop命令查看并讀取,也可在電力系統(tǒng)交換機內進行監(jiān)測。
網絡流量狀態(tài)監(jiān)測方法如算法4所示,其基本思路為:首先判斷系統(tǒng)當前狀態(tài),若是控制命令下發(fā)階段,則檢測網絡流量最大值和流量恢復平穩(wěn)所消耗時間是否正常;若是日常運行階段,則檢測最大網絡流量和平均網絡流量是否正常。
算法4網絡流量狀態(tài)監(jiān)測12345678910111213Input:netTrafficLib,stateTimeOutput:monitorResultdailyAvgTraffic,dailyMaxTraffic,exeMaxTraffic,recover-Time←read(netTrafficLib);//日常網絡平均流量、日常網絡最大流量、控制命令下發(fā)階段網絡最大流量、恢復至日常狀態(tài)的時間maxTraffic←getMaxTraffic(stateTime);if controlCommand() then//控制命令階段 time←getRecoverTime(stateTime); if maxTraffic>exeMaxTrafficortime>2?recover-Time thenmonitorResult←append(getInfo(‘command’,maxTraf-fic,time)); endifelsethen//日常狀態(tài) aveTraffic←getAverageTraffic(stateTime); if maxTraffic>dailyMaxTrafficoraveTraffic>2?dailyAvgTraffic thenmonitorResult←append(getInfo(‘daily’,maxTraffic,aveTraffic)); endifendif
3)網絡訪問狀態(tài)讀取與監(jiān)測。
網絡訪問狀態(tài)的監(jiān)測對象是系統(tǒng)網絡訪問狀態(tài)信息。對網絡訪問狀態(tài)的讀取,可使用Linux下的netstat命令,查看并記錄所有網絡連接信息。網絡訪問狀態(tài)監(jiān)測算法的具體步驟為:
步驟1:讀入系統(tǒng)初始狀態(tài)記錄模塊中的所有網絡連接四元組信息
步驟2:每隔一個周期,讀取系統(tǒng)當前的所有網絡連接的四元組信息;針對一條系統(tǒng)網絡連接信息,判斷該條信息是否在網絡訪問狀態(tài)庫中。
步驟3:如果在,則檢測下一條系統(tǒng)網絡連接四元組信息。
步驟4:如果不在,則系統(tǒng)出現異常網絡連接,輸出告警信息。
步驟5:如果當前為最后一條網絡連接數據,則程序終止,等待下一個周期的網絡訪問狀態(tài)監(jiān)測,否則進行下一條網絡連接信息的檢測。
隱藏行為包括文件隱藏、端口隱藏和進程隱藏[14]。此類行為通常出現在Rootkit后門中,電力系統(tǒng)正常運行時不應存在隱藏行為,因此對隱藏行為的檢測可以發(fā)現系統(tǒng)的Rootkit后門。
3.3.1 文件隱藏檢測
文件隱藏通常與后門文件轉移行為相聯(lián)系,通過修改文件或文件夾名稱,可將文件轉移至隱藏文件夾下,或直接隱藏文件。
1)在文件/文件夾名稱前加上“.”即可在普通查看文件的方式下實現文件的隱藏,更具迷惑性的則直接以“..”或“...”作為文件或文件夾的名稱。對這類文件隱藏方式的檢測,可采用ls-al命令顯示所有文件及文件夾,遍歷查找所有以“.”開頭的文件和文件夾。
2)修改ls命令程序,使ls命令在列出文件時對部分文件進行隱藏。修改ls程序后會改變該命令程序的md5值,因此可在文件狀態(tài)監(jiān)測時發(fā)現此種形式的隱藏文件。
3.3.2 端口隱藏檢測
端口隱藏通常是后門在進行網絡監(jiān)聽時,用于隱藏自身進程及監(jiān)聽的端口,以躲避運維人員的檢測。
用戶查看端口一般使用netstat命令,該命令通過讀取并解析/proc/net/udp和/proc/net/tcp文件獲取TCP和UDP連接信息,后門可通過hook顯示函數,如顯示TCP連接信息的tcp_seq_show()函數,在顯示函數結果中刪除需要隱藏的端口,即可達到端口隱藏的目的。
因此,檢測隱藏端口要避免使用netstat命令,可通過如telnet連接、nmap工具、nc指令等對所有端口進行遍歷來進行。在對目標終端進行端口遍歷偵聽后,得到開放端口列表,利用3.2.2節(jié)中的端口開放狀態(tài)檢測算法,找出隱藏端口,輸出相關信息。
3.3.3 進程隱藏檢測
進程隱藏是Unix/Linux的Rootkit后門最主要的功能。Rootkit實現進程隱藏的主要方式liangz及對應的檢測方法如下所述。
1)通過修改或替換ps、top等進程查看工具隱藏/proc/pid目錄下的進程信息。此種方式與修改ls命令隱藏文件類似,會改變ps命令程序的md5值,因此可在文件狀態(tài)監(jiān)測時發(fā)現此種形式的進程隱藏,也可讀取并遍歷/proc/pid中存儲的進程信息,與ps命令執(zhí)行結果進行對比,判斷是否存在進程隱藏行為。
2)通過sys_get dents()系統(tǒng)調用進行hook,攔截對/proc/pid虛擬文件系統(tǒng)的訪問和讀取,實現進程對用戶的隱藏。對于此類進程隱藏方式的檢測,可通過比較用戶級進程列表和內核進程列表的差異來獲取隱藏的進程信息。其中,用戶級進程列表可利用ps或cat/proc命令獲取;內核進程列表可利用Linux提供的kprobe調試技術獲取。
綜上,隱藏行為的分類、隱藏方式及對應的檢測方法如表5所示。
表5 隱藏行為的隱藏方式及檢測方法Table 5 Hidden way and detection method of hidden behavior
本文選取1.1節(jié)后門樣本作為惡意樣本,同時選取Linux常見的命令程序作為良性樣本進行對比分析,驗證檢測方法的有效性和準確性。惡意樣本包括Ping-back、ICMP、Prism、Liinux和RatHole共5類,由于Prism后門具有多種功能,因此編譯出4種形式,分別是Prism(ICMP模式)、Prism-static(Static模式)、Prism-iptables (ICMP模式+iptables功能)、Prism-static-iptables(STATIC模式+iptables功能),RatHole后門選取Hole程序作為樣本。良性樣本包括/bin文件夾下的所有Linux命令程序,共119個。
4.1.1 字符串特征檢測結果
字符串特征檢測方法的實驗結果如表6所示,可見,針對不同后門樣本,算法能檢測出相應的異常字符串。
表6 字符串檢測結果Table 6 Results of string feature detection
4.1.2 函數調用序列特征檢測結果
函數調用序列特征檢測方法的實驗結果如表7所示,可見,針對不同后門樣本,算法能檢測出相應異常行為的函數調用序列,但無法檢測出隱藏行為。這是因為這類行為沒有特定的字符串,也無法以規(guī)范的函數調用序列表示,需要使用基于系統(tǒng)運行狀態(tài)的動態(tài)檢測方法進行檢測。
表7 函數調用序列檢測結果Table 7 Results of function call sequence detection
后門樣本的系統(tǒng)運行狀態(tài)監(jiān)測結果如表8所示。由于條件限制,本文實驗未能模擬整個電力系統(tǒng)環(huán)境,未得到電力系統(tǒng)日常運行及下發(fā)命令階段的網絡流量情況,故未在表中列出。
表8 運行狀態(tài)監(jiān)測結果Table 8 Results of running status monitoring
由表8可見,實驗中對后門運行狀態(tài)的監(jiān)測,可以檢測出各類異常運行狀態(tài),如網絡訪問情況和隱藏行為等,結果符合預期。
4.3.1 結果分析
本文方法的準確率和誤報率如表9所示。其中,準確率為后門樣本檢出的結果數量/后門樣本總數量;誤報率為非后門樣本檢出結果數量/樣本檢出結果數量。
表9 異常行為代碼特征檢測準確率及誤報率Table 9 Accuracy and false positives rate of abnormal behavior code feature detection
從表9可見,由于代碼特征檢測方法無法檢測進程隱藏這類隱藏行為,其準確率為82.1%,誤報率為1.5%。而綜合代碼特征和運行狀態(tài)的檢測方法,準確率提升到98.5%,誤報率降低至0.8%,結果較為理想。
4.3.2 與現有工作的對比
現有方法中,由于可執(zhí)行路徑分析和基于虛擬機的檢測法無法計算準確率,因此選取其余方法進行對比實驗,結果如表10所示。
表10 與現有方法的對比Table 10 Comparison with existing methods
因智能終端計算和存儲資源有限,本文以計算和存儲資源開銷判定一個方法是否適用于電力系統(tǒng)?,F有方法中,可執(zhí)行路徑分析法適用性窄、實現復雜,基于虛擬機的檢測法資源開銷大,基于機器學習的檢測法需要大樣本數據集、資源開銷大,因此這3種方法均不適用電力系統(tǒng)場景。需要說明的是,由于缺少樣本數據,基于機器學習的檢測方法實驗使用的不是電力智能終端后門樣本數據。
由表10可知,在適用于電力智能終端的方法中,本文方法檢測結果優(yōu)于其他對比方法。
后門具有隱蔽性和潛伏性,是攻擊者達成攻擊目的的重要途徑。若電力系統(tǒng)智能終端存在后門,將極大地威脅電力系統(tǒng)的安全穩(wěn)定運行。本文總結了電力智能終端及其使用的操作系統(tǒng),分析了智能終端后門的異常行為及代碼特征,針對電力智能終端的運行特點,提出了基于代碼特征和運行狀態(tài)的、動靜結合的后門檢測方法。本文方法從字符串特征和函數調用序列特征兩方面,對電力系統(tǒng)二進制代碼進行靜態(tài)檢測,彌補了單特征檢測準確率不高的缺陷;然后從文件狀態(tài)、網絡狀態(tài)和隱藏行為三方面,對電力智能終端后門異常行為進行動態(tài)檢測,進一步提高后門檢測準確率。
實驗結果表明,由于代碼特征檢測方法無法檢測進程隱藏這類隱藏行為,其準確率為82.1%,誤報率為1.5%。而綜合代碼特征和運行狀態(tài)的檢測方法,準確率提升到98.5%,誤報率降低至0.8%,結果較為理想。
本文研究針對Unix/Linux操作系統(tǒng),下一步將擴展至嵌入式Linux和Windows操作系統(tǒng),即覆蓋所有的電力系統(tǒng)智能終端。此外,搜集更多不同類型的后門樣本,完善后門的異常行為、代碼特征和運行狀態(tài)等,進一步提升后門檢測方法的覆蓋率和準確率。
附錄A
表A1 電力系統(tǒng)智能終端及其使用的操作系統(tǒng)Table A1 Power industrial control terminal and its operating system