在Twitter這樣大型社群網站上,常見到的威脅是偽裝成其他使用者身分、採用企圖混淆視聽的使用者帳號,或甚至侵入帳號,伺機置入垃圾訊息、廣告文案、詐騙連結或惡意網址的連結。

事實上,過去Twitter在使用者內容張貼的安全管控措施並不嚴格。該公司的軟體工程師Alex Smolen坦承,用戶在推文中可以任意張貼可能影響瀏覽者電腦操作時的程式碼,例如置入一個讓瀏覽者電腦跳出警示視窗程式的網址,使得每個人一旦開啟這篇推文時,就會自動彈出視窗。

就Twitter實際發生的資安事件來看,近期最受矚目的,莫過於美聯社Twitter帳號遭駭客入侵盜用,謊報美國白宮受攻擊、總統歐巴馬受傷的假訊息,導致該國股市大跌,隨後因為消息澄清而反彈。更早之前,在2009年,有一些用戶的Twitter帳號,接連傳出被駭客入侵、冒用帳號的事件,受害的對象包括歐巴馬、福斯電視新聞臺與其他單位。

這些事情的發生,後來導致美國政府的聯邦貿易委員會特別出面,對該公司展開調查。雙方最後達成和解的條件是:往後20年當中,Twitter承諾將設法維持與保護使用者非公開資訊的安全、隱私、機密與完整性,避免誤導。由於上述原因,做好資安成為該公司必須努力去遵循的目標,這也導致他們必須更重視這些問題的出現與處理,於是,Twitter決定成立一支專門負責強化網站資訊安全的小組。

將安全開發流程當中的部分人工作業,改為自動執行

在該公司每一季舉辦的創意實踐週(Hack Week)活動期間,這支小組在自動化處理與流程改善上,有了很大的進展。他們確立了下列規範:

將正確資訊交給正確的人處理

撰寫安全的程式碼不只是考量技術上的議題,也關乎利用技術來進行工作的人,因此如何更有效地溝通是重要的,要做好這些事不該只是產生一份報告、交給某人,而是要為那些寫出安全性弱點的程式開發人員,針對需要修補的部份,提供明確的資訊。

盡快發現與修正程式碼當中的臭蟲

在軟體開發過程中,難免會寫出會產生錯誤的程式碼,若能越早發現這樣的問題、予以修正,日後就不需要耗費加倍的時間去處理。

不再犯同樣的錯誤

如果能預先知道可能產生的程式碼問題,後續就不會有其他問題產生。我們總是一再地修正同樣的程式問題,目標應該放在如何利用自動化,來預防同樣的問題再發生。

能夠從多種角度去分析程式碼

從程式原始碼、上線環境,甚至到使用者端的瀏覽器中去收集資料。

讓別人證明你的對錯

開發人員需信任我們,因此他們必須告訴我們關於誤判的狀況。如果我們錯了,必須讓他們能夠告知我們,並且不要浪費對方時間。

大部分人想把事情做對,因此將他們需要去修正的資訊給他們,他們就會做到。

將愚蠢的工作自動化

所謂愚蠢的工作,是指不需要批判或創意的工作。這可以善用軟體的力量來自動進行,而不需要浪費無謂的人力。

調配作法,提升適用性

建立專屬的工具組,能夠節省可觀的時間和金錢,以便將心力專注在我們真正在意的精細處。

結合多套開放原始碼軟體,讓程式碼安全作業自動化程度大幅提升

基於這些準則,Twitter的資安小組首要著手的部份,是將原本開發人員需要手動執行的安全處理程序予以自動化。這些都是很耗工卻未必需要人工全程介入的作業,其中包括了程式碼重新審視(Code Review)、滲透測試(Penetration Test )的發動,以及從外部環境所進行的安全評估報告(External Report)。

而上述工作要做到自動化,Twitter認為,可以分別利用程式碼的靜態分析工具(Static Analysis Tools)、動態分析工具(Dynamic Analysis Tools),以及內容安全政策(Content Security Policy,CSP)。

以程式碼靜態分析工具來說,執行時雖然可以將相關步驟自動化進行,但還是需要等待掃描作業完成,才能得到統計報表,接著你需要去解讀報表內容,然後找到能夠去負責修正這些問題的人,而且一旦程式碼有所變動,這樣的流程又要重新來一遍。因此,雖然是用自動化工具,然而實際上還要靠手動來完成許多程序。這也是Twitter想要進一步改善之處。而且透過減少需要人工操作的任務,既有的人員可以省下更多時間,來做更有創意的事情,以及檢討、改善目前的問題。

