移動應用的流行迎程度與日俱增,越來越多的交易開始通過移動設備完成,安全的重要性日益凸顯。在QCon New York 2016活動名為“現代化iOS應用的安全性”的演講中,Dan Guido詳細探討了有關iOS的安全問題。
Guido首先介紹了iOS應用程序中現已采用的安全機制。iOS的安全模型包含下延至基于硬件和具體設備的加密在內的多層面安全通信機制:
傳輸層安全:iOS可支持安全的網絡連接。 數據保護:iOS能夠為應用程序使用的幾乎所有文件提供強大的加密保護。 代碼簽名:Apple要求代碼的每個片段必須包含簽名,內存中的所有內容能夠以每4KB頁為一個“顆粒”追溯至開發者。 運行時進程安全:iOS會通過強大的沙箱技術隔離進程,一個進程無法訪問另一個進程的內存。 安全飛地(Secure Enclave):帶有指紋傳感器的新款iOS設備可將加密密鑰存儲在硬件中,這些密鑰是在每款設備生產過程中,獨立于操作系統專門為該設備生成的。雖然這些機制為應用提供了安全的運行環境,Guido進一步展示了一系列需要引起我們重視的威脅。
傳輸層安全技術并非所有網絡連接必須使用的,如果不進行相應的數據加密和證書檢查,信息很容易受到中間人攻擊。通過對網絡連接進行配置即可激活必要的安全機制,或者更簡單的做法可以直接在應用中嵌入諸如TrustKit這樣的庫,借此在后臺處理安全事宜。
數據保護機制非常強大,以至于最近在Apple和FBI之間造成了不小的紛爭。如果使用內置的硬件密鑰對數據進行加密,這些數據將無法在設備之外解密。因此敏感數據應始終使用密碼和設備ID進行加密。然而開發者依然需要盡量避免數據泄露。有很多應用和工具會嘗試從安全性不夠高的位置,例如剪貼板、應用偏好設置,以及Cookie中查找有用的數據。另外敏感數據應盡量維持最小化痕跡,開發者應當避免備份或同步此類數據,應當從背景屏幕截圖和日志中排除敏感數據,鍵盤緩存也需要及時停用。
根據Guido的介紹,遵守相關準則可進一步提高應用安全性,但還有一個問題是開發者不容忽視的:越獄。設備一旦越獄,無論用戶主動越獄或在不知情的情況下“被”越獄,上述所有安全機制都會失去作用。如果開發者需要更高的安全性,應當確保設備未被越獄:
越獄檢測 – 開發者可以檢測越獄操作留下的痕跡,例如某些特殊的文件和進程。 反調試保護 – 開發者需要確保自己的應用程序不能在調試模式下運行,因為任何越獄檢測操作在調試模式下都是可見的。 反逆向 – 開發者需要確保自己的代碼無法通過再造工程被利用。通常可通過人為增加代碼體積或復雜性的方式實現。最后Guido通過一些事實暗示大家,LLVM只能生成Bitcode代碼而非機器代碼。Apple使用這種技術的目的在于改進或優化為不同平臺提供代碼的方法,開發者可以借助這一概念增添IDE中已經具備的自動化的安全加固機制。但這一過程中也可以使用其他一些工具,例如MAST。
請注意,Qcon大會結束后一周內,大部分演講將免費發布至InfoQ。
查看英文原文:Dan Guido: Modern iOS Application Security