版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
chap.7主機(jī)安全編程網(wǎng)絡(luò)信息安全本章內(nèi)容要點(diǎn)主機(jī)信息安全概述
主機(jī)安全運(yùn)維管理
主機(jī)惡意軟件分析主機(jī)漏洞模糊測(cè)試實(shí)施主機(jī)安全保護(hù),首先要了解計(jì)算機(jī)的工作原理。計(jì)算機(jī)的產(chǎn)生源自于圖靈的論文《論可計(jì)算數(shù)及其在判定問(wèn)題上的應(yīng)用》。論文初步提出了圖靈機(jī)的設(shè)計(jì),也就是現(xiàn)代計(jì)算機(jī)的基本思想?;趫D靈設(shè)計(jì)的圖靈機(jī),馮諾依曼進(jìn)行了工程化設(shè)計(jì),構(gòu)造了現(xiàn)代計(jì)算機(jī)的體系結(jié)構(gòu)。7.1.1主機(jī)安全威脅7.1主機(jī)信息安全概述主機(jī)安全保護(hù)就是要確保主機(jī)系統(tǒng)及合法進(jìn)程連續(xù)可靠正常地運(yùn)行,軟硬件完整性不被破壞。由于主機(jī)通常是置于半開(kāi)放的空間和電磁環(huán)境中,同時(shí)還需要面對(duì)與外界多種形式的數(shù)據(jù)交互,并且運(yùn)行過(guò)程中,內(nèi)存中的數(shù)據(jù)處于時(shí)變的狀態(tài),因此主機(jī)安全的保護(hù)不可避免的,是一個(gè)動(dòng)態(tài)、多層次、多內(nèi)容的復(fù)雜過(guò)程,這與前面介紹的密碼、認(rèn)證等安全技術(shù)有很大不同。在主機(jī)安全保護(hù)方面,人們已經(jīng)開(kāi)發(fā)出了多種技術(shù),然而,由于主機(jī)存在難以根絕的軟硬件漏洞、管理缺陷等問(wèn)題,不可避免地會(huì)導(dǎo)致遭受眾多安全威脅。此處拋開(kāi)物理安全不談,主機(jī)面臨的軟件安全威脅可以簡(jiǎn)單概括為:操作系統(tǒng)完整性破壞、軟件進(jìn)程可控性破壞、文件數(shù)據(jù)機(jī)密性破壞三個(gè)方面。7.1.1主機(jī)安全威脅7.1主機(jī)信息安全概述1.操作系統(tǒng)完整性破壞
軟件是主機(jī)的靈魂,而操作系統(tǒng)是軟件的核心。主機(jī)操作系統(tǒng)完整性破壞是當(dāng)前主機(jī)面臨的主要安全威脅?,F(xiàn)有主機(jī)操作系統(tǒng),從開(kāi)機(jī)啟動(dòng)到運(yùn)行服務(wù)過(guò)程中,對(duì)執(zhí)行代碼不做任何完整性檢查,導(dǎo)致病毒、木馬程序可以嵌入到執(zhí)行代碼程序或者直接替換原有程序,實(shí)現(xiàn)病毒、木馬等惡意代碼的傳播。這些惡意代碼一旦被激活,就會(huì)繼承當(dāng)前用戶的權(quán)限,從而肆無(wú)忌憚地進(jìn)行傳播,為所欲為地破壞主機(jī)操作系統(tǒng)的完整性,導(dǎo)致主機(jī)無(wú)法正常運(yùn)作等。
7.1.1主機(jī)安全威脅2.軟件進(jìn)程可控性破壞
正常的進(jìn)程都應(yīng)處于操作系統(tǒng)的可控范圍內(nèi)的,然而由于存在漏洞,導(dǎo)致進(jìn)程流可控性發(fā)生破壞。攻擊者利用軟件安全漏洞,如:過(guò)濾輸入的條件設(shè)置缺陷、變量類型轉(zhuǎn)換錯(cuò)誤、邏輯判斷錯(cuò)誤、指針引用錯(cuò)誤等,構(gòu)造惡意輸入導(dǎo)致軟件在處理輸入數(shù)據(jù)時(shí)出現(xiàn)非預(yù)期錯(cuò)誤,將輸入數(shù)據(jù)寫(xiě)入內(nèi)存中的某些特定敏感位置,從而劫持軟件控制流,轉(zhuǎn)而執(zhí)行外部輸入的指令代碼,造成目標(biāo)系統(tǒng)被獲取遠(yuǎn)程控制或拒絕服務(wù)。主機(jī)內(nèi)存的保護(hù)與攻擊對(duì)抗一直是主機(jī)安全的核心焦點(diǎn)問(wèn)題之一,源于現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)缺陷,短期內(nèi)很難根本消除。
7.1.1主機(jī)安全威脅3.文件數(shù)據(jù)機(jī)密性破壞
主機(jī)中往往存放著大量的重要信息,而隨著信息化的高度發(fā)展,重要信息越來(lái)越容易被復(fù)制和傳播,從而導(dǎo)致重要信息的失/竊密事件頻繁發(fā)生,嚴(yán)重?fù)p害相應(yīng)組織機(jī)構(gòu)的形象和利益,甚至威脅到了社會(huì)秩序、公共利益和國(guó)家安全。另外出于各種利益的驅(qū)使,信息系統(tǒng)中的一些合法用戶可能有意規(guī)避主機(jī)安全防護(hù)措施,利用現(xiàn)有主機(jī)防護(hù)技術(shù)的漏洞,通過(guò)網(wǎng)內(nèi)攻擊,惡意植入木馬等手段進(jìn)行非法操作,導(dǎo)致失竊密事件發(fā)生。
7.1.1主機(jī)安全威脅1.安全操作系統(tǒng)
操作系統(tǒng)是現(xiàn)代計(jì)算機(jī)軟件的基石,人們通過(guò)設(shè)計(jì)新型或加固現(xiàn)有操作系統(tǒng),使主機(jī)在自主訪問(wèn)控制、強(qiáng)制訪問(wèn)控制、標(biāo)記、身份鑒別、客體重用、審計(jì)、數(shù)據(jù)完整性、隱蔽信道分析、可信路徑、可信恢復(fù)等方面滿足相應(yīng)的安全技術(shù)要求,能夠抵御已知的攻擊和惡意軟件入侵。
7.1.3主機(jī)安全技術(shù)2.主機(jī)安全運(yùn)維
主機(jī)的使用者不能保證一定是精通計(jì)算機(jī)安全的專家,對(duì)于入侵和系統(tǒng)安全異常并不具有專業(yè)的防治能力,因此可以將主機(jī)置于專門的軟件或管理員的監(jiān)視、控制下,隨時(shí)處理可能發(fā)生的安全問(wèn)題,這就是主機(jī)安全運(yùn)維。主機(jī)安全運(yùn)維會(huì)監(jiān)控目標(biāo)主機(jī)運(yùn)行過(guò)程中產(chǎn)生的各種信息,利用專業(yè)工具從中甄別可能的入侵,并針對(duì)性實(shí)施管理反制,以確保主機(jī)安全。7.1.3主機(jī)安全技術(shù)3.反病毒技術(shù)
病毒及各種惡意代碼,是威脅主機(jī)安全的重要因素,通過(guò)運(yùn)用病毒監(jiān)測(cè)、病毒檢測(cè)、病毒分析等手段的運(yùn)用,發(fā)現(xiàn)惡意程序、攻擊進(jìn)程,并進(jìn)行保護(hù)處理,可以最大限度地減少病毒的危害。反病毒技術(shù)的關(guān)鍵在于對(duì)于病毒的檢測(cè),可以從靜態(tài)、動(dòng)態(tài)兩種手段對(duì)病毒的特征與產(chǎn)生的異常進(jìn)行分析,根據(jù)檢測(cè)結(jié)論刪除病毒程序、終止異常進(jìn)程。7.1.3主機(jī)安全技術(shù)4.漏洞挖掘與補(bǔ)丁
根據(jù)網(wǎng)絡(luò)安全事件的教訓(xùn),安全專家認(rèn)為:一切網(wǎng)絡(luò)攻擊事件的原因基本都可以概括為漏洞(詳見(jiàn)7.4.1節(jié))利用、密碼泄露和管理疏忽三個(gè)方面,對(duì)于前者安全防御人員可以先于攻擊者對(duì)主機(jī)軟件進(jìn)行漏洞挖掘、分析,并及時(shí)設(shè)計(jì)對(duì)應(yīng)的補(bǔ)丁軟件,修補(bǔ)漏洞,可以從主機(jī)安全的源頭大大加強(qiáng)安全防護(hù)的水平。7.1.3主機(jī)安全技術(shù)計(jì)算機(jī)安全運(yùn)維管理工作由管理員或管理軟件對(duì)保護(hù)目標(biāo)進(jìn)行監(jiān)控,一旦發(fā)現(xiàn)異常立即進(jìn)行處置。根據(jù)保護(hù)目標(biāo)的不同,安全運(yùn)維管理又可以劃分為主機(jī)安全運(yùn)維和網(wǎng)絡(luò)安全運(yùn)維。7.2.1安全運(yùn)維管理工作7.2主機(jī)安全運(yùn)維管理1.主機(jī)信息檢測(cè)
主機(jī)本身信息是實(shí)施主機(jī)安全防護(hù)的依據(jù),這些信息包括:硬件信息、系統(tǒng)信息、配置信息、進(jìn)程信息、網(wǎng)絡(luò)信息,等等,各種又可細(xì)分為一些更具體的參數(shù)。硬件信息:CPU、內(nèi)存、硬盤、網(wǎng)卡,以及其它外設(shè)信息,等。系統(tǒng)信息:有關(guān)操作系統(tǒng)的類型、版本、位數(shù)、補(bǔ)丁,等。配置信息:系統(tǒng)注冊(cè)表、服務(wù)、網(wǎng)絡(luò)參數(shù),等。進(jìn)程信息等:進(jìn)程名稱、PID號(hào)、存儲(chǔ)位置、資源占用情況、調(diào)用危險(xiǎn)API地址及頻次,等。網(wǎng)絡(luò)信息:網(wǎng)絡(luò)地址、網(wǎng)絡(luò)流量、網(wǎng)絡(luò)數(shù)據(jù)統(tǒng)計(jì),等。7.2.1安全運(yùn)維管理工作2.主機(jī)安全運(yùn)維
主機(jī)管理利用管理員的安全權(quán)限,對(duì)于安全規(guī)則的落實(shí)進(jìn)行監(jiān)督評(píng)判,對(duì)于可疑問(wèn)題實(shí)施處置,全面的主機(jī)運(yùn)維管理包括以下。維持安全隔離:對(duì)不同系統(tǒng)的安全網(wǎng)絡(luò)之間利用專門的安全設(shè)備進(jìn)行隔離防護(hù),使用專用的傳輸數(shù)據(jù)接口,并對(duì)傳輸數(shù)據(jù)加密保護(hù),關(guān)閉不必要的數(shù)據(jù)通道。根據(jù)秘鑰管理規(guī)定,對(duì)各級(jí)秘鑰和口令進(jìn)行全生命周期管理。安全分析告警:實(shí)現(xiàn)多視角的告警信息和集中展現(xiàn),以及安全響應(yīng)和預(yù)警對(duì)重要網(wǎng)絡(luò)設(shè)備產(chǎn)生的主機(jī)日志、威脅日志、網(wǎng)絡(luò)異常流量等信息統(tǒng)一管理,基于對(duì)這些日志的審計(jì),發(fā)現(xiàn)針對(duì)主機(jī)設(shè)備的攻擊、隱藏的系統(tǒng)安全漏洞等。安全響應(yīng)處置:對(duì)各個(gè)安全區(qū)的安全事件進(jìn)行統(tǒng)一的收集、歸納、歸一化分析整理,基于規(guī)則庫(kù)對(duì)內(nèi)外部攻擊和誤操作進(jìn)行實(shí)時(shí)檢測(cè),發(fā)現(xiàn)后進(jìn)行及時(shí)響應(yīng)、處置、處罰。7.2.2主機(jī)安全運(yùn)維工具Psutil庫(kù)PopenPIPEpywin32paramikofabricpexpect1.Psutil庫(kù)Psutil是一個(gè)跨平臺(tái)庫(kù)(/psutil/)能夠輕松實(shí)現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)信息。它主要用來(lái)做系統(tǒng)監(jiān)控,性能分析,進(jìn)程管理。它實(shí)現(xiàn)了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OSX、FreeBSD和SunSolaris等操作系統(tǒng)。Psutil的安裝執(zhí)行匹配:pipinstallpsutil。2.WMI模塊Windows提供了WMI(WindowsManagementInstrumentation)用于管理組件的常規(guī)機(jī)制,可以查看系統(tǒng)信息了??梢酝ㄟ^(guò)安裝配套的WMI庫(kù)來(lái)使用Python調(diào)用WMI。WMI庫(kù)需要依賴pywin32。pywin32是一個(gè)第三方模塊庫(kù),主要的作用是方便python開(kāi)發(fā)者快速調(diào)用WindowsAPI。pywin32也被很多Windows第三方python模塊庫(kù)依賴(例如下面7.2.3節(jié)程序設(shè)計(jì)3.中的win32serviceutil、win32servicewin32event等)。因此,要成功安裝WMI庫(kù),需要完成以下相關(guān)軟件包的安裝:(1)Pythonwin32擴(kuò)展,可以通過(guò)執(zhí)行“pipinstallpywin32”實(shí)現(xiàn);(2)PythonWMI,可以通過(guò)執(zhí)行“pipinstallwmi”實(shí)現(xiàn)。7.2.3主機(jī)安全運(yùn)維實(shí)現(xiàn)1.使用Psutil庫(kù)查看系統(tǒng)信息importpsutila=psutil.cpu_count()#CPU邏輯數(shù)量b=psutil.cpu_times()#CPU運(yùn)行時(shí)間c=psutil.cpu_percent(interval=1,percpu=True)#當(dāng)前邏輯CPU使用率d=psutil.virtual_memory()#物理內(nèi)存使用情況e=_io_counters()#網(wǎng)絡(luò)輸入輸出
print("CPU數(shù)量={}".format(a))print("當(dāng)前邏輯CPU使用率{}".format(c))print("CPU運(yùn)行時(shí)間{}".format(b))print("運(yùn)行內(nèi)存總{:0.2f}G--使用量{:0.2f}G--使用率{}%--空閑{:0.2f}G"\format(d[0]/(1024*1024*1024),\d[3]/(1024*1024*1024),d[2],d[4]/(1024*1024*1024)))print("網(wǎng)絡(luò)接口信息發(fā)包流量{:0.2f}G--收包流量{:0.2f}G--發(fā)包個(gè)數(shù){}--收包個(gè)數(shù){}"\format(e[0]/(1024*1024*1024),e[1]/(1024*1024*1024),e[2],e[3]))7.2.3主機(jī)安全運(yùn)維實(shí)現(xiàn)2.使用pywin32庫(kù)查看系統(tǒng)信息classOS_info_wmi(object):_c=None_cs=None_os=None_pfu=None_dsk=None_net=Nonedef__init__(self):self._c=wmi.WMI()#?self._cs=self._c.Win32_ComputerSystem()#?self._os=self._c.Win32_OperatingSystem()self._pfu=self._c.win32_Processor()self._dsk=self._c.Win32_DiskDrive()self._net=self._c.Win32_NetworkAdapterConfiguration(IPEnabled=1)self.hostname=self._os[0].CSNamedefget_cpu(self):data_dict={}forcpuinself._pfu:device=cpu.DeviceID.lower()data_dict[device]={'volume':float(cpu.LoadPercentage),\'usage_percent':float(cpu.LoadPercentage)}returndata_dictdefget_disk(self):data_dict={}forphysical_diskinself._dsk:forpartitioninphysical_disk.associators("Win32_DiskDriveToDiskPartition"):forlogical_diskinpartition.associators("Win32_LogicalDiskToPartition"):caption=logical_disk.Captiondata_dict[caption]={'total_capacity':logical_disk.Size,\'usage':round(int(logical_disk.FreeSpace)/int(logical_disk.Size)*100,2)}returndata_dictdefget_process(self):data_dict={}#獲取當(dāng)前運(yùn)行的進(jìn)程forprocessinself._c.Win32_Process():name=process.Namedata_dict[name]='PID:'+str(process.ProcessId)returndata_dictdefcombine(self):#?combine_data={}combine_data['data']={}combine_data['hostname']=self.hostnametry:combine_data['data']['CPUUsage_info']=self.get_cpu()combine_data['data']['DiskUsage_info']=self.get_disk()combine_data['data']['Mem_info']=self.get_mem()combine_data['data']['Process_info']=self.get_process()exceptException:print("agentERROR!")finally:combine_data['timestamp']=time.asctime(time.localtime())#?returncombine_data7.2.3主機(jī)安全運(yùn)維實(shí)現(xiàn)3.對(duì)主機(jī)運(yùn)維代理設(shè)計(jì)實(shí)現(xiàn)批量主機(jī)安全運(yùn)維的方法很多,目前主流的技術(shù)就是在被監(jiān)控主機(jī)上安裝安全代理,通過(guò)代理由管理員對(duì)本地機(jī)進(jìn)行管控,主機(jī)安全代理的工作示意圖如圖所示?;谏侠腛S_info_wmi類,設(shè)計(jì)運(yùn)維代理程序如下。importwin32serviceutilimportwin32serviceimportwin32eventimporttimeimportjsonimporturllib.requestfromOS_info_wmiimportOS_info_wmiimportservicemanagerdefwr_data(url,obj):data=json.dumps(obj)res=Nonetry:#req=urllib.Request(url,data,{'Content-Type':'application/json'})#res=urllib.urlopen(req,timeout=5)#returnres.read()passexceptException:returnFalsefinally:ifres:res.close()基于上例的OS_info_wmi類,設(shè)計(jì)運(yùn)維代理程序如下。classAgent_win_manager(win32serviceutil.ServiceFramework):#?_svc_name_="Agent_win_manager"_svc_display_name_="Agent_win_manager"_wp=None_wr_url=None_poll_intvl=Nonedef__init__(self,args):win32serviceutil.ServiceFramework.__init__(self,args)self.hWaitStop=win32event.CreateEvent(None,0,0,None)self._wr_url=':8655/'self._wp=OS_info_wmi()#?self._poll_intvl=20print('Servicestart.')defSvcDoRun(self):#?servicemanager.LogMsg(servicemanager.\#記錄日志EVENTLOG_INFORMATION_TYPE,\servicemanager.PYS_SERVICE_STARTED,(self._svc_name_,''))self.timeout=100whileTrue:rc=win32event.WaitForSingleObject(self.hWaitStop,self.timeout)ifrc==win32event.WAIT_OBJECT_0:breakelse:wr_obj=self._bine()ifwr_obj:#?向本地文件追加f=open('c:\\time.txt','a')f.write('%s%s'%(str(wr_obj),'\n'))f.close()#?向Http服務(wù)器寫(xiě)入數(shù)據(jù)#wr_data('%s%s'%(self._wr_url,'setdata'),wr_obj)time.sleep(self._poll_intvl)returndefSvcStop(self):#?self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)win32event.SetEvent(self.hWaitStop)print('Servicestop')returnif__name__=='__main__':win32serviceutil.HandleCommandLine(Agent_win_manager)7.3.1惡意軟件查殺原理7.3主機(jī)惡意軟件分析1.惡意代碼工作原理
惡意代碼(MaliciousCode)是指故意編制或設(shè)置的、對(duì)網(wǎng)絡(luò)或系統(tǒng)會(huì)產(chǎn)生威脅或潛在威脅的計(jì)算機(jī)代碼。最常見(jiàn)的惡意代碼有計(jì)算機(jī)病毒(簡(jiǎn)稱病毒)、特洛伊木馬(簡(jiǎn)稱木馬)、計(jì)算機(jī)蠕蟲(chóng)(簡(jiǎn)稱蠕蟲(chóng))、后門、邏輯炸彈等。以病毒為例,可以將惡意代碼的工作過(guò)程描述為下圖2.惡意代碼分析原理
影響主機(jī)安全的很大因素,來(lái)自于惡意代碼的破壞,為了對(duì)其進(jìn)行抑制,就需要利用惡意代碼檢測(cè)技術(shù)。這種技術(shù)也稱為反病毒技術(shù),是指采用多種方法和技術(shù),實(shí)現(xiàn)防病毒、查病毒、殺病毒,以保證計(jì)算機(jī)系統(tǒng)的正常運(yùn)行的技術(shù)手段。檢測(cè)是反惡意代碼的關(guān)鍵,通常有三種方法可以實(shí)現(xiàn)。第一種,也是最為普通的,是所謂的特征檢測(cè)(signaturedetection),這種方法依賴于在某些特定惡意軟件中找出它所固有的一種模式或特征。第二種方法被稱為變化檢測(cè)(changedetection),這種方法就是檢測(cè)發(fā)生了變化的文件。文件意外地發(fā)生某些變化可能就暗示著一次不良的感染。第三種方法是異常檢測(cè)(anomalydetection),檢測(cè)目標(biāo)是非正常的或類似病毒的文件及行為。特征檢測(cè)的方法可以采用靜態(tài)方式,也就是不運(yùn)行惡意代碼來(lái)分析,后兩種方法可以將惡意代碼置于沙箱中,觀察其變化以實(shí)現(xiàn)自動(dòng)化分析或有經(jīng)驗(yàn)的病毒分析人員利用動(dòng)態(tài)分析進(jìn)行人工排查。目前用于惡意軟件分析的工具已經(jīng)非常豐富了,常見(jiàn)的如下表所示7.3.2惡意軟件分析工具1.靜態(tài)分析工具PEfileIDAPython工具clamAVYara工具2.動(dòng)態(tài)分析工具Volatility工具Windbg工具沙箱工具7.3.2惡意軟件分析工具1.PEfile惡意代碼多為可執(zhí)行文件。PE文件的全稱是PortableExecutable,意為可移植的可執(zhí)行的文件,常見(jiàn)的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微軟Windows操作系統(tǒng)上的程序文件(可能是間接被執(zhí)行,如DLL),結(jié)構(gòu)如圖所示7.3.2惡意軟件分析工具2.IDAPython工具交互式反匯編器專業(yè)版(InteractiveDisassemblerProfessional),即:IDAPro(或簡(jiǎn)稱為IDA),是一款靜態(tài)反編譯軟件,提供交互式、可編程、可擴(kuò)展、多處理器、交叉分析程序功能。IDA可以通過(guò)IDAPython進(jìn)行軟件分析。IDAPython創(chuàng)建于2004年,其設(shè)計(jì)目標(biāo)是結(jié)合強(qiáng)大的python與自動(dòng)化分析的IDA工具,由IDC、Idautils、Idaapi三個(gè)獨(dú)立模塊組成。其中,IDC封裝了IDA的IDC函數(shù)的兼容性模塊,Idautils是IDA里的一個(gè)高級(jí)實(shí)用功能模塊,Idaapi設(shè)計(jì)用來(lái)訪問(wèn)更加底層的數(shù)據(jù)。7.3.2惡意軟件分析工具3.clamAV進(jìn)行惡意代碼的靜態(tài)分析,還可以利用現(xiàn)有殺毒軟件的服務(wù)實(shí)現(xiàn),其中一種解決方案就是采用clamAV+pyClamd庫(kù)進(jìn)行查毒,下面對(duì)clamAV和pyClamd及工具安裝分別進(jìn)行介紹。①clamAVClamAntiVirus(ClamAV)是免費(fèi)而且開(kāi)放源代碼的防毒軟件,軟件與病毒碼的更新皆由社群免費(fèi)發(fā)布。目前ClamAV主要是使用在由Linux、FreeBSD等Unix-like系統(tǒng)架設(shè)的郵件服務(wù)器上,提供電子郵件的病毒掃描服務(wù)。ClamAV本身是在文字接口下運(yùn)作,但也有許多圖形接口的前端工具可用,另外由于其開(kāi)放源代碼的特性,在Windows與MacOSX平臺(tái)都有其移植版。②pyClamdpyClamd是Clamd的python接口,支持Windows、Linux、MacOSX等平臺(tái)運(yùn)行。通過(guò)使用pyClamd,用戶可以以一種高效且簡(jiǎn)單的方式將clamAV的病毒檢測(cè)功能添加到python軟件中。7.3.2惡意軟件分析工具4.Yara工具Yara是一款旨在幫助惡意軟件研究人員識(shí)別和分類惡意軟件樣本的開(kāi)源工具,使用Yara可以基于文本或二進(jìn)制模式創(chuàng)建惡意軟件家族描述與匹配信息,進(jìn)而對(duì)惡意軟件進(jìn)行識(shí)別。Yara目前已被廣泛的使用,包括知名軟件有賽門鐵克、火眼、卡巴斯基、McAfee、VirusTotal等。Yara運(yùn)行于Windows、Linux和MacOSX等多種平臺(tái),也可以通過(guò)其命令行界面或從Python腳本中使用調(diào)用。用戶可以到Y(jié)ara官網(wǎng)(/VirusTotal/yara/releases)下載自己主機(jī)對(duì)應(yīng)的二進(jìn)制版壓縮包Yara識(shí)別的關(guān)鍵在于其規(guī)則,規(guī)則定義的字符串有三種類型,即:文本字符串、十六進(jìn)制字符串、正則表達(dá)式。文本字符串用來(lái)定義文件或進(jìn)程內(nèi)存中可讀型內(nèi)容,十六進(jìn)制字符串用來(lái)定義字節(jié)內(nèi)容,正則表達(dá)式可用在文本字符串和十六進(jìn)制字符串中。7.3.2惡意軟件分析工具5.Volatility工具Volatility是用python寫(xiě)的高級(jí)內(nèi)存取證框架。它可以用來(lái)對(duì)可疑軟件的進(jìn)行內(nèi)存分析并取證。內(nèi)存分析技術(shù)是指從運(yùn)行的電腦中取出內(nèi)存鏡像來(lái)進(jìn)行分析的技術(shù),其在惡意軟件分析、應(yīng)急響應(yīng)和調(diào)查中扮演重要的角色,它能夠從計(jì)算機(jī)內(nèi)存中提取取證線索,比如:運(yùn)行的進(jìn)程,網(wǎng)絡(luò)連接,加載的模塊等等,同時(shí)能夠支持脫殼、Rootkit檢測(cè)和逆向工程。Cuckoo與Volatility配合,可以更深度和全面地分析,并防止惡意軟件利用rookit技術(shù)逃逸沙箱的監(jiān)控。7.3.2惡意軟件分析工具6.Windbg工具目前Windows系統(tǒng)中支持進(jìn)行動(dòng)態(tài)調(diào)試的工具常見(jiàn)的包括:Olldbg、Windbg、x64dbg,三種工具的比較如下。Windbg是微軟開(kāi)發(fā)的一套調(diào)試器中的組件(/),屬于內(nèi)核級(jí)別調(diào)試器,不僅可以用來(lái)調(diào)試應(yīng)用程序,也可以調(diào)試內(nèi)核級(jí)的代碼,如:驅(qū)動(dòng)程序等。Windbg由于其易用性、豐富的命令和對(duì)Windows的原生支持,因此在Windows環(huán)境具有較大用戶群。在python支持方面,Pykd是Windbg的python擴(kuò)展。該擴(kuò)展提供支持Windbg絕大多數(shù)功能的API,可以采用在“!pycmd”中進(jìn)行命令交互或是在“!pyfile1.py”輸入腳本兩種方式執(zhí)行。7.3.2惡意軟件分析工具7.沙箱工具近些年來(lái),隨著病毒技術(shù)的發(fā)展手工處理成千上萬(wàn)的惡意軟件樣本已經(jīng)變得非常困難,沙箱技術(shù)被自動(dòng)化分析技術(shù)所逐漸采用。沙箱將待分析的惡意軟件樣本運(yùn)行于一個(gè)與外界隔離的虛擬環(huán)境之中(“沙箱”,即:sandbox),在樣本運(yùn)行過(guò)程中沙箱會(huì)收集關(guān)于其動(dòng)態(tài)行為,并從中分析是否存在惡意行為。沙箱技術(shù)發(fā)展到今天形成三種主要類型:基于應(yīng)用程序虛擬化沙箱、基于部分虛擬化沙箱和基于完全虛擬化沙箱。①cuckoo沙箱cuckoo沙箱是一個(gè)開(kāi)源的惡意文件自動(dòng)化分析系統(tǒng),采用python和c/c++開(kāi)發(fā),同時(shí)支持多款操作系統(tǒng),包括:Windows、Android、Linux和Darwin四種,可以對(duì)二進(jìn)制的PE文件(exe、dll、com)、PDF文檔、office文檔、URLs、HTML文件、各種腳本(PHP、VB、Python)、jar包、zip等等文件,實(shí)施惡意文件的靜態(tài)二進(jìn)制數(shù)據(jù)和動(dòng)態(tài)運(yùn)行后的進(jìn)程、網(wǎng)絡(luò)、文件等行為的分析。7.3.2惡意軟件分析工具7.沙箱工具cuckoo分析需要主機(jī)(host)和分析客戶機(jī)(AnalysisGuests)配合工作,其工作機(jī)制如下圖所示。圖中主機(jī)與多臺(tái)客戶機(jī)構(gòu)成的分析機(jī)群通過(guò)虛擬網(wǎng)絡(luò)相連,在cuckoo分析系統(tǒng)中,主機(jī)實(shí)施控制,客戶機(jī)實(shí)施分析。一般在測(cè)試時(shí),由主機(jī)將待分析的軟件傳入客戶機(jī),客戶機(jī)分析(主要由Cuckoo的process模塊完成)結(jié)束后主機(jī)輸出分析報(bào)告。分析人員通過(guò)報(bào)告,了解待測(cè)軟件的行為表現(xiàn)。7.3.2惡意軟件分析工具7.沙箱工具②Noriben沙箱Noriben是一個(gè)基于python的腳本,它與SysinternalsProcmon一起工作,可以自動(dòng)收集,分析和報(bào)告惡意軟件的運(yùn)行時(shí)指示器。簡(jiǎn)而言之,它允許分析者運(yùn)行惡意軟件,并獲取惡意軟件活動(dòng)的簡(jiǎn)單文本報(bào)告。該工具只需要Sysinternalsprocmon.exe(或procmon64.exe)即可運(yùn)行(Noriben的Noriben.py文件需要與放置procmon64.exe在同一目錄下)。Noriben所依賴的Procmon(/zh-cn/sysinternals/downloads/procmon)軟件,是微軟出品用于監(jiān)視Windows系統(tǒng)里程序的運(yùn)行情況,監(jiān)視內(nèi)容包括該程序?qū)ψ?cè)表的讀寫(xiě)、對(duì)文件的讀寫(xiě)、網(wǎng)絡(luò)的連接、進(jìn)程和線程的調(diào)用情況,支持全面的系統(tǒng)監(jiān)視7.3.3惡意軟件分析實(shí)現(xiàn)1.靜態(tài)分析靜態(tài)分析可以對(duì)程序文件的反匯編代碼、圖形圖像、可打印字符串和其他磁盤資源進(jìn)行分析,是一種不需要實(shí)際運(yùn)行程序的逆向工程。雖然靜態(tài)分析技術(shù)有欠缺之處,但是它可以幫助安全人員理解各種各樣的惡意軟件特征,了解惡意軟件攻擊用意,以及攻擊者可以隱藏并繼續(xù)攻擊受感染計(jì)算機(jī)的方式等。(1)PE文件逆向分析下面代碼(PE_analy.py)基于pefile庫(kù)實(shí)現(xiàn)對(duì)計(jì)算器可執(zhí)行文件的靜態(tài)分析。importpefilepe=pefile.PE("calc.exe")forsectioninpe.sections:print("段名:",section.Name,"段信息:",hex(section.VirtualAddress),?hex(section.Misc_VirtualSize)?,section.SizeOfRawData)?forentryinpe.DIRECTORY_ENTRY_IMPORT:?print("顯示動(dòng)態(tài)鏈接庫(kù):",entry.dll)forfunctioninentry.imports:print('\t',"函數(shù)名:",)上述代碼首先創(chuàng)建了一個(gè)指向計(jì)算器(calc.exe)的pefile文件對(duì)象,然后從PE對(duì)象的五個(gè)不同的節(jié)中提取了數(shù)據(jù):.text、.rdata、.data、.idata和.reloc。輸出是以五元組的形式給出。其中,0x1000?是加載這些節(jié)的虛擬內(nèi)存地址基址,也可以將其視為節(jié)的內(nèi)存地址基址。在虛擬大小(virtualsize)字段中的0x32830?指定了節(jié)被加載后所需的內(nèi)存大小。第三個(gè)字段中的207360?表示該節(jié)將在該內(nèi)存塊中所占用的數(shù)據(jù)量。除了使用pefile解析程序的節(jié)之外,還可以使用PE對(duì)象列出二進(jìn)制文件將加載的DLL文件,以及它將在這些DLL文件中所請(qǐng)求的函數(shù)調(diào)用,上述代碼通過(guò)查詢PE對(duì)象的DIRECTORY_ENTRY_IMPORT參數(shù)實(shí)現(xiàn)?。對(duì)于一些敏感、危險(xiǎn)的函數(shù)的調(diào)用尤其要重視,如:WriteFile、CreateFileA、CreateProcessA等。(2)IDAPro工具分析在操作系統(tǒng)內(nèi)存中有兩種存儲(chǔ)空間,一個(gè)是堆,一個(gè)是棧。堆主要用于存儲(chǔ)用戶動(dòng)態(tài)分配的變量,而棧則是存儲(chǔ)進(jìn)程中的臨時(shí)變量,二者在程序運(yùn)行過(guò)程中都具有極其重要的作用,也是惡意程序攻擊的重點(diǎn)。在惡意代碼中,經(jīng)常會(huì)通過(guò)調(diào)用一些敏感函數(shù)實(shí)施破壞,因此也可以使用IDAPro編寫(xiě)腳本對(duì)特定敏感系統(tǒng)函數(shù)調(diào)用的地址進(jìn)行提取,代碼如下。編寫(xiě)腳本得到程序在函數(shù)調(diào)用時(shí)的棧內(nèi)信息,利用Alt+F7調(diào)用執(zhí)行。fromidaapiimport*f1=file('danger_call.txt','w')danger_funcs=["strcpy","sprintf","strncpy"]#?forfuncindanger_funcs:addr=LocByName(func)#?ifaddr!=BADADDR:cross_refs=CodeRefsTo(addr,0)f1.write("################\n")forrefincross_refs:f1.write(str(hex(ref))+'\n')f1.close()上面的代碼選了“strcpy”、“sprintf”、“strncpy”三個(gè)庫(kù)函數(shù)作為監(jiān)控對(duì)象?,檢索程序?qū)λ恼{(diào)用。這里用到了CodeRefsTo(),用來(lái)查詢調(diào)用的具體地址?。此外,還可以得到程序在函數(shù)調(diào)用時(shí)的棧內(nèi)信息fromidaapiimport*var_size_threshold=16current_addr=ScreenEA()forfinFunctions(SegStart(current_addr),SegEnd(current_addr)):stack_frame=GetFrame(f)#?frame_size=GetStrucSize(stack_frame)#?frame_counter=0prev_count=-1distance=0whileframe_counter<frame_size:stack_var=GetMemberName(stack_frame,frame_counter)#getonefromstackifstack_var!="":ifprev_count!=-1:distance=frame_counter-prev_distanceprev_distance=frame_counter#recordlastlocationifdistance>=var_size_threshold:print("[*]Function:%s->StackVariable:%s\(%dbytes)"%(GetFunctionName(f),\prev_member,distance))?else:prev_count=frame_counterprev_distance=frame_counterprev_member=stack_vartry:frame_counter=frame_counter+\GetMemberSize(stack_frame,frame_counter)#computeoffsetexcept:frame_counter+=1else:frame_counter+=1上述程序調(diào)用GetFrame函數(shù)獲得棧幀?,并利用GetStrucSize函數(shù)獲得棧幀大小?;如果幀的成員不為空,則對(duì)其進(jìn)行顯示打印?。(3)clamCV工具分析如前所述,基于clamCV通過(guò)向搭建起來(lái)的clamD服務(wù)發(fā)送測(cè)試文件,由clamCV進(jìn)行檢測(cè)然后通過(guò)網(wǎng)絡(luò)反饋的方式實(shí)現(xiàn)查毒。clamCV從分析機(jī)制上,主要是利用自身收集的特征庫(kù)進(jìn)行比較的方法實(shí)現(xiàn),因此也屬于靜態(tài)分析。importosimportpyclamdcd=pyclamd.ClamdNetworkSocket()#?連接ClamD服務(wù),默認(rèn):3310print(cd.ping())#?查看與服務(wù)器的連接情況print(cd.version())#查看ClamD的版本號(hào)virus_sample=cd.EICAR()#?生成一個(gè)病毒測(cè)試樣本print(cd.scan_stream(virus_sample))#?對(duì)病毒測(cè)試樣本進(jìn)行檢測(cè)isExists=os.path.exists('./tmp')ifnotisExists:os.mkdir('./tmp')#?將病毒測(cè)試樣本字符串寫(xiě)入文件,代表病毒文件void=open('./tmp/EICAR.exe','+wb').write(cd.EICAR())#?將無(wú)毒文本字符串寫(xiě)入文件,代表無(wú)毒文件void=open('./tmp/NO_EICAR.exe','+wb').write('novirusinthisfile'.encode())#?二進(jìn)制文件測(cè)試f1=open("./tmp/NO_EICAR.exe","+rb")file1_content1=f1.read()print(cd.scan_stream(file1_content1))f1.close()f2=open("./pycharm64.exe","+rb")file2_content=f2.read()print(cd.scan_stream(file2_content))f2.close()上述代碼首先創(chuàng)建一個(gè)向ClamdNetworkSocket類對(duì)象,向ClamD服務(wù)發(fā)起連接請(qǐng)求?,連接完成后可以通過(guò)ping和version函數(shù)了解連接情況和服務(wù)的clamAV版本號(hào)?。連接的地址默認(rèn)為:3310,可以通過(guò)修改ClamdNetworkSocket類的初始化方法修改此地址。為了測(cè)試程序,上述代碼調(diào)用了EICAR方法?,即生成具有病毒特征的字符串,然后調(diào)用scan_stream對(duì)該字符串進(jìn)行測(cè)試,并打印測(cè)試結(jié)果?。為了進(jìn)一步測(cè)試,程序各生成了一個(gè)測(cè)試病毒文件?和一個(gè)無(wú)病毒文件。接著,程序采用讀入二進(jìn)制文件的方式分別測(cè)試了?兩個(gè)可執(zhí)行文件。(4)Yara病毒檢測(cè)與分類實(shí)現(xiàn)Yara病毒檢測(cè)可以直接使用7.3.3節(jié)中的可執(zhí)行二進(jìn)制文件?;诿钚泻团幚砟_本的Yara使用方法示例如下。rulesilent_banker:banker#?{meta:#?description="Thisisjustanexample"thread_level=3in_the_wild=truestrings:#?$a={6A4068003000006A148D91}$b={8D4DB02BC183C027996A4E59F7F9}$c="UVODFRYSIHLNWPEJXQZAKCBGMT"$d={4D5A}condition:#?$aor$bor$cor$d}2.動(dòng)態(tài)追蹤動(dòng)態(tài)測(cè)試(dynamictesting),指的是實(shí)際運(yùn)行被測(cè)程序,輸入相應(yīng)的測(cè)試數(shù)據(jù),檢查實(shí)際輸出結(jié)果和預(yù)期結(jié)果是否相符的過(guò)程。(1)Volatility使用Volatility可以分析運(yùn)行可執(zhí)行文件系統(tǒng)的內(nèi)存鏡像,給出分析結(jié)論。是否繼續(xù)輸入“Y”,經(jīng)過(guò)一段時(shí)間生成當(dāng)前系統(tǒng)的內(nèi)存副本待分析.接著調(diào)用Volatility實(shí)施分析。①查看內(nèi)存的基本信息:volatility_2.6_win64_standalonetimersvol.py-f./DESKTOP-K1E3UAK-20210310-144932.rawimageinfo.這條命令使用了imageinfo命令,該命令可以查看內(nèi)存副本的摘要信息,可以顯示主機(jī)所使用的操作系統(tǒng)版本、服務(wù)包以及硬件結(jié)構(gòu)(32位或64位)、頁(yè)目錄表的起始地址和該獲取該內(nèi)存鏡像的時(shí)間等基本信息。②查看進(jìn)程和動(dòng)態(tài)鏈接庫(kù)信息,執(zhí)行命令:volatility_2.6_win64_standalonetimersvol.py-f./DESKTOP-K1E3UAK-20210310-144932.raw--profile==Win10x64_14393psscan>psscan.txt上述命令行執(zhí)行了psscan命令,該命令能夠通過(guò)內(nèi)存池標(biāo)簽查找的方式枚舉系統(tǒng)中的所有進(jìn)程,不僅能夠顯示當(dāng)前內(nèi)存中活躍的進(jìn)程信息,還能夠枚舉以前終止的進(jìn)程和被隱藏以及被rootkit破壞的未在活躍進(jìn)程鏈表中出現(xiàn)的進(jìn)程。這些隱藏的或掉鏈的進(jìn)程在內(nèi)存取證中具有重要的參考價(jià)值,很有可能就屬于惡意代碼。上面命令輸出結(jié)果通過(guò)>psscan.txt將其輸出結(jié)果重定向到psscan.txt文件中。(2)Windbg編程Windbg是Microsoft公司免費(fèi)調(diào)試器調(diào)試集合中的GUI的調(diào)試器,支持Source和Assembly兩種模式的調(diào)試。Windbg不僅可以調(diào)試應(yīng)用程序,還可以進(jìn)行KernelDebug。結(jié)合Microsoft的SymbolServer,可以獲取系統(tǒng)符號(hào)文件,便于應(yīng)用程序和內(nèi)核的調(diào)試。Windbg支持的平臺(tái)包括X86、IA64、AMD64。雖然windbg也提供圖形界面操作,但它最強(qiáng)大的地方還是有著強(qiáng)大的調(diào)試命令,一般情況會(huì)結(jié)合GUI和命令行進(jìn)行操作,常用的視圖有:局部變量、全局變量、調(diào)用棧、線程、命令、寄存器、白板等,其中“命令”視圖是默認(rèn)打開(kāi)的。下面代碼用于windbg檢查堆是否被破壞。importsysfrompykdimport*defcheck_heap():heapliststring=dbgCommand('!heap')#?forheapstringinheapliststring.split('\n'):#?ifheapstring.find(':')==-1:continueelse:#?heapstring=heapstring.expandtabs(4)heapstring=heapstring.replace("","")heapaddr=heapstring[-8:]result=dbgCommand("!heap-v"+heapaddr)#?println(result)defmain(argv):check_heap()if__name__=="__main__":print("itisstarting!")main(sys.argv)(3)Noriben沙箱工具實(shí)現(xiàn)使用沙箱進(jìn)行病毒檢測(cè)是一種強(qiáng)大而且安全的方法。python沙箱檢測(cè)有很多選擇,其中大多數(shù)分析者使用前述的Cuckoo搭建沙箱。但是,Cuckoo搭建沙箱過(guò)程非常復(fù)雜,且對(duì)于Windows系統(tǒng)的支持也不夠好,并且提供的編程方式主要是通過(guò)對(duì)源碼修改實(shí)現(xiàn)。為了解決這個(gè)問(wèn)題,可以選擇Noriben?;赪in7系統(tǒng)的Noriben沙箱搭建,需要完成以下工作。①安裝vmware虛軟件擬機(jī),安裝鏡像系統(tǒng)。②在虛擬機(jī)中安裝python,拷入Noriben.py和procmon.exe到桌面③固化系統(tǒng),記錄快照④在主機(jī)上運(yùn)行處理軟件,將待檢測(cè)的文件導(dǎo)入虛擬機(jī)⑤在虛擬機(jī)中啟動(dòng)運(yùn)行Procmon和待檢測(cè)的文件⑥經(jīng)過(guò)一段時(shí)間,收集待測(cè)文件的行為⑦導(dǎo)出監(jiān)測(cè)報(bào)告,進(jìn)行分析。上述工作可以結(jié)合利用vmware的vmrun.exe完成,即執(zhí)行如下Noriben包自帶的批處理文件。@echooffif"%1"==""gotoHELPifnotexist"%1"gotoHELPsetDELAY=10setCWD=%CD%setVMRUN="C:\ProgramFiles(x86)\VMware\VMwareWorkstation\vmrun.exe"setVMX="e:\VMs\WinXP_Malware\WinXP_Malware.vmx"setVM_SNAPSHOT="Baseline"setVM_USER=AdministratorsetVM_PASS=passwordsetFILENAME=%~nx1setNORIBEN_PATH="C:\DocumentsandSettings\%VM_USER%\Desktop\Noriben.py"setLOG_PATH="C:\Noriben_Logs"setZIP_PATH="C:\Tools\zip.exe"%VMRUN%-TwsrevertToSnapshot%VMX%%VM_SNAPSHOT%#?%VMRUN%-Twsstart%VMX%#?%VMRUN%-gu%VM_USER%-gp%VM_PASS%copyFileFromHostToGuest%VMX%"%1"C:\Malware\malware.exe#?%VMRUN%-Tws-gu%VM_USER%-gp%VM_PASS%runProgramInGuest%VMX%C:\Python27\Python.exe%NORIBEN_PATH%-d-t%DELAY%--cmd"C:\Malware\Malware.exe"--output%LOG_PATH%#?if%ERRORLEVEL%==1gotoERROR1%VMRUN%-Tws-gu%VM_USER%-gp%VM_PASS%runProgramInGuest%VMX%%ZIP_PATH%-jC:\NoribenReports.zip%LOG_PATH%\*.*#?%VMRUN%-gu%VM_USER%-gp%VM_PASS%copyFileFromGuestToHost%VMX%C:\NoribenReports.zip%CWD%\NoribenReports_%FILENAME%.zip#?gotoEND:ERROR1echo[!]FiledidnotexecuteinVMcorrectly.gotoEND:HELPechoPleaseprovideexecutablefilenameasanargument.echoForexample:echo%~nx0C:\Malware\ef8188aa1dfa2ab07af527bab6c8baf7gotoEND:END7.4主機(jī)漏洞模糊測(cè)試1.漏洞簡(jiǎn)介漏洞可以定義為存在于一個(gè)系統(tǒng)內(nèi)的弱點(diǎn)或缺陷,這些弱點(diǎn)或缺陷導(dǎo)致系統(tǒng)對(duì)某一特定的威脅攻擊或危險(xiǎn)事件具有敏感性,或具有進(jìn)行攻擊威脅的可能性。漏洞的概念經(jīng)常被與軟件缺陷(bug)混為一談,實(shí)際上二者存在區(qū)別。大部分Bug影響功能性,并不涉及安全性,也就不構(gòu)成漏洞;一部分漏洞可能來(lái)源于Bug,但并不是全部,它們之間存在交集,如圖所示。
7.4.1漏洞挖掘技術(shù)概述漏洞的種類可以劃分為:功能性邏輯漏洞和安全性邏輯漏洞。功能性邏輯漏洞是指影響軟件的正常功能,例如執(zhí)結(jié)果錯(cuò)誤、執(zhí)行流程錯(cuò)誤等。安全性邏輯漏洞是指通常情況下不影響軟件的正常功能,但如果漏洞被攻擊者成功利用后,有可能造成軟件運(yùn)行錯(cuò)誤甚至執(zhí)行惡意代碼,例如緩沖區(qū)溢出漏洞、網(wǎng)站中的跨站腳本漏洞(XSS)、SQL注入漏洞等。漏洞的產(chǎn)生原因是多方面的,但是可總結(jié)為以下幾個(gè)方面:①由于在軟/硬件的設(shè)計(jì)和實(shí)現(xiàn)中由于開(kāi)發(fā)人員有意或無(wú)意的失誤造成。②因?yàn)榧夹g(shù)進(jìn)步,利用新技術(shù)取觀察、測(cè)試陳舊技術(shù),由技術(shù)代差導(dǎo)致的缺陷。③開(kāi)發(fā)商,為了調(diào)試、管理、獲取用戶數(shù)據(jù)或控制預(yù)留的自用后門。當(dāng)然,也有些漏洞可能是上述幾種因素的綜合產(chǎn)物。7.4.1漏洞挖掘技術(shù)概述2.漏洞挖掘頂級(jí)的漏洞意味著不菲的價(jià)值,攻擊者可以利用它攫取信息、獲得系統(tǒng)控制權(quán),安全防御者也可以修補(bǔ)漏洞提升系統(tǒng)、網(wǎng)絡(luò)的安全性,使之得到更多的可信賴。因此二者都試圖利用漏洞挖掘技術(shù)獲取漏洞。漏洞挖掘,顧名思義就是尋找漏洞,主要是通過(guò)綜合應(yīng)用各種技術(shù)和工具,盡可能地找出軟件中的潛在漏洞。對(duì)于漏洞挖掘的競(jìng)爭(zhēng),可以說(shuō)是日趨激烈,這樣的競(jìng)爭(zhēng)也導(dǎo)致漏洞都具有一個(gè)聲明周期,如圖所示。由左至右將漏洞的生命周期分為七階段,始于黑客漏洞挖掘階段,終于Exploit/攻擊工具/惡意程序逐漸消亡階段,經(jīng)歷漏洞發(fā)現(xiàn)、Exploit(入侵)代碼出現(xiàn)、漏洞揭露公布、補(bǔ)丁發(fā)布、補(bǔ)丁/檢測(cè)/移除機(jī)制廣泛應(yīng)用五個(gè)時(shí)間節(jié)點(diǎn)。其中漏洞發(fā)現(xiàn)與補(bǔ)丁發(fā)布時(shí)間起點(diǎn)中間的階段,漏洞稱作0day漏洞。這一階段漏洞首先為攻擊方所先行發(fā)現(xiàn),而未被防御方知曉。0day,中文意思“0日/零日”或“零日漏洞”或“零時(shí)差攻擊”。零日這個(gè)詞歷史很悠久,最早出現(xiàn)是在戰(zhàn)爭(zhēng)中,將一些大規(guī)??蓺缡澜绲氖挛铮ㄒ话闶俏淦鳎┓Q之為零日危機(jī)(類似的還有末日時(shí)鐘),在世界毀滅之后,重新建立新文明的第一天,即稱之為第0天。后來(lái)引入到黑客文化,將一些大規(guī)模、致命性、高威脅性、能夠造成巨大破壞的漏洞也稱為零日漏洞(并不是所有漏洞都叫0day),縮寫(xiě)即為:0day。圍繞著漏洞發(fā)現(xiàn),安全對(duì)抗的雙方紛紛聚焦于漏洞挖掘技術(shù)。漏洞挖掘技術(shù)可以分為基于源代碼的漏洞挖掘技術(shù)、基于目標(biāo)代碼的漏洞挖掘技術(shù)和混合漏洞挖掘技術(shù)三大類?;谠创a的漏洞挖掘又稱為靜態(tài)檢測(cè),是通過(guò)對(duì)源代碼的分析,找到軟件中存在的漏洞?;谀繕?biāo)代碼的漏洞挖掘又稱為動(dòng)態(tài)檢測(cè),首先將要分析的目標(biāo)程序進(jìn)行反匯編,得到匯編代碼;然后對(duì)匯編代碼進(jìn)行分析,來(lái)判斷是否存在漏洞。混合漏洞挖掘技術(shù)是結(jié)合靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)的優(yōu)點(diǎn),對(duì)目標(biāo)程序進(jìn)行漏洞挖掘。不可否認(rèn),從冗長(zhǎng)的代碼或龐大的系統(tǒng)中挖掘出漏洞非常耗費(fèi)時(shí)間,為此人們提出了模糊測(cè)試(Fuzzing)的技術(shù)。Fuzzing技術(shù)可以追溯到1950年,當(dāng)時(shí)計(jì)算機(jī)的數(shù)據(jù)主要保存在打孔卡片上,計(jì)算機(jī)程序讀取這些卡片的數(shù)據(jù)進(jìn)行計(jì)算和輸出。如果碰到一些垃圾卡片或一些廢棄不適配的卡片,對(duì)應(yīng)的計(jì)算機(jī)程序就可能產(chǎn)生錯(cuò)誤和異常甚至崩潰,這樣,Bug就產(chǎn)生了,繼而可以從這些漏洞里面甄別出漏洞。Fuzzing技術(shù)首先是一種自動(dòng)化技術(shù),即軟件自動(dòng)執(zhí)行相對(duì)隨機(jī)的測(cè)試用例。因?yàn)槭且揽坑?jì)算機(jī)軟件自動(dòng)執(zhí)行,所以測(cè)試效率相對(duì)人來(lái)講遠(yuǎn)遠(yuǎn)高出幾個(gè)數(shù)量級(jí)。比如,一個(gè)優(yōu)秀的測(cè)試人員,一天能執(zhí)行的測(cè)試用例數(shù)量最多也就是幾十個(gè),很難達(dá)到100個(gè)。而Fuzzing工具可能幾分鐘就可以輕松執(zhí)行上百個(gè)測(cè)試用例。另外,F(xiàn)uzzing技術(shù)本質(zhì)是依賴隨機(jī)函數(shù)生成隨機(jī)測(cè)試用例,隨機(jī)性意味著不重復(fù)、不可預(yù)測(cè),可能有意想不到的輸入和結(jié)果。根據(jù)概率論里面的“大數(shù)定律”,只要我們重復(fù)的次數(shù)夠多、隨機(jī)性夠強(qiáng),那些概率極低的偶然事件就必然會(huì)出現(xiàn)。Fuzzing技術(shù)就是大數(shù)定律的典范應(yīng)用,足夠多的測(cè)試用例和隨機(jī)性,就可以讓那些隱藏的很深很難出現(xiàn)的漏洞成為必然現(xiàn)象。目前,F(xiàn)uzzing技術(shù)已經(jīng)是軟件測(cè)試、漏洞挖掘領(lǐng)域的最有效的手段之一。Fuzzing技術(shù)特別適合用于發(fā)現(xiàn)0Day漏洞,也是眾多黑客發(fā)現(xiàn)軟件漏洞的首選技術(shù)。Fuzzing雖然不能直接達(dá)到入侵的效果,但是Fuzzing非常容易找到軟件或系統(tǒng)的漏洞,以此為突破口深入分析,就更容易找到入侵路徑,這就是黑客喜歡Fuzzing技術(shù)的原因。當(dāng)然,安全防御專家也可以利用Fuzzing技術(shù)對(duì)自己的軟件、系統(tǒng)進(jìn)行測(cè)試,發(fā)現(xiàn)漏洞并修補(bǔ)之。7.4.2漏洞模糊測(cè)試工具考慮到漏洞模糊測(cè)試的強(qiáng)大,軟件工程師開(kāi)發(fā)有大量測(cè)試工具,應(yīng)用較廣的如下表所示7.4.2漏洞模糊測(cè)試工具1.HypothesisHypothesis是基于Python的高級(jí)測(cè)試庫(kù)(/project/hypothesis/),也是一種基于屬性的測(cè)試工具。所謂基于屬性的測(cè)試是指編寫(xiě)對(duì)代碼的邏輯語(yǔ)句(即“屬性”)進(jìn)行測(cè)試,測(cè)試采用自動(dòng)化工具來(lái)生成測(cè)試輸入(一般來(lái)說(shuō),是指某種特定類型的隨機(jī)生成輸入數(shù)據(jù)),并觀察程序接受該輸入時(shí)屬性是否保持不變。如果某個(gè)輸入違反了某一條屬性,則用戶證明程序存在一處錯(cuò)誤,并找到一個(gè)能夠演示該錯(cuò)誤的便捷示例。Hypothesis可以方便地生成簡(jiǎn)單和可理解的示例,嘗試引發(fā)被測(cè)函數(shù)的異常,從而可以通過(guò)耗費(fèi)較少的時(shí)間代價(jià),在代碼中找到更多的bug。hypothesis安裝需要執(zhí)行命令:“pipinstallhypothesis”。7.4.2漏洞模糊測(cè)試工具2.KittyKitty(/cisco-sas/kitty#egg=kitty)是一個(gè)用python編寫(xiě)的開(kāi)源模塊化和可擴(kuò)展的模糊化框架,其靈感來(lái)自PeachFuzzer。Kitty的設(shè)計(jì)目標(biāo)就是為了拋棄TCP/IP通信通道上的專有和秘密協(xié)議的繁冗編寫(xiě)工作,設(shè)計(jì)一個(gè)通用的、抽象的框架。這個(gè)框架將包含測(cè)試者所能想到的每個(gè)模糊過(guò)程的通用功能,并允許用戶輕松地?cái)U(kuò)展和使用它來(lái)測(cè)試他們的特定目標(biāo)。因此,Kitty具有模塊化、可擴(kuò)展、富數(shù)據(jù)、跨平臺(tái),支持多階段測(cè)試,以及客戶機(jī)與服務(wù)器測(cè)試等很多優(yōu)秀特征。Kitty作為一個(gè)框架,實(shí)現(xiàn)了模糊測(cè)試器的主循環(huán),并提供了用于創(chuàng)建完整fuzzing會(huì)話建模數(shù)據(jù)和基類的語(yǔ)法。但是,考慮到通用性,Kitty并不提供HTTP、TCP或UART進(jìn)行數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn),這是使用者需要注意的。Kitt各種類的實(shí)現(xiàn)都可以在免費(fèi)的存儲(chǔ)庫(kù)Katnip中找到。Kitty安裝需要執(zhí)行命令:“pipinstallkittyfuzzer”。7.4.2漏洞模糊測(cè)試工具3.DizzyDizzy是一個(gè)基于python的模糊框架(/ernw/dizzy)。Dizzy具有多種實(shí)用的功能,包括:可以發(fā)送到L2以及上層(TCP/UDP/SCTP),能夠處理奇長(zhǎng)度分組字段(無(wú)需匹配字節(jié)邊界,因此即使單個(gè)標(biāo)志或7位長(zhǎng)字3.也可以表示和模糊),非常容易的協(xié)議定義語(yǔ)法,能夠做多包狀態(tài)的完全模糊,能夠使用接收到的目標(biāo)數(shù)據(jù)作為響應(yīng)。Dizzy安裝需要執(zhí)行命令:“pipinstallDizzy”。7.4.3模糊測(cè)試設(shè)計(jì)實(shí)現(xiàn)本節(jié)利用基于Python的Fuzzing工具生成測(cè)試數(shù)據(jù)1.文件模糊測(cè)試對(duì)象生成fromsysimport*frommathimportceilfromrandomimportrandrangeXFACTOR=0.5#?Fuzz系數(shù)介于0.0和1.0之間defmain():print("Fuzzingisstarting!")iflen(argv)!=3:print("Usage:%s<file_to_mutate><num_of_files_to_generate>")exit(-1)
buf=''fname=argv[1]nfiles=int(argv[2])inbytes=list(open(fname,'rb').read())print("[+]Creating%dtestcases[sizeof(sample)==%dbytes]\n"%\(nfiles,len(inbytes)))foriinrange(1,nfiles+1):buf=list(inbytes)nchanges=randrange(ceil(len(inbytes)*XFACTOR))+1#?forjinrange(nchanges):buf[randrange(len(buf))]="%c"%(randrange(256))#?
f=open('testcase'+str(i)+'_'+fname,'wb')f.write("".join(buf))f.close()print("[+]Generatingtestcase%2d\t[nchanges=%6d]"%(i,nchanges))print("[+]Done.")if__name__=="__main__":main()此腳本包含2個(gè)參數(shù)、一個(gè)文件和一個(gè)數(shù)字,用于生成測(cè)試用例的初始示例。第一個(gè)參數(shù)是文件名,支持多種格式的文件,例如:mp3、pdf、exe等;第二個(gè)參數(shù)是想要生成的文件數(shù)。該段代碼工作過(guò)程要點(diǎn)是:首先定義隨機(jī)因數(shù)XFACTOR后?;賦值輸入的參數(shù)后,打開(kāi)文件?;選擇1到隨機(jī)因數(shù)倍數(shù)的字節(jié)長(zhǎng)度之間的一個(gè)隨機(jī)長(zhǎng)度?;將原文件中的內(nèi)容更換為1到256之間的一個(gè)隨機(jī)數(shù)?。采用這種方法,通過(guò)多次循環(huán)生成所需個(gè)數(shù)個(gè)隨機(jī)文件。講這些隨機(jī)文件作為測(cè)試對(duì)象,導(dǎo)入應(yīng)用軟件觸發(fā)異常,進(jìn)而發(fā)現(xiàn)漏洞。2.使用Hypothesis進(jìn)行函數(shù)模糊測(cè)試可以利用Hypothesis配合pytest進(jìn)行py文件函數(shù)測(cè)試,代碼如下。Fromhypothesisimportgiven,strategiesasst@given(egers(),egers())#??deftest_ints_are_commutative(x,y):assertx+y==y+x#?@given(x=egers(),y=egers())deftest_ints_cancel(x,y):assert(x+y)-y==x@given(st.lists(egers()))deftest_reversing_twice_gives_same_list(xs):#產(chǎn)生0-100個(gè)整數(shù)的列表.ys=list(xs)ys.reverse()ys.reverse()assertxs==ys@given(st.tuples(st.booleans(),st.text()))deftest_look_tuples_work_too(t):#生成一個(gè)元組assertlen(t)==2assertisinstance(t[0],bool)assertisinstance(t[1],str)3.網(wǎng)絡(luò)服務(wù)器測(cè)試以下代碼基于kitty庫(kù)實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器的模糊測(cè)試。importsixfromkitty.f
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆警察學(xué)院《學(xué)前兒童五大領(lǐng)域教育及活動(dòng)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年度市場(chǎng)部計(jì)劃(33篇)
- 《工程檔案管理工作》課件
- 《私營(yíng)業(yè)主能否入黨》課件
- 安保顧問(wèn)服務(wù)合同范例
- 酒店住房結(jié)賬合同范例
- 中介房屋代賣合同范例
- 手機(jī)產(chǎn)品包銷合同范例
- 要簽返聘合同范例
- 食品供應(yīng)服務(wù)合同范例
- 噴漆安全管理制度模版(3篇)
- Java Web程序設(shè)計(jì)教程(第二版)(微課版)01 Web應(yīng)用開(kāi)發(fā)概述
- 肺結(jié)核課件教學(xué)課件
- 八年級(jí)上冊(cè)物理全冊(cè)知識(shí)點(diǎn)總結(jié)(人教)
- 高考英語(yǔ)詞匯3500詞-亂序版
- 2024年廣告代理合同的廣告投放范圍與分成比例
- 2024年光伏發(fā)電項(xiàng)目融資貸款合同
- E英語(yǔ)教程(第二版)1教學(xué)課件Unit-3
- 高鐵乘務(wù)禮儀培訓(xùn)
- 2022年公務(wù)員多省聯(lián)考《申論》真題(陜西A卷)及答案解析
- 2024-2025學(xué)年上學(xué)期期中教育學(xué)業(yè)質(zhì)量監(jiān)測(cè)八年級(jí)生物學(xué)試卷
評(píng)論
0/150
提交評(píng)論