本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,具體而言,涉及一種漏洞的檢測方法及裝置。
背景技術(shù):
目前針對終端漏洞的檢測大致分為動態(tài)檢測和靜態(tài)檢測兩種方式,例如,在檢測iOS系統(tǒng)中應(yīng)用的中間人攻擊漏洞時,動態(tài)檢測的實(shí)現(xiàn)方法為,通過手動架設(shè)代理服務(wù)器,并手動設(shè)置終端的代理IP地址和端口,啟動手機(jī)應(yīng)用,手動觸發(fā)應(yīng)用的網(wǎng)絡(luò)連接行為,并在代理服務(wù)器上查看是否能截獲安全套接層超文本傳輸協(xié)議(hypertext transfer protocol over secure socket,簡稱為https)通信內(nèi)容,以此判斷是否存在中間人攻擊漏洞;而靜態(tài)檢測的實(shí)現(xiàn)方法為,對代理方法“connection:canAuthenticateAgainstProtectionSpace:”及其實(shí)現(xiàn)進(jìn)行規(guī)則匹配檢測。
由此可見,相關(guān)技術(shù)中的動態(tài)檢測方法雖然能準(zhǔn)確的發(fā)現(xiàn)漏洞,但是必須是手動化測試,無法做到完全自動化、效率極低,同時需要使用到代理服務(wù)器和終端,成本較高。而靜態(tài)檢測方法僅對代理方法“connection:canAuthenticateAgainstProtectionSpace:”及其實(shí)現(xiàn)進(jìn)行檢測,存在較高的誤報和漏報率,且無法偵測出被檢測的iOS應(yīng)用存在的https中間人攻擊漏洞的級別。
針對上述的問題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
根據(jù)本申請實(shí)施例的一個方面,提供了一種漏洞的檢測方法,包括:對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;遍歷所述指定類集合中的類,對所述指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測;依據(jù)所述多次檢測的檢測結(jié)果共同確定所述待測可執(zhí)行程序的漏洞類型。
根據(jù)本申請實(shí)施例的另一方面,還提供了一種漏洞的檢測裝置,包括:反編譯模塊,用于對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;檢測模塊,用 于遍歷所述指定類集合中的類,對所述指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測;識別模塊,用于依據(jù)所述多次檢測的檢測結(jié)果共同確定所述待測可執(zhí)行程序的漏洞類型。
在本申請實(shí)施例中,通過對待測可執(zhí)行程序進(jìn)行反編譯得到指定對象的指定類集合,并對該指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測,以及依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型,達(dá)到了自動化檢測和提高漏洞識別的效率的目的,進(jìn)而解決了相關(guān)技術(shù)中漏洞識別效率不高的技術(shù)問題。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1是本發(fā)明實(shí)施例的一種漏洞的檢測方法的計算機(jī)終端的硬件結(jié)構(gòu)框圖;
圖2是根據(jù)本申請實(shí)施例的一種可選的漏洞的檢測方法的示意圖;
圖3是根據(jù)本申請實(shí)施例的另一種可選的漏洞的檢測方法的示意圖;
圖4是根據(jù)本申請實(shí)施例一種可選的iOS系統(tǒng)中的中間人攻擊漏洞的檢測方法的示意圖;
圖5是根據(jù)本申請實(shí)施例的一種可選的漏洞的檢測裝置的示意圖一;
圖6是根據(jù)本申請實(shí)施例的另一種可選的漏洞的檢測裝置的示意圖二;
圖7是根據(jù)本申請實(shí)施例的另一種可選的漏洞的檢測裝置的示意圖三;
圖8是根據(jù)本發(fā)明實(shí)施例的一種計算機(jī)終端的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請方案,下面將結(jié)合本申請實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這 樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
為描述方便,現(xiàn)將本申請實(shí)施例中涉及到的一些技術(shù)術(shù)語的含義敘述如下:
中間人攻擊(Man-in-the-MiddleAttack,簡稱“MITM攻擊”)漏洞,是一種“間接”的入侵攻擊,這種攻擊模式是通過各種技術(shù)手段將受入侵者控制的一臺計算機(jī)虛擬放置在網(wǎng)絡(luò)連接中的兩臺通信計算機(jī)之間,這臺計算機(jī)就稱為“中間人”。
中間人攻擊漏洞分級:
level1:在沒用向手機(jī)中安裝攻擊者證書的情況下可以進(jìn)行中間人攻擊;
level2:在向手機(jī)中安裝攻擊者證書的情況下可以進(jìn)行中間人攻擊;
level3:在向手機(jī)中安裝攻擊者證書的情況下不可以進(jìn)行中間人攻擊。
實(shí)施例1
根據(jù)本發(fā)明實(shí)施例,還提供了一種漏洞的檢測方法的方法實(shí)施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
本申請實(shí)施例一所提供的方法實(shí)施例可以在移動終端、計算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。以運(yùn)行在計算機(jī)終端上為例,圖1是本發(fā)明實(shí)施例的一種漏洞的檢測方法的計算機(jī)終端的硬件結(jié)構(gòu)框圖。如圖1所示,計算機(jī)終端10可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限于微處理器MCU或可編程邏輯器件FPGA等的處理裝置)、用于存儲數(shù)據(jù)的存儲器104、以及用于通信功能的傳輸裝置106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,計算機(jī)終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
存儲器104可用于存儲應(yīng)用軟件的軟件程序以及模塊,如本發(fā)明實(shí)施例中的漏洞的檢測方法對應(yīng)的程序指令/模塊,處理器102通過運(yùn)行存儲在存儲器104內(nèi)的軟件程 序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的應(yīng)用程序的漏洞檢測方法。存儲器104可包括高速隨機(jī)存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實(shí)例中,存儲器104可進(jìn)一步包括相對于處理器102遠(yuǎn)程設(shè)置的存儲器,這些遠(yuǎn)程存儲器可以通過網(wǎng)絡(luò)連接至計算機(jī)終端10。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。
傳輸裝置106用于經(jīng)由一個網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實(shí)例可包括計算機(jī)終端10的通信供應(yīng)商提供的無線網(wǎng)絡(luò)。在一個實(shí)例中,傳輸裝置106包括一個網(wǎng)絡(luò)適配器(Network Interface Controller,NIC),其可通過基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個實(shí)例中,傳輸裝置106可以為射頻(Radio Frequency,RF)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進(jìn)行通訊。
在上述運(yùn)行環(huán)境下,本申請?zhí)峁┝巳鐖D2所示的漏洞的檢測方法。圖2是根據(jù)本發(fā)明實(shí)施例1的漏洞的檢測方法的流程圖。如圖2所示,該方法包括步驟S202-206:步驟S202,對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;
需要說明的是,此處的可執(zhí)行程序可以為系統(tǒng)軟件的可執(zhí)行程序,也可以為應(yīng)用軟件的可執(zhí)行程序,但不限于此表現(xiàn)形式,其中,對于系統(tǒng)軟件例如可以為蘋果公司開發(fā)的iOS系統(tǒng)軟件,也可以為安卓系統(tǒng)軟件、微軟公司開發(fā)的WP系統(tǒng)軟件等。
上述待測可執(zhí)行程序的獲取方式有多種,例如,可以對系統(tǒng)軟件或應(yīng)用軟件進(jìn)行解析,以得到上述待測可執(zhí)行程序。
以下以蘋果公司開發(fā)的iOS系統(tǒng)中的應(yīng)用程序ipa文件(可以表現(xiàn)為安裝包)為例進(jìn)行說明:對該ipa文件的安裝包進(jìn)行解析,以獲取其中包含實(shí)現(xiàn)代碼的二進(jìn)制格式的可執(zhí)行程序文件(即macho格式的文件)。當(dāng)然,對于上述應(yīng)用軟件也可以是安卓(android)系統(tǒng)中的應(yīng)用或微軟公司開發(fā)的WP系統(tǒng)中的應(yīng)用,并不限于此。
對待測應(yīng)用程序進(jìn)行解析的方式可以有多種,例如在一個可選實(shí)施例中,可以通過專門的解析工具(例如交互式反編譯器專業(yè)版IDA pro工具)進(jìn)行解析,但不限于此。
可選地,反編譯的實(shí)現(xiàn)方式有多種,例如,可以使用idapython或idc工具進(jìn)行反編譯,但不限于上述表現(xiàn)形式。
需要說明的是,對于上述指定對象及其指定類集合,可以依據(jù)待測可執(zhí)行程序所在的系統(tǒng)類型確定,也可以依據(jù)要檢測的漏洞確定。例如,對于iOS系統(tǒng)中的應(yīng)用軟件,在檢測中間人攻擊漏洞時,可以使用NSURLConnection對象的代理(delegate) 類集合來進(jìn)行漏洞的檢測。
步驟S204,遍歷指定類集合中的類,對指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測。
可選地,該處理步驟中的“多次檢測”可以通過以下兩種處理過程實(shí)現(xiàn),但不限于以下幾種表現(xiàn)形式:
第一處理過程
如圖3所示,該處理過程包括步驟S204-1和步驟S204-2:
步驟S204-1,對于指定類集合中的每個類,檢測上述類中是否采用第一校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn);若否,則將第一標(biāo)記位flag1標(biāo)記為false;若是,則按照預(yù)設(shè)規(guī)則對所述公鑰證書的校驗(yàn)過程進(jìn)一步校驗(yàn),在校驗(yàn)通過時,將flag1標(biāo)記為true,否則將flag1標(biāo)記為false。
可選地,在待測可執(zhí)行程序?yàn)镮OS系統(tǒng)中的第一指定應(yīng)用的可執(zhí)行程序且上述指定類集合為代理類集合時,上述第一校驗(yàn)方法包括:代理類集合中代理類的第一代理方法。
以檢測iOS系統(tǒng)中的中間人攻擊漏洞為例,該步驟S204-1可以檢測NSURLConnection對象的代理(delegate)類中是否實(shí)現(xiàn)了代理方法“connection:willSendRequestForAuthenticationChallenge:”(相當(dāng)于第一校驗(yàn)方法),若否,記錄flag1=false,繼續(xù)下一步檢測;若是,且該代理方法對挑戰(zhàn)的發(fā)送者發(fā)送的挑戰(zhàn)使用空憑據(jù)進(jìn)行校驗(yàn),即檢查該代理方法是否調(diào)用了方法“useCredential:forAuthenticationChallenge:”(即“按照預(yù)設(shè)規(guī)則對所述公鑰證書的校驗(yàn)過程進(jìn)一步校驗(yàn)”中的校驗(yàn)過程),且該方法第一個參數(shù)為nil,記錄flag1=true,否則記錄flag1=false,并繼續(xù)進(jìn)行下一步檢測。
步驟S204-2,對上述類中是否采用第二校驗(yàn)方法對客戶端本地的公鑰證書進(jìn)行校驗(yàn),若否,則將第二標(biāo)記位flag2標(biāo)記為false,若是,則獲取客戶端本地的公鑰證書信息,以及服務(wù)器的公鑰證書信息,并在客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書信息一致時,將flag2標(biāo)記為true,在客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書不一致時,將flag2標(biāo)記為false??蛇x地,在待測可執(zhí)行程序?yàn)镮OS系統(tǒng)中的第一指定應(yīng)用的可執(zhí)行程序且上述指定類集合為代理類集合時,上述第二校驗(yàn)方法包括:代理類集合中代理類的第二代理方法。
在一個可選實(shí)施例中,仍以檢測iOS系統(tǒng)中應(yīng)用的中間人攻擊漏洞為例,檢測該 代理類是否實(shí)現(xiàn)代理方法“connection:didReceiveAuthenticationChallenge:”(相當(dāng)于第二校驗(yàn)方法),若否,記錄flag2=false,繼續(xù)下一步檢測;若是,且該方法中在本地對服務(wù)端證書進(jìn)行了強(qiáng)證書校驗(yàn),檢測方法為首先檢查該代理方法是否有調(diào)用方法“pathForResource:ofType:”加載一個本地資源,且該方法第二個參數(shù)為@”cer”,并調(diào)用方法“dataWithContentsOfFile:”將加載的資源文件轉(zhuǎn)化為NSData對象,記為data_1;其次,檢查該代理方法是否依次使用方法“SecTrustGetCertificateAtIndex()”、“SecCertificateCopyData()”、“CFDataGetBytePtr()”、“dataWithBytes:length:”將挑戰(zhàn)的事務(wù)狀態(tài)轉(zhuǎn)化為NSData對象,記為data_2,并對data_1和data_2進(jìn)行比較(相當(dāng)于驗(yàn)證客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書信息是否一致的校驗(yàn)過程),記錄flag2=true,否則記錄flag2=false。
第二處理過程
可選地,該處理步驟中的“多次檢測”還可以通過以下處理過程實(shí)現(xiàn),但不限于以下此種表現(xiàn)形式:對于所述指定類集合中的每個類,檢測類中是否采用指定校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn)。可選地,在待測可執(zhí)行程序?yàn)榘沧?android)系統(tǒng)中第二指定應(yīng)用的可執(zhí)行程序時,上述指定校驗(yàn)方法包括:用于對上述指定類集合中類的函數(shù)進(jìn)行檢測的方法。需要說明的是,此處的“函數(shù)”在采用不同的編程語言時,其名稱也不同:例如,在面向?qū)ο蟮恼Z言中將類中的函數(shù)稱為方法;而在面向過程的語言中則稱為函數(shù)。
步驟S206,依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型。
可選地,步驟S206中在flag1為true時,確定待測可執(zhí)行程序存在第一類漏洞;在flag1為false且flag2為true時,確定待測可執(zhí)行程序存在第二類漏洞;在flag1為false且flag2為false時,確定待測可執(zhí)行程序存在第三類漏洞。
可選地,上述第一類漏洞、第二類漏洞和第三類漏洞的表現(xiàn)形式有多種,例如,在漏洞為安全套接層超文本傳輸協(xié)議(Hyper Text Transfer Protocol over Secure Socket Layer,簡稱為https)中間人攻擊漏洞時,第一類漏洞可以包括但不限于:第二等級leve2的中間人攻擊漏洞;第二類漏洞包括但不限于:第三等級level3的中間人攻擊漏洞;第三類漏洞包括但不限于:第一等級level1的https中間人攻擊漏洞。由此可見,采用上述處理方案,不僅可以識別漏洞的類型,還可以實(shí)現(xiàn)對漏洞的級別的識別。
可選地,在采用步驟S204的第二處理過程時,步驟S206可以通過以下處理過程實(shí)現(xiàn):對于上述指定類集合中每個類,在指定校驗(yàn)方法中至少一個針對上述公鑰證書的校驗(yàn)方法對上述公鑰證書校驗(yàn)不通過時,則確定待測可執(zhí)行程序存在指定類型的漏洞。
以檢測android系統(tǒng)中應(yīng)用的中間人攻擊漏洞為例:
Android系統(tǒng)中的中間人攻擊漏洞,需要對指定類setHostnameVerifier、checkServerTrusted、setDefaultHostnameVerifier等函數(shù)進(jìn)行檢測。在android系統(tǒng)中形成中間人漏洞的原因可能有以下三種:
1.自定義的X509TrustManager不校驗(yàn)證書;
2.或?qū)崿F(xiàn)的自定義HostnameVerifier不校驗(yàn)域名接受任意域名;
3.或使用setHostnameVerifier(ALLOW_ALL_HOSTNAME_VERIFIER);
針對第一種形成原因,檢測checkServertrust()方法實(shí)現(xiàn)是否為空,若為空,則應(yīng)用未檢測服務(wù)器是否可信,形成中間人漏洞;
針對第二種形成原因,檢測HostnameVerifier對象的verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)函數(shù)是否直接返回true,若是,則應(yīng)用接受任意域名,形成中間人漏洞;
針對第三種形成原因,檢測setHostnameVerifier()函數(shù)的入口參數(shù)是否未SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER,若是,則應(yīng)用接受任意域名,形成中間人漏洞。
在一個可選實(shí)施例中,上述待測可執(zhí)行程序等信息可以依據(jù)要確定的漏洞類型的不同而不同,例如,在待測可執(zhí)行程序?yàn)镮OS系統(tǒng)中應(yīng)用的可執(zhí)行程序時,在確定該待測可執(zhí)行程序的漏洞類型時,上述指定對象可以包括但不限于:請求地址連接對象(NS URLConnection),上述類包括但不限于:代理類。從而,可以依據(jù)本發(fā)明實(shí)施例中的技術(shù)方案確定iOS系統(tǒng)中應(yīng)用軟件所存在的漏洞類型(例如上面所提到的中間人攻擊漏洞)。
可選地,可以利用本發(fā)明實(shí)施例提供的漏洞的檢測方法進(jìn)行不同的應(yīng)用,例如在步驟S206之后,即對待測可執(zhí)行程序的漏洞類型進(jìn)行識別之后,可以按照與漏洞類型對應(yīng)的修復(fù)方案對所述待測可執(zhí)行程序進(jìn)行修復(fù);和/或,確定與漏洞類型對應(yīng)的漏洞的產(chǎn)生位置。當(dāng)然,還可以對存在識別出的漏洞待測應(yīng)用進(jìn)行停止運(yùn)行或卸載等操作,具體的應(yīng)用策略,可以根據(jù)實(shí)際情況靈活設(shè)置。
利用本發(fā)明實(shí)施例提供的技術(shù)方案,由于可以依據(jù)對待測可執(zhí)行程序進(jìn)行反編譯得到指定對象的指定類集合,并對該指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測,以及依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型,因此,可以實(shí)現(xiàn)對漏洞的自動化檢測,提高漏洞識別的準(zhǔn)確性和識別速度,從而提高對指定類型的漏洞的識別效率。
以檢測iOS系統(tǒng)中的應(yīng)用軟件ipa文件的中間人攻擊漏洞為例進(jìn)行說明。以下實(shí)施例主要通過反編譯和特征匹配等技術(shù)手段,實(shí)現(xiàn)針對iOS平臺應(yīng)用靜態(tài)自動化檢測中間人攻擊漏洞,并對應(yīng)用的中間人攻擊漏洞進(jìn)行分級。
圖4是根據(jù)本申請實(shí)施例的iOS系統(tǒng)中的中間人攻擊漏洞的檢測方法的示意圖。如圖4所示,該方法大致包括三部分:一、獲取信息;二、檢測過程;三、生成結(jié)果。具體包括以下處理步驟:
步驟S402,解包ipa文件,獲取macho格式文件,具體地,包括以下處理過程:對ipa文件進(jìn)行解包處理(即解析),獲取其中包含實(shí)現(xiàn)代碼的二進(jìn)制文件,該文件為macho格式文件(即可執(zhí)行程序文件);
步驟S404,解析macho格式文件獲取符號信息,并反編譯出匯編代碼,具體包括以下處理過程:從獲取的macho文件中獲取符號信息,如導(dǎo)入表、導(dǎo)出表、字符串信息、類信息、方法名與對應(yīng)的地址信息等,并反編譯出匯編代碼;
步驟S406,獲取NSURLConnection對象的代理(delegate)類的集合,并遍歷該集合中的所有代理類進(jìn)行檢測;該步驟中可以包括判斷代理類集合是否為空的判斷步驟,如果為空,則結(jié)束;如果不為空,則繼續(xù)檢測。
步驟S408,檢測代理方法1及其實(shí)現(xiàn),并記錄結(jié)果:檢測該代理類中是否實(shí)現(xiàn)了代理方法1“connection:willSendRequestForAuthenticationChallenge:”,若否,記錄flag1=false,繼續(xù)下一步檢測;若是,且該代理方法對挑戰(zhàn)的發(fā)送者發(fā)送的挑戰(zhàn)使用空憑據(jù)進(jìn)行校驗(yàn),即檢查該代理方法是否調(diào)用了方法“useCredential:forAuthenticationChallenge:”,且該方法第一個參數(shù)為nil,記錄flag1=true,否則記錄flag1=false,并繼續(xù)下一步檢測
步驟S410,檢測代理方法2及其實(shí)現(xiàn),并記錄結(jié)果:檢測該代理類是否實(shí)現(xiàn)代理方法2“connection:didReceiveAuthenticationChallenge:”,若否,記錄flag2=false,繼續(xù)下一步檢測;若是,且該方法中在本地對服務(wù)端證書進(jìn)行了強(qiáng)證書校驗(yàn),檢測方法為首先檢查該代理方法是否有調(diào)用方法“pathForResource:ofType:”加載一個本地資源,且該方法第二個參數(shù)為@”cer”,并調(diào)用方法 “dataWithContentsOfFile:”將加載的資源文件轉(zhuǎn)化為NSData對象,記為data_1;其次,檢查該代理方法是否依次使用方法“SecTrustGetCertificateAtIndex()”、“SecCertificateCopyData()”、“CFDataGetBytePtr()”、“dataWithBytes:length:”將挑戰(zhàn)的事務(wù)狀態(tài)轉(zhuǎn)化為NSData對象,記為data_2,并對data_1和data_2進(jìn)行比較,記錄flag2=true,否則記錄flag2=false,繼續(xù)下一步檢測
步驟S412,遍歷檢測對象集合,循環(huán)檢測所有代理類;
步驟S414,依據(jù)檢測結(jié)果,生成結(jié)果報告,該結(jié)果報告中可以包括但不限于:存在https中間人攻擊漏洞產(chǎn)生的詳細(xì)位置以及建議修復(fù)方案,其中,上述檢測結(jié)果如下:
若flag1=true,則該app的https中間人攻擊漏洞為level2;
若flag1=false且flag2=true,則該app的https中間人攻擊漏洞為level3;
若flag1=false且flag2=false,則該app的https中間人攻擊漏洞為level1。
由此可見,基于本申請實(shí)施例提供的技術(shù)方案,可以實(shí)現(xiàn)快速自動化檢測iOS應(yīng)用的https中間人攻擊漏洞,并且可以達(dá)到以下技術(shù)效果:自動化檢測,無需無人工參與;成本較低,無需代理服務(wù)器和iPhone終端;可以發(fā)現(xiàn)不同級別的https中間人攻擊漏洞;極大程度的降低漏報和誤報;提供存在漏洞的精確位置和詳細(xì)修復(fù)方案。
需要說明的是,上述實(shí)施例及其可選實(shí)施例中所涉及的漏洞的檢測方案可以應(yīng)用于安卓操作系統(tǒng)、iOS操作系統(tǒng)等移動操作系統(tǒng)中的應(yīng)用軟件或系統(tǒng)軟件。
需要說明的是,本申請上述實(shí)施例中所涉及的終端可以為手機(jī)、平板電腦、計算機(jī)等,但不限于此。
需要說明的是,對于前述的各方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端 設(shè)備(可以是手機(jī),計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述的方法。
實(shí)施例2
根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述漏洞的檢測方法的漏洞的檢測裝置,如圖5所示,該裝置包括:
反編譯模塊50,用于對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;該反編譯模塊50在對上述待測可執(zhí)行程序進(jìn)行反編譯過程中可以先從上述待測可執(zhí)行程序中獲取對象之間的調(diào)用關(guān)系、函數(shù)與類之間的從屬關(guān)系等符號信息,例如,可以包括但不限于:導(dǎo)入表、導(dǎo)出表、字符串信息、類信息、方法名與對應(yīng)的地址信息等。上述待測可執(zhí)行程序可以為對系統(tǒng)軟件或應(yīng)用軟件進(jìn)行解析后得到的可執(zhí)行程序;可選地,上述待測可執(zhí)行程序可以表現(xiàn)為可執(zhí)行文件,例如,iOS系統(tǒng)中的macho格式文件。
檢測模塊52,連接至反編譯模塊50,用于遍歷指定類集合中的類,對指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測;此處“多次檢測”的含義可以表現(xiàn)為按照不同的規(guī)則對上述實(shí)現(xiàn)過程進(jìn)行檢測,例如可以按照預(yù)設(shè)優(yōu)先級采用不同的規(guī)則進(jìn)行多次檢測,但不限于此表現(xiàn)形式。
識別模塊54,連接至檢測模塊52,用于依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型。
可選地,如圖6所示,檢測模塊52,包括但不限于以下處理單元:
第一檢測單元520,用于對于指定類集合中的每個類,檢測類中是否采用第一校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn);若否,則將第一標(biāo)記位flag1標(biāo)記為false,若是,則按照預(yù)設(shè)規(guī)則對所述公鑰證書的校驗(yàn)過程進(jìn)一步校驗(yàn),在校驗(yàn)通過時,將flag1標(biāo)記為true,否則將flag1標(biāo)記為false;可選地,在iOS系統(tǒng)中,第一校驗(yàn)方法可以為表現(xiàn)為代理方法“connection:willSendRequestForAuthenticationChallenge:”,基于此,第一檢測單元540的具體檢測過程可以表現(xiàn)為以下處理過程,但不限于此:
檢測NSURLConnection對象的代理(delegate)類中是否實(shí)現(xiàn)了代理方法“connection:willSendRequestForAuthenticationChallenge:”(相當(dāng)于第一校驗(yàn)方法),若否,記錄flag1=false,繼續(xù)下一步檢測;若是,且該代理方法對挑戰(zhàn)的發(fā)送 者發(fā)送的挑戰(zhàn)使用空憑據(jù)進(jìn)行校驗(yàn),即檢查該代理方法是否調(diào)用了方法“useCredential:forAuthenticationChallenge:”(即“按照預(yù)設(shè)規(guī)則對所述公鑰證書的校驗(yàn)過程進(jìn)一步校驗(yàn)”中的校驗(yàn)過程),且該方法第一個參數(shù)為nil,記錄flag1=true,否則記錄flag1=false,并繼續(xù)進(jìn)行下一步檢測。
可選地,如圖6所示,檢測模塊52還可以包括以下處理單元:第二檢測單元522,用于在檢測類中是否采用第一校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn)之后,對類中是否采用第二校驗(yàn)方法對客戶端本地的公鑰證書進(jìn)行校驗(yàn),若否,則將第二標(biāo)記位flag2標(biāo)記為false,若是,則獲取客戶端本地的公鑰證書信息,以及服務(wù)器的公鑰證書信息,并在客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書信息一致時,將flag2標(biāo)記為true,在客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書不一致時,將flag2標(biāo)記為false。
在一個可選實(shí)施例中,以iOS系統(tǒng)中的應(yīng)用軟件為例,第二檢測單元522的檢測過程中所涉及的第二校驗(yàn)方法可以為“connection:didReceiveAuthenticationChallenge:”,基于此,第二檢測單元522的檢測過程可以表現(xiàn)為以下實(shí)現(xiàn)形式,但不限于此:
檢測該代理類是否實(shí)現(xiàn)代理方法“connection:didReceiveAuthenticationChallenge:”(相當(dāng)于上述第二校驗(yàn)方法),若否,記錄flag2=false,繼續(xù)下一步檢測;若是,且該方法中在本地對服務(wù)端證書進(jìn)行了強(qiáng)證書校驗(yàn),檢測方法為首先檢查該代理方法是否有調(diào)用方法“pathForResource:ofType:”加載一個本地資源,且該方法第二個參數(shù)為@”cer”,并調(diào)用方法“dataWithContentsOfFile:”將加載的資源文件轉(zhuǎn)化為NSData對象,記為data_1;其次,檢查該代理方法是否依次使用方法“SecTrustGetCertificateAtIndex()”、“SecCertificateCopyData()”、“CFDataGetBytePtr()”、“dataWithBytes:length:”將挑戰(zhàn)的事務(wù)狀態(tài)轉(zhuǎn)化為NSData對象,記為data_2,并對data_1和data_2進(jìn)行比較(相當(dāng)于驗(yàn)證客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書信息是否一致的校驗(yàn)過程),記錄flag2=true,否則記錄flag2=false。
在一個可選實(shí)施例中,識別模塊54,用于按照以下方式確定待測可執(zhí)行程序的漏洞類型:在flag1為true時,確定待測可執(zhí)行程序存在第一類漏洞;在flag1為false且flag2為true時,確定待測可執(zhí)行程序存在第二類漏洞;在flag1為false且flag2為false時,確定待測可執(zhí)行程序存在第三類漏洞。可選地,上述第一類漏洞、第二類漏洞和第三類漏洞可以為不同類型的漏洞,也可以表現(xiàn)為同一類型漏洞的不同等級 漏洞,對于后者,在上述三類漏洞均屬于中間人攻擊漏洞時,第一類漏洞包括但不限于:第二等級leve2的安全套接層超文本傳輸協(xié)議https中間人攻擊漏洞;第二類漏洞包括:第三等級level3的https中間人攻擊漏洞;第三類漏洞包括:第一等級level1的中間人攻擊漏洞。
可選地,待測可執(zhí)行程序?yàn)镮OS系統(tǒng)中的應(yīng)用;上述指定對象包括但不限于:請求地址連接對象,上述類包括但不限于:代理類。
另外,在本發(fā)明的一個可選實(shí)施例中,如圖6所示,上述檢測模塊52還包括:第三檢測單元524,用于對于上述指定類集合中的每個類,檢測類中是否采用指定校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn);此時,識別模塊54,還用于對于指定類集合中每個類,在指定校驗(yàn)方法中至少一個針對所述公鑰證書的校驗(yàn)方法對所述公鑰證書校驗(yàn)不通過時,則確定所述待測可執(zhí)行程序存在指定類型的漏洞。可選地,該指定類型的漏洞可以為https中間人攻擊漏洞。需要說明的是。此處第三檢測單元524和識別模塊54所實(shí)現(xiàn)的功能可以優(yōu)先用于識別安卓系統(tǒng)中的待測可執(zhí)行程序的https中間人攻擊漏洞,但不限于此,例如還可以用于識別iOS操作系統(tǒng)中待測可執(zhí)行程序的https中間人攻擊漏洞。
在本申請的一個可選實(shí)施例中,如圖7所示,本申請實(shí)施例提供的漏洞的檢測裝置還可以包括:應(yīng)用模塊70,用于按照與漏洞類型對應(yīng)的修復(fù)方案對待測可執(zhí)行程序進(jìn)行修復(fù);和/或,確定與漏洞類型對應(yīng)的漏洞的產(chǎn)生位置。這樣,便實(shí)現(xiàn)了對漏洞的檢測裝置輸出的檢測結(jié)果的應(yīng)用,需要說明的是,對該檢測結(jié)果的應(yīng)用可以并不限于上述表現(xiàn)形式,例如還可以對存在識別出的漏洞待測應(yīng)用進(jìn)行停止運(yùn)行或卸載等操作,具體的應(yīng)用策略,可以根據(jù)實(shí)際情況靈活設(shè)置。
需要說明的是,上述實(shí)施例中所涉及的各個模塊是可以通過軟件或硬件的形式來實(shí)現(xiàn)的,對于后者,可以表現(xiàn)為以下實(shí)現(xiàn)形式,但不限于此:反編譯模塊50、檢測模塊52和識別模塊54位于同一處理器中;或者,反編譯模塊50、檢測模塊52和識別模塊54分別位于第一處理器、第二處理器和第三處理器中;或者,上述各個模塊以任意組合的形式位于不同的處理器中。
實(shí)施例3
本發(fā)明的實(shí)施例可以提供一種計算機(jī)終端,該計算機(jī)終端可以是計算機(jī)終端群中的任意一個計算機(jī)終端設(shè)備??蛇x地,在本實(shí)施例中,上述計算機(jī)終端也可以替換為移動終端等終端設(shè)備。
可選地,在本實(shí)施例中,上述計算機(jī)終端可以位于計算機(jī)網(wǎng)絡(luò)的多個網(wǎng)絡(luò)設(shè)備中的至少一個網(wǎng)絡(luò)設(shè)備。
在本實(shí)施例中,上述計算機(jī)終端可以執(zhí)行漏洞的檢測方法中以下步驟的程序代碼:對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;遍歷所述指定類集合中的類,對指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測;依據(jù)多次檢測的檢測結(jié)果共同確定所述待測可執(zhí)行程序的漏洞類型。
可選地,圖8是根據(jù)本發(fā)明實(shí)施例的一種計算機(jī)終端的結(jié)構(gòu)框圖。如圖8所示,該計算機(jī)終端A可以包括:一個或多個(圖中僅示出一個)處理器80、存儲器82、以及傳輸裝置84。
其中,存儲器82可用于存儲軟件程序以及模塊,如本發(fā)明實(shí)施例中的漏洞的檢測方法和裝置對應(yīng)的程序指令/模塊,處理器通過運(yùn)行存儲在存儲器內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的漏洞的檢測方法。存儲器可包括高速隨機(jī)存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實(shí)例中,存儲器可進(jìn)一步包括相對于處理器遠(yuǎn)程設(shè)置的存儲器,這些遠(yuǎn)程存儲器可以通過網(wǎng)絡(luò)連接至終端A。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。
處理器80可以通過傳輸裝置84調(diào)用存儲器存儲的信息及應(yīng)用程序,以執(zhí)行下述步驟:對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;遍歷指定類集合中的類,對指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測;依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:對于指定類集合中的每個類,檢測類中是否采用第一校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn);若否,則將第一標(biāo)記位flag1標(biāo)記為false;若是,則按照預(yù)設(shè)規(guī)則對上述公鑰證書的校驗(yàn)過程進(jìn)一步校驗(yàn),在校驗(yàn)通過時,將flag1標(biāo)記為true,否則將flag1標(biāo)記為false;對類中是否采用第二校驗(yàn)方法對客戶端本地的公鑰證書進(jìn)行校驗(yàn),若否,則將第二標(biāo)記位flag2標(biāo)記為false,若是,則獲取客戶端本地的公鑰證書信息,以及服務(wù)器的公鑰證書信息,并在客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書信息一致時,將flag2標(biāo)記為true,在客戶端本地的公鑰證書信息和服務(wù)器的公鑰證書不一致時,將flag2標(biāo)記為false。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:在flag1為true時,確定待測可執(zhí)行程序存在第一類漏洞;在flag1為false且flag2為true時,確定待測可 執(zhí)行程序存在第二類漏洞;在flag1為false且flag2為false時,確定待測可執(zhí)行程序存在第三類漏洞。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:對于上述指定類集合中的每個類,檢測類中是否采用指定校驗(yàn)方法對服務(wù)器的公鑰證書進(jìn)行校驗(yàn);對于上述指定類集合中每個類,在指定校驗(yàn)方法中至少一個針對上述公鑰證書的校驗(yàn)方法對上述公鑰證書校驗(yàn)不通過時,則確定待測可執(zhí)行程序存在指定類型的漏洞。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:按照與漏洞類型對應(yīng)的修復(fù)方案對待測可執(zhí)行程序進(jìn)行修復(fù);和/或,確定與漏洞類型對應(yīng)的漏洞的產(chǎn)生位置。
采用本發(fā)明實(shí)施例,提供了一種漏洞的檢測方案。通過對待測可執(zhí)行程序進(jìn)行反編譯得到指定對象的指定類集合,并對該指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測,以及依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型,從而達(dá)到了提高了漏洞識別效率的目的,進(jìn)而解決了相關(guān)技術(shù)中漏洞識別效率不高的技術(shù)問題。
如圖8所示,上述計算機(jī)終端群中的任意一個可以與網(wǎng)站服務(wù)器86和掃描器88建立通信關(guān)系,掃描器88可以掃描計算機(jī)終端上php執(zhí)行的web應(yīng)用程序的值命令
本領(lǐng)域普通技術(shù)人員可以理解,圖8所示的結(jié)構(gòu)僅為示意,計算機(jī)終端也可以是智能手機(jī)(如Android手機(jī)、iOS手機(jī)等)、平板電腦、掌聲電腦以及移動互聯(lián)網(wǎng)設(shè)備(Mobile Internet Devices,MID)、PAD等終端設(shè)備。圖8其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,計算機(jī)終端8還可包括比圖8中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖8所示不同的配置。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設(shè)備相關(guān)的硬件來完成,該程序可以存儲于一計算機(jī)可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:閃存盤、只讀存儲器(Read-Only Memory,ROM)、隨機(jī)存取器(Random Access Memory,RAM)、磁盤或光盤等。
實(shí)施例4
本發(fā)明的實(shí)施例還提供了一種存儲介質(zhì)。可選地,在本實(shí)施例中,上述存儲介質(zhì)可以用于保存上述實(shí)施例一所提供的漏洞的檢測方法所執(zhí)行的程序代碼。
可選地,在本實(shí)施例中,上述存儲介質(zhì)可以位于計算機(jī)網(wǎng)絡(luò)中計算機(jī)終端群中的任意一個計算機(jī)終端中,或者位于移動終端群中的任意一個移動終端中。
可選地,在本實(shí)施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:對待測可執(zhí)行程序進(jìn)行反編譯,得到指定對象的指定類集合;遍歷該指定類集合中的類,對指定類集合中每個類的實(shí)現(xiàn)過程按照預(yù)設(shè)規(guī)則進(jìn)行多次檢測;依據(jù)多次檢測的檢測結(jié)果共同確定待測可執(zhí)行程序的漏洞類型。
上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本發(fā)明的上述實(shí)施例中,對各個實(shí)施例的描述都各有側(cè)重,某個實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
在本申請所提供的幾個實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個實(shí)施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨(dú)物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可為個人計算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。