來自:36氪 連結:http://36kr.com/p/5144470.html
原文:https://www.wired.com/story/google-safe-browsing-oral-history/
編者按:就像WWW之父伯納斯-李擔憂那樣,現在的Web已經成了欺詐和網路犯罪泛濫的汙穢之地。各種釣魚行為、惡意軟體層出不窮,普通網民如何才能躲過一個個的陷阱?按道理說,大家應該預設web是安全的、易用的才對。你不應該成為安全專家才敢去上網,你也不應該知道什麼是釣魚,不應該知道惡意軟體是什麼。你應該預期當出問題的時候軟體會告訴你。而這就是Safe Browsing想要做的。《連線》雜誌採訪了Google的開發團隊,讓我們得以瞭解這項讓Web更安全的服務是如何演進的。
一開始是電話入侵和蠕蟲。接著是spam和彈出視窗。這些沒有一個是好的。但在網際網路初期的時候,數字網路都是相互隔離的,足以讓一般使用者基本上避開最險惡的東西。不過到了2000年代初時,那些牆開始坍塌,數字犯罪開始猖獗起來。
今年9月即將迎來成立20週年日子的Google就是在這種轉變中成長起來的。隨著它的搜尋平臺衍生出像廣告分發以及電子郵件託管這樣的關聯產品,該公司意識到自己的使用者以及web上的每個人都面臨著不斷惡化的網路欺詐和濫用。於是在2005年,Google內部的一支小型團隊啟動了一個專案,旨在對可能的社會工程攻擊進行標記——當王爺有可能欺騙使用者執行某種有害的動作時警告使用者。
1年後,這群人擴充套件了專案的範圍,開始將可能傳播惡意軟體的連結和網站也標記出來。Google開始將這些反濫用工具合併進自己的產品之內,同時也向外部的開發者開放。到2007年,這項服務優良一個名字:Safe Browing(安全瀏覽)。一開始的胡亂開槍最終徹底改變了網際網路的安全。
儘管你也許沒有意識到,但其實已經受到Safe Browsing的保護了。當你在最流行的瀏覽器載入頁面或者從Google Play Store選擇app時,Safe Browsing就在螢幕背後檢查而已行為並且在可能有問題時通知你。不過以web的規模設立如此龐大的一個審查系統並非易事。Safe Browsing一直都在努力應對核心安全挑戰——如何標記和遮蔽不好的東西但又要避免給合法獲得打上錯誤的標簽,或者讓任何有而已的東西溜掉。儘管這一問題尚未徹底解決,大Safe Browsing贏成為web的中堅份子。它成為了Google所有主要平臺使用者安全的基礎——包括Chrome、Android、AdSense以及Gmail等,並且在全球超過30億臺裝置上執行著。
以下就是曾經在Safe Browsing團隊(包括初始團隊成員以及最近的擴充)工作過的9位工程師口中的產品故事,其中講述了該產品是如何開發的,以及如何變成了網上的一支無所不在的保護力量。
Niels Provos,Google傑出工程師,Safe Browsing創始成員之一:2003年剛開始的時候我做的是防DOS(拒絕服務)攻擊的工作,然後2005年Google又進來了另一名工程師,他的名字叫做Fritz Schneider,此人其實是我們安全團隊的第一人。他說:“嘿Niels,這個釣魚攻擊真的已經成問題了,我們應該做點什麼才行。”
我們觀察到的其中一個趨勢是壞傢伙發現,只是禍害其他web伺服器並不能有多大的收穫。他們能得到的基本上只是頻寬,但有趣的資料並不多。於是他們把目光轉向了有非常非常多訪客的其他web伺服器,然後想,‘用下載來把這批人搞一下如何?’於是惡意行為開始發生改變。
我們已經在解決住釣魚的問題了,但我認為惡意軟體這個東西的問題也許更大。而且我們所處的位置算是比較獨特的,因為有Google搜尋爬蟲,這樣我們可以對web1看得一清二楚。所以我們開始著手解決釣魚和惡意軟體的問題,Safe Browsing就這麼一路走來了。
Panos Mavrommatis,Safe Browsing工程總監:Safe Browsing開始是作為Safe Browsing的反釣魚外掛的,因為當時是2005年,Google1還沒有自己的瀏覽器。2006年當我加入Google時,當時的團隊領導是Niels,他希望我們擴充套件功能,不僅僅只是保護使用者免受釣魚攻擊還要防止惡意軟體。所以這就是我的第一個專案——而且現在也還沒完成。
其標的是爬取web,保護Google主要產品,也就是Search的使用者不會進入到可能給他們的計算機造成傷害的網站。所以這個就是Safe Browsing繼反釣魚外掛之後的第二款產品,而使用者可以看到惡意搜尋結果的標簽。然後如果你還是點選進去的話,就會收到搜尋體驗以外的額外警告,告訴你這個網站可能會損害你的計算機。
後來發生了一件趣事,這件事情跟我們與受到Safe Browsing警告影響的網站站主的溝通有關。因為當我們開始調查使用者會如何受到web山惡意軟體的影響時,我們很快意識到其中有很多是來自其實是良性的網站的,只是那些網站本身也受到了惡意軟體的連累,並且開始被利用來傳播惡意軟體。但網站所有者或者管理員通常並未意識到這件事情的發生。
我們一開始跟站主溝通的時候他們通常是一臉驚訝。所以我們開始為站主開發專門的工具,現在這玩意兒有了名字,叫做Search Console。其基本功能四試圖引導站主瞭解為什麼他們的網站會受到影響,或者如果我們不知道確切原因的話至少也要告訴他們,他們的伺服器上哪一個頁面正在傳播惡意軟體,或者我們會把註入到他們網站的程式碼片段顯示給他們看。
Provos:我們受到了大量的質疑,類似‘Niels,你不會告訴我說你們做這個就是為了web使用者著想而已吧?Google本身一定也有自己的考慮才對吧?’後來我們表示如果web對我們的使用者更安全的話,那Google也會從中受益,因為大家會更頻繁地使用我們的產品。
不過其實我們未曾考慮過10年後我們能發展到30億裝置上。這其實是有點可怕的。有數十億人依賴我們提供的服務需要我們承擔巨大的責任,如果我們檢測的工作做得不好的話,他們就會被暴露在惡意內容面前。
Mavrommatis:大約200年的時候我們開始開發一個引擎,這個引擎可以將Google抓取的每一頁面都篩查一遍,從而評估頁面的行為方式如何。能夠做到這一點完全是因為Google的內部雲基礎設施。這也是為什麼Google當時能夠做那麼多的創新的部分原因之一,因為我們內部的基礎設施是極其開放的,任何未用的資源都可以供你使用,從而讓我們可以對整個web執行惡意行為檢查引擎。
Moheeb Abu Rajab,Safe Browsing首席工程師:研究生畢業後,我一直嘗試著在好幾臺機器上開發這類系統,所以我在這上面花費了很多時間。但是Google大規模執行這種東西卻易如反掌。
Mavrommatis:我們同時還在開發另一個東西,這是一個掃描程式,速度比較慢,但是更加深入,它會將web頁面載入到真正的瀏覽器上,這相對於我們僅僅測試網站每個元件的其他工作消耗的資源更多。有了這兩套系統之後我們就可以開放我們的第一款機器學習分類器。爬取服務為該輕量引擎提供的訓練資料越深入,引擎識別哪一個網站最有可能受到惡意攻擊的能力越越強,然後我們就會對其進行深入掃描。因為哪怕像Google這種級別我們也無法在真正瀏覽器內爬取整個搜尋索引。
Noé Lutz,Google AI工程師,前Safe Browsing團隊成員:與此同時,2009年,我們開始用機器學習來防釣魚。這對於團隊來說是個相當恐怖的時刻,因為直到那時候我們還是把機器學習用作過濾功能,來找出應該將這個計算資源消耗大戶的重點放到哪裡,但這次是我們第一次以自動化的方式來決定一個東西究竟是釣魚或者惡意或者有害或者無害的。
我還記得那天我們切換過來的情形。那感覺就好像,現在是機器負責了,這可是個大日子啊。然後沒什麼不好的事情發生。但我還記得我們花了很長的時間才敢把(轉為自動的)開關合上。我認為當時我們都以為這件事需要幾周的時間,但實際上我們用了幾個月CIA確保自己對所做的事情非常有信心。我們從一開始就非常清醒的意識到如果我們犯了錯誤的話其破壞性有多高。
Provos:是的,這件事一齣事往往就是大事。2009年的時候出了一件很大的生產問題,那是在週六的早上。我們有好幾個bug都集體爆發了,但我們最終弄了一個糟糕的配置推送。我們把Google搜尋結果的一切都標記為惡意了。
哪怕是在2009年的時候Google也已經是無所不在的搜尋引擎,所以這件事對全世界都產生了重大影響。幸運的是,我們網站的可靠性工程團隊對這些事情非常在行,15分鐘之內就把問題搞定了。但這件事讓我們對自己進行了嚴酷的靈魂拷問,併在隨後追加了大量的防護和保障措施,以便類似事情不再發生。不過幸運的是到那時候Google內部的人都已經意識到Safe Browsing是一項非常重要的服務了,所以我們才會在一開始就把它植入到Search服務裡面。
Nav Jagpal,Google軟體工程師:2008年我們將Safe Browsing整合進了Chrome,而Chrome代表了一大轉變,因為之前像Internet Explorer這樣的瀏覽器你很容易就會用上舊版的。有些隱蔽強迫下載(drive-by downloads)舊利用了這一點,當你去到一個網站時,哪怕沒有點選任何東西就離開你的家計算機也會感染。不過隨後每個人在開發軟體上都變得更好了。最薄弱的環節曾經是瀏覽器;現在變成使用者了。現在要想程式碼在別人的機器上執行,你只需要讓對方同意就行。所以Safe Browsing就顯得非常關鍵。
Mavrommatis:大概在2011年和2012年的時候我們開始進一步整合到Google的平臺上,尤其是Android和Chrome Extensions(外掛)以及Google Play。我們還設立了獨立的團隊專門負責每一個產品整合,並且跟提供平臺的主團隊一起合作。
Allison Miller,前Safe Browsing產品經理,現在美國銀行:Safe Browsing是真正的幕後英雄。我們開發基礎設施。我們處理資訊然後推送給Google所有有可能導致用戶遭遇惡意內容的產品。大家未必能看到這背後的事情。有關這一點我們有時候顯得太過安靜了。
Fabrice Jaubert,Safe Browsing軟體開發經理:往web外部伸展的時候會遇到挑戰,但這也有優勢,因為我們對這個生態體系還是有一點控制的,所以我們可以引導著web朝著更安全的實踐去走。你沒辦法命令別人怎麼去處理自己的網頁,但我們可以把我們認為的Chrome外掛或者Android app有哪些可以接受哪些不可接受的東西說出來。
Lutz:還存在一些非技術性的挑戰。Google是一家大公司,在這麼大公司內進行跨團隊合作會比較有挑戰性。外部很難意識到到這一點,但Chrome的開發語言跟Google很多產品使用的都不一樣,而且有著非常不同的釋出流程。Android也是一樣,他們的軟體釋出流程也不一樣。所以讓每個人都能協調一致並且相互理解這件事情是需要剋服的一大障礙。
Stephan Somogyi,Google AI產品經理,前Safe Browsing成員:這是一種非常迂腐的陳腔濫調,所以請不要把它用到我身上,但是“水漲船高”的說法用到Safe Browsing是非常貼切的。我們想把它擴充套件到移動端,這一點從來都沒有引起過爭論,但是我們面臨一個非常大的困境,因為Safe Browsing用到桌面端的資料量對於移動來說是難以應對的。而且我們知道我們推向移動裝置的一切都會讓使用者花錢,因為他們的資料套餐是要花錢的。所以我們希望採用壓縮辦法把資料量減少。同時我們又不希望使用者的5個app都內建了同一個Safe Browsing實現,然後把相同的資料都要下載5遍。所以我們決定把它做進Android裡面,讓作業系統把這些累活包辦。自從2015年秋以來它就成為了一項系統服務。
這項服務對於開發者來說就是一個非常簡單的API,他們只需要對系統說“嘿,Android Local System Service,這個URL究竟是好的還是壞的?”我們還希望執行這個東西不需要連線撥號modem並且消耗電量,因為這對使用者不好。所以如果資料網路沒連上的話,就不要呼叫這個API。我們花費了大量精力在Android的實現上。結果表明,在這上面有很多微妙的東西是我們當初預計不到的。
Mavrommatis:我們團隊的另外一大努力是在2013、2014年的時候做的所謂的“不需要的軟體”。這主要是針對桌面使用者的,是過去那些僅使用惡意技術的人的某種改進,但現在他們發現可以將自己偽裝成看起合法的功能植入到軟體裡面。尚不清楚反病毒公司會如何給這種東西貼標簽,也不知道大公司和瀏覽器應該如何應對這個。但我們關註的是它對使用者有什麼影響?
大概2014年的時候,我們的資料表明,使用者對Chrome的投訴中超過40%跟他們裝置上執行的某種會影響瀏覽體驗的軟體有關。這可能是植入了更多的廣告或者捆綁了其他一些他們不需要的軟體。這些做法導致很多問題,我們看到許多Chrome使用者都在下載這類的app。所以我們重新調整了我們的下載保護服務,並且想辦法開始警告使用者這些潛在的有害下載。
Jagpal:這是很大的責任,但給人感覺也非常抽象。你收到一個警告時會想,“等一下,我這是在保護自己嗎?”但這個東西太抽象了,如果我們給一些具體的東西寫程式碼,比如將家裡的燈開關開啟的話,那感覺就像“哇,這太酷了,我能看到。”
Jaubert:我14歲的小孩絕對已經把Safe Browsing看作是理所當然的了。他收到一條偽裝成簡訊的釣魚資訊,所以那條簡訊沒有經過我們的系統,他被震驚到了。他問我:“為什麼那你不保護我?我以為這是不會發生的!”所以我認為大家已經開始把Safe Browsing視為當然。
Emily Schechter,Chrome安全產品經理(前Safe Browsing專案經理):當大家上的是安全網站時你可以告訴大家他們是安全的,但真正重要的是當他們不安全的時候,當他們上的是一個經常幹壞事的網站的時候告訴他們。
大家應該將web是安全的、易用的視為預設。你不應該成為安全專家才敢去上網,你也不應該知道什麼是釣魚,不應該知道惡意軟體是什麼。你應該預期當出問題的時候軟體會告訴你。而這就是Safe Browsing想要做的。
●編號672,輸入編號直達本文
●輸入m獲取文章目錄
Python程式設計
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。