為了要達成這個目標,Twitter的資安小組將程式碼分析的機制,放到Jenkins這套持續整合伺服器軟體的整合流程當中,但這還不夠,於是他們建立了一套自動執行相關流程的系統,並取名為安全自動化儀表板(Security Automation Dashboard,SADB)。

SADB當中包含了多套開放原始碼的軟體功能與當中的安全性設定,例如Brakeman、Phantom Gang、CSP、ThreatDeck、Roshambo,而這些軟體處理之後的結果,會以電子郵件的方式傳送給Twitter的開發人員與資安小組。

靜態分析工具Brakeman

這套工具主要是針對Ruby on Rails開發環境,與多數網頁安全掃描機制相較,Brakeman的特色是可以檢視到程式的原始碼,因此,開發人員不需要為了用它而重新調整原本的應用程式架構,等到Brakeman完成掃描後,它會產生一份報告,當中將會記載所發現到的所有安全問題。

在Twitter的開發流程中,每一次透過git push來提交程式碼時,都會一起執行Brakeman,此時若發現有安全性漏洞,SADB會寄一封電子郵件通知開發人員,裡面會提到該如何修正;當修正完成時,SADB會寄出一封電子郵件,恭賀修正這項安全性漏洞的人。

像這樣,把程式碼分析作業整合到開發流程與持續改善生命週期是相當理想的,而且剛剛好是在這些程式碼檔案儲存、提交的時間點,因此能夠及時攔截安全性不佳的程式碼。

事實上,Brakeman可以開發流程中的任何階段中執行,不只是儲存程式碼的時候,還包括程式碼進行審查、品管或部署的時機。因此,當開發人員想要修正這些弱點時也會獲得很大幫助,因為可以透過程式碼靜態分析的結果,了解到該如何著手。基於這些應用的好處,在Twitter資安小組的研究下,他們發展出在程式碼開發初期階段開始就能經常進行測試的模式。未來,Twitter也打算把Brakeman擴大應用到其他層面。

動態分析工具Phantom Gang

Twitter用Brakeman來針對程式碼的靜態分析處理,而在程式碼的動態分析處理,他們發展出稱為Phantom Gang的作法來進行。Twitter以此找出了一些應用程式執行時的安全問題,像是:混合不同型態的資料內容、使用有安全性弱點的舊版jQuery、表單處理時未要求驗證Token的可靠性,或是使用者要張貼帶有敏感資料內容的網頁表單,卻只透過傳統的HTTP協定,而非透過HTTPS加密傳輸。

實際上Phantom Gang是怎麼運作的?它是一連串的Node.js處理程序,模擬了Webkit核心引擎瀏覽器的連線階段,利用這種沒有圖形使用介面的瀏覽器實體(headless browser instances)去了解使用者看到的狀況;而處理的結果會輸出到SADB,然後再傳給JIRA這個問題追蹤管理平臺。

安全網頁的檔頭宣示CSP

2011年時,Twitter在行動版的網站上(mobile.twitter.com),測試了新的安全功能,稱為CSP。CSP原本是一套由Mozilla基金會所開發出來的標準,目的主要是為了提升使用者瀏覽器端執行時的威脅防禦力,以此阻撓所遭遇到的跨站指令攻擊(Cross Site Scripting,XSS)。

而在Twitter網站上若要啟用CSP,也很簡單,只需要在回傳網頁的檔頭(header)裡面,將這樣的政策包含進去即可。

Twitter對CSP的使用,主要是禁止JavaScript由頁面本身直接執行,讓JavaScript只能針對站方提出的需求來執行。若有頁面違反這樣的政策,Twitter認為這是潛伏XSS攻擊行為的徵兆。

值得注意的是,網站若要啟用CSP,要讓若用不同平臺的瀏覽器能夠支援,所要設定的關鍵字是不同的。例如,Mozilla對CSP定義的關鍵字是X-Content-Security-Policy,主要是由Firefox使用,IE10也開始支援,而且微軟又在當中額外加了在沙箱環境執行的指令。而其他瀏覽器則有不同作法,例如Webkit引擎的瀏覽器,像是Safari和部分版本的Google Chrome等,是用X-WebKit-CSP。

除了CSP,Twitter也在網站上使用了HTTP Strict Transport Security(HSTS)的標示,意思是站方本身若在網頁檔頭宣告用這項設定,網站會通知使用者操作的網頁瀏覽器,只能透過HTTPS的加密連線,才能存取這個網站,應該自動轉換成用HTTPS來連接網站,而不能用HTTP。同時,網站若出現憑證錯誤和警示的情況,HSTS可以提示使用者瀏覽器,使其停止連線至該網站。

