臉書開源了自家用來偵測Instagram伺服器程式碼庫臭蟲的安全工具Pysa,Pysa是一個程式碼靜態分析工具,以Python類型檢查器Pyre為基礎,Pysa能分析資料流通過程式碼的方式,找出資料流隱藏的安全和隱私問題。在2020上半年,Instagram伺服器中有44%的安全性問題,是利用Pysa偵測到的。

臉書提到,去年他們釋出的靜態分析工具Zoncolan,已經用來分析了超過1億行程式碼,找出了大量的安全性問題,由於Zoncolan解決方案的成功,因此讓他們決定另外開發Python靜態分析器(Python Static Analyzer)Pysa,以提升自家Python程式碼的安全性。

Pysa可以用來偵測常見的安全性以及隱私問題,諸如檢查Python專案是否有使用臉書某些內部隱私框架,以保護用戶資料與防止洩漏,另外,Pysa還可以偵測常見的網頁應用程式的安全性問題,包括XSS和SQL注入攻擊漏洞,臉書主要將Pysa用於Instagram伺服器的程式碼庫,以確保Python應用程式的安全性。

用戶可以將Pysa應用於自己的Python程式碼中,以探索各種安全性問題。由於臉書在內部專案使用Django和Tornado等開源框架,因此當用戶的專案也有使用這些框架,便能以Pysa方便地找出專案的安全漏洞,而沒有使用Pysa覆蓋的框架也沒關係,用戶只要加入幾行設定,告訴Pysa伺服器程式的資料進入點,Pysa就可以開始偵測工作。

Pysa使用靜態分析演算法,追蹤程式中的資料流,使用者需要定義資料來源(Source)以及資料接收器(Sink),資料來源也就是指重要資料的來源處,而資料接收器處理資料,但不能是資料結束的地方。臉書提到,以安全的應用程式來說,最常見的資料來源是用戶控制資料進入應用程式的位置,像是Django的HttpRequest.GET字典(Dictionary),而接受器的種類更多,包括可以執行程式碼的API如eval,或是存取檔案系統的API都屬於接受器。

Pysa執行迭代分析並產生摘要,以確定哪個函式從來源回傳資料,又是哪個函式具有參數,能將資料送至資料接收器,當Pysa發現資料來源最後連接到的是資料接受器,則便會發出問題通知,警示使用者。

而Pysa也有一些限制,臉書提到,不可能建構出完美的靜態分析工具,Pysa的目的是要發現跟資料流相關的安全問題,但並非所有安全性和隱私問題,都可被歸類成為資料流的問題,像是Pysa沒辦法用來檢查與身份驗證相關的安全性問題,雖然使用者可以重新編寫程式碼,使其被描述為資料流問題,但這也說明了,Pysa無法偵測所有形式的安全問題。

另外,因為Python是一個動態語言,部分功能難以應用靜態分析發現,像是在沒有類型資訊的情況下,Pysa難以透過方法呼叫追蹤資料流,用戶需要花一些心力,擴展Pysa覆蓋的重要類型。

2020年上半年,Instagram伺服器程式碼中的安全性問題,有44%是利用Pysa發現的,Pysa偵測到330個安全性問題,其中有15%是重大問題,而有40%雖然也是安全性問題,但因為執行環境的緣故,使這些問題不那麼嚴重,臉書提到,因為他們怕遺漏任何漏洞可能性,因此傾向接受大量誤報,剩下的45%則屬於誤報。臉書還在持續改進Pysa,改善瀏覽問題追蹤,並且更好地找出Pysa誤報的問題。


Advertisement

更多 iThome相關內容