2010-05-11 39 views
4

在同一臺機器上的兩個應用程序(包括Java服務器和Java服務器的C/C++客戶機)之間,最安全的通信方法是什麼?同一臺機器上的應用程序之間最安全的通信方法

SSL套接字是否足夠安全,還是可以被「中間人」攻擊破壞?

這裏主要關心的是客戶端如何信任本地服務器?

介紹一個遠程服務器可以提高本地通信的安全性,這怎麼實現?

+1

我完全不知道你試圖抵禦什麼攻擊。如果它的本地系統和攻擊者擁有root/admin,那麼你完全可以做任何事情,畢竟他們已經擁有了整個系統。就SSL和MITM而言,這讓我感到輕鬆,由PKI支持的SSL專門用於阻止像MITM這樣的攻擊。 – rook 2010-05-11 18:00:11

回答

1

安全嗎?如果攻擊者擁有root權限,他們可以在加密之前和解密之後破壞系統調用並監視內存緩衝區,並且您可以做的任何事情都是安全的。

如果攻擊者沒有root權限,即使沒有對其進行加密,他們也無法看到這些信息。

所以我沒有看到這一點。

1

如果你的整個系統,包括它的祕密都在同一臺機器上運行,那麼毫不奇怪,它本質上是不安全的。黑客可以看到系統的所有部分,並且付出足夠的努力,可以解開任何保護措施或加密方案。

如果系統必須100%安全,那麼系統的一部分需要是遠程的,因此黑客無法進行合併。

+1

如果系統必須100%安全,則必須拔掉電源 - 從電網以及網絡中進行:) – CuriousPanda 2010-05-11 14:27:03

+0

即使可以讀取硬盤並對其進行解密,因此您必須將其鎖定在大型保險櫃中並把它埋在沒有人期望的地方......但即使這樣,有一個小的機會,有人會找到它......我想我變得偏執。 ;-) – Hardcoded 2010-05-11 14:33:52

1

我不得不說,內存映射文件或共享內存區域是最安全的方法,其中Java和C++(Win32,Unix)都支持進程間通信。這是更復雜的,但你必須處理你自己的同步。完全插入插座。

+0

safe-ish,直到我注入一個evesdropping dll到你的進程空間中...... – mdma 2010-05-11 14:21:13

+0

@mdma當然在這一點上整個進程的內存空間是可讀的,所以通信機制是不相關的。 – KeithB 2010-05-11 15:52:22

+0

@mdma你打算怎麼做? – rook 2010-05-11 17:56:53

5

您需要詳細說明您的威脅模型。這是一個普遍的真理,任何人物理訪問你的硬件,動機和足夠的時間能夠顛覆任何東西。如果攻擊者碰巧是服務器上的管理員,這會增加一倍。

是的,您的代碼中的任何內容都可以通過管理員訪問進行讀取。您可以嘗試巧妙的技巧,比如加密或模糊存儲在二進制/ JAR文件中的密碼,但這是一個障礙,而不是絕對的障礙。

另一方面,保密性沒有絕對的障礙,只是或多或少有效的障礙物。無論您的措施如何,無論您的加密和密鑰管理的強度如何,如果有足夠的時間和激勵,任何事情都會產生效果。這使我們回到了第一點:您的威脅模型是什麼(您希望保護哪些攻擊);你的受保護資產有多少價值;誰和你信任什麼?

+0

在我的特殊情況下,客戶端必須從本地服務器獲取響應,根據這些響應,他們將在不同的路徑上進行操作,以便他們需要信任此服務器。 – Radu 2010-05-11 14:36:12

+0

同意。這就是DRM從根本上有缺陷的原因。硬件的所有者成爲攻擊者,因此只要付出足夠的努力,任何DRM都可能被破壞。請注意,我並不是想暗示這個問題與DRM有什麼關係,只是做一個比喻。 – KeithB 2010-05-11 15:55:16

+0

我真的不認爲拉杜知道他正在試圖抵禦什麼攻擊。但這是對一個虛假問題的一個很好的答案。 – rook 2010-05-11 18:02:25

1

管道應提供安全(和簡單)的通信。是的,如果黑客存儲在二進制文件中,並且二進制文件的權限允許讀取該文件,黑客就可以檢索密碼。

相關問題