ClamAV軟件分析與使用課件_第1頁(yè)
ClamAV軟件分析與使用課件_第2頁(yè)
ClamAV軟件分析與使用課件_第3頁(yè)
ClamAV軟件分析與使用課件_第4頁(yè)
ClamAV軟件分析與使用課件_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ClamAV軟件分析與使用劉功申上海交通大學(xué)信息安全工程學(xué)院ClamAV軟件分析與使用劉功申本章學(xué)習(xí)目標(biāo)了解ClamAV引擎的框架了解ClamAV的核心代碼掌握ClamAV使用方法本章學(xué)習(xí)目標(biāo)了解ClamAV引擎的框架本章內(nèi)容ClamAV的總體結(jié)構(gòu)ClamAV的使用說明安裝配置源代碼分析章節(jié)實(shí)驗(yàn)本章內(nèi)容ClamAV的總體結(jié)構(gòu)1ClamAV的總體結(jié)構(gòu)ClamAVvsOAV相同點(diǎn):ClamAV和OAV兩個(gè)防病毒軟件非常類似,二者都是使用匹配特征代碼的方式來檢查病毒,甚至它們的病毒特征代碼庫(kù)都是一樣的1ClamAV的總體結(jié)構(gòu)ClamAVvsOAV不同點(diǎn):ClamAV是在clamd啟動(dòng)時(shí)將病毒特征代碼庫(kù)加載入內(nèi)存,并且根據(jù)文件類型把特征代碼庫(kù)進(jìn)行了分類。在內(nèi)存中,為每種文件類型對(duì)應(yīng)的特征代碼庫(kù)建立了一棵龐大的樹,然后,在這棵樹為核心數(shù)據(jù)結(jié)構(gòu),使用有限自動(dòng)機(jī)來進(jìn)行匹配。而OAV則是對(duì)每個(gè)特征碼做一個(gè)HASH,匹配的時(shí)候先匹配HASH,從而縮小了匹配范圍,最后再逐個(gè)匹配。ClamAV使用C語(yǔ)言編制,而OAV使用java語(yǔ)言不同點(diǎn):ClamAV的組件ClamAV的組件main.cvd:計(jì)算機(jī)病毒特征代碼庫(kù),該部分為主庫(kù)。daily.cvd:計(jì)算機(jī)病毒特征代碼庫(kù),該部分為日常更新的庫(kù)。clamd:基于多線程開發(fā)的查殺引擎守護(hù)進(jìn)程,通過socket,streams,filedescriptor進(jìn)行掃描操作。clamdscan:調(diào)用clamd進(jìn)行病毒掃描的客戶端程序。二者通過Socket進(jìn)行通信。clamscan:可獨(dú)立響應(yīng)用戶請(qǐng)求(在clamd未運(yùn)行時(shí))的客戶端程序。clamscan讀取病毒特征代碼庫(kù)的信息,并進(jìn)行病毒掃描。其效率不如clamdscan和clamd的組合高。main.cvd:計(jì)算機(jī)病毒特征代碼庫(kù),該部分為主庫(kù)。freshclam:更新病毒特征代碼庫(kù)的程序。libclamav:病毒掃描函數(shù)庫(kù),這是核心算法部分。sigtool:clamav管理工具,可以查看病毒特征代碼庫(kù)文件(.cvd)的信息、解壓病毒特征代碼庫(kù).cvd文件、制作病毒特征代碼庫(kù)文件等。clamav-milter:email掃描器。在該組件的配合下,ClamAV可以完成對(duì)郵件服務(wù)器的病毒掃描工作。clamuko:在Linux/FreeBSD系統(tǒng)中,為了實(shí)現(xiàn)on-access病毒掃描功能,必須安裝dazuko組件,這就是所謂的clamuko。freshclam.conf:用于配置病毒特征庫(kù)升級(jí)程序(freshclam)。clamd.conf:用于配置clamd和clamscan程序。freshclam:更新病毒特征代碼庫(kù)的程序。2ClamAV使用命令命令解釋PING檢查守護(hù)進(jìn)程的狀態(tài)VERSION輸出版本信息RELOAD重新加載數(shù)據(jù)庫(kù)SHUTDOWN正常退出SCANfile/directory

