隨著移動商業從時髦的口號逐漸變成現實,對於移動用戶和無線應用程序開發人員這類人而言,事務安全性正在成為一個重要方面。網絡整體安全性的強度取決於其最薄弱環節,而在移動商業網絡中,最薄弱環節是客戶機端設備。無線信號的可截取本質以及大多數手持設備有限的內存和計算能力,使無線系統極易受到數據竊賊的攻擊。
但客戶機並非移動商業網絡上的唯一薄弱環節。隨著 Web 服務技術成為因特網領域中日益重要的組件,無線網絡將面臨一些全新的弱點。Web 服務使用開放通信協議並在組織的防火牆之外運行,當在企業中部署這些系統時,這將會造成非常實際的安全性威脅。
解決方案正在形成,盡管尚需時日。尤其是,Web 服務本身可以用來提供安全性解決方案。新的 Web 服務規范計劃標准化和集成使用 XML 消息傳遞的先進的安全性解決方案(如 Kerberos 認證和授權、數字證書、數字簽名和公/私鑰加密)。
可互操作的 Web 服務可以將那些安全性解決方案用作產品和服務供給商的一類實用程序。但即使正在出現這些有希望的解決方案,對於您如何有效地保護自己的無線應用程序及運行應用程序的網絡而言,開發平台的選擇將始終起到舉足輕重的作用。
在本文中,我們將重點討論在 Java 2 Platform,Micro Edition(J2ME)上進行開發的優缺點。我們首先對 J2ME 的基本概念和優點作簡單概述。接下來,我們將深入研究基於 J2ME 的應用程序相對於其它無線備選應用程序(如 WAP 和本機應用程序)的潛在安全性優點。
我們將說明當前在 J2ME 平台上可用的應用程序安全性模型,以及該平台對於一些可預料未來趨勢的適用性。作為討論的一部分,我們將提出一些增強 J2ME 應用程序的網絡和數據安全性的可能方法。在結束部分,我們將總結使用 J2ME 技術開發用於最小型無線設備的高級安全應用程序的可行性。在整篇文章中,我們將主要集中討論當前的和即將出台的(2.0)MIDP 規范,假定 MIDP 是最廣泛使用的 J2ME 概要文件。
因為 Web 服務承諾了在移動商業和無線安全性的發展中扮演重要角色,所以在整篇文章中,我們都將討論包含 Web 服務的技術。我們將花一些時間研究 Web 服務對您的 J2ME 開發策略的影響。
J2ME 基礎知識 將 Java 平台用於無線設備開發的最大優點是能夠生產可在多種平台上運行的可移植代碼。但即使有這個優點,各種無線設備在內存、處理能力、電池壽命、顯示屏大小和網絡帶寬等方面的能力差異還是相當大的。不可能將運行在成熟的機頂盒上的應用程序的全部功能都移植到移動電話上。即使對於類似的設備(如 PDA 和高級智能電話),在兩者間建立可移植性也經常使一種設備超負荷而另一種設備利用不充分。只能在多組類似設備之間實現真正的可移植性。因為熟悉到一種規格並不能適合所有設備,所以小心地設計 J2ME 以在可移植性和可用性之間取得平衡。
什麼是 Web 服務? Web 服務是具有基於因特網接口的自包含的、自我描述的、動態發現的應用程序。Web 服務由遠程方法調用驅動,這些調用是用標准的、基於 XML 的消息和編碼封裝的,如簡單對象訪問協議(Simple Object Access Protocol (SOAP))。Web 服務用 WSDL(Web 服務定義語言)定義了它們的編程接口並通過 UDDI(通用描述、發現和集成)注冊中心來發布它們本身。Web 服務在開放的因特網上通過 HTTP 協議與客戶機和其它 Web 服務通信。
這種“HTTP 上的 XML”模型致力於通過在服務接口之間添加一個開放、健壯和輕易被人理解的抽象層來消除它們之間的耦合。Web 服務是松散耦合、與平台無關、可重用的分布式軟件組件。它們成功的要害在於開放的標准和服務供給商之間的互操作性。
J2ME 分成幾種不同的配置和概要文件。配置包含用於一系列設備的 Java 語言核心庫。當前有兩種配置:連接的設備配置(Connected Device Configuration (CDC))被設計用於相對較大和功能強大的設備(如高端 PDA、機頂盒與網絡設備);有限連接設備配置(Connected Limited Device Configuration (CLDC))被設計用於小型的資源有限的設備(如移動電話和低端 PDA)。CDC 的安全性、計算能力和 I/O 功能比 CLDC 高級得多。
每個配置上面都有幾個概要文件。概要文件定義了更高級的、特定於設備的 API 庫,包括 GUI、聯網和持久存儲 API。每個概要文件有自己的運行時環境並適合於一系列類似的設備。為一個特定概要文件編寫的 Java 應用程序可以在由該概要文件支持的所有硬件/OS 平台之間進行移植。移動信息設備概要文件(Mobile Information Device Profile (MIDP))和 PDA 概要文件(PDA Profile)是 CLDC 的兩個比較重要的概要文件。基礎概要文件(Foundation Profile)和個人概要文件(Personal Profile)是 CDC 的兩個重要的概要文件。
個人概要文件構建在基礎概要文件之上,以便在高端 PDA 上運行。個人概要文件配置了完全兼容 Java 2 的虛擬機實現。個人概要文件應用程序可以利用所有基於 Java 2 標准版(J2SE)域的安全性治理器,以及大量可用於 J2SE 應用程序的密碼術和安全性庫。總之,個人概要文件提供了成熟的安全性解決方案,它們類似於用於 J2SE 應用程序的那些解決方案。
實現安全 MIDP 應用程序要困難得多,因為 CLDC 配置的數學計算能力有限並且許多底層設備的處理能力不足。但是,MIDP 設備是使用最廣泛的無線設備,因此在那些設備上啟用安全應用程序很重要。在本文中,我們主要集中討論 MIDP 應用程序的安全性挑戰以及當前可用的或處於開發中的解決方案。
J2ME vs. WAP 我們的經驗是,無論是在特性還是安全性方面,本機應用程序和 J2ME 應用程序都比那些以無線應用程序協議(Wireless Application Protocol (WAP))構建的應用程序提供多得多的功能。但 WAP 是一種瘦客戶機開發協議,J2ME 是一種專用於智能應用程序的開發平台。無論應用程序是用 J2ME 還是本機技術構建的,智能應用程序都比 WAP 應用程序多提供了下列安全性優點:
由於中間沒有 WAP 網關,智能應用程序能夠提供從後端到無線設備的可伸縮的端到端安全性。當後端發展成消息驅動的 Web 服務框架時,這一點就尤其重要。
智能應用程序能夠在本地存儲和處理數據,因此減少了網絡流量。這不僅節省了寶貴的無線帶寬和減少了延遲時間,而且降低了要害信息被截取或阻斷(例如,通過拒絕服務攻擊)的可能性。
智能應用程序有效地利用了設備處理能力。胖客戶機可以根據內容建立全面分級的安全性策略,而不是無論是否需要都以相同的密鑰強度加密所有內容。
因為智能應用程序比 WAP 頁面能干得多,所以,運行智能應用程序確實增加了軟件崩潰和/或病毒攻擊的風險。接下來,我們將討論,與那些設備本機應用程序相比,J2ME 應用程序有哪些處理和安全性優點。
J2ME vs. 本機平台 正如我們已經提到的,與本機平台相比,Java 平台的主要優點是它答應我們編寫可移植的應用程序。Java 平台的可移植性來自其執行模型。具體地說,它是由於在運行時使用 JVM 來將 Java 字節碼處理成機器碼,因而在硬件之上提供了一個兼容性層。Java 平台的執行模型還引入了一些在設備本機應用程序中缺乏的重要安全性優點。這些優點如下:
JVM 驗證類裝入器中所有的類並確保應用程序不會執行任何危險操作。因為對於 MIDP VM 而言,運行時類驗證在計算上代價很高,所以 MIDP 有非凡的兩步字節碼驗證模式。我們將在後面一節中討論這種方案。
JVM 有用來防止運行時應用程序錯誤的監控機制。垃圾收集器是一個好示例。JVM 能夠在運行時自動清理應用程序內存堆。這有助於避免發生內存洩漏,內存洩漏是導致本機應用程序崩潰的主要原因。
JVM 可以提供用於應用程序的安全性治理器或沙箱。從 Web 上偶然下載的病毒和其它敵意代碼可能造成嚴重的安全性風險。在 Java 平台上,可以對整個應用程序(例如 JAR 文件)進行數字簽名。
JVM 安全性治理器根據簽名者的信任級別,向簽名的應用程序授予訪問特定 API(域)的特權。與 WAP 和本機應用程序相比,智能的、注重可用性的設計和 Java 平台內置的執行模式賦予了 J2ME 應用程序顯著的性能和安全性優勢。但 J2ME 並不完美。在後面的一節中,我們將研究 J2ME 安全性框架的優缺點,尤其是當它應用於 MIDP 應用程序時。我們將首先研究應用程序安全性,然後繼續討論網絡和數據安全性。
字節碼驗證 正如我們已經討論的,JVM 提供了防止惡意代碼進入企業系統的服務。字節碼驗證過程保證了應用程序不能訪問內存空間或使用其域外的資源。字節碼驗證還防止應用程序重載 Java 語言核心庫,這是一種可以用來繞過其它應用程序級安全性措施的方法。
但是,由於這種操作高昂的計算開銷,MIDP VM 不在運行時執行完整的字節碼驗證。相反,應用程序開發人員必須在把應用程序部署到移動設備中之前,在開發平台或登台區域上預先驗證類。預驗證過程優化執行流,創建應用程序中包含指令目錄的堆棧映射(stackmap),然後將堆棧映射添加到經預驗證的類文件。在運行時,MIDP VM 迅速地對字節碼進行線性掃描,將每個有效的指令與合適的堆棧映射項相匹配。
因為 MIDP 缺少完整的安全性模型,所以在 MIDP 中禁用了一些 J2SE 特性以使潛在的安全性風險降到最低。例如,為了防止對核心類的非法重載,MIDP VM 不答應用戶定義的類裝入器。MIDP 也不支持 Java 本機接口(Java Native Interface (JNI))或反射(reflection)。即使適當地采取了這些安全性措施,也並非所有通過字節碼驗證的代碼都被答應運行。