AppEngine安全測試思路

GaRY | 2012-04-06 13:21

安全測試內容主要是檢查是否可以未授權進行資源訪問、不同應用間的相互影響、應用本身對云平臺的安全影響。

1、系統架構

第一步了解appengine的自身架構,了解其各個請求處理流、數據流的過程,尤其關注其中的每個邏輯判斷點和實現方式,根據這些特點,了解分析其基礎架構和系統模型上的固有弱點。(例如路由用戶請求是根據HOST,而HOST本身依賴于用戶提交,這里如果使用太過強大的語義分析做解析,就可能存在問題。例如引入lua、yaml等的語言注射)

第二步是了解其用戶代碼執行環境的沙盒實現方式,是否做到了隔離(fastcgi就是一個理論上沒有做到不同用戶代碼運行在不同進程空間的好例子。可大部分appengine都是這么實現的)?控制點在哪里做的(語言編譯器級別?虛擬機級別?語言庫級別?控制點方位的不同,就可以結合下文中的語言特性進行繞過)?

2、資源訪問

資源訪問根據appengine提供的服務不同而不同,通常有以下幾類:

文件(一般情況下,本程序目錄可讀、tmp可讀寫、其他目錄不允許讀寫)

命令操作(一般不允許)

數據庫(一般只允許本應用訪問本應用的,不可跨應用訪問)

網絡資源(一般需要通過代理訪問外界,不允許訪問內部網絡)

API接口(要求強認證,通常OAuth方式)

CPU、內存(這些計算資源主要是用來做統計,并不是做限制,但要有預防措施可以及時防止某應用突發高占用影響其他應用。)

針對這幾類資源訪問,需要根據策略結合下文所說的語言特性一一復查其是否能夠真正做到統一的隔離和最靠近底層原子級別的限制。有可能還檢查一下是否有獨占資源或搶占資源的問題。

3、語言特性

AppEngine通常支持的不只是一種語言。每種語言根據其本身原理,有著不同的語言特性。我們這里主要關注的語言特性主要是包括一些動態代碼執行或加載(eval、imp.load_source)、是否能通過一些特殊操作加載未經授權的代碼(內存直接注入)、一些隱性的資源流訪問(php的協議支持、部分第三方模塊的資源訪問、fdopen、xml中的資源文件讀取)、隱性的進程線程創建(命令執行、調用外界程序)、隱性的cpu、內存消耗等。很多appengine對一些資源訪問的控制手段也是根據語言自身提供的一些特性做出的,因此需要對這每一個特性的可靠性進行檢查。(例如PHP disable_function,Java的Security Manager)

4、初始環境

appengine本身是一個沙盒環境,因此會在這個環境中設置一些初始化和為了方便提供的環境設置。而沙盒本身很可能對這些環境就無條件信任并帶入關鍵邏輯了。因此就需要對這一塊的檢查和可修改性進行檢查處理。

另外需要關注一點就是這些關鍵信息是否可以輕易的被泄露給除開發人員之外的第三方或者最終用戶。如果泄露,可能對開發者本身造成影響。

公共庫(是否可讀寫?讀可能泄露一些敏感信息和內部實現,寫可能導致惡意代碼寫入到其他應用中執行。)

環境變量(是否可讀寫?如果可覆蓋,是否能夠通過覆蓋某些關鍵變量突破沙河限制?)

關鍵變量傳遞方式(是否可修改可偷取?)

5、業務相關

對于建立在其中的站點,是否有內容上涉及黃、賭、毒的地方,是否頁面中存在掛馬、黑鏈、釣魚網站等等。這些不在本文的考慮范圍內,暫略。