掃描文件或目錄,同時(shí)支持壓縮文件RAWSCANfile/directory

掃描文件或目錄,但是考慮文件類型CONTSCANfile/directory

掃描文件或目錄,并且找到病毒后仍繼續(xù)掃描MULTISCANfile/directory

使用多線程掃描文件或目錄INSTREAM

掃描流,輸入的格式如下:

<長(zhǎng)度><數(shù)據(jù)>,其中<長(zhǎng)度>用無符號(hào)四字節(jié)整數(shù)表示數(shù)據(jù)的字節(jié)數(shù),<數(shù)據(jù)>是實(shí)際的數(shù)據(jù)。掃描以<長(zhǎng)度>=0表征結(jié)束,另外總長(zhǎng)度不能超過配置文件中設(shè)置的流最大長(zhǎng)度<StreamMaxLength>,否則連接將被關(guān)閉FILDES

Unix特有的,根據(jù)文件描述符進(jìn)行掃描STATS

返回服務(wù)端的隊(duì)列狀態(tài)信息以及內(nèi)存的使用情況IDSESSION,END

用來發(fā)起或結(jié)束一個(gè)會(huì)話,這樣,就能在一個(gè)連接中,進(jìn)行多次不同的掃描,省去建立新的連接。STREAM

(deprecated,use

INSTREAM

instead)

