2014-11-20 33 views
2

使用LOGON32_LOGON_NETWORK_CLEARTEXT的安全性如何?使用LOGON32_LOGON_NETWORK_CLEARTEXT的令牌代表團

我們有以下情形:

Web服務器是使用Win32 LogonUser的。然後它需要在服務器B上調用一個asmx方法。

如果使用的登錄類型是LOGON32_LOGON_INTERACTIVE,則效果很好。然而,客戶拒絕這個,因爲它需要交互式訪問。

如果我們使用LOGON32_LOGON_NETWORK這不允許令牌委託給遠程服務器,並且我們得到401(根據MSDN的預期)。

試圖使用DuplicateToken將令牌「升級」爲交互式失敗。這種嘗試是基於這篇文章上它指出:

「當你請求一個交互式登錄,LogonUser的返回主 令牌允許你創建流程,同時冒充當 你要求網絡登錄,LogonUser的回報。模擬令牌 可用於訪問本地資源,但不能創建 進程如果需要,可以通過調用Win32 DuplicateToken函數將模擬令牌轉換爲 主令牌。

但是,如果我們使用LOGON32_LOGON_NETWORK_CLEARTEXT,如this old thread中所述,代理工作。但它的使用有多安全?根據MSDN:

「這種登錄類型保留在認證 包,它允許服務器進行連接到其他網絡 服務器,同時模擬客戶端用戶名和密碼的服務器可以接受來自明文 憑據。一個客戶端,調用LogonUser,驗證用戶可以通過網絡訪問系統,並且仍然與其他 服務器進行通信。「

在這種格式中使用的證書是否可用於嗅探器(我們使用Windows集成安全性,有時使用SSL但不總是)。

請指教。

回答

1

我有同樣的問題,雖然我還沒有找到一個明確的答案,我已經做了一些調查和字裏行間,這就是我的結論(更正歡迎):

理想/最安全用例是如果你的代碼看起來是這樣的僞代碼:當您關閉它的句柄(我還沒有找到這個參考

success = LogonUser(username, domain, password, 
    LOGON32_LOGON_NETWORK_CLEARTEXT, provider, out token) 
if (success) { 
    StartImpersonation(token) 
    remoteConnection = AuthenticateToRemoteServer() 
    StopImpersonation() 
    CloseHandle(token) 

    // continue to use remoteConnection 
} 

與LogonUser的會話相關的明文憑證將被摧毀,但它不對我來說他們不會)。因此,在令牌的有效期內,存在用戶憑據的副本,並用於向遠程服務器進行身份驗證。但是,您的應用程序已經以明文形式存在內存憑證(在變量usernamedomainpassword中),所以這並不會帶來額外的安全風險。

使用Windows身份驗證的遠程服務器的任何身份驗證都將使用NTML或Kerberos,且兩種協議都不會在線路上發送憑據,因此這不是問題。我無法確定如果遠程服務器要求進行基本身份驗證會發生什麼情況,但我認爲它很可能會失敗,而不是您的憑據將被髮送。

如果您需要將令牌保持更長時間,則文檔確實會聲明憑證以明文(某處)存儲。我拿了一個測試過程的轉儲,並且無法在轉儲文件中找到它們,所以我不知道這是否意味着它們存儲在內核內存或內存中。如果我必須長期保留這個標記,我會有點擔心。

+0

我的疑慮基本上是兩個:無論如何,當服務器A連接到服務器B(如原始問題中所述)時,是否可以嗅探憑證,以及流程轉儲是否可能會透露它們。網絡嗅探困擾我更多。我非常失望,MS沒有提供有關此令牌的其他信息(或者至少我找不到有關此令牌的任何信息)。 – ewolfman 2015-04-23 17:19:22

+0

有線協議的安全性是一個正交的問題。如果服務器需要明文密碼,那麼如果要進行身份驗證,則不需要執行任何操作。但即使這樣做,您也可以使用TLS加密整個頻道。如果您無法控制服務器,您至少可以與供應商討論其需求。如果您可以否決發送您的憑證,那將會很好,但是我不能想到這是一個值得關注的現實情況 - 如果您不信任服務器,您爲什麼要對其進行身份驗證? – bmm6o 2015-07-16 16:42:57