2010-09-22 27 views
4

在客戶端 - 服務器應用程序中,服務器如何知道請求來自真正的應用程序,而不是來自其被篡改的副本? 我還沒有開發客戶端和服務器應用程序。解決方案可能是純插座,wcf,IIS託管或任何其他。如何確保.Net應用程序是真的?

+0

「篡改」是什麼意思? – NullUserException 2010-09-22 22:41:02

+0

我的意思是假裝是一個真正的應用程序。 – Eduardo 2010-09-23 00:56:21

+0

*然後它是做什麼*?到目前爲止,您還沒有對*資源*提出*威脅*。那麼,如果第三方客戶端使用你的服務器呢? *誰受傷?*請告訴我們關於這種情況,因爲那是你應該實際分析的情況。在進行安全分析時,始終以*威脅*開始,而不是*漏洞*開始。也就是說,不要從「這個窗口被解鎖」開始,而是從「有人可能試圖竊取我的電視」開始。如果您從漏洞入手,那麼您可能會錯過一個漏洞,或者您可能會減輕錯誤的威脅。 – 2010-09-23 14:07:32

回答

7

真的沒有辦法。任何你可能要求提供的應用程序,一個流氓應用程序可能會欺騙。最終的答案是你不應該相信任何客戶端應用程序。您可以信任用戶提供的身份驗證,但客戶端本身100%不可信。

爲了說明這一點,我可以通過代理服務器運行所有流量並隨意注入/刪除消息。那麼你有一個合法的客戶與虛假消息。

現在,如果你正在談論一個你打算在客戶端使用的庫,確保它沒有被篡改,那就是強大的命名組件。但那不會幫助你通過電線。

3

您無法「保證」您使用的是真實客戶端。電腦裏確實沒有「祕密」。只有更難以發現的事實。有些事情可以使您的客戶更有可能成爲真正的交易:

  • 身份驗證。數字簽名,內部哈希以及用戶提供的數據都可能使您更傾向於與您交談的內容。但是,程序可能會被使用您的客戶端程序集作爲傀儡的惡意軟件劫持。即使您的代碼沒有可公開訪問的鉤子,但獲取使用SkipVerification運行權限的惡意軟件或黑客可以反映到您的程序集並調用私有成員。

  • 安全監控。您創建的客戶端可以定期詢問Windows當前誰的代碼中有內存掛鉤。如果有人正在傾聽客戶端或使用它,客戶端無法識別或服務器已識別爲敵對客戶端,則客戶端可能會崩潰並刻錄,並且服務器知道客戶端已被入侵。這通常很難解決,但有關安全過程的知識可以通過快速工作以避免安全「巡邏」,或者通過劫持客戶端到Windows的鉤子來詢問可疑活動來幫助妥協。

  • 行爲監控。如果客戶端開始發送無意義的消息,或者每隔一段時間都不會發送「仍在此處,仍然健全」的消息,則服務器可以檢測到客戶端出現問題並對待它如可疑,要麼完全忽略它,要麼限制敏感數據。同樣,知道客戶端應該發送什麼,或者捎帶客戶端,可以讓攻擊者欺騙預期的行爲。

2

許多公司通過在每端部署數字證書(稱爲雙向或雙向身份驗證)確保客戶端和服務器之間存在信任通道。實際上不可能窺探或欺騙已啓用相互身份驗證的應用程序之間的任何通信。

當然,這隻能保護通道,而不能保護客戶端應用程序本身。確保客戶端完全防篡改的唯一方法是實施保護正在運行的應用程序(即ATM和POS機)的物理安全控制。

1

我同意Hounshell的評論,因爲網上的所有數據都應該視爲不可信。然而,您可以採取一些步驟來增加所需攻擊的複雜性並防止客戶輕易被篡改,例如建議使用強名稱。 Authenticode證書還可以防止代碼被篡改,並確保來自特定源的軟件是真實的。

您也可以在客戶端和服務器之間實現身份驗證,憑據身份驗證僅基於用戶已知的數據(未寫入代碼)。這規避了篡改客戶端的有效性,因爲攻擊者如果沒有必要的憑據來驗證服務器,就無法真正實現更多功能。爲了完成攻擊,他們需要在傳輸過程中攔截數據,或者在用戶機器上安裝某些東西(無論如何它都是遊戲)。

爲保護傳輸中的數據免受數據竊聽(中間人攻擊)攻擊,您需要對數據進行加密。這可以通過客戶端和服務器之間的SSL通信來實現,只要執行一些基本檢查即可。客戶端應確保證書由受信任的根CA簽署,尚未過期,並針對與所調用的URL相匹配的URL發佈。

+4

您必須使用正確的安全技術來完成正確的工作。強名稱絕對不是用於驗證客戶端**,所以**不要將它們用於**。強名稱旨在幫助*用戶*對安裝在他們計算機上的應用程序進行信任決策*,而不是幫助*服務器*對*客戶端*做出信任決定。使用安全技術的目的不是它的目的,比根本不使用安全技術更糟糕;使用它會產生錯誤的安全感,這比安全性較弱的正確感更糟。 – 2010-09-22 23:37:28

+0

完全同意 - 強名稱的建議是爲了防止篡改客戶端,可能會對服務器造成攻擊。它絕不會使服務器與任何更可信的服務器通信,但它是提高安全性並提高攻擊所需工作量的另一環節。 – TheCodeKing 2010-09-22 23:44:21

1

您無法遠程驗證應用程序。

您可以對用戶進行身份驗證,並且可以防止中間人攻擊。但是,如果您認爲已通過身份驗證的用戶本身是敵對的,並且可能會篡改應用程序,那麼就無法阻止這種情況的發生。

最好的辦法是驗證所有輸入,爲服務器上的操作保留關鍵部分,記錄每個經過驗證的用戶的所有活動,並儘可能限制用戶可以通過系統或通過系統造成的損害。

相關問題