概述
2006年10月,Google發布了代碼搜尋引擎Google Code Search,以方便用戶快速搜尋網際網路上的各種代碼,包括各種函式的定義以及相關的示例,用戶還可以直接使用正則表達式進行搜尋。今天Google宣布已經對代碼搜尋進行了改進,並且首次推出了多國語言版。
Google代碼搜尋現在不僅可以抓取完整的檔案,還新增加了對單獨代碼檔案及網頁上的代碼樣品片段的收錄。這意味著Google代碼搜尋的索引算法及索引資料庫得到了進一步的完善。比如搜尋"nph-refresh":
功能
語法及示例 (有關 regexp 語法的詳情)
regexp 搜尋正則表達式
go{2}gle hello,\ world ^int printk
"exact string" 搜尋精確字元串
"compiler happy"
class:regexp function:regexp 只搜尋類(class)名稱和函式(function)名稱 新!
class:BTree function:laugh
class:hash.*multimap function:.*range
file:regexp 僅在與 regexp 匹配的檔案或目錄中進行搜尋
file:\.js$ XMLHttpRequest file:include/ ioctl
file:/usr/sys/ken/slp.c "You are not expected to understand this."
package:regexp 搜尋名稱與 regexp 匹配的包。
(包的名稱就是其網址或 CVS伺服器信息。)
package:perl.*\.tar\.gz Frodo package:linux-2.6 int\ printk
lang:regexp 僅搜尋用與 regexp 匹配的語言編寫的程式
lang:lisp xml lang:"c++" sprintf.*%s
license:regexp 僅搜尋軟體許可與 regexp 匹配的檔案.
license:bsd int\ printf -license:gpl heapsort
警惕
安全專家上周四警告開發者,他們需要了解他們的開源程式庫現在已經可以很容易被挖掘以使得攻擊者可以尋找可能存在漏洞的程式。在過去,Google可以被用於尋找特定字元串;而現在搜尋引擎已經可以更有效地搜尋代碼。 Veracode安全部門首席技術官Chris Wysopal說:“它探尋可公開獲得代碼的位置的足跡已經越來越深,並且顯然它正在搞到有價值的材料。這使得攻擊者可以更快、更容易地發現弱點——這些攻擊者們希望攻擊的不是某個特定的Web站點,而是任何Web站點。”
Google周四宣布這一工具已經可被公眾使用。Google代碼搜尋發掘網際網路上的開原始碼庫,將網上大量可獲得的原始碼編譯成易被搜尋的資料庫。這一工具使得上網者可以搜尋符合特定正則表達式的代碼,而這些搜尋可以限制於特定的檔案類型與許可。
Google的代碼搜尋所暗含的安全問題與其網站搜尋引擎帶來的問題類似。Google黑客——這一名詞指使用Google查詢來尋找網站中的弱點——是一種尋找具有特定漏洞的伺服器的流行方式。蠕蟲與病毒已經試圖利用搜尋引擎建立準備攻擊的潛在犧牲者的列表。7月,研究者警告使用搜尋引擎可以很容易地發現惡意代碼。
Google在周四重申,該工具目的是幫助程式設計師尋找示例代碼和模糊的函式定義,而非為搜尋漏洞。
測試
該公司在以電子郵件形式發往SecurityFocus的一份陳述中說:“Google建議開發者們使用通常被接受的良好的代碼習慣,這包括理解他們正在套用的代碼的含義以及適當的測試。”
然而,程式設計師們看上去並不能走在正迅速膨脹的可以發現有趣代碼特性的搜尋列表前面。一個簡單的“todo+security”查詢就可以找到很多具有未執行的安全特性的程式。使用“confidential+proprietary”查找檔案可以查到被不適當地發布的代碼。而根據Veracode的Wysopal所說,搜尋“gets”函式——一個臭名昭著的不安全字元串操作——可以揭示很可能易受記憶體溢出攻擊的程式。本文採訪的安全專家表示,對於大多數套用而言,Google代碼搜尋的功能可以使用正常的Google搜尋引擎模仿,但該工具使得這樣的搜尋效率更高。
代碼搜尋還可以使代碼審查者更快捷地警告人們程式中存在的漏洞。開源軟體的一個中心議題是更多人檢查可獲得的代碼可以增強安全性。Wysopal說,一段時間後Google代碼搜尋可以使得更多的人尋找漏洞。 Wysopal說:“這就像給每個人一架望遠鏡。這正使得他們效率更高。就讓我們期望他們正將此套用於好的方面。”
Johnny Long是一位著名的安全研究者,他深入研究過Google黑客。他說,防備可能利用代碼搜尋進行的尋找開發者程式中的漏洞並不容易。程式設計師們需要被灌輸安全編程技術以了解什麼是危險的而什麼不是。頻繁的代碼檢查也是必須進行的,而最後,編程方針需要進一步被強化。 Long說:“如果程式設計師們不被激勵以使用安全的庫並避免不好的函式或技術,如何使他們走向更艱難的編寫安全代碼之路呢?”
這位安全研究者還強調,處理易被搜尋的代碼庫需要時間,而惡意研究者可能暫時走在開發者前列。他還說,程式設計師們需要抗拒試圖將他們的代碼庫隱藏於Google之外的誘惑。 Long說:“任何新的技術都使得新的攻擊出現。關鍵的問題是好人們是否會最先發現這一新的技術。”