2012-02-06 67 views
4

我有一個.NET application和一個.NET Windows Service。我如何在這兩者之間建立一個安全通信通道如何安全地與我自己的Windows服務溝通

因特網上的大多數人推薦使用Named Pipes與Windows服務進行通信。但似乎這可能會在系統中造成一個巨大的安全漏洞。如果一些老兄反向工程師對我的應用程序進行反向工程,他會知道管道名稱和我使用的協議,並允許他連接到我的服務並做他想做的任何事情。

示例:我的客戶端安裝我的應用程序,併爲其提供完整的權限來安裝該服務。然後他下載一些其他軟件,並且不會給賦予它全部特權。但該軟件找到我的服務並利用它,使用管道名稱和反向工程協議。

那麼如何設計一個安全的通信通道呢?該服務能否以某種方式訪問​​剛剛連接到它的管道的程序(以便我可以比較它的哈希,假設服務已安裝到安全位置)?或者也許使用不同的IPC?微軟如何確保自己的服務免受此安全漏洞的侵害?

+0

命名管道支持安全性,我記得,因爲我必須禁用它:p – leppie 2012-02-06 13:49:50

+0

爲什麼首先挖那個洞?如果您的應用程序需要特權,請再次詢問用戶!如果他不給你,請考慮回退或中止。 – ordag 2012-02-06 13:53:07

+1

@ordag:因爲每次Windows啓動時都需要權限。我不希望我的整個應用程序運行提升,因爲這可能會導致其他安全問題。 – Paya 2012-02-06 13:56:31

回答

7

您只需要爲您的命名管道設置安全描述符,以便只有您的客戶端代碼才能訪問它。

詳情請看這裏:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365600%28v=vs.85%29.aspx

+0

+1謝謝,看起來很有希望。你有沒有(在任何情況下)一個你將客戶端限制到某個特定過程的例子? – Paya 2012-02-06 14:01:02

+0

目前不是。自從我編寫這個代碼以來已經有一段時間了。 :) – jeffsix 2012-02-06 14:04:20

+0

嗯,我發現[這](http://stackoverflow.com/questions/3282365/opening-a-named-pipe-in​​-low-integrity-level-windows-7-c),但它仍然遠離我所需要的。 – Paya 2012-02-07 02:24:34

0

我會看看有例如加密協議RSA加密算法。不管你使用什麼傳輸協議(管道,TCP/IP,消息等)。他們中的任何一個都可以以某種方式「閱讀」。 在你的情況下,我會使用一些網絡協議(TCP/IP,UDP)在將來有免費的可擴展性功能。客戶端和服務器端可以以這種方式位於不同的PC /平臺上。但很多事情取決於需求。爲什麼你確實需要保護這些東西,應該保護哪些數據(可能是更容易的方法來檢索其他人存在的),數據量,其他?