在傳統的應用開發中
開發人員常常為了將為一種機器平台開發的程序移植到其它的平台上而感到頭痛
Java的出現大大減輕了開發人員的這種負擔
它的
一次編成
到處運行(Write Once
Run Anywhere)
的功能使開發人員能夠開發出跨系統跨平台運行的應用程序
現在各種Java應用中都大量使用了Java applet
它是一種特殊的Java小程序
這些applet能夠給人們帶來更為活潑更具吸引力的Web頁面
各種具有Java功能的浏覽器
如Netscape Navigator
Microsoft Internet Explorer(MSIE)等
會自動下載並執行內嵌在Web頁面中的 Java applet
然而
Applet在給人們帶來好處的同時
也帶來了潛在的安全隱患
它使applet的設計者有機會入侵他人的機器
實事求是的講
這個世界上沒有一個電腦系統是百分之百安全的
但由於現在Internet和Java在全球應用得越來越普及
因此人們在浏覽Web頁面的同時也會同時下載大量的Java applet
就使得Web用戶的機器面臨的安全威脅比以往任何時候都要大
上述問題到目前為止還沒有一種完全的解決方法
好在現在Java 的設計者已注意到了這一點
並盡其所能加以限制
例如
在 JDK
版中就采用逐漸流行的數字簽名技術以減少applet可能造成的危險
盡管如此
目前Web用戶的機器還是很容易受到applet的攻擊
而且現在用戶能夠采取的對策並不多
在Java applet 四處充斥的今天
人們使用具有 Java功能的浏覽程序之時
對於浏覽的網頁的地點就不能不多加留意
Web頁面中的執行文件到底會帶來什麼樣的潛在危險呢?大致上可分為四類∶更改系統
侵犯隱私權
非法入侵攫取資源
與使用者敵對
惡意之
∶更改系統
像 Java 這樣功能強大的程序語言
不管是在電腦的硬盤上還是在文件系統中
都具有修改數據的能力
Java 中包含有許多預先定義好的類(class)
其中的方法(method) 可以刪除或修改文件
更改使用中的磁盤內容
殺掉執行程序或其執行線程 (thread)
這些功能很有可能會被applet的設計者濫用
更改系統可能是所有潛在危險中最嚴重的一種
Java 的設計者對於限制此類危險已花費了很大的心思
相反的
ActiveX 則對其引發的可能結果尚未加以限制
所謂的更改系統包括入侵系統
在不安全的使用 Java時
可能會被applet發現攻擊的路徑
由於黑客 (hacker) 們總是想方設法利用各種手段入侵他人的電腦系統 ( 取得進入系統與使用權限 )
而我們用戶能做的不過是小心使用Java而已
因此保證Java運行環境的安全最主要的還是Java設計者的責任
Java設計得必須保證在用戶下載applet時沒有其他進入系統的安全漏洞產生
由於Java 可在多種操作平台上運行
因此惡意的applet只要在其中一種操作系統(例如Solaris) 上攻擊成功
在攻擊其它作業系統 ( 例如 Windows NT) 時也能得逞
因此Java在帶來應用程序跨平台執行的同時
也帶來了惡意applet的這種跨平台攻擊的可能性
利用 Java 來入侵電腦系統並非不可能的事情
曾發現許多目前已知的 Java安全漏洞的美國普林斯頓大學安全Internet編程小組(Safe Internet Programming Team)
就在實驗室中展示了這種攻擊型的 applet
雖然
目前針對已發現的一些安全漏洞已經提供了一些
補丁(patch)
程序
但其它更為復雜的攻擊仍可能潛藏著而未被人們發現
在如今各種重要的電腦系統中
這種更改系統型的 applet 攻擊對數據造成的破壞是非常嚴重的
如它可能會破壞一些表面上看來很安全的數據庫中的財務記錄
導致公司財務損失而破產
或者是竄改醫院中病人的病情數據
導致醫療不當
甚至因此導致病人死亡
所以在目前未能打到解決方案的情況下
對Java applet的使用要非常小心
不要讓重要的數據系統暴露在這種新型的攻擊危險中
Internet這種全球最開放的系統幾乎可以稱得上是電腦黑客們的樂園
這從Internet上層出不窮的入侵事件便不難看出
因此如何使 Java 不致於成為為他們的破壞工具
不管是對開發員來講還是對用戶來講都是一個重要的課題
惡意之
∶侵犯隱私權
第二種類型的攻擊
就是暴露他人電腦主機的秘密數據
例如
在 Unix 系統中如能訪問/etc/passwd( 記錄系統中所有使用者的姓名與密碼 )這個文件
就有可能入侵整個系統
另外
電腦系統也可能會造成一些敏感性資料的洩露
例如必術不正的公司可以利用商業間諜偷取對手公司的業務計劃
個人用戶對於其私人的電子郵件或財務記錄是否可以公開也要慎重考慮
任何可藉由電子郵件傳送或經由網絡傳遞的秘密資料
都有可能受到入侵
利用 Java 的功能
會產生雙重偽造的可能性
典型的電子郵件偽造(mail
forging )的情況會更加嚴重
Applet 先使用系統送出假信息
以欺騙真的郵件
最後
目前許多系統中盛行的聲音功能
也可能會導致竊聽
如果攻擊者能掌握系統的麥克風
就有可能進行竊聽的行為
更隱秘的竊聽是訪問監視進程表(process table )和相關的文件
網頁式的竊聽
還可能包括追蹤某一特定使用者所經過的網路連結
Java 對於某些形式的網絡攻擊可以成功的進行防衛
例如
文件系統的輸入輸出操作就受到嚴格的控制
不過
這又與 applet 常需要一條通道以便傳回數據的要求相違背
因為applet 總是必須與原來的服務器一直相連
電子郵件的偽造防衛起來則比較困難
由於缺乏對客戶端連接接口的限制功能
電子郵件的偽造不太可能杜絕
惡意之
∶拒絕系統服務
拒絕系統服務式的攻擊
會讓系統資源無法正常使用
通常的做法是利用一個執行程序吸取超過正常系統所分配的資源
甚至是霸占整個系統
這類攻擊還可分為幾個小的類型
例如填滿文件系統或用光所有可用的文件資源
調用所有系統的內存
產生數以千計的窗口
以便有效的阻止屏幕輸出或找開新的窗口
產生許多高優先權的執行線程
以耗光 CPU的執行周期
雖然這一類危險的破壞作用也很大
但它們似乎並未引起Java 的設計者的重視
人們對防止這種攻擊的重要性還有些爭議
在大部分情況下
拒絕系統服務式的攻擊
比較接近與使用者敵對的攻擊
因為從此類攻擊中使系統恢復正常一般比較容易
只需要重新啟動系統即可
不過
即使如此
在一些重要的系統中也可能會造成嚴重的後果
人們當然誰也不希望在與重要的系統連結時重新啟動系統吧
例如
在處理股票交易的機器上蓄意拒絕系統服務
其造成的損失將難以想像的
拒絕系統服務式的攻擊是 Java 常見的安全問題之一
現在Internet上有一個專門介紹此類問題的站點
這就是Mark La Due的Hostile Applet主頁(~maladue/) 中
不興趣的讀者不妨一看
在這裡面介紹了許多實際的例子
要制造這種類型的攻擊實際上並不難
不過由於目前 Java 的安全模型並沒有提供很好的解決辦法
因此對它的防范卻比較困難
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25598.html