廢棄2ClamAV使用命令命令解釋PING檢查守護(hù)進(jìn)程的狀態(tài)V工具名功能介紹Clamscan最簡(jiǎn)單的掃描工具,它是一個(gè)獨(dú)立的程序,可以單獨(dú)運(yùn)行而無須Clamd支持。但是的它的缺點(diǎn)是不能與其它Clamscan實(shí)例共享內(nèi)存線程等。它適合于對(duì)單個(gè)文件進(jìn)行臨時(shí)的掃描Clamdscan功能與Clamscan一樣,但是它依賴于Clamd,它是通過將請(qǐng)求通過Socket發(fā)給Clamd讓Clamd做實(shí)際的掃描工作,再?gòu)腃lamd取回結(jié)果即可。它的效率高,推薦使用。Clamuko這并不是一個(gè)工具,而是Clamd中的一個(gè)重要模塊,開啟了它才能進(jìn)行訪問時(shí)掃描。但它不支持NFS,原因是其底層模塊沒有捕獲NFS請(qǐng)求工具名功能介紹Clamscan最簡(jiǎn)單的掃描工具,它是一個(gè)獨(dú)立3安裝配置軟硬件環(huán)境:硬件:普通PC機(jī)操作系統(tǒng):Fedora7軟件版本:ClamAV0.94.23安裝配置軟硬件環(huán)境:安裝準(zhǔn)備安裝前要先創(chuàng)建用戶clamav和用戶組clamav。groupaddclamavuseradd-gclamav-s/bin/false-c"ClamAntiVirus"clamav安裝準(zhǔn)備安裝在ClamAV代碼目錄下執(zhí)行如下命令,進(jìn)行安裝。./configuremake(asroot)makeinstall在LinuxFedora7系統(tǒng)下,ClamAV的運(yùn)行文件會(huì)默認(rèn)安裝在“/usr/local/sbin”目錄下。在這個(gè)目錄下可以找到Clamd等可執(zhí)行程序。安裝配置安裝好程序后,接下來要進(jìn)行配置。配置工作主要有三件事情:1、修改配置文件clamd.conf該文件默認(rèn)路徑為/usr/local/etc/clamd.conf。根據(jù)manclamd.conf的信息來設(shè)置clamd.conf。特別要注意的是,要把Example這一行注釋掉,否則clamd.conf不生效。2、修改配置文件freshclam.conf該文件默認(rèn)路徑為/usr/local/etc/freshclam.conf。如果英文閱讀能力較強(qiáng),可以非常容易理解各個(gè)配置項(xiàng)的意思。同樣,也要把Example這一行注釋掉,否則freshclam.conf不生效。最關(guān)鍵的配置項(xiàng)包括:配置Checks:配置特征代碼庫(kù)的更新頻率ProxySettings:設(shè)置代理服務(wù)器的地址,賬號(hào),口令等MaxAttempts:最大嘗試聯(lián)網(wǎng)次數(shù)3、下載特征代碼庫(kù)讀者可以從/download/cvd下載main.cvd和daily.cvd。如果采用默認(rèn)的database-dir設(shè)置的話,下載至/usr/local/share/clamav目錄下。如果讀者的計(jì)算機(jī)已經(jīng)聯(lián)通了Internet,也可以直接運(yùn)行freshclam來更新特征代碼庫(kù)。Checks:配置特征代碼庫(kù)的更新頻率運(yùn)行先以root用戶運(yùn)行clamd(默認(rèn)路徑:/usr/sbin/clamd)。如果要進(jìn)行例行掃描,用普通用戶運(yùn)行clamdscan(默認(rèn)路徑:/usr/bin/clamdscan)即可。clamdscan可以支持當(dāng)前文件夾(遞歸)掃描,也支持一個(gè)特定文件的掃描。還可以指定所用的掃描特征代碼庫(kù),這個(gè)功能可以用來幫助測(cè)試自己制作的病毒特征代碼庫(kù)的正確性。運(yùn)行4源代碼分析分析順序循著軟件的使用順序?qū)浖M(jìn)行分析,以期對(duì)軟件的使用及結(jié)構(gòu)都有一定的認(rèn)識(shí)。因此,我們將先討論軟件的配置和病毒特征代碼庫(kù),再討論clamd的啟動(dòng),接著討論clamdscan的啟動(dòng)及其向clamd發(fā)送請(qǐng)求的過程,最后討論clamd的對(duì)請(qǐng)求的響應(yīng)和掃描過程。4源代碼分析分析順序(1)ClamAV配置ClamAV的配置選項(xiàng)記錄在/etc/clamd.conf文件中。配置選項(xiàng)的數(shù)據(jù)結(jié)構(gòu)如下:(1)ClamAV配置ClamAV的配置選項(xiàng)記錄在/etc/shared/optparser.c函數(shù)名:optparser()功能:對(duì)參數(shù)進(jìn)行解析,以鏈表形式返回選項(xiàng),函數(shù)名:optfree()功能:釋放選項(xiàng)鏈表函數(shù)名:optaddarg()功能:向選項(xiàng)鏈表中加入新的選項(xiàng)shared/optparser.c函數(shù)名:optparse(2)病毒特征代碼庫(kù)ClamAV有兩個(gè)官方病毒特征代碼庫(kù)文件:main.cvd和daily.cvd。這種文件實(shí)際上是帶有數(shù)字簽證的壓縮文件,它包含了一個(gè)或多個(gè)真正的病毒代碼庫(kù)文件。main.cvd的內(nèi)容:main.dbmain.fpmain.hdbmain.mdbmain.ndbmain.zmd(2)病毒特征代碼庫(kù)ClamAV有兩個(gè)官方病毒特征代碼庫(kù)文main.db文件中病毒特征代碼的形式是:MalwareName=HexSignature其中HexSignature可以由*,{數(shù)字}分隔成一個(gè)一個(gè)的part-signature。main.ndb文件中的病毒特征代碼的形式是:MalwareName:TargetType:Offset:HexSignature[:MinEngineFunctionalityLevel:[Max]]main.mdb文件中的病毒特征代碼的形式是:PESectionSize:MD5:MalwareNamemain.db文件中病毒特征代碼的形式是:(3)clamd初始化ClamAV執(zhí)行過程的第一步就是進(jìn)行執(zhí)行環(huán)境的初始化,其主要工作包括解析命令、載入配置文件、解除特權(quán)、初始化日志、選擇socket類型、配置對(duì)可疑程序類別的檢測(cè)處理、設(shè)置臨時(shí)文件夾等。這些工作主要涉及的文件:calmd/clamd.ccalmd/server-th.ccalmd/readdb.c(3)clamd初始化ClamAV執(zhí)行過程的第一步就是進(jìn)clamd/clamd.c函數(shù)名稱:main()函數(shù)功能:這是入口函數(shù),主要完成對(duì)引擎的初始化。工作包括解析命令、載入配置文件、解除特權(quán)(如果不是windows或os2系統(tǒng))、初始化日志、選擇socket類型、配置對(duì)可疑程序類別的檢測(cè)處理、設(shè)置臨時(shí)文件夾、編譯引擎和初始化socket可能有多個(gè)、轉(zhuǎn)入后臺(tái)工作調(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ù)庫(kù),利用thrgmr_new()創(chuàng)建線程池,等待客戶端連接,調(diào)用thrmgr_dispatch()函數(shù)分發(fā)工作。clamd/server-th.c函數(shù)名稱:acceptl函數(shù)名稱:reload_db()函數(shù)功能:檢查病毒特征代碼庫(kù)狀態(tài)或者調(diào)用cl_load()加載病毒特征代碼庫(kù),重新加載后調(diào)用cl_engine_compile()為開始掃描作最后的準(zhǔn)備。函數(shù)名稱:reload_db()函數(shù)名稱:scanner_thread()函數(shù)功能:本函數(shù)是服務(wù)器收到客戶端請(qǐng)求的處理函數(shù)。它主要的功能是添加消息處理函數(shù)。然后調(diào)用command()來處理客戶端的請(qǐng)求,并處理command()的返回結(jié)果。函數(shù)名稱:scanner_thread()readdb.c函數(shù)名稱:cl_load()函數(shù)功能:根據(jù)輸入的參數(shù),決定如何裝載病毒特征代碼庫(kù)。函數(shù)名稱:cli_loaddbdir()函數(shù)功能:在指定的文件夾內(nèi)加載特征代碼庫(kù)函數(shù)名稱:cli_load()函數(shù)功能:根據(jù)病毒特征代碼數(shù)據(jù)庫(kù)文件的擴(kuò)展名加載、解析病毒庫(kù)文件,并向掃描引擎(engine)里添加由解析病毒庫(kù)文件得到的病毒特征碼、病毒名等。readdb.c函數(shù)名稱:cl_load()函數(shù)名稱:cli_initroots()函數(shù)功能:初始化各種文件類型匹配的根結(jié)構(gòu)函數(shù)名稱:cli_dbgets()函數(shù)功能:從病毒特征代碼庫(kù)中讀取數(shù)據(jù)。病毒特征代碼庫(kù)既可能是個(gè)普通文件,也可能是壓縮包,通過這個(gè)函數(shù)對(duì)上層屏蔽了這個(gè)區(qū)別。函數(shù)名稱:cli_initroots()db文件的加載為了使讀者進(jìn)一步清晰病毒特征代碼庫(kù)的加載過程,本節(jié)僅以.db文件為線索,詳細(xì)講解病毒特征代碼庫(kù)的加載過程。db文件的加載為了使讀者進(jìn)一步清晰病毒特征代碼庫(kù)的加載過程,函數(shù)名稱:cli_loaddb()函數(shù)功能:該函數(shù)完成對(duì).db文件的解析,并加載到引擎中。它首先初始化各種類型的匹配器的根結(jié)構(gòu)。然后從文件中讀入部分?jǐn)?shù)據(jù)到緩存中,調(diào)用cli_parse_add()將其加入引擎。函數(shù)名稱:cli_parse_add()函數(shù)功能:解析病毒特征代碼庫(kù)中的一條記錄,并通過cli_ac_addsig()將其加入到引擎。函數(shù)名稱:cli_loaddb()函數(shù)名稱:cil_ac_addsig()函數(shù)功能:該函數(shù)完成添加一個(gè)段的工作。函數(shù)名稱:cli_ac_addpatt()函數(shù)功能:更新轉(zhuǎn)移矩陣,添加匹配模式。函數(shù)名稱:cil_ac_addsig()(4)clamdscan模塊clamdscan的運(yùn)行流程是:讀取并解析命令行參數(shù)、讀取并解析clamd.conf配置文件的參數(shù)、建立到服務(wù)端(clamd)的socket、向socket寫入待掃描的文件名(或者filedescriptor)和掃描方式。該模塊主要涉及clamdscan.c和clinet.c兩個(gè)文件。(4)clamdscan模塊clamdscan的運(yùn)行流程clamdscan.c函數(shù)名稱:main()函數(shù)功能:該函數(shù)主要是解析一些配置信息,創(chuàng)建連接clamd的信息,然后通過client()函數(shù)與clamd交互,并打印最后的統(tǒng)計(jì)信息。函數(shù)名稱:reload_server_database()函數(shù)功能:通過該函數(shù)重新加載clamd的病毒特征代碼庫(kù)。clamdscan.c函數(shù)名稱:main()client.c函數(shù)名稱:client()函數(shù)功能:根據(jù)掃描類型的不同,調(diào)用不同的函數(shù)進(jìn)行掃描,如果是文件或文件夾則調(diào)用dsfile(),dsstream()用于發(fā)送數(shù)據(jù)流給clamd掃描。如果支持對(duì)文件描述符進(jìn)行掃描,則調(diào)用clamd_fdscan()。這些函數(shù)都返回掃描到的病毒的個(gè)數(shù)。client.c函數(shù)名稱:client()(5)clamd響應(yīng)模塊Clamd程序的功能之一是響應(yīng)clamdscan的命令,其實(shí)現(xiàn)方式是通過監(jiān)聽clamdscan的socket連接做到的。clamd對(duì)clamdscan的響應(yīng)源代碼實(shí)現(xiàn)主要放在clamd/thrmgr.c文件中。在這個(gè)文件里,主要完成線程池的操作,包括線程的創(chuàng)建和分配。涉及到的主要函數(shù)包括thrmgr_dispatch()和thrmgr_worker()。(5)clamd響應(yīng)模塊Clamd程序的功能之一是響應(yīng)c函數(shù)名稱:thrmgr_dispatch()函數(shù)功能:使用work_queue_add()將指定的客戶請(qǐng)求加入到工作隊(duì)列,并適時(shí)地安排工作給thrmgr_worker()。函數(shù)名稱:thrmgr_worker()函數(shù)功能:創(chuàng)建并管理客戶端連接線程池。函數(shù)名稱:thrmgr_dispatch()(6)clamd掃描模塊Clamd掃描模塊是ClamAV軟件的核心部分,它向讀者展示了如何在一個(gè)染毒文件中發(fā)現(xiàn)病毒的具體過程。(6)clamd掃描模塊Clamd掃描模塊是ClamAVsession.c函數(shù)名稱:command()函數(shù)功能:判斷客戶端的請(qǐng)求類型并調(diào)用相應(yīng)函數(shù)予以執(zhí)行函數(shù)名稱:recvfd_and_scan()函數(shù)功能:接收文件描述符,調(diào)用scanfd()進(jìn)行掃描session.c函數(shù)名稱:command()scanner.c函數(shù)名稱:scan()函數(shù)功能:該函數(shù)主要是對(duì)要掃描的對(duì)象做初步鑒定,并決定是否進(jìn)行掃描。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()進(jìn)行掃描,如果掃描結(jié)果是CL_CLEAN則表示正常。如果發(fā)現(xiàn)了可疑程序,則返回

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論