此,在漏洞代碼庫的建立過程 中,針對開發(fā)人員在應用程序的開發(fā)過程中可能對上述類或者接口實現(xiàn)不嚴格校驗的各種 編碼情況進行收集,形成相應的漏洞規(guī)則,并依照相應的漏洞規(guī)則,將滿足這些漏洞規(guī)則的 代碼作為漏洞代碼,一一存儲進漏洞代碼庫中,以便于后續(xù)檢測過程中將應用程序的源代 碼在該漏洞代碼庫中與這些漏洞代碼進行一一匹配,從而檢測出應用程序的源代碼是否存 在HTTPS安全漏洞。
[0042] 其中,預先建立的漏洞代碼庫中存儲的漏洞代碼所需要滿足的漏洞規(guī)則包括但不 限于以下幾種:
[0043] 1、自定義的用于進行數(shù)字證書校驗的接口。
[0044]包括自定義XSOOTrustManager類的checkServerTrusted接口。
[0045] 例如,對該接口的空實現(xiàn):
[0046] publicvoidcheckClientTrusted(X509Certificate ax509certificate[],Strings)
[0047] {
[0048] }
[0049] 上述空實現(xiàn)無法實現(xiàn)對數(shù)字證書的嚴格校驗。
[0050] 2、在用于進行主機域名校驗的接口中設置不安全校驗的參數(shù)選項。
[0051] 包括setHostnameVerifier接口的參數(shù)設置為不安全校驗選項。
[0052] 例如,進行如下的參數(shù)選項設置:
[0053] MySSLSocketFactorymysslsocketfactory=newMySSLSocketFactory();
[0054] mysslsocketfactory.setHostnameVerifier(SSLSocketFactory.ALL0ff_ALL_H 0STNAME_VERIFIER);
[0055] 上述參數(shù)選項設置無法實現(xiàn)對主機域名的校驗。
[0056]3、在用于進行主機域名校驗的接口中定義無法對主機域名進行嚴格校驗的類。
[0057] 包括setHostnameVerifier接口 的參數(shù)定義為HostnameVerifier類,且 setHostnameVerifier接口無法實現(xiàn)對主機域名的嚴格校驗。
[0058] 例如,對setHostnameVerifier接口的調(diào)用直接返回true:
[0059] httpsurlconnection.setHostnameVerifier(new HostnameVerifier() { public boolean verify(String s, SSLSession sslsession) { return true; }
[0060] 上述對setHostnameVerifier接口的定義無法實現(xiàn)對主機域名的嚴格校驗。
[0061] 在本實施例中,所述將所述應用程序的源代碼與預設的漏洞代碼庫中的每段漏洞 代碼進行逐一比對,是指針對漏洞代碼庫中的每一段漏洞代碼,均將應用程序的源代碼中 的所有代碼段以一行或者多行為單位,依次分別與該段漏洞代碼進行比對,以判斷是否存 在與該段漏洞代碼相匹配的代碼段。
[0062] 如圖3所示,S102的具體實現(xiàn)流程如下:
[0063] 在S301中,獲取所述漏洞代碼庫中當前比對的所述漏洞代碼的行數(shù)a,所述a為大 于或等于1的整數(shù)。
[0064] 在S302中,將所述應用程序的源代碼的每一行及其該行之后的連續(xù)a-1行與所述 當前比對的所述漏洞代碼進行逐行比對。
[0065] 例如,當漏洞代碼庫中當前需要進行比對的漏洞代碼的行數(shù)為1時,則通過遍歷 應用程序的源代碼的每一行,分別將應用程序的源代碼的每一行與該漏洞代碼進行一一比 對;
[0066] 又例如,當漏洞代碼庫中當前需要進行比對的漏洞代碼的行數(shù)為3時,則首先將 應用程序源代碼的第1行及其該行之后的連續(xù)2行與該漏洞代碼進行比對,然后將該應用 程序源代碼的第2行及其該行之后的連續(xù)2行與該漏洞代碼進行比對,……以此類推,實 現(xiàn)應用程序的源代碼的每1行及其該行之后的連續(xù)2行與所述當前比對的所述漏洞代碼進 行逐行比對。
[0067] 作為一種具體的實現(xiàn)方式,當漏洞代碼庫中分別存儲了上述三條漏洞規(guī)則所對應 的漏洞代碼時,S102的比對流程如圖4所示:
[0068] 在S401中,初始化i=l,讀取所述應用程序的源代碼第i行的代碼內(nèi)容,之后 i=i+l〇
[0069] 在S402中,檢測漏洞規(guī)則1的代碼行數(shù)a,將所述應用程序的源代碼第i行至第 i+a-1行的代碼內(nèi)容與漏洞規(guī)則1進行比對,判斷是否匹配。若判斷結(jié)果為匹配,執(zhí)行S405, 若不匹配,執(zhí)行S403。
[0070] 在S403中,檢測漏洞規(guī)則2的代碼行數(shù)b,將所述應用程序的源代碼第i行至第 i+b-1行的代碼內(nèi)容與漏洞規(guī)則2進行比對,判斷是否匹配。若判斷結(jié)果為匹配,執(zhí)行S405, 若不匹配,執(zhí)行S404。
[0071] 在S404中,檢測漏洞規(guī)則3的代碼行數(shù)c,將所述應用程序的源代碼第i行至第 i+c-1行的代碼內(nèi)容與漏洞規(guī)則3進行比對,判斷是否匹配。若判斷結(jié)果為匹配,執(zhí)行S405, 若不匹配,執(zhí)行S406。
[0072] 在S405中,標記與當前進行比對的漏洞規(guī)則相匹配的代碼段。
[0073] 在S406中,判斷第i行是否為所述應用程序的源代碼的尾行,是則結(jié)束比對流程, 輸出經(jīng)過了標記的代碼段,否則返回執(zhí)行S401。
[0074] 上述比對流程的相關(guān)邏輯針對單一源代碼文件實施,應用程序的所有源代碼文件 的搜索及比對通過Perl語言文件系統(tǒng)搜索模塊Find下的find(function_ptr, dir_path) 接口來實現(xiàn),自動對dir_path下的源代碼文件依次實施function_ptr方法內(nèi)的比對邏輯。
[0075] 需要說明的是,圖4所示比對流程僅僅為應用程序的源代碼與漏洞規(guī)則之間進行 逐一比對的一種邏輯實現(xiàn),容易想到的是,還可以通過其他的邏輯來實現(xiàn)該比對流程,例 如,先專門針對漏洞規(guī)則1比對完應用程序的源代碼中所有的代碼段,再專門針對漏洞規(guī) 則2執(zhí)行相同的比對流程,以此類推。其它的邏輯實現(xiàn)方式在此不一一進行闡述。
[0076] 在S103中,根據(jù)比對結(jié)果判斷所述應用程序的源代碼中是否存在與任一所述漏 洞代碼匹配的代碼段。
[0077] 在S104中,若所述應用程序的源代碼中存在與任一所述漏洞代碼匹配的代碼段, 則確定所述應用程序存在網(wǎng)絡安全漏洞。
[0078] 基于S102執(zhí)行完畢后輸出的比對結(jié)果,可以確定當前進行網(wǎng)絡安全漏洞檢測的 應用程序是否存在安全漏洞,對于存在網(wǎng)絡安全漏洞的應用程序,輸出S102中的比對結(jié) 果,即,將經(jīng)過了標記的、與任一漏洞代碼匹配的代碼段進行輸出,從而完成對該應用程序 網(wǎng)絡安全漏洞的自動檢測,并明確地標記并輸出該代碼段在應用程序的源代碼中的位置,, 以方便開發(fā)人員及時進行代碼修改,消除應用程序在網(wǎng)絡通信過程中存在的數(shù)據(jù)泄露的安 全隱患。
[0079] 在本實施例中,完成了對應用程序的網(wǎng)絡安全漏洞檢測并輸出了相應的檢測結(jié)果 之后,進一步地,對S101中生成的Java歸檔文件、Java類文件及Java源文件等臨時文件 進行刪除,以釋放內(nèi)存,繼續(xù)執(zhí)行對下一個應用程序的網(wǎng)絡安全漏洞的檢測。
[0080] 圖5示出了本發(fā)明實施例提供的網(wǎng)絡安全漏洞的檢測裝置的結(jié)構(gòu)框圖,該裝置用 于運行本發(fā)明圖1至圖4實施例所述的網(wǎng)絡安全漏洞的檢測方法。為了便于說明,僅示出 了與本實施例相關(guān)的部分。
[0081] 參照圖5,該裝置包括:
[0082] 獲取單元51,解析應用程序安裝包,獲取所述應用程序的源代碼。
[0083] 匹配單元52,根據(jù)預存儲在漏洞代碼庫中的漏洞代碼的行數(shù),將所述應用程序的 源代碼與預存儲的每段所述漏洞代碼進行逐一比對,所述漏洞代碼包括滿足預設漏洞規(guī)則 的代碼。
[0084] 判斷單元53,根據(jù)比對結(jié)果判斷所述應用程序的源代碼中是否存在與任一所述漏 洞代碼匹配的代碼段。
[0085] 確定單元54,若所述應用程序的源代碼中存在與任一所述漏洞代碼匹配的代碼 段,則確定所述應用程序存在網(wǎng)絡安全漏洞。
[0086] 可選地,所述預設漏洞規(guī)則包括:
[0087]自定義的用于進行數(shù)字證書校驗的接口。
[0088] 可選地,所述預設漏洞規(guī)則包括:
[0089] 在用于進行主機域名校驗的接口中設置不安全校驗的參數(shù)選項。
[0090] 可選地,所述預設漏洞規(guī)則包括:
[0091] 在用于進行主機域名校驗的接口中定義無法對主機域名進行嚴格校驗的類。
[0092] 可選地,所述匹配單元52包括:
[0093] 獲取子單元,獲取所述漏洞代碼庫中當前比對的所述漏洞代碼的行數(shù)a,所述a為 大于或等于1的整數(shù)。
[0094] 比對子單元,將所述應用程序的源代碼的每一行及其該行之后的連續(xù)a_l行與所 述當前比對的所述漏洞代碼進行逐行比對。
[0095] 可選地,所述裝置還包括:
[0096] 輸出單元,用于輸出所述與任一所述漏洞代碼匹配的代碼段,以及輸出該代碼段 在所述應