我有一個程序集會執行一些「魔術」計算,轉換和加密工作,這些工作只能從我的其他程序集中使用。請注意,這些程序集必須安裝在客戶機器上,因此惡意攻擊者可以本地訪問它們。 有沒有一種安全的方法來實現這一點?我想我已經看過幾乎所有的東西,從cas,強名稱簽名,windows srp,混淆,InternalToVisible屬性,ILMerge內部化等等。這些方法的問題在於,如果攻擊者本地訪問我的「魔法集會」,它們並不完全安全。 你有什麼建議嗎?微軟方面還有什麼要做的嗎? 在此先感謝。防止來自不需要的程序集的方法調用
回答
基本上沒有。如果本地機器上的代碼可以由一個進程運行,它可以由任何訪問程序集數據的進程運行。有很多種方法可以使困難但並非不可能。如果攻擊者有權訪問機器和時間,則無法阻止訪問。
有保護自己的一個方法:不具備本地機器上的代碼
- 提供遠程服務,並把它
- 上的硬件加密狗
- 使用硬件提供軟件加密(如可信平臺模塊)
特別針對SQL連接,您可以使用外部信任的連接 - 如Active Directory或Kerberos。大多數企業Sql Server將支持這一點。它將要求您的用戶'登錄'到您的應用程序,但.Net支持在RAM中保護憑據
感謝您的回答。讓我再解釋一下我的問題:我需要保護到數據庫的連接字符串免受惡意的眼睛攻擊。問題是我的程序集必須訪問這些信息才能連接到數據庫。我如何才能使這些信息只能通過我的程序集訪問?我目前的解決方案是使用另一個程序集來執行一些加密和解密,併爲此公開api。遠程服務不是一個選項。我還可以做些什麼?最大的問題是我必須將密鑰存儲在同一本地計算機上。 – Cando
您可以使用外部信任的連接,如Active Directory或Kerberos。大多數企業Sql Server將支持這一點。它將要求你的用戶'登錄'到你的應用程序,但是.Net支持在RAM中保護證書 –
CanYou可以嘗試投資callstack How can I find the method that called the current method?並限制對所需組件的調用。 我不是一個安全人員,但我thnik這個scenerio有點奇怪,解決您的問題可能不是你現在要求的東西。你有沒有定義你的客戶有什麼脆弱的數據?
- 1. @ModelAttribute方法來防止處理程序方法被調用
- 2. 來自不同程序集的方法調用
- 3. PHP - MVC - 更好的方法來防止調用控制器中不需要的方法?
- 4. 防止來自其他腳本的不需要的行爲
- 5. 如何防止來自HttpsURLConnection的CONNECT方法調用
- 6. 如何防止來自未知插件的方法調用
- 7. 防止相對需要來自特定文件夾中的模塊的調用
- 8. 不同的方法來防止職能
- 9. 如何防止方法調用方修改返回的集合?
- 10. 最簡單的方法來防止有人加載我的託管程序集?
- 11. 我們能找出方法調用來自哪個程序集?
- 12. 擴展方法需要「this」來調用?
- 13. 如何阻止來自FullTrust程序集的CAS安全需求
- 14. 正確的方法來防止子類實例化,而無需調用所需的初始化方法?
- 15. 如何防止willTerminate方法的調用?
- 16. 來自線程的Java方法調用
- 17. 是否需要SSL來防止竊聽?
- 18. onchange處理程序可以防止調用href方法
- 19. 不需要引用windows.forms程序集?
- 20. 需要爲Dos程序集調試器
- 21. 來自其他應用程序的調用方法
- 22. 最好的方法來防止更新
- 23. locationupdate方法調用不需要iPhone
- 24. 需要不斷調用方法
- 25. 爲什麼只需使用「=」(來自Hartl的教程)就需要賦值方法?
- 26. 最簡單的方法來防止腳本濫用網絡應用程序?
- 27. 的Python:調用來自類方法的不同類「的方法
- 28. 防止死鎖不使用的await調用異步方法時
- 29. 用什麼異常來防止多次調用方法?
- 30. 防止googlebot調用ajax方法
一旦攻擊者將源代碼添加到您的程序集中,您就無能爲力了。任何程序集都可以進行反彙編,窺視和調試,找出它的工作原理,並禁用任何已有的保護措施。如果你需要確保敏感的「魔術」東西,考慮在線移動它。這是你可以控制誰使用你的程序集,只有你有問題的代碼。 – Marko