另外,Twitter目前在網頁檔頭啟用安全性的作法,還有好幾種。像是:X-Frame-Options、X-Content-Type-Options、X-XSS-Protection。

其中,X-Frame-Options可用於避免clickjacking攻擊(綁架使用者瀏覽網頁的點擊動作而產生其他異常行為),對於採用<iframe>語法的網頁,這個檔頭敘述可以指示瀏覽器是否繪製這個可能嵌入其他網頁內容的頁面,避免使用者點選隱藏在iframe網頁內的指令或連結,而被操弄。

而X-Content-Type-Options的防護,主要是屬性設定要加上nosniff的敘述。為什麼需要這樣的檔頭?瀏覽器在開啟的內容類型無法確定,往往預設會啟動猜測(MIME-sniffing)機制時,現在可透過nosniff這設定值來停用內容自動辨別、開啟,以免發生誤判因而產生安全性問題(例如應該是JPG圖檔,卻以JavaScript執行,這讓有心人士得以透過夾帶程式碼的圖檔來發動攻擊)。

另一個X-XSS-Protection,顧名思義也是為了防禦XSS攻擊所設計的功能,微軟在IE8之後開始支援。IE會偵測是否在網頁存取請求中出現了類似XSS攻擊的行為,如果有,IE會修改、重組網頁內容以阻擋攻擊,同時對發出警示。

全站安全訊息即時公告欄ThreatDeck

Twitter本身就是一個可以讓各種訊息相互流通的管道,因此他們也打造了以本身社交網路為基礎的即時威脅情報中心,將所有自願協助Twitter改善資安的白帽駭客們所發出的相關推文(Tweets),全部集中在統一的訊息看板頁面,以便監看相關的推文討論串,隨時掌握攻擊模式。

自動分配工作系統Roshambo

Roshambo就是Ro-Sham-Bo,也就是剪刀、石頭、布的猜拳遊戲,這個應用的由來,原本是跟匯入全部資料到SADB的工作有關,因為這工作相當麻煩,所以Twitter資安小組決定用猜拳的方式來找出人選;這些資料處理的程序後來已經全部自動化了,但他們還是用這樣的方式,來指派審視所有SADB系統所產生的報表。

自動化讓Twitter有餘裕作好資安

整體而言,由於運用了上述開放原始碼的軟體或程式碼,Twitter資安小組將原本必須手動處理的程式碼安全性管控作業流程,透過SADB系統的應用,已經改變為自動化的處理方式。

同時,Twitter過去程式碼安全性掌握度不足的狀況,也受益於SADB,能彙整來自各安全應用系統的分析報表而改善了,等於提升了Twitter主動了解程式碼安全性的能力,相較之下,先前他們可能要等到事情發生很久後才發現。

對於程式碼安全狀況的處理上,有了SADB之後,Twitter認為他們已經逐漸從必須緊急應變的救火隊工作模式,提升到更有策略地持續維運的模式。

跟Twitter學安全開發流程:提升程式碼安全該有的基本準則

1 將正確資訊交給正確的人處理。
2 盡快發現與修正程式碼當中的臭蟲。
3 不再犯同樣的錯誤。
4 能夠從多種角度去分析程式碼。
5 讓別人證明你的對錯。
6 幫助會自己尋求解法的人。
7 將愚蠢的工作自動化。
8 調配作法,提升適用性。

 

檢閱程式碼安全性有了分析工具的協助,手動處理仍少不了,因為這些工作須持續、反覆進行。Twitter現在建構了SADB的系統,將程式碼分析、內容安全政策落實、安全社群的動態,以及報表審視工作分配,全部整合,可將結果自動通知開發與資安人員,讓管理更為主動。

 

將所有討論Twitter網站安全性的使用者討論,結合在同一個網頁入口,相關安全性威脅的最新動態與建議,Twitter資安小組可以藉此即時掌握。

 

Brakeman是特別針對Ruby on Rails開發環境,所設計的程式碼靜態分析的工具軟體,Twitter將它納入SADB系統中。Brakeman所產生的分析結果會傳送到SADB,再由它將內容傳給開發人員。

 

Twitter在程式碼安全性分析上,也涵蓋了動態分析,他們稱之為Phantom Gang,可以查出是否包含混合式的網頁內容等安全性的問題,分析結果也是送至SADB,接著再傳送到JIRA這個專案管理平臺。

 

 


相關報導請參考「軟體開發安全實務大公開- 跟世界頂尖IT公司學安全開發!」

熱門新聞

Advertisement