版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ClamAV軟件分析與使用劉功申上海交通大學信息安全工程學院ClamAV軟件分析與使用劉功申本章學習目標了解ClamAV引擎的框架了解ClamAV的核心代碼掌握ClamAV使用方法本章學習目標了解ClamAV引擎的框架本章內(nèi)容ClamAV的總體結(jié)構(gòu)ClamAV的使用說明安裝配置源代碼分析章節(jié)實驗本章內(nèi)容ClamAV的總體結(jié)構(gòu)1ClamAV的總體結(jié)構(gòu)ClamAVvsOAV相同點:ClamAV和OAV兩個防病毒軟件非常類似,二者都是使用匹配特征代碼的方式來檢查病毒,甚至它們的病毒特征代碼庫都是一樣的1ClamAV的總體結(jié)構(gòu)ClamAVvsOAV不同點:ClamAV是在clamd啟動時將病毒特征代碼庫加載入內(nèi)存,并且根據(jù)文件類型把特征代碼庫進行了分類。在內(nèi)存中,為每種文件類型對應的特征代碼庫建立了一棵龐大的樹,然后,在這棵樹為核心數(shù)據(jù)結(jié)構(gòu),使用有限自動機來進行匹配。而OAV則是對每個特征碼做一個HASH,匹配的時候先匹配HASH,從而縮小了匹配范圍,最后再逐個匹配。ClamAV使用C語言編制,而OAV使用java語言不同點:ClamAV的組件ClamAV的組件main.cvd:計算機病毒特征代碼庫,該部分為主庫。daily.cvd:計算機病毒特征代碼庫,該部分為日常更新的庫。clamd:基于多線程開發(fā)的查殺引擎守護進程,通過socket,streams,filedescriptor進行掃描操作。clamdscan:調(diào)用clamd進行病毒掃描的客戶端程序。二者通過Socket進行通信。clamscan:可獨立響應用戶請求(在clamd未運行時)的客戶端程序。clamscan讀取病毒特征代碼庫的信息,并進行病毒掃描。其效率不如clamdscan和clamd的組合高。main.cvd:計算機病毒特征代碼庫,該部分為主庫。freshclam:更新病毒特征代碼庫的程序。libclamav:病毒掃描函數(shù)庫,這是核心算法部分。sigtool:clamav管理工具,可以查看病毒特征代碼庫文件(.cvd)的信息、解壓病毒特征代碼庫.cvd文件、制作病毒特征代碼庫文件等。clamav-milter:email掃描器。在該組件的配合下,ClamAV可以完成對郵件服務器的病毒掃描工作。clamuko:在Linux/FreeBSD系統(tǒng)中,為了實現(xiàn)on-access病毒掃描功能,必須安裝dazuko組件,這就是所謂的clamuko。freshclam.conf:用于配置病毒特征庫升級程序(freshclam)。clamd.conf:用于配置clamd和clamscan程序。freshclam:更新病毒特征代碼庫的程序。2ClamAV使用命令命令解釋PING檢查守護進程的狀態(tài)VERSION輸出版本信息RELOAD重新加載數(shù)據(jù)庫SHUTDOWN正常退出SCANfile/directory
掃描文件或目錄,同時支持壓縮文件RAWSCANfile/directory
掃描文件或目錄,但是考慮文件類型CONTSCANfile/directory
掃描文件或目錄,并且找到病毒后仍繼續(xù)掃描MULTISCANfile/directory
使用多線程掃描文件或目錄INSTREAM
掃描流,輸入的格式如下:
<長度><數(shù)據(jù)>,其中<長度>用無符號四字節(jié)整數(shù)表示數(shù)據(jù)的字節(jié)數(shù),<數(shù)據(jù)>是實際的數(shù)據(jù)。掃描以<長度>=0表征結(jié)束,另外總長度不能超過配置文件中設置的流最大長度<StreamMaxLength>,否則連接將被關(guān)閉FILDES
Unix特有的,根據(jù)文件描述符進行掃描STATS
返回服務端的隊列狀態(tài)信息以及內(nèi)存的使用情況IDSESSION,END
用來發(fā)起或結(jié)束一個會話,這樣,就能在一個連接中,進行多次不同的掃描,省去建立新的連接。STREAM
(deprecated,use
INSTREAM
instead)
廢棄2ClamAV使用命令命令解釋PING檢查守護進程的狀態(tài)V工具名功能介紹Clamscan最簡單的掃描工具,它是一個獨立的程序,可以單獨運行而無須Clamd支持。但是的它的缺點是不能與其它Clamscan實例共享內(nèi)存線程等。它適合于對單個文件進行臨時的掃描Clamdscan功能與Clamscan一樣,但是它依賴于Clamd,它是通過將請求通過Socket發(fā)給Clamd讓Clamd做實際的掃描工作,再從Clamd取回結(jié)果即可。它的效率高,推薦使用。Clamuko這并不是一個工具,而是Clamd中的一個重要模塊,開啟了它才能進行訪問時掃描。但它不支持NFS,原因是其底層模塊沒有捕獲NFS請求工具名功能介紹Clamscan最簡單的掃描工具,它是一個獨立3安裝配置軟硬件環(huán)境:硬件:普通PC機操作系統(tǒng):Fedora7軟件版本:ClamAV0.94.23安裝配置軟硬件環(huán)境:安裝準備安裝前要先創(chuàng)建用戶clamav和用戶組clamav。groupaddclamavuseradd-gclamav-s/bin/false-c"ClamAntiVirus"clamav安裝準備安裝在ClamAV代碼目錄下執(zhí)行如下命令,進行安裝。./configuremake(asroot)makeinstall在LinuxFedora7系統(tǒng)下,ClamAV的運行文件會默認安裝在“/usr/local/sbin”目錄下。在這個目錄下可以找到Clamd等可執(zhí)行程序。安裝配置安裝好程序后,接下來要進行配置。配置工作主要有三件事情:1、修改配置文件clamd.conf該文件默認路徑為/usr/local/etc/clamd.conf。根據(jù)manclamd.conf的信息來設置clamd.conf。特別要注意的是,要把Example這一行注釋掉,否則clamd.conf不生效。2、修改配置文件freshclam.conf該文件默認路徑為/usr/local/etc/freshclam.conf。如果英文閱讀能力較強,可以非常容易理解各個配置項的意思。同樣,也要把Example這一行注釋掉,否則freshclam.conf不生效。最關(guān)鍵的配置項包括:配置Checks:配置特征代碼庫的更新頻率ProxySettings:設置代理服務器的地址,賬號,口令等MaxAttempts:最大嘗試聯(lián)網(wǎng)次數(shù)3、下載特征代碼庫讀者可以從/download/cvd下載main.cvd和daily.cvd。如果采用默認的database-dir設置的話,下載至/usr/local/share/clamav目錄下。如果讀者的計算機已經(jīng)聯(lián)通了Internet,也可以直接運行freshclam來更新特征代碼庫。Checks:配置特征代碼庫的更新頻率運行先以root用戶運行clamd(默認路徑:/usr/sbin/clamd)。如果要進行例行掃描,用普通用戶運行clamdscan(默認路徑:/usr/bin/clamdscan)即可。clamdscan可以支持當前文件夾(遞歸)掃描,也支持一個特定文件的掃描。還可以指定所用的掃描特征代碼庫,這個功能可以用來幫助測試自己制作的病毒特征代碼庫的正確性。運行4源代碼分析分析順序循著軟件的使用順序?qū)浖M行分析,以期對軟件的使用及結(jié)構(gòu)都有一定的認識。因此,我們將先討論軟件的配置和病毒特征代碼庫,再討論clamd的啟動,接著討論clamdscan的啟動及其向clamd發(fā)送請求的過程,最后討論clamd的對請求的響應和掃描過程。4源代碼分析分析順序(1)ClamAV配置ClamAV的配置選項記錄在/etc/clamd.conf文件中。配置選項的數(shù)據(jù)結(jié)構(gòu)如下:(1)ClamAV配置ClamAV的配置選項記錄在/etc/shared/optparser.c函數(shù)名:optparser()功能:對參數(shù)進行解析,以鏈表形式返回選項,函數(shù)名:optfree()功能:釋放選項鏈表函數(shù)名:optaddarg()功能:向選項鏈表中加入新的選項shared/optparser.c函數(shù)名:optparse(2)病毒特征代碼庫ClamAV有兩個官方病毒特征代碼庫文件:main.cvd和daily.cvd。這種文件實際上是帶有數(shù)字簽證的壓縮文件,它包含了一個或多個真正的病毒代碼庫文件。main.cvd的內(nèi)容:main.dbmain.fpmain.hdbmain.mdbmain.ndbmain.zmd(2)病毒特征代碼庫ClamAV有兩個官方病毒特征代碼庫文main.db文件中病毒特征代碼的形式是:MalwareName=HexSignature其中HexSignature可以由*,{數(shù)字}分隔成一個一個的part-signature。main.ndb文件中的病毒特征代碼的形式是:MalwareName:TargetType:Offset:HexSignature[:MinEngineFunctionalityLevel:[Max]]main.mdb文件中的病毒特征代碼的形式是:PESectionSize:MD5:MalwareNamemain.db文件中病毒特征代碼的形式是:(3)clamd初始化ClamAV執(zhí)行過程的第一步就是進行執(zhí)行環(huán)境的初始化,其主要工作包括解析命令、載入配置文件、解除特權(quán)、初始化日志、選擇socket類型、配置對可疑程序類別的檢測處理、設置臨時文件夾等。這些工作主要涉及的文件:calmd/clamd.ccalmd/server-th.ccalmd/readdb.c(3)clamd初始化ClamAV執(zhí)行過程的第一步就是進clamd/clamd.c函數(shù)名稱:main()函數(shù)功能:這是入口函數(shù),主要完成對引擎的初始化。工作包括解析命令、載入配置文件、解除特權(quán)(如果不是windows或os2系統(tǒng))、初始化日志、選擇socket類型、配置對可疑程序類別的檢測處理、設置臨時文件夾、編譯引擎和初始化socket可能有多個、轉(zhuǎn)入后臺工作調(diào)用acceptloop_th()等待客戶端連接。clamd/clamd.c函數(shù)名稱:main()clamd/server-th.c函數(shù)名稱:acceptloop_th()函數(shù)功能:該函數(shù)主要功能是攔截消息,添加消息處理函數(shù),調(diào)用reload_db()加載數(shù)據(jù)庫,利用thrgmr_new()創(chuàng)建線程池,等待客戶端連接,調(diào)用thrmgr_dispatch()函數(shù)分發(fā)工作。clamd/server-th.c函數(shù)名稱:acceptl函數(shù)名稱:reload_db()函數(shù)功能:檢查病毒特征代碼庫狀態(tài)或者調(diào)用cl_load()加載病毒特征代碼庫,重新加載后調(diào)用cl_engine_compile()為開始掃描作最后的準備。函數(shù)名稱:reload_db()函數(shù)名稱:scanner_thread()函數(shù)功能:本函數(shù)是服務器收到客戶端請求的處理函數(shù)。它主要的功能是添加消息處理函數(shù)。然后調(diào)用command()來處理客戶端的請求,并處理command()的返回結(jié)果。函數(shù)名稱:scanner_thread()readdb.c函數(shù)名稱:cl_load()函數(shù)功能:根據(jù)輸入的參數(shù),決定如何裝載病毒特征代碼庫。函數(shù)名稱:cli_loaddbdir()函數(shù)功能:在指定的文件夾內(nèi)加載特征代碼庫函數(shù)名稱:cli_load()函數(shù)功能:根據(jù)病毒特征代碼數(shù)據(jù)庫文件的擴展名加載、解析病毒庫文件,并向掃描引擎(engine)里添加由解析病毒庫文件得到的病毒特征碼、病毒名等。readdb.c函數(shù)名稱:cl_load()函數(shù)名稱:cli_initroots()函數(shù)功能:初始化各種文件類型匹配的根結(jié)構(gòu)函數(shù)名稱:cli_dbgets()函數(shù)功能:從病毒特征代碼庫中讀取數(shù)據(jù)。病毒特征代碼庫既可能是個普通文件,也可能是壓縮包,通過這個函數(shù)對上層屏蔽了這個區(qū)別。函數(shù)名稱:cli_initroots()db文件的加載為了使讀者進一步清晰病毒特征代碼庫的加載過程,本節(jié)僅以.db文件為線索,詳細講解病毒特征代碼庫的加載過程。db文件的加載為了使讀者進一步清晰病毒特征代碼庫的加載過程,函數(shù)名稱:cli_loaddb()函數(shù)功能:該函數(shù)完成對.db文件的解析,并加載到引擎中。它首先初始化各種類型的匹配器的根結(jié)構(gòu)。然后從文件中讀入部分數(shù)據(jù)到緩存中,調(diào)用cli_parse_add()將其加入引擎。函數(shù)名稱:cli_parse_add()函數(shù)功能:解析病毒特征代碼庫中的一條記錄,并通過cli_ac_addsig()將其加入到引擎。函數(shù)名稱:cli_loaddb()函數(shù)名稱:cil_ac_addsig()函數(shù)功能:該函數(shù)完成添加一個段的工作。函數(shù)名稱:cli_ac_addpatt()函數(shù)功能:更新轉(zhuǎn)移矩陣,添加匹配模式。函數(shù)名稱:cil_ac_addsig()(4)clamdscan模塊clamdscan的運行流程是:讀取并解析命令行參數(shù)、讀取并解析clamd.conf配置文件的參數(shù)、建立到服務端(clamd)的socket、向socket寫入待掃描的文件名(或者filedescriptor)和掃描方式。該模塊主要涉及clamdscan.c和clinet.c兩個文件。(4)clamdscan模塊clamdscan的運行流程clamdscan.c函數(shù)名稱:main()函數(shù)功能:該函數(shù)主要是解析一些配置信息,創(chuàng)建連接clamd的信息,然后通過client()函數(shù)與clamd交互,并打印最后的統(tǒng)計信息。函數(shù)名稱:reload_server_database()函數(shù)功能:通過該函數(shù)重新加載clamd的病毒特征代碼庫。clamdscan.c函數(shù)名稱:main()client.c函數(shù)名稱:client()函數(shù)功能:根據(jù)掃描類型的不同,調(diào)用不同的函數(shù)進行掃描,如果是文件或文件夾則調(diào)用dsfile(),dsstream()用于發(fā)送數(shù)據(jù)流給clamd掃描。如果支持對文件描述符進行掃描,則調(diào)用clamd_fdscan()。這些函數(shù)都返回掃描到的病毒的個數(shù)。client.c函數(shù)名稱:client()(5)clamd響應模塊Clamd程序的功能之一是響應clamdscan的命令,其實現(xiàn)方式是通過監(jiān)聽clamdscan的socket連接做到的。clamd對clamdscan的響應源代碼實現(xiàn)主要放在clamd/thrmgr.c文件中。在這個文件里,主要完成線程池的操作,包括線程的創(chuàng)建和分配。涉及到的主要函數(shù)包括thrmgr_dispatch()和thrmgr_worker()。(5)clamd響應模塊Clamd程序的功能之一是響應c函數(shù)名稱:thrmgr_dispatch()函數(shù)功能:使用work_queue_add()將指定的客戶請求加入到工作隊列,并適時地安排工作給thrmgr_worker()。函數(shù)名稱:thrmgr_worker()函數(shù)功能:創(chuàng)建并管理客戶端連接線程池。函數(shù)名稱:thrmgr_dispatch()(6)clamd掃描模塊Clamd掃描模塊是ClamAV軟件的核心部分,它向讀者展示了如何在一個染毒文件中發(fā)現(xiàn)病毒的具體過程。(6)clamd掃描模塊Clamd掃描模塊是ClamAVsession.c函數(shù)名稱:command()函數(shù)功能:判斷客戶端的請求類型并調(diào)用相應函數(shù)予以執(zhí)行函數(shù)名稱:recvfd_and_scan()函數(shù)功能:接收文件描述符,調(diào)用scanfd()進行掃描session.c函數(shù)名稱:command()scanner.c函數(shù)名稱:scan()函數(shù)功能:該函數(shù)主要是對要掃描的對象做初步鑒定,并決定是否進行掃描。scanner.c函數(shù)名稱:scan()scanners.c函數(shù)名稱:cl_scanfile()函數(shù)功能:打開文件,調(diào)用cl_scandesc()通過文件描述符掃描文件,返回掃描結(jié)果。函數(shù)名稱:cl_scandesc()函數(shù)功能:初始化cli_ctx上下文,調(diào)用cli_magic_scandesc()進行掃描,如果掃描結(jié)果是CL_CLEAN則表示正常。如果發(fā)現(xiàn)了可疑程序,則返回
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學一年級20以內(nèi)加減法口算練習題
- 砍伐樹木申請書
- 《急救藥品的使用》課件
- 埋弧焊的工作原理及特點
- 《民生銀行商貸通》課件
- 環(huán)保節(jié)能行業(yè)助理工作總結(jié)
- 家居建材行業(yè)市場推廣總結(jié)
- 陜西省銅川市耀州區(qū)2023-2024學年九年級上學期期末調(diào)研化學試題
- 主管工作總結(jié)計劃方案
- 農(nóng)林漁業(yè)客服工作感悟
- 四川省2021-2022學年物理高一下期末監(jiān)測試題含解析
- “婦科護理三基三嚴”考試試題及答案
- 系統(tǒng)遷移方案
- 《文獻檢索與論文寫作》教學大綱思政版
- 2024年廣東省學士學位英語歷年真題附答案
- 材料力學之彈塑性力學算法:等效塑性應變計算:塑性流動理論與塑性硬化.Tex.header
- (高清版)AQ∕T 8006-2018 安全生產(chǎn)檢測檢驗機構(gòu)能力的通 用要求
- 電梯井道改造施工合同
- 插座安裝 服務合同范本
- 【基于自由現(xiàn)金流貼現(xiàn)法的企業(yè)估值的案例探析3300字(論文)】
- 承德市承德縣2022-2023學年七年級上學期期末歷史試題【帶答案】
評論
0/150
提交評論