2014-03-13 37 views
0

我有一個程序集會執行一些「魔術」計算,轉換和加密工作,這些工作只能從我的其他程序集中使用。請注意,這些程序集必須安裝在客戶機器上,因此惡意攻擊者可以本地訪問它們。 有沒有一種安全的方法來實現這一點?我想我已經看過幾乎所有的東西,從cas,強名稱簽名,windows srp,混淆,InternalToVisible屬性,ILMerge內部化等等。這些方法的問題在於,如果攻擊者本地訪問我的「魔法集會」,它們並不完全安全。 你有什麼建議嗎?微軟方面還有什麼要做的嗎? 在此先感謝。防止來自不需要的程序集的方法調用

+3

一旦攻擊者將源代碼添加到您的程序集中,您就無能爲力了。任何程序集都可以進行反彙編,窺視和調試,找出它的工作原理,並禁用任何已有的保護措施。如果你需要確保敏感的「魔術」東西,考慮在線移動它。這是你可以控制誰使用你的程序集,只有你有問題的代碼。 – Marko

回答

3

基本上沒有。如果本地機器上的代碼可以由一個進程運行,它可以由任何訪問程序集數據的進程運行。有很多種方法可以使困難但並非不可能。如果攻擊者有權訪問機器和時間,則無法阻止訪問。

有保護自己的一個方法:不具備本地機器上的代碼

  1. 提供遠程服務,並把它
  2. 上的硬件加密狗
  3. 使用硬件提供軟件加密(如可信平臺模塊)

特別針對SQL連接,您可以使用外部信任的連接 - 如Active Directory或Kerberos。大多數企業Sql Server將支持這一點。它將要求您的用戶'登錄'到您的應用程序,但.Net支持在RAM中保護憑據

+0

感謝您的回答。讓我再解釋一下我的問題:我需要保護到數據庫的連接字符串免受惡意的眼睛攻擊。問題是我的程序集必須訪問這些信息才能連接到數據庫。我如何才能使這些信息只能通過我的程序集訪問?我目前的解決方案是使用另一個程序集來執行一些加密和解密,併爲此公開api。遠程服務不是一個選項。我還可以做些什麼?最大的問題是我必須將密鑰存儲在同一本地計算機上。 – Cando

+0

您可以使用外部信任的連接,如Active Directory或Kerberos。大多數企業Sql Server將支持這一點。它將要求你的用戶'登錄'到你的應用程序,但是.Net支持在RAM中保護證書 –

1

CanYou可以嘗試投資callstack How can I find the method that called the current method?並限制對所需組件的調用。 我不是一個安全人員,但我thnik這個scenerio有點奇怪,解決您的問題可能不是你現在要求的東西。你有沒有定義你的客戶有什麼脆弱的數據?

+0

確定的攻擊者可以操縱該調用堆棧以使其看起來是通過該檢查的東西,或者它可以簡單地從編譯的代碼中移除給定的檢查。 – Servy

+0

@wiero謝謝你的回答。看到我對第一個答案的評論。 – Cando

相關問題