2010-08-24 168 views
0

在web應用程序的情況下,我可以理解客戶端認證和用戶認證之間沒有區別;忽略XSS和其他漏洞,Web客戶端由服務器/ servlet生成。客戶端(java獨立客戶端)應用程序認證和用戶認證之間的區別

但假設您有一個Java客戶端應用程序與Java服務器應用程序交談;服務器有一個與之關聯的證書,以便客戶端可以驗證並驗證服務器是否可信。現在客戶端還有一個證書(客戶端證書),以便服務器可以驗證這是否是可信的客戶端;一旦這種相互認證完成,用戶證書(用戶證書)就可以傳遞給服務器,而不是向用戶提供用戶名/密碼對話框。

問題是在這種情況下是否有任何優勢/使用(客戶證書);或者僅憑用戶證書就足以信任客戶端?

我知道這是一個明顯的問題/但不能創建一個胭脂客戶端應用程序?那麼客戶端證書可以抵禦這種情況。

回答

1

任何時候當你有一個客戶端服務器應用程序時,服務器需要假定客戶端已被攻陷。當身份驗證發生時(用戶名/密碼,證書等等......無關緊要),服務器應授予用戶一定的權限以使用服務器的功能。每當向服務器發出請求時,服務器都需要檢查經過身份驗證的用戶是否有權執行該操作。

信任客戶端只進行授權請求會讓您自己面臨攻擊。如果您檢查服務器上的權限並清理輸入,那麼您不必擔心用戶是否使用受信任的客戶端,因爲即使是不受信任的客戶端也不能使用相同的身份驗證憑據執行更多操作。

無論您使用的是Web客戶端還是獨立客戶端,這些原則都適用。即使在Web應用程序中,我也可以編寫新的客戶端和POST數據,使用RESTful服務,或者通常與Web服務器交談,並完全繞過您向我呈現的Web ui。

+0

「即使是不可信的客戶端也不能做比可信的客戶端更多的可信任的客戶端」我假設服務器當前沒有機制來判斷客戶端應用程序是否受到攻擊;假設不可信的客戶端通過服務器獲取敏感數據一個可信的用戶會話。由於方法簽名相同且參數清理,服務器將發送請求的數據;沒有什麼能夠防止欺詐應用程序濫用這些數據。我能想到的一件事是在客戶端m/c中使用完整性檢查器工具看看應用程序是否受到損害? – 2010-08-25 03:47:46

+0

在網上做了一些搜索,發現這是一種常見的攻擊 - 排除 - http://www.ucl.ac.uk/cert/nix_intrusion.pdf 這個最簡單和經典的例子是取代/斌/登錄。 1.獲取Unix版本的/ bin/login的源代碼副本2.編輯源代碼到/ bin/login以包含一個「祕密」密碼,如果您輸入該密碼將始終允許您以root用戶身份登錄「後門」密碼。這個後門程序也不會在系統日誌文件中創建一個條目。編譯源代碼。 ..... – 2010-08-25 04:09:39

+0

問題是您可以基於他們提供的憑據來信任用戶,但除非您處於封閉環境(真正鎖定企業環境),否則您不能信任客戶端應用程序。客戶端的完整性檢查程序存在的問題是受損的應用程序會僞造完整性檢查。無論有多複雜的完整性檢查,給予足夠的時間,一個人都可以繞過它。 – rancidfishbreath 2010-08-25 14:32:27

0

如果某些攻擊者以某種方式更改客戶端應用程序,它可能會使用有效的用戶證書來訪問服務器。 (我們假設服務器檢查客戶端是否可以做這個或那個操作,但是爲了確保客戶端沒有被一個假客戶端釣魚)。服務器應該驗證客戶端應用程序,而不是爲了服務器的緣故。然後服務器可以宣佈client-1所做的所有操作都是通過一些經過驗證的客戶端應用程序(代理程序)製作的,因此它們是用戶真正想要的。

+0

我假設您告訴我們應該同時擁有客戶端證書和用戶證書;但服務器可以確保客戶端沒有受到危害..請在下面的帖子中看到我的評論 - 謝謝 – 2010-08-25 03:52:07

+0

是的,我說的是。這是一個很好的觀點,也許服務器不知道客戶端應用程序是否受到攻擊。我不知道你指的是什麼意見......我猜@rancidfishbreath上的評論。 – helios 2010-08-25 06:56:51

+0

我所指的意見是那些rancidfishbreath答案 – 2010-08-25 08:16:36

0

客戶端應用程序的證書(以及它的私鑰)可以輕鬆地從應用程序中剝離出來,並且可以創建流氓應用程序。解決此問題的方法是(a)使用用戶證書,並在需要時讓用戶提供證書,並(b)使用USB加密標籤存儲客戶端證書及其私鑰。 Cryptotokens不會讓私鑰退出,因此攻擊者無法複製它(儘管他可以在應用程序中使用該令牌,如果他有物理訪問令牌的權限)。

+0

你真的需要一個證書/私鑰來創建一個強制應用程序。奇怪的是,您可以編輯客戶端二進制文件來添加一些惡意的構造? – 2010-08-25 03:50:04

+0

然後您需要識別可能的威脅。您是否試圖在服務器上識別您的客戶端應用程序(確保它是您的客戶端調用服務器),或者您正在嘗試確保您的應用程序未被更改(再次出於什麼目的)或...?根據可能的危險,解決方案是不同的。 – 2010-08-25 05:21:37

+0

是的,我們的要求是確保多層次的安全;我假定使用客戶端證書是爲了確保客戶的身份;然而,從這個問題上我很快就會想到,軟件應用程序這個術語只有與數據完整性結合纔有意義。但是我相信可以認爲,即使沒有數據完整性檢查,客戶端認證也有一定的價值。 – 2010-08-25 08:15:22