2011-04-15 89 views
1

相關this問題,可以/我應該使用JAR簽名創建具有信息防篡改罐子嵌入式用戶數量的運行時執行允許使用的應用程序?我的想法是這樣的:使用JAR簽名作爲一種許可的關鍵

  1. 創建包含靜態字段持有用戶的權數
  2. 登錄Grails的戰爭lib文件夾中的jar和地點單個類的jar等類路徑
  3. (假設是這個正確嗎?)我可以安全地從我的grails應用程序中訪問簽名jar文件中的類的靜態字段,因爲它知道該jar沒有被篡改(否則會引發異常),並且不需要任何額外的工作。 「接受」簽名。

是我第3步假設是正確的?這是我嘗試做的一個好方法嗎?如果不是,標準做法是什麼?

謝謝!

+0

「我應該使用jar簽名來創建一個防篡改jar嗎?」沒有這樣的東西作爲'防篡改'的二進制文件。在這種情況下,如果你可以簽名,黑客也可以。 – 2011-04-15 01:16:25

回答

4

這只是「防篡改」如果用戶在一些堅持認爲簽名是存在和功能的環境中運行它。如果你把一個罐子交給一個可以在普通的JVM上運行的普通人(不是一個applet,而不是一個webstart),他們可以完全刪除簽名。如果你想試圖阻止這種情況發生,你必須編寫代碼來呼叫Class.getSigners,如果你沒有看到自己,就會爆炸。所以,他們需要啓動asm寫這個檢查存在,他們會很好去。

Java代碼簽名允許一些容器來驗證jar文件從源頭上保持完整性。它並沒有給你一個創建防篡改包的方法。

+0

明白了,感謝你在這裏的支持,因爲我大聲思考。 – 2011-04-15 01:53:01

2

簡單的JAR簽名將不起作用。 JAR簽名是關於客戶端信任你的JAR文件的。它不會阻止客戶端從JAR的內容(通過調整)創建新的JAR並將其作爲未簽名的JAR運行。

類在JAR可以嘗試檢查,他們是從合適的簽名JAR加載,但任何這樣的類可以進行調整以禁用檢查。所以對於一個堅定的攻擊者來說這是一個速度緩衝......但肯定不是一個不可行的解決方案。

執行關於用戶同時限制了正常的方式是實現一個單獨的許可證管理器/許可密鑰系統;例如的FlexLM。 (當然,這也可以通過調整你的課程來跳過許可證檢查而被擊敗。)

底線是任何在您的客戶端控制的機器上運行的代碼的許可證管理方案都可能被擊敗。

+0

謝謝@Stephen,這有助於我的理解 – 2011-04-15 01:54:08

+1

當我在Agilis [鏈接](http://www.agilis-sw.com)的許可管理工作時,我認爲我會考慮有關許可經理安全性的評論。我建議我們的客戶採取以下幾種方法來防止嘗試跳過許可證檢查的人員:使用基於異常的控制流程使他們難以找出執行許可證檢查的位置,執行許可證檢查在您的代碼和操作階段的幾個地方,需要定期進行許可證驗證等。通過一些想法和許多經驗,許可證系統可以變得安全。 – Dominic 2011-05-20 18:17:26

相關問題