源代碼泄露檢測方法及裝置制造方法
【專利摘要】一種源代碼泄露檢測方法,包括:攔截網絡數據流;對所述網絡數據流進行協議解析得到字符流;獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數;根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則阻斷所述網絡數據流。此外,還提供了一種源代碼泄露檢測裝置。上述源代碼泄露檢測檢測方法及裝置能夠提高源代碼泄露檢測的安全性。
【專利說明】源代碼泄露檢測方法及裝置
【技術領域】
[0001]本發(fā)明涉及網絡安全【技術領域】,特別是涉及一種源代碼泄露檢測方法及裝置。
【背景技術】
[0002]現在技術中,若互聯網應用的源代碼遭到泄露(企業(yè)內部人員在企業(yè)內部網絡通過文件傳輸發(fā)送給外網,或者由黑客通過漏洞下載web服務器上存儲的源代碼,例如php服務器),黑客即可能通過分析源代碼,找到應用系統存在的漏洞,從而對應用系統進行攻擊。
[0003]而當前企業(yè)在網關對付源碼防泄露的方法為通過檢查傳輸的文件后綴名來判斷是否存在泄露。若源代碼文件被壓縮或經過后綴名更改后再發(fā)送則無法檢測得出。因此,傳統技術中的源代碼泄露檢測的安全性不足。
【發(fā)明內容】
[0004]基于此,有必要提供一種能夠提高源代碼泄露檢測的安全性的源代碼泄露檢測方法。
[0005]一種源代碼泄露檢測方法,包括:
[0006]攔截網絡數據流;
[0007]對所述網絡數據流進行協議解析得到字符流;
[0008]獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數;
[0009]根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則阻斷所述網絡數據流。
[0010]在其中一個實施例中,所述對所述網絡數據流進行協議解析的步驟之后還包括:
[0011]判斷所述網絡數據流是否為文件傳輸流,若是,則獲取所述網絡數據流對應的文件后綴名,判斷所述文件后綴名是否與預設的后綴名關鍵字匹配,若是,則執(zhí)行阻斷所述網絡數據流的步驟。
[0012]在其中一個實施例中,所述獲取所述網絡數據流對應的文件后綴名的步驟之后還包括:
[0013]判斷所述文件后綴名是否對應壓縮文件,若是,則對所述網絡數據流進行解壓。
[0014]在其中一個實施例中,所述方法還包括:
[0015]接收上傳的規(guī)則配置請求,提取相應的檢測字符串和/或語法分析庫函數,并寫入到配置文件中;
[0016]所述獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數的步驟為:
[0017]由所述配置文件讀取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
[0018]在其中一個實施例中,所述根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼的步驟包括:
[0019]獲取所述檢測字符串和/或語法分析庫函數的匹配次數,根據所述匹配次數判斷所述解析得到的字符流是否包含源碼。
[0020]此外,還有必要提供一種能夠提高源代碼泄露檢測的安全性的源代碼泄露檢測裝置。
[0021]一種源代碼泄露檢測裝置,包括:
[0022]數據攔截模塊,用于攔截網絡數據流;
[0023]數據解析模塊,用于對所述網絡數據流進行協議解析得到字符流;
[0024]匹配規(guī)則獲取模塊,用于獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數;
[0025]字符串匹配模塊,用于根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則阻斷所述網絡數據流。
[0026]在其中一個實施例中,所述裝置還包括后綴名匹配模塊,用于判斷所述網絡數據流是否為文件傳輸流,若是,則獲取所述網絡數據流對應的文件后綴名,判斷所述文件后綴名是否與預設的后綴名關鍵字匹配,若是,則阻斷所述網絡數據流。
[0027]在其中一個實施例中,所述后綴名匹配模塊還用于判斷所述文件后綴名是否對應壓縮文件,若是,則對所述網絡數據流進行解壓。
[0028]在其中一個實施例中,所述裝置還包括匹配規(guī)則配置模塊,用于接收上傳的規(guī)則配置請求,提取相應的檢測字符串和/或語法分析庫函數,并寫入到配置文件中;
[0029]所述匹配規(guī)則獲取模塊還用于由所述配置文件讀取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
[0030]在其中一個實施例中,所述字符串匹配模塊還用于獲取所述檢測字符串和/或語法分析庫函數的匹配次數,根據所述匹配次數判斷所述解析得到的字符流是否包含源碼。
[0031]上述源代碼泄露檢測方法和裝置中,對網絡傳輸的數據流中的字符串進行檢測,通過預設的與程序語言對應的檢測字符串和/或語法分析庫函數對其進行匹配,從而判斷網絡傳輸的數據流是否為傳輸源代碼的數據流。與傳統技術中僅通過文件后綴名的方式進行判斷的方法相比,不僅可應用于檢測文件傳輸的場景中,對于通過郵件發(fā)送源代碼的方式也可進行檢測,因此源代碼泄露檢測的范圍大大加大,從而提高了安全性。
【專利附圖】
【附圖說明】
[0032]圖1為一個實施例中一種源代碼泄露檢測方法的流程圖;
[0033]圖2為一個實施例中一種源代碼泄露檢測裝置的結構示意圖;
[0034]圖3為另一個實施例中一種源代碼泄露檢測裝置的結構示意圖。
【具體實施方式】
[0035]為解決上述源代碼泄露檢測的安全性不足的問題,特提出了一種源代碼泄露檢測方法。該方法完全依賴于計算機程序,該計算機程序可運行于基于馮洛伊曼體系的計算機系統上。該計算機系統可以是企業(yè)網關或起到網關作用的設備。
[0036]在本實施例中,如圖1所示,該方法包括:
[0037]步驟S102:攔截網絡數據流。
[0038]在現有技術中,企業(yè)內部通常建有子網,該子網通過企業(yè)網關與廣域網連接,子網內的用戶在向廣域網上的終端發(fā)送郵件或文件時,產生的網絡數據流將被該子網的網關所攔截。
[0039]現有技術中的web應用服務器也架設在web服務器托管中心的機房里,并接入該機房的內網,內網與廣域網之間也設置有網關設備。web服務器在響應廣域網的終端的下載請求時,向其下發(fā)的網絡數據流也需要通過網關進行轉發(fā),則在該網關處被攔截。
[0040]步驟S104:對網絡數據流進行協議解析得到字符流。
[0041]在本示例中,協議解析所依賴的協議規(guī)則至少包括:HTTP、FTP (File TransferProtocol,文件傳輸協議)、TFTP (Trivial File Transfer Protocol,簡單文件傳輸協議)、SMNP (Simple Network Management Protocol,簡單網絡管理協議)以及 SMTP (Simple MailTransfer Protocol,簡單郵件傳輸協議)等。
[0042]網絡數據流在以某種協議進行傳輸時,可檢測網絡數據流中的協議頭部,判斷網絡數據流匹配的協議類型,然后再根據協議類型對協議正文進行解析(去掉協議頭和協議尾以及網絡數據流中的起到協議控制作用的字符),提取傳輸的字符流。
[0043]步驟S106:獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
[0044]步驟S108:通過檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則執(zhí)行步驟SllO ;否則,執(zhí)行步驟S112。
[0045]步驟SllO:阻斷網絡數據流。
[0046]步驟S112:放行網絡數據流。
[0047]程序語言包含多個關鍵字,例如,使用if和else關鍵字定義條件分支,使用funct1n關鍵字定義函數。某些程序語言的語法中也包含該程序語言獨有的關鍵字,例如,“〈? php phpinfoO ;? >”關鍵字表示php程序。則可根據每種程序語言的特性,預先設置多個與程序語言對應的檢測字符串,通過字符串匹配,即能判斷字符流中是否包含檢測字符串,從而判斷字符流是否包含源碼。
[0048]優(yōu)選的,可使用正則表達式作為檢測字符串。正則表達式,又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Express1n,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。
[0049]例如,可使用正則表達式#include\s*[〈"] + ([\w+\.h]+) [">]*( ?! \s*\*/\s*)來匹配C++程序語言中的引用語句。當字符流中出現#include〈a.h>#include〈*>等字符串時,該字符串與該正則表達式的檢測字符串匹配。也就是說,檢測到了字符流中包含有C++源碼,其中引用了 a.h文件。
[0050]預設的作為檢測字符串的正則表達式與程序語言語法中的關鍵字的字符串、字符串順序和組合的特征相匹配。對于包含有獨有關鍵字的程序語言,例如前述的Php程序語言,則可預設與各種程序語言的獨有特征相匹配的正則表達式,并可通過正則表達式的匹配判斷程序語言的種類。
[0051]例如,若預先配置javascript腳本程序和html腳本可以由內網傳輸到外網,不對該兩種程序源碼進行限制,則在正則表達式匹配到網絡數據流中的源碼為javascript程序或html程序時,仍然將其放行。但若正則表達式匹配到網絡數據流中的源碼為php程序(例如正則表達式匹配到了字符串〈? php phpinfoO ; ? >),則將其阻斷。
[0052]在本實施例中,還可通過語法分析庫函數對字符流進行判斷。語法分析庫函數通常為程序編譯器中提供的語法檢查工具庫。程序在編譯執(zhí)行之前通常會調用語法分析庫函數對程序語言的語法格式進行檢測,若其語法存在問題,則無法進入編譯環(huán)節(jié),并提示語法存在問題的代碼行和具體的語法問題。
[0053]而在本實施例中,可預先獲取多種常見程序語言的編譯器中的語法分析庫函數,然后通過調用該函數對字符流進行分析。若該函數返回的檢測結果為字符流符合語法規(guī)貝U,則表示字符流中的字符串為符合與語法分析庫函數對應的程序語句,從而判定出該字符流中包含源碼。
[0054]例如,可使用javaCC庫作為預設的與java語言對應的語法分析庫函數,通過調用該庫函數對字符流進行檢測,若返回的檢測結果符合java語法規(guī)則,則表示字符流中包含java源碼。
[0055]進一步的,通過檢測字符串和/或語法分析庫函數判斷解析得到的字符流是否包含源碼的步驟還包括:獲取檢測字符串和/或語法分析庫函數的匹配次數,根據匹配次數判斷解析得到的字符流是否與關鍵字符串和/或正則表達式匹配。
[0056]例如,在一個網絡數據流中匹配到5次以上的include〈net*.h>,或者在匹配到/林/、//、O、{}這些字符,并且其中至少三個字符,在同一個網絡數據流同時出現達20次以上,即可認為發(fā)現源碼泄露。程序語言通常包含不止一個而是大量的檢測字符串,根據匹配次數進行判斷可防止誤判。
[0057]在本實施例中,對網絡數據流進行協議解析的步驟之后還包括:判斷網絡數據流是否為文件傳輸流,若是,則獲取網絡數據流對應的文件后綴名,判斷文件后綴名是否與預設的后綴名關鍵字匹配,若是,則執(zhí)行阻斷網絡數據流的步驟。
[0058]例如,若通過協議解析判斷得到該網絡數據流的傳輸協議為FTP協議,則可判定該網絡數據流為文件傳輸流,傳輸的數據流可能為文件字節(jié)流。通過解析可能無法得到其對應的字符流,因此無法進行字符串匹配,則可通過協議解析得到其文件后綴名,若其后綴名為php、java、c等,則將其阻斷。
[0059]進一步的,獲取網絡數據流對應的文件后綴名的步驟之后還包括:判斷文件后綴名是否對應壓縮文件,若是,則對網絡數據流進行解壓。
[0060]如前所述,若通過FTP協議傳輸的是壓縮文件,則可將網絡數據流緩存,然后對其進行解壓,獲取解壓后的文件的后綴名,判斷其是否為php、java、c等,若是,則可將其阻斷。壓縮方式至少包括:rar、tar.gz、7z、zip等。
[0061]需要說明的是,若判斷得到網絡數據流為文件傳輸流,但文件傳輸流若為字符流,則仍可繼續(xù)執(zhí)行前述的步驟S106,并通過檢測字符串和語法分析庫函數對文件傳輸流中的字符進行字符串匹配、正則表達式匹配和程序語法分析。并將匹配結果與文件后綴名的判斷結果結合,以和或者或的方式合并后判斷是否需要阻斷。
[0062]進一步的,網絡管理員還可隨時訪問網關,對網關上預設的檢測字符串(包括正則表達式)、語法分析庫函數或文件后綴名進行配置。具體的,網關可接收上傳的規(guī)則配置請求,提取相應的檢測字符串(包括正則表達式)、語法分析庫函數或后綴名,并寫入到配置文件中。
[0063]在本實施例中,獲取預設的與程序語言對應的檢測字符串(包括正則表達式)、語法分析庫函數或文件后綴名的步驟可具體為:由配置文件讀取預設的與程序語言對應的檢測字符串(包括正則表達式)、語法分析庫函數或文件后綴名。
[0064]也就是說,網關設備可提供web訪問頁面給網絡管理員,網絡管理員通過瀏覽器訪問該web訪問頁面后,即可添加、修改或刪除檢測字符串(包括正則表達式)、語法分析庫函數或文件后綴名。網絡管理員修改完畢保存后,網關設備即將更新的內容寫入配置文件,后續(xù)的匹配操作則依據該更新的配置文件進行匹配。
[0065]在一個實施例中,如圖2所示,一種源代碼泄露檢測裝置,包括數據攔截模塊102、數據解析模塊104、匹配規(guī)則獲取模塊106以及字符串匹配模塊108,其中:
[0066]數據攔截模塊102,用于攔截網絡數據流。
[0067]數據解析模塊104,用于對所述網絡數據流進行協議解析得到字符流。
[0068]匹配規(guī)則獲取模塊106,用于獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
[0069]字符串匹配模塊108,用于根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則阻斷所述網絡數據流。
[0070]在本實施例中,如圖3所示,源代碼泄露檢測裝置還包括后綴名匹配模塊110,用于判斷所述網絡數據流是否為文件傳輸流,若是,則獲取所述網絡數據流對應的文件后綴名,判斷所述文件后綴名是否與預設的后綴名關鍵字匹配,若是,則阻斷所述網絡數據流。
[0071]在本實施例中,后綴名匹配模塊110還用于判斷所述文件后綴名是否對應壓縮文件,若是,則對所述網絡數據流進行解壓。
[0072]在本實施例中,如圖3所示,源代碼泄露檢測裝置還包括匹配規(guī)則配置模塊112,用于接收上傳的規(guī)則配置請求,提取相應的檢測字符串和/或語法分析庫函數,并寫入到配置文件中;
[0073]所述匹配規(guī)則獲取模塊106還用于由所述配置文件讀取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
[0074]在本實施例中,字符串匹配模塊108還用于獲取所述檢測字符串和/或語法分析庫函數的匹配次數,根據所述匹配次數判斷所述解析得到的字符流是否包含源碼。
[0075]上述源代碼泄露檢測方法和裝置中,對網絡傳輸的數據流中的字符串進行檢測,通過預設的與程序語言對應的檢測字符串和/或語法分析庫函數對其進行匹配,從而判斷網絡傳輸的數據流是否為傳輸源代碼的數據流。與傳統技術中僅通過文件后綴名的方式進行判斷的方法相比,不僅可應用于檢測文件傳輸的場景中,對于通過郵件發(fā)送源代碼的方式也可進行檢測,因此源代碼泄露檢測的范圍大大加大,從而提高了安全性。
[0076]以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。
【權利要求】
1.一種源代碼泄露檢測方法,包括: 攔截網絡數據流; 對所述網絡數據流進行協議解析得到字符流; 獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數; 根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則阻斷所述網絡數據流。
2.根據權利要求1所述的源代碼泄露檢測方法,其特征在于,所述對所述網絡數據流進行協議解析的步驟之后還包括: 判斷所述網絡數據流是否為文件傳輸流,若是,則獲取所述網絡數據流對應的文件后綴名,判斷所述文件后綴名是否與預設的后綴名關鍵字匹配,若是,則執(zhí)行阻斷所述網絡數據流的步驟。
3.根據權利要求2所述的源代碼泄露檢測方法,其特征在于,所述獲取所述網絡數據流對應的文件后綴名的步驟之后還包括: 判斷所述文件后綴名是否對應壓縮文件,若是,則對所述網絡數據流進行解壓。
4.根據權利要求1所述的源代碼泄露檢測方法,其特征在于,所述方法還包括: 接收上傳的規(guī)則配置請求,提取相應的檢測字符串和/或語法分析庫函數,并寫入到配置文件中; 所述獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數的步驟為: 由所述配置文件讀取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
5.根據權利要求1所述的源代碼泄露檢測方法,其特征在于,所述根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼的步驟包括: 獲取所述檢測字符串和/或語法分析庫函數的匹配次數,根據所述匹配次數判斷所述解析得到的字符流是否包含源碼。
6.一種源代碼泄露檢測裝置,其特征在于,包括: 數據攔截模塊,用于攔截網絡數據流; 數據解析模塊,用于對所述網絡數據流進行協議解析得到字符流; 匹配規(guī)則獲取模塊,用于獲取預設的與程序語言對應的檢測字符串和/或語法分析庫函數; 字符串匹配模塊,用于根據所述檢測字符串和/或語法分析庫函數判斷所述解析得到的字符流是否包含源碼,若是,則阻斷所述網絡數據流。
7.根據權利要求1所述的源代碼泄露檢測裝置,其特征在于,所述裝置還包括后綴名匹配模塊,用于判斷所述網絡數據流是否為文件傳輸流,若是,則獲取所述網絡數據流對應的文件后綴名,判斷所述文件后綴名是否與預設的后綴名關鍵字匹配,若是,則阻斷所述網絡數據流。
8.根據權利要求7所述的源代碼泄露檢測裝置,其特征在于,所述后綴名匹配模塊還用于判斷所述文件后綴名是否對應壓縮文件,若是,則對所述網絡數據流進行解壓。
9.根據權利要求6所述的源代碼泄露檢測裝置,其特征在于,所述裝置還包括匹配規(guī)則配置模塊,用于接收上傳的規(guī)則配置請求,提取相應的檢測字符串和/或語法分析庫函數,并寫入到配置文件中; 所述匹配規(guī)則獲取模塊還用于由所述配置文件讀取預設的與程序語言對應的檢測字符串和/或語法分析庫函數。
10.根據權利要求6所述的源代碼泄露檢測裝置,其特征在于,所述字符串匹配模塊還用于獲取所述檢測字符串和/或語法分析庫函數的匹配次數,根據所述匹配次數判斷所述解析得到的字符流是否包含源碼。
【文檔編號】G06F21/57GK104318162SQ201410506037
【公開日】2015年1月28日 申請日期:2014年9月27日 優(yōu)先權日:2014年9月27日
【發(fā)明者】曾加良 申請人:深信服網絡科技(深圳)有限公司