郭 航,連一峰
(1.中國科學院 軟件研究所,北京100190;2.中國科學院大學,北京100049)
通過對內核系統調用的偵聽和分析發掘網絡攻擊行為,是信息安全領域的重要研究方向。文獻 [1-8]均通過對日志中系統調用及其參數的分析獲得系統可能遭受的攻擊的信息。在受到攻擊的情況下,系統產生的系統調用數量十分龐大。如何對系統調用進行合理有效地精簡和過濾,成為一個亟需解決的問題。當前不同研究提出了不同的系統調用過濾規則,針對特殊進程和文件對系統調用進行刪減。如刪去包含文件 “/dev/pts”、 “/dev/ptmx”、 “/var/log/*”等對于攻擊分析無作用的系統調用。文獻 [9]在此基礎上提出應刪去只被進程讀取而未被更改的文件所對應的系統調用。
以上過濾規則的提出均依賴于已知的與攻擊無關的文件、進程信息,這些信息內容繁多,且與攻擊類型密切相關。由于過濾規則的局限性和專一性,可能無法對其它攻擊行為所產生的系統調用進行有效地精簡。由此,本文提出一種基于屬性數據的系統調用過濾方法,并實現了一個名為 “系統調用分離器”的過濾工具。與現有的過濾方式相比,本文方法通過偵聽和分析系統調用的屬性數據,引入系統調用依賴規則,將惡意系統調用從龐雜的日志中分離并組成精簡日志。
定義1 系統對象:表示系統中進程、文件、套接字、內存頁等對象信息。
定義2 系統調用的屬性數據:表示由系統調用參數直接或間接獲得的系統調用所包含的系統對象的詳細信息。
間接的屬性數據如文件路徑名、文件索引節點號、IP地址、端口號等需要在偵聽腳本中嵌入相應代碼才能得到。
表1 給出了系統調用的各類屬性數據。如系統調用“open:syscall:open start:1349914348.877244end:1349914348.877247pid:6811ppid:6803pcmd:useradd pathname:/etc/gshadow inode:1493098O_CREAT:0”,其中包含了系統調用名、起止時間、進程、文件、標志位等屬性數據信息。
表1 系統調用的屬性數據
本文重點分析表1中字體 “加粗”的屬性數據:
(1)對于一個文件,雖然可通過其文件路徑名 (pathname)和文件索引節點號 (inode)進行唯一標識,但即使是同一個文件路徑名,當這個文件被重新創建時,系統依然會為它分配一個不同的文件索引節點號。若僅使用文件路徑名和索引節點號進行分析,則會遺漏相應的惡意調用。因此,本文選取文件路徑名 (pathname)對文件進行分析。
(2)對于一個進程,本文選取進程ID (pid)進行分析。進程執行命令名 (pcmd)因進程在執行不同文件時會發生變化,因此不作為分析對象。
(3)對于一個套接字,選取其IP地址信息進行分析。同一個惡意IP地址會對應很多不同端口號,若加入端口號進行分析則增加了分析復雜度。
(4)對于一個內存頁,選取其起始地址 (如addr、startaddr等)和映射到該地址空間的字節數 (len)信息進行分析。
定義3 系統調用依賴規則:表示將系統調用按照其所包含的系統對象間讀取、寫入、更改、創建等不同操作關系進行分類的規則。
表2 列出了系統調用依賴規則。本文僅針對表2的35種系統調用進行研究。
表2 系統調用依賴規則
其中,第2行與第7行所包含的系統調用為 “讀”類系統調用,這些系統調用所包含的進程對文件或套接字僅進行了讀取,并未對其進行更改和寫入。而其余行所包含的系統調用則被規定為 “寫”類系統調用。這些系統調用所包含的進程對文件、套接字或另一個進程進行了更改、寫入或創建操作。套接字之間的通信,如第九行的 “socket socket”也被視為 “寫”類操作,相應系統調用也被歸入“寫”類。某些系統調用因標志位的不同取值或包含不同的系統對象信息,可能出現在表2不同的行中,此處不再贅述。
定義4 惡意系統對象:表示由網絡攻擊直接包含或產生的,與攻擊有直接關系的進程、文件和套接字,以及被其所感染的系統對象。標記為 “red”,如red進程、red文件等。其余不是網絡攻擊直接包含或產生的,且未被感染的系統對象則被視為 “安全的”,標記為 “blue”,如blue進程、blue文件等。
定義5 惡意系統調用:表示直接或間接由網絡攻擊產生的系統調用,標記為 “red”;其余不是由網絡攻擊產生的系統調用均被視為 “安全的”,標記為 “blue”。
定義6 Red預知信息:表示在進行系統調用日志的精簡之前,得到的攻擊方初始IP地址及初始惡意文件路徑名等信息。
在本文模擬的攻擊場景下,根據Snort等入侵檢測系統的報警信息,使用工具 “BackTracker”分析系統調用日志,從而獲取Red預知信息。
定義7 Blue預知信息:表示系統中與網絡攻擊分析無關的文件信息。
系統中某些文件,如/dev/pts、/dev/ptmx、/var/log以及PIPE等,雖然會被惡意進程進行 “寫”操作,但這些文件不會被感染為惡意文件,且包含它們的系統調用對于攻擊分析也沒有幫助。因此,將這些文件信息記作 “Blue預知信息”。
本文提出的Red預知信息和Blue預知信息見表3。
表3 預知信息
針對套接字,本文僅關注AF_INET類型的套接字,用IP地址和端口信息進行唯一標識。AF_UNIX類型的套接字由于不包含IP地址信息,本文不做探討。
本文的研究基于對 “Red預知信息”及 “Blue預知信息”的已知,對網絡攻擊所使用的木馬文件具體內容及攻擊過程則設為未知?!癛ed預知信息”分為 “初始red文件信息”和 “初始red套接字信息”。二者分別放入red文件集合以及red套接字集合,并建立red進程集合。blue文件集合用于存儲 “Blue預知信息”。
針對系統調用日志中每一條系統調用信息進行如下分析。
如圖1所示,當一個系統調用為 “寫”類系統調用時,如果這個進程屬于red進程集合,該文件或套接字將被該進程感染為red,則將該文件加入red文件集合,將該套接字加入red套接字集合,系統調用標記為red;如果這個進程不屬于red進程集合,則需要確定被 “寫”的文件或套接字是否為red文件或red套接字。若是,則該進程被感染為red,加入到red進程集合中,系統調用被標記為red。若不是,則將系統調用標記為blue。
如圖2所示,當一個系統調用是 “讀”類系統調用時,如果這個文件或套接字屬于red文件集合或red套接字集合,讀取或使用它們的進程被感染為red,將其加入到red進程集合中,將系統調用標記為red;如果這個文件或套接字不屬于red文件集合或red套接字集合,即使讀取或使用他們的進程為red進程,被讀取的文件和套接字也不會被感染為red,系統調用也將被標記為blue。
當涉及進程之間的操作時 (例如一個進程創建或終止另一個進程),如圖3(a)所示,若該進程為red進程,其產生的所有子進程均被感染為red,系統調用被標記為red。而當一個red進程殺掉一個已有進程時,系統調用被標記為red。
有一類系統調用包含了2個套接字信息,如connect、accept、sendto、recvfrom等。如圖3(b)所示,當一個套接字為red時,意味著其IP地址信息屬于red套接字集合,與它通信的套接字被感染為red,系統調用也標記為red。
對于mmap2和mprotect系統調用的屬性數據,由于映射內存頁PAGE 0(Memory:0~4096)可能引起空指針解引用去執行惡意代碼,因此本文重點關注特殊內存頁PAGE 0。針對mmap2,當其地址信息 (addr)為NULL,而映射字節數 (len)為4096時表示PAGE 0。若該系統調用滿足上述特征,則被標記為red,否則為blue。針對mprotect,當其映射起始地址 (startaddr)為0,且其映射字節數 (len)為4096時該系統調用被標記為red,否則為blue。
當一個系統調用中包含的文件路徑名屬于blue文件集合時,由于該集合中的文件不會被感染為red文件,且其相應的系統調用與網絡攻擊分析無關,因此無論該系統調用包含的進程是否為red進程,都將此系統調用標記為blue。
以下為系統調用過濾算法偽代碼。
輸入:系統調用屬性數據信息
輸出:red或blue系統調用
算法:
(1)If(syscall is a read_class_syscall) //若為“讀”類系統調用
(2) if check_red_file (pathname)or check_red_socket(IP): //檢查文件或套接字是否為red
(3) check_and_add_pid (pid) //進程被感染為red,加入red進程集合
(4) red_fp.write (line_str) //該系統調用被標記為red
(5) else:
(6) blue_fp.write (line_str) //該系統調用被標記為blue
(7)elif (syscall is a write_class_syscall)//若為 “寫”類系統調用
(8) if check_red_process (pid)://檢查進程是否為red
(9) check_and_add_file (pathname)or check_and_add_socket(IP): //文件或套接字被感染為red,加入各自red集合
(10) red_fp.write (line_str) //該系統調用被標記為red
(11) else:
(12) if check_red_file (pathname)or check_and_add_socket(IP): //若進程不為red,則檢查文件或套接字是否為red
(13) check_and_add_pid (pid) //進程被感染為red,加入red進程集合
(14) red_fp.write (line_str) //該系統調用被標記為red
(15) else:
(16) blue_fp.write (line_str) //該系統調用被標記為blue
本文采用Python語言實現名為 “系統調用分離器”的過濾工具。工具架構如圖4所示,輸出的包含所有red系統調用的文件便是精簡后的日志文件。
圖4 “系統調用分離器”架構
本文參考文獻 [10]所提出的網絡攻擊情景,模擬了一個 “三步”遠程網絡攻擊。如圖5所示,第1步:攻擊者利用SSH 服務器 (OpenSSL 0.9.8g)的漏洞CVE-2008-0166,發起蠻力密鑰猜測攻擊 (brute-force key guessing),可獲得root權限。第2步:當NFS服務器 (UNFS3)的共享表 (export table)被錯誤配置時,允許任意用戶通過一個公共文件夾 (/export)共享任意文件。因此可通過SSH服務器上載一個木馬文件到該文件夾。該木馬文件包含了針對受害主機 (Linux kernel 2.6.24)存在漏洞 CVE-2009-2692的利用代碼。第3步:當用戶無意間裝載了該木馬文件時,木馬文件首先獲取受害主機的root權限,并創建一個用戶賬號,以便攻擊者登錄受害主機并獲取主機上的重要文件等信息。
為了避免遺漏重要的惡意系統調用,需要偵聽Linux內核所有正在運行的進程,并同時偵聽網絡中主機間套接字的通信信息。根據本次研究對于系統調用屬性數據的定義及設置,應偵聽每一個系統調用中全部屬性數據信息。本文選取了SystemTap工具對系統調用進行偵聽及獲取。SystemTap是一個開源的、可監控和偵聽運行中的Linux系統操作的軟件。SystemTap可嵌入由C語言編寫的腳本代碼,從而實現功能的擴展。通過編寫偵聽腳本文件,可偵聽Linux內核系統調用的全部屬性數據。本次研究中編寫的腳本 “trace.stp”包含對全部屬性數據的偵聽腳本代碼。
表4 列出了本文模擬攻擊場景下SSH服務器、NFS服務器,以及受害主機所產生的系統調用日志,通過 “系統調用分離器”進行精簡后的效果及耗費時間。為進行對比分析,分別記錄3次精簡過程的用時。
表4 “系統調用分離器”精簡日志的精簡時間及效果
由表4可清楚看到系統調用被精簡前后的數量變化。其中SSH服務器的系統調用數量由82242個精簡為10673個,精簡率87.02%;NFS服務器的系統調用精簡率22.11%;而受害主機的系統調用精簡率90.94%;由于本次模擬的攻擊情景首先利用SSH服務器的漏洞,發起蠻力密鑰猜測攻擊,導致系統產生大量包含惡意IP地址的 “套接字”類系統調用,如accept、sendmsg、recvmsg等。這使得SSH服務器系統調用精簡率略低于受害主機情況。在蠻力密鑰猜測攻擊成功后,攻擊者通過SSH服務器上傳惡意文件到NFS服務器,而受害主機用戶則從NFS服務器裝載該惡意文件,這導致系統產生大量對惡意文件的讀寫操作,其系統調用日志中包含了大量涉及惡意文件的 “讀”、“寫”類系統調用。因此,NFS服務器系統調用日志的精簡率與SSH服務器及受害主機相比差距較大。
在耗時方面,針對SSH服務器、NFS服務器及受害主機所產生的系統調用日志進行精簡,平均用時分別為1.087 s、0.130s,以及0.823s。
文獻 [10]提出了一種基于系統調用日志的網絡攻擊分析工具,其第一步便是通過系統調用日志生成 “系統對象依賴圖”(SODG)。通過本文方法對系統調用日志進行精簡,可大大降低分析工具的時間開銷。表5給出了未精簡和精簡后系統調用的數量、生成SODG的時間開銷、系統對象數等數據的對比信息。
可見,本文提出的方法在精簡系統調用日志數量方面,以及在精簡日志被用于網絡攻擊分析的效率方面都呈現了很好的效果。
為了驗證本文實現的 “系統調用分離器”在精簡過程中有無錯刪、誤刪重要的、惡意的系統調用,我們首先通過文獻 [10]提出的方法對未精簡的系統調用日志進行分析,繪制出系統對象依賴圖 (SODG),使用該方法進行路徑分析得到一條潛在的網絡攻擊路徑 (如圖6所示),該路徑中包含全部惡意的系統對象及其相應的系統調用。而通過本文方法所得到的惡意 (red)系統對象及惡意 (red)系統調用實際上是真正起到攻擊效果的惡意系統對象及系統調用的超集。
表5 精簡與未精簡數據分析的對比結果
圖6 中,被標記為灰色的圖形表示真正起到攻擊效果的惡意系統對象。其中,橢圓代表惡意文件,菱形代表惡意套接字,矩形代表惡意進程。而它們之間的連線則代表不同的惡意系統調用。
通過將攻擊路徑中包含的全部惡意系統對象放入精簡后的系統調用日志中進行查找匹配。使用本文提出的 “系統調用分離器”所精簡的系統調用日志包含全部起到攻擊效果的、惡意的系統對象及系統調用。與此同時,通過查找匹配,精簡日志也包含出現在圖6攻擊路徑中其它的系統對象及系統調用??芍?,“系統調用分離器”在大幅提升分析效率的同時,保證了精簡日志的準確性。
如何對系統調用進行高效、合理地精簡,在基于系統調用的網絡攻擊分析中成為一個亟需解決的問題?,F有的系統調用精簡方法均依賴于特定的過濾規則,精簡結果差強人意。由此,本文提出了一種基于屬性數據的系統調用過濾方法。通過偵聽和分析系統調用的屬性數據,引入系統調用的依賴規則,總結出一套判斷系統調用惡意性的分析方法。在此基礎上實現了名為 “系統調用分離器”的過濾工具,對該工具進行了測試及實驗分析。實驗結果表明,該方法可有效地精簡系統調用日志,且保持了精簡的準確性。
下一步將研究系統調用依賴規則對過濾效果的影響程度,并提出更完善的過濾方法,實現對系統調用日志的合理精簡。
[1]TAO Fen,YIN Zhiyi,FU Jianming.Software behavior model based on system calls [J].Computer Science,2010,37 (4):151-157(in Chinese).[陶芬,尹芷儀,傅建明.基于系統調用的軟件行為模型 [J].計算機科學,2010,37 (4):151-157.]
[2]HUANG Guoyan,GAO Jianpei,CHANG Xuliang.Intrusion detection method based on parameters of system call[J].Computer Engineering,2010,36 (12):153-156 (in Chinese).[黃國言,高建培,常旭亮.基于系統調用參數的入侵檢測方法 [J].計算機工程,2010,36 (12):153-156.]
[3]FAN Enkui,CHEN Yajun.Analysis of system call based on Linux operating system [J].Journal of Chongqing University of Science and Technology,2008,10 (6):124-126 (in Chinese).[范恩魁,陳亞軍.基于Linux操作系統的系統調用分析 [J].重慶科技學院學報,2008,10 (6):124-126.]
[4]SUN Xiaoyan,ZHU Yuefei,HUANG Qian,et al.Generation of system malicious behavior specification based on system call trace [J].Journal of Computer Applications,2010,30(7):1767-1770 (in Chinese).[孫曉妍,祝躍飛,黃茜,等.基于系統調用蹤跡的惡意行為規范生成 [J].計算機應用,2010,30 (7):1767-1770.]
[5]TIAN Xinguang,QIU Zhiming,LI Wenfa.Anomaly detection of program behavior based on system call and data mining [J].Computer Engineering,2008,34 (2):1-3 (in Chinese).[田新廣,邱志明,李文法,等.基于系統調用和數據挖掘的程序行為異常檢測 [J].計算機工程,2008,34 (2):1-3.]
[6]WANG Qiong,NI Guiqiang,PAN Zhisong,et al.Anomaly detection of program behavior based on improved hidden Markov model(HMM) [J].Journal of Data Acquisition & Processing,2009,24 (4):508-513 (in Chinese).[王瓊,倪桂強,潘志松,等.基于改進隱馬爾可夫模型的系統調用異常檢測[J].數據采集與處理,2009,24 (4):508-513.]
[7]LIU Zhu,CHEN Jing,FANG Liang.Anomaly detection on system call trace based on support vector data description [J].Computer Acquisition and Software,2012,29 (1):291-293(in Chinese).[劉竹,陳晶,方良.基于支持向量數據描述的系統調用軌跡異常檢測 [J].計算機應用與軟件,2012,29(1):291-293.]
[8]SHI Jingxiang,CHEN Shuyu,HUANG Hanhui.Research on kernel level Rootkit technology based on Linux system call[J].Computer Technology and Development,2010,20 (4):175-178(in Chinese).[石晶翔,陳蜀宇,黃晗輝.基于Linux系統調用的內核級Rootkit技術研究 [J].計算機技術與發展,2010,20 (4):175-178.]
[9]Xiong X,Jia X,Liu P.Shelf:Preserving business continuity and availability in an intrusion recovery system [C]//In ACSAC,2009.
[10]Dai Jun,Sun Xiaoyan,Liu Peng.Patrol:Revealing zero-day attack paths through network-wide system object dependencies[C]//In ESORICS,2013.