鷹翔宇空

          學(xué)習(xí)和生活

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          原文引自:http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/4OffAppBlocConfSecuCons.mspx

          Offline Application Block 配置和安全注意事項(xiàng)

          發(fā)布日期: 8/19/2004 | 更新日期: 8/19/2004

          Microsoft Corporation

          內(nèi)容:第 4 章提供了成功部署的步驟和重要的安全威脅以及需要考慮的對(duì)策。

          *
          本頁(yè)內(nèi)容
          部署要求 部署要求
          配置 配置
          ConnectionManagerProviders ConnectionManagerProviders
          QueueManagerProviders QueueManagerProviders
          CryptographicSettings CryptographicSettings
          CacheManagerSettings CacheManagerSettings
          異常管理 異常管理
          安全注意事項(xiàng) 安全注意事項(xiàng)
          小結(jié) 小結(jié)

          在開(kāi)發(fā)和測(cè)試基于 Offline Application Block 的應(yīng)用程序后,就可以在產(chǎn)品環(huán)境中部署該應(yīng)用程序了。本章討論如何通過(guò)為各種提供程序配置應(yīng)用程序來(lái)部署應(yīng)用程序。本章還討論了在產(chǎn)品環(huán)境中部署應(yīng)用程序時(shí)需要考慮的安全威脅和對(duì)策。

          部署要求

          在部署使用 Offline Application Block 的應(yīng)用程序之前,請(qǐng)確保目標(biāo)計(jì)算機(jī)安裝了下列軟件組件:

          ?

          Microsoft_ Windows_ XP Professional 操作系統(tǒng)

          ?

          Microsoft .NET Framework 1.1 版

          此外,如果您要使用 Offline Application Block 隨附的提供程序,則必須安裝下列軟件:

          ?

          用于隊(duì)列存儲(chǔ)提供程序的 Microsoft 消息隊(duì)列 (MSMQ)

          ?

          用于隊(duì)列/緩存存儲(chǔ)提供程序的 Microsoft SQL Server? 桌面引擎 (MSDE)

          返回頁(yè)首返回頁(yè)首

          配置

          提供程序是在您在 Microsoft Visual Studio_ .NET 部署系統(tǒng)項(xiàng)目中創(chuàng)建的 App.config 文件中定義的。在該文件中,每個(gè)類(lèi)型的提供程序都對(duì)應(yīng)于一個(gè)區(qū)段。

          ?

          ConnectionManagerProviders – 此區(qū)段包含用于檢測(cè)應(yīng)用程序物理連接狀態(tài)的策略的配置信息。該應(yīng)用程序塊隨附的連接檢測(cè)提供程序使用 Windows 網(wǎng)絡(luò) API (WinInet) 來(lái)檢測(cè)網(wǎng)絡(luò)連接是否存在。

          ?

          QueueManagerProviders – 此區(qū)段包含用于存儲(chǔ)消息的提供程序(包括 MSMQQueueStorageProviderMSDEQueueStorageProviderIsolatedStorageQueueStorageProviderInMemoryQueueStorageProvider)的配置信息。

          ?

          CryptographicSettings – 此區(qū)段包含用于加密提供程序設(shè)置的配置信息。

          ?

          CacheManagerSettings – 此區(qū)段包含用于 Caching Application Block 的配置信息。有關(guān) Caching Application Block 的詳細(xì)信息,請(qǐng)參閱 Caching Application Block 文檔。Offline Application Block 將獨(dú)立存儲(chǔ)緩存提供程序作為用于緩存的附加提供程序。

          “ConnectionManagerProviders”和“QueueManagerProviders”區(qū)段都具有一個(gè)名為 <providers> 的元素,它包含“連接管理”和“消息數(shù)據(jù)管理”子系統(tǒng)的策略。每個(gè)策略或提供程序都在 <providers> 區(qū)段下有一個(gè)相應(yīng)的子元素。表 4.1 中列出了每個(gè)提供程序所具有的公共特性集。

          4.1 提供程序的公共特性

          特性名 說(shuō)明 是否必需 默認(rèn)值

          name

          提供程序的好記的名稱。

          無(wú)

          type

          與提供程序相對(duì)應(yīng)的類(lèi)的完全限定類(lèi)型名稱。

          無(wú)

          enabled

          指定啟用配置文件中的哪個(gè)提供程序。您只能將這些提供程序的其中一個(gè)設(shè)置為 true,以便脫機(jī)功能正常工作。

          False

          每個(gè)提供程序所需的自定義屬性被表示為子元素。

          返回頁(yè)首返回頁(yè)首

          ConnectionManagerProviders

          以下配置文件摘錄顯示了 ConnectionManagersProviders 區(qū)段是如何在 App.config 中定義的:

          ...
          <configuration>
            <configSections>
          <section name="ConnectionManagerProviders" type="Microsoft.ApplicationBlocks.SmartClient.Offline.MultiProviderConfigHandler,Microsoft.ApplicationBlocks.SmartClient.Offline,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
            </configSections>
          </configuration>
          ...
          

          以下配置文件摘錄顯示了 ConnectionManagerProviders 區(qū)段的詳細(xì)內(nèi)容:

          ...
          <ConnectionManagerProviders>
            <provider name="connectionDetectionStrategy" enabled="true" 
              type=
          "Microsoft.ApplicationBlocks.SmartClient.Offline.WinINetDetectionStrategy, Microsoft.ApplicationBlocks.SmartClient.Offline.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
               <pollingInterval>2</pollingInterval>
             </provider>
            </ConnectionManagerProviders>
          ...
          

          表 4.2 按照 ConnectionManagerProviders 特性在配置文件中的顯示順序說(shuō)明它們的設(shè)置。

          4.2:ConnectionManagerProviders 特性的默認(rèn)設(shè)置

          特性/子元素 說(shuō)明 默認(rèn)值

          name

          指定提供程序的名稱。

          無(wú)

          enabled

          指定啟用配置文件中的哪個(gè)提供程序。可接受的值為 true 或 false。您只能將這些提供程序的其中一個(gè)設(shè)置為 true,以便脫機(jī)功能正常工作。

          false

          type

          指定提供程序的完全限定名。

          無(wú)

          pollingInterval

          指定“連接管理器”檢測(cè)連接狀態(tài)的頻率。必須設(shè)置此特性。建議設(shè)置為 2 秒鐘。

          無(wú)

          Offline Application Block 提供了 ConnectionDetectionStratergy,后者使用 Windows API WinINetDetectionStrategy 類(lèi)來(lái)檢測(cè)與網(wǎng)絡(luò)的連接性。

          返回頁(yè)首返回頁(yè)首

          QueueManagerProviders

          下列提供程序可用于隊(duì)列存儲(chǔ):

          ?

          InMemoryQueueStorageProvider – 該提供程序?qū)㈥?duì)列數(shù)據(jù)存儲(chǔ)在內(nèi)存數(shù)據(jù)結(jié)構(gòu)中。因?yàn)楫?dāng)應(yīng)用程序關(guān)閉時(shí)存儲(chǔ)的數(shù)據(jù)會(huì)丟失,所以該提供程序不適于存儲(chǔ)持久性數(shù)據(jù)。

          ?

          MSDEQueueStorageProvider – 該提供程序?qū)㈥?duì)列數(shù)據(jù)存儲(chǔ)在“桌面引擎”中。自定義屬性 ConnectionString 定義了用于連接到 MSDE 數(shù)據(jù)庫(kù)的連接字符串。

          ?

          MSMQQueueStorageProvider – 該提供程序?qū)㈥?duì)列數(shù)據(jù)存儲(chǔ)在“消息隊(duì)列”中。該提供程序允許在配置文件中指定消息隊(duì)列的名稱,并且它將嘗試打開(kāi)具有該名稱的隊(duì)列。如果它無(wú)法打開(kāi)該隊(duì)列,就會(huì)嘗試以給定的名稱創(chuàng)建一個(gè)專用隊(duì)列。在部署基于該塊的應(yīng)用程序的過(guò)程中,您應(yīng)通過(guò)管理手段(使用 Microsoft 管理控制臺(tái) [MMC] 單元)手動(dòng)創(chuàng)建消息隊(duì)列,以便其安全權(quán)限能夠正確配置。請(qǐng)注意,該塊假設(shè)所使用的消息隊(duì)列是專用隊(duì)列。自定義屬性 queueName 定義該隊(duì)列的名稱。

          ?

          IsolatedStorageQueueStorageProvider – 該提供程序存儲(chǔ)一個(gè)用戶的隊(duì)列數(shù)據(jù),并防止其他用戶對(duì)該數(shù)據(jù)進(jìn)行訪問(wèn)。

          以下配置文件摘錄顯示了 QueueManagerProviders 區(qū)段是如何在 App.config 文件中定義的:

          ...
          <configuration>
            <configSections>
          <section name="QueueManagerProviders" type="Microsoft.ApplicationBlocks.SmartClient.Offline.MultiProviderConfigHandler,Microsoft.ApplicationBlocks.SmartClient.Offline,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
             </configSections>
          </configuration>
          

          以下配置文件摘錄顯示了 QueueManagerProviders 區(qū)段的詳細(xì)內(nèi)容:

          ...
             <QueueManagerProviders>
                <provider name="queueManagerStorageProvider"
          enabled="false"            type="Microsoft.ApplicationBlocks.SmartClient.Offline.IsolatedStorageQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                 encrypted="false"
                 signed="false"
                 cryptoProvider="default" />
                
          <provider name="queueManagerStorageProvider" 
          enabled="true"             type="Microsoft.ApplicationBlocks.SmartClient.Offline.InMemoryQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" 
                 encrypted="false" 
                 signed="false" 
                 cryptoProvider="default"/>
                
          <provider name="queueManagerStorageProvider" 
          enabled="false"       type="Microsoft.ApplicationBlocks.SmartClient.Offline.MSMQQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                 encrypted="false" 
                 signed="false" 
                 cryptoProvider="default">
                 <queueName>InsuranceClaimsClientQueue</queueName> 
                </provider>
                
          <provider name="queueManagerStorageProvider" 
                  enabled="false" 
                         type="Microsoft.ApplicationBlocks.SmartClient.Offline.MSDEQueueStorageProvider,Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"
                 encrypted="false" 
                 signed="false" 
                 cryptoProvider="default">
                 <applicationName>Insurance Claims Client</applicationName>
          <connectionString>Initial Catalog=QueueDatabase;Data Source=[MsdeServerName]\[MsdeInstanceName];Integrated security=true</connectionString>
                </provider>
             </QueueManagerProviders>
          ...
          

          表 4.3 按照 QueueManagerProviders 特性在配置文件中的顯示順序說(shuō)明它們的設(shè)置。

          4.3:QueueManagerProviders 特性的默認(rèn)設(shè)置

          特性/子元素 說(shuō)明 默認(rèn)值

          Name

          指定提供程序的名稱。

          無(wú)

          enabled

          指定啟用配置文件中的哪個(gè)提供程序。可接受的值為 true 或 false。您只能將這些提供程序的其中一個(gè)設(shè)置為 true,以便脫機(jī)功能正常工作。

          false

          type

          指定提供程序的完全限定名。

          無(wú)

          encrypted

          指定是否在寫(xiě)入數(shù)據(jù)前對(duì)其進(jìn)行加密,以及是否在讀取數(shù)據(jù)前對(duì)其進(jìn)行解密。

          false

          signed

          指定是否在寫(xiě)入數(shù)據(jù)前對(duì)其進(jìn)行簽名,以及是否在讀取數(shù)據(jù)前對(duì)其進(jìn)行驗(yàn)證。

          無(wú)

          cryptoProvider

          設(shè)置提供程序的名稱。在此例中,加密提供程序設(shè)置為 default。

          默認(rèn)提供程序

          cryptoProvider 特性將在下面的“加密設(shè)置”部分中進(jìn)行更全面地討論。

          返回頁(yè)首返回頁(yè)首

          CryptographicSettings

          配置文件中隊(duì)列存儲(chǔ)提供程序的每個(gè)提供程序節(jié)點(diǎn)都具有一個(gè)與之關(guān)聯(lián)的 cryptoProvider 特性,該特性指定要使用的 cryptoProvider。配置文件中還有另一個(gè)名為 crytpographicSettings 的區(qū)段,其中可以定義許多不同的加密提供程序,實(shí)現(xiàn)不同的加密算法和公鑰。每個(gè)加密提供程序都由一個(gè)名稱標(biāo)識(shí),并且每個(gè) QueueStorageProviders 元素中的 cryptoProvider 特性標(biāo)識(shí)要用于該 QueueStorageProvider 的加密提供程序。

          要點(diǎn) 經(jīng)常更改密鑰以防止惡意訪問(wèn)、或未經(jīng)授權(quán)的用戶獲得對(duì)該密鑰的訪問(wèn)權(quán)以及通向您網(wǎng)絡(luò)的非法入口是非常重要的。

          生成自己的對(duì)稱密鑰

          1.

          在 Visual Studio .NET 2003 中打開(kāi) ValidationKeyGeneration.sln。該密鑰包含在脫機(jī)解決方案和快速入門(mén)中,它位于 <安裝位置>\Offline\QuickStarts\Utility\ValidationKeyGeneration。此外,您還可以按以下方式訪問(wèn)“Validation Key Generation”:依次單擊 StartAll ProgramsMicrosoft Application Blocks for .NETOffline,然后單擊 Validation Key Generation

          2.

          構(gòu)建解決方案。

          3.

          運(yùn)行 ValidationKeyGeneration.exe

          4.

          單擊 Generate 按鈕。一個(gè)新密鑰將出現(xiàn)在文本框中。

          5.

          從文本框中復(fù)制該密鑰,并將其用于配置文件中。

          有關(guān)加密的詳細(xì)信息,請(qǐng)參閱下列文章:

          ?

          Cryptography,位于 Microsoft Research Web 站點(diǎn) (http://research.microsoft.com/crypto/)

          ?

          Cryptography and Secure Communications,位于 TechNet Web 站點(diǎn) (http://www.microsoft.com/technet/security/topics/crypto/default.mspx)

          ?

          Cryptography ,位于 MSDN Web 站點(diǎn) (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/cryptography_portal.asp)

          使用具有加密功能的隊(duì)列提供程序來(lái)協(xié)助確保數(shù)據(jù)的安全

          使用隊(duì)列提供程序有助于您更安全地存儲(chǔ)數(shù)據(jù)。以下配置文件摘錄顯示了 CryptographicSettings 區(qū)段是如何在 App.config 文件中定義的:

          ...
          <configuration>
             <configSections>
          <section name="crytpographicSettings" type="Microsoft.ApplicationBlocks.Common.Crypto.CryptographicConfigurationHandler, Microsoft.ApplicationBlocks.Common,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />...
             </configSections>
          </configuration>
          

          以下配置文件摘錄顯示了 QueueManagerProviders 區(qū)段的詳細(xì)內(nèi)容:

          ...
              <crytpographicSettings>      
                <cryptographicInfo name="default" 
                               type="Microsoft.ApplicationBlocks.Common.Crypto.DPAPIProvider, Microsoft.ApplicationBlocks.Common, Version=1.0.0.0 Culture=neutral, PublicKeyToken=null" 
          validationKey= "Create a new validation key using the validation key generation utility and place here"
                          validation="SHA1"/>   
              </crytpographicSettings>...
          

          有關(guān)配置文件及其設(shè)置的詳細(xì)信息,請(qǐng)參閱 MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/cmab.asp) 上的“Configuration Management Application Block”。

          要獲得完整的配置設(shè)置,請(qǐng)參閱保險(xiǎn)理賠快速入門(mén)的 App.config 文件。

          返回頁(yè)首返回頁(yè)首

          CacheManagerSettings

          Offline Application Block 使用四個(gè)緩存提供程序:IsolatedStorageCacheStorage(由 Offline Application Block 提供)、SingletonCacheStorageSQLServerCacheStorage(由 MSDE 提供)和 MmfCacheStorage

          在 <CacheManagerSettings> 區(qū)段下的 <StorageInfo> 元素中,您必須指定獨(dú)立存儲(chǔ)提供程序的以下兩個(gè)特性:

          ?

          AssemblyName – 程序集的名稱,其中提供程序類(lèi)的位置是:Microsoft.ApplicationBlocks.Offline.Providers

          ?

          ClassName – 類(lèi)名,它對(duì)應(yīng)的提供程序是:Microsoft.ApplicationBlocks.Offline.Providers.IsolatedStorageCache

          以下配置文件摘錄顯示了 CacheManagerSettings 區(qū)段是如何在 App.config 文件中定義的:

          ...
          <configuration>
             <configSections>
          <section name="CacheManagerSettings" type="Microsoft.ApplicationBlocks.Cache.CacheConfigurationHandler,
          Microsoft.ApplicationBlocks.Cache,Version=1.0.0.0,Culture=neutral,
          PublicKeyToken=
          null" />...
             </configSections>
          </configuration>
            
          

          以下配置文件摘錄顯示了 CacheManagerSettings 區(qū)段的詳細(xì)內(nèi)容:

          ...
          <CacheManagerSettings>
          <DataProtectionInfo AssemblyName="Microsoft.ApplicationBlocks.Cache, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" ClassName="Microsoft.ApplicationBlocks.Cache.DataProtection.DefaultDataProtection"
          ValidationKey="Create a new validation key using the validation key generation utility and place here"
          Validation="SHA1" />
          
          <StorageInfo AssemblyName="Microsoft.ApplicationBlocks.SmartClient.Offline.Providers,
          Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" ClassName="Microsoft.ApplicationBlocks.SmartClient.Offline.IsolatedStorageCacheStorage" Mode="InProc" Validated="false" Encrypted="false" />                <ScavengingInfo AssemblyName="Microsoft.ApplicationBlocks.Cache, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" ClassName="Microsoft.ApplicationBlocks.Cache.Scavenging.LruScavenging"
           MemoryPollingPeriod="60" UtilizationForScavenging="80" 
          MaximumSize="100" />
          </CacheManagerSettings>
          ...
          

          有關(guān) SingletonCacheStorageSQLServerCacheStorage (MSDE) 和 MmfCacheStorage 的詳細(xì)信息,請(qǐng)參閱 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/CachingBlock.asp 上的 Caching Application Block 文檔。

          返回頁(yè)首返回頁(yè)首

          異常管理

          Offline Application Block 中的異常是使用 Exception Management Application Block (EMAB) 來(lái)記錄的。事件記錄在 Windows 事件日志中,它是 EMAB 記錄所有日志事件的默認(rèn)位置。如果要將事件記錄到其他存儲(chǔ)區(qū)(例如 SQL Server、消息隊(duì)列或 Windows 管理規(guī)范 (WMI)),您可以使用 Logging Application Block,它提供了更可靠、更具可擴(kuò)展性的模式進(jìn)行記錄。有關(guān)詳細(xì)信息,請(qǐng)參閱 MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/Logging.asp?frame=true) 上的 Logging Application Block。

          返回頁(yè)首返回頁(yè)首

          安全注意事項(xiàng)

          Offline Application Block 有許多項(xiàng)目需要進(jìn)行保護(hù),以防止未經(jīng)授權(quán)的訪問(wèn)或惡意攻擊。這些資產(chǎn)包括:

          ?

          緩存的數(shù)據(jù)

          ?

          排入隊(duì)列的數(shù)據(jù)

          ?

          用于訪問(wèn)緩存和隊(duì)列的憑據(jù)

          ?

          用戶憑據(jù)

          ?

          通過(guò)網(wǎng)絡(luò)傳輸?shù)挠脩魯?shù)據(jù)

          ?

          部署的程序集

          此外,運(yùn)行智能客戶端應(yīng)用程序的系統(tǒng)及其使用的所有 Web 服務(wù)也很容易受到攻擊。三種最常見(jiàn)的攻擊類(lèi)型是欺騙、引誘和重播。

          欺騙攻擊

          欺騙攻擊有幾種形式。通常,攻擊者會(huì)創(chuàng)建一個(gè)虛假狀況來(lái)欺騙目標(biāo)泄露敏感信息。欺騙攻擊的一個(gè)示例是 IP 欺騙。當(dāng)網(wǎng)絡(luò)外的攻擊者通過(guò)使用位于網(wǎng)絡(luò) IP 地址范圍內(nèi)的 IP 地址,或者受信任的外部 IP 地址(可以訪問(wèn)網(wǎng)絡(luò)上的特定資源)來(lái)偽裝成受信任用戶時(shí),就會(huì)發(fā)生這種攻擊。此外,如果攻擊者可以訪問(wèn) IP 安全 (IPSec) 的安全參數(shù),就可以偽裝成經(jīng)授權(quán)可以連接到公司網(wǎng)絡(luò)的遠(yuǎn)程用戶。欺騙攻擊的其他示例包括:傳輸控制協(xié)議 (TCP) 欺騙 — 通過(guò)偽造的地址發(fā)送 Internet 數(shù)據(jù)包;域名服務(wù)器 (DNS) 欺騙 — 攻擊者偽造有關(guān)哪些計(jì)算機(jī)名與哪些網(wǎng)絡(luò)地址相對(duì)應(yīng)的信息。

          引誘攻擊

          引誘攻擊是非法的權(quán)限提升。此類(lèi)攻擊可欺騙受信任的代碼對(duì)攻擊代碼進(jìn)行調(diào)用,之后此攻擊代碼將獲得合法代碼的權(quán)限。例如,您可能會(huì)通過(guò)電子郵件接收一個(gè)不信任的程序。由于您懷疑該程序的來(lái)源,您在計(jì)算機(jī)中添加了一個(gè)新的本地帳戶,它具有普通、受限的用戶權(quán)限而不是您自己的高級(jí)別權(quán)限。然后,使用二級(jí)登錄服務(wù)在受限帳戶下運(yùn)行該程序。執(zhí)行代碼沒(méi)有任何問(wèn)題,因此您就認(rèn)為它是合法的。

          第二天,您收到很多電子郵件,抱怨您向他們發(fā)送了垃圾郵件。還有幾個(gè)新文件添加到了 System32 目錄中。這就是引誘攻擊的結(jié)果,它是由您認(rèn)為安全的程序?qū)е碌摹.?dāng)該程序啟動(dòng)時(shí),它會(huì)檢查是否運(yùn)行在特權(quán)安全上下文中。如果發(fā)現(xiàn)它未處于特權(quán)安全上下文中,就認(rèn)為實(shí)際用戶是以更多權(quán)限進(jìn)行登錄的。通過(guò)調(diào)用 User32.dll 中的一些函數(shù),它可模擬一個(gè)實(shí)際用戶,欺騙 Windows 資源管理器啟動(dòng)新的程序副本。當(dāng)新程序啟動(dòng)后,它就繼承了 Windows 資源管理器標(biāo)記的副本。由于用戶是以較高權(quán)限登錄的,因此該程序會(huì)繼承這些權(quán)限,并可能危及文件、電子郵件以及操作系統(tǒng)的安全。

          重播攻擊

          重播攻擊是通過(guò)記錄和重播先前發(fā)送的有效消息(或部分消息)來(lái)欺騙身份驗(yàn)證系統(tǒng)。可以記錄任何固定的身份驗(yàn)證信息(例如密碼),并在以后用于偽造受信任的消息。

          威脅和對(duì)策

          下表列出了針對(duì) Offline Application Block 項(xiàng)目、運(yùn)行智能客戶端應(yīng)用程序的系統(tǒng),以及使用 Offline Application Block 的應(yīng)用程序所使用的 Web 服務(wù)的可能安全威脅和相關(guān)的對(duì)策。有關(guān)威脅和對(duì)策的詳細(xì)信息,請(qǐng)參閱 MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/ThreatCounter.asp) 上的 Improving Web Application Security: Threats and Countermeasures。

          4.4:安全威脅和對(duì)策

          威脅 目標(biāo) 風(fēng)險(xiǎn) 攻擊技術(shù) 對(duì)策

          攻擊者獲得對(duì)緩存的訪問(wèn)權(quán)。

          緩存中的用戶數(shù)據(jù)

          危及敏感用戶數(shù)據(jù)的安全。

          攻擊者直接繞過(guò)脫機(jī)塊的基礎(chǔ)結(jié)構(gòu),對(duì)緩存數(shù)據(jù)進(jìn)行訪問(wèn)。

          加密數(shù)據(jù)并保護(hù)訪問(wèn)該緩存所需的憑據(jù)。

          攻擊者獲得對(duì)隊(duì)列的訪問(wèn)權(quán),并將消息填充在其中。

          隊(duì)列

          消息中可能會(huì)包含能夠中斷甚至終止服務(wù)的惡意數(shù)據(jù)。

          攻擊者繞過(guò)脫機(jī)塊的基礎(chǔ)結(jié)構(gòu),直接填充隊(duì)列。

          確保通過(guò)適當(dāng)?shù)膽{據(jù)對(duì)隊(duì)列的訪問(wèn)權(quán)進(jìn)行限制,同時(shí)也保護(hù)該憑據(jù),最好使用數(shù)據(jù)保護(hù)應(yīng)用程序接口 (DPAPI)。

          攻擊者獲得對(duì)用于訪問(wèn)隊(duì)列和緩存的憑據(jù)的訪問(wèn)權(quán)。

          隊(duì)列和緩存的憑據(jù)

          可能會(huì)危及憑據(jù)的安全。

          如果存儲(chǔ)在配置中的數(shù)據(jù)未加密,則可用于特權(quán)用戶。

          使用 DPAPI 或等效 API 來(lái)存儲(chǔ)敏感信息。

          攻擊者獲得對(duì)用戶憑據(jù)的訪問(wèn)權(quán)。

          存儲(chǔ)在客戶端應(yīng)用程序中的用戶憑據(jù)

          當(dāng)應(yīng)用程序遇到錯(cuò)誤并將錯(cuò)誤記錄到日志中,或者當(dāng)計(jì)算機(jī)受到攻擊時(shí),可能會(huì)危及用戶憑據(jù)的安全。

          計(jì)算機(jī)受到攻擊后,用戶憑據(jù)會(huì)作為錯(cuò)誤報(bào)告的一部分存儲(chǔ)在日志中,而特權(quán)用戶可以對(duì)該日志進(jìn)行訪問(wèn)。

          使用 .NET framework 中的 CredentialCache 類(lèi)來(lái)存儲(chǔ)憑據(jù),即使在內(nèi)存中也是如此。

          攻擊者欺騙業(yè)務(wù)功能服務(wù)。

          用戶和應(yīng)用程序數(shù)據(jù)

          可能會(huì)危及發(fā)送到應(yīng)用程序的用戶和應(yīng)用程序數(shù)據(jù)的安全。

          網(wǎng)絡(luò)探測(cè)

          驗(yàn)證為服務(wù)生成的代理具有有效終結(jié)點(diǎn)。

          攻擊者在數(shù)據(jù)傳輸?shù)?Web 服務(wù)的過(guò)程中獲得對(duì)數(shù)據(jù)的訪問(wèn)權(quán)。

          數(shù)據(jù)

          可能會(huì)危及數(shù)據(jù)的安全。

          網(wǎng)絡(luò)探測(cè)

          使用安全傳輸(例如 SSL 或 IPSec),并在通過(guò)網(wǎng)絡(luò)發(fā)送數(shù)據(jù)前對(duì)其進(jìn)行加密。

          攻擊者欺騙下載程序集或部署惡意程序集。

          系統(tǒng)

          可能會(huì)危及運(yùn)行該應(yīng)用程序的系統(tǒng)的安全。

          可能的攻擊包括欺騙程序集和部署服務(wù)器中的惡意程序集。

          要防止欺騙程序集,請(qǐng)使用受信任的第三方證書(shū)服務(wù),如 VeriSign。要防止部署服務(wù)器上的惡意程序集,請(qǐng)加密并數(shù)字簽名存儲(chǔ)在那里的程序集,并在客戶端下載時(shí)驗(yàn)證程序集。

          攻擊者在客戶端上部署惡意程序集。

          系統(tǒng)和用戶數(shù)據(jù)

          可能會(huì)危及用戶數(shù)據(jù)和運(yùn)行該應(yīng)用程序的系統(tǒng)的安全。

          在客戶端上部署惡意程序集。

          公開(kāi)地應(yīng)用到組成應(yīng)用程序的所有程序集,并使用 SecurityAction.FullDemand,這樣調(diào)用堆棧中的所有程序集都將驗(yàn)證公鑰 StrongNameIdentityPermission(SecurityAction.FullDemand, PublicKey="")。

          攻擊者訪問(wèn)非托管資源

          系統(tǒng)

          可能會(huì)危及運(yùn)行該應(yīng)用程序的系統(tǒng)的安全

          如果使用非托管資源的代碼具有所需的權(quán)限,則可能會(huì)受到引誘攻擊。

          要求 SecurityPermission 訪問(wèn)與非托管資源進(jìn)行交互的類(lèi)中的非托管資源。

          攻擊者使用反射來(lái)創(chuàng)建類(lèi)實(shí)例。

          系統(tǒng)和用戶數(shù)據(jù)

          特權(quán)代碼可能會(huì)被惡意程序集運(yùn)行,從而危及系統(tǒng)和用戶數(shù)據(jù)的安全。

          引誘攻擊

          要求在使用反射的所有代碼上使用 ReflectionPermission

          攻擊者使用重播攻擊。

          提供業(yè)務(wù)功能的服務(wù)

          可能會(huì)危及業(yè)務(wù)功能的安全。

          在傳輸數(shù)據(jù)的過(guò)程中對(duì)其進(jìn)行探測(cè)。

          使用安全傳輸(例如 SSL 或 IPSec),并對(duì)消息使用加密和數(shù)字簽名。

          攻擊者獲得對(duì)事件日志的訪問(wèn)權(quán)。

          系統(tǒng)和用戶數(shù)據(jù)

          可能的風(fēng)險(xiǎn)包括:攻擊者可能使用惡意日志消息終止系統(tǒng);大量錯(cuò)誤消息可能會(huì)屏蔽審核跟蹤,因?yàn)槿罩咎蠖鵁o(wú)法進(jìn)行分析;根據(jù)日志的配置,可能會(huì)覆蓋有效數(shù)據(jù)。

          使用錯(cuò)誤記錄的基礎(chǔ)結(jié)構(gòu),攻擊者可以將大量消息記錄到日志中。

          可能的對(duì)策包括:在訪問(wèn)日志以執(zhí)行讀取或?qū)懭氩僮鲿r(shí)要求正確的權(quán)限;對(duì)于 Windows 事件日志,請(qǐng)僅使用 EventLogPermission 來(lái)寫(xiě)入日志,除非組件同時(shí)支持讀取和寫(xiě)入;不提供更新或刪除日志的權(quán)限;將日志配置為在滿載時(shí)發(fā)出錯(cuò)誤,而不是覆蓋它本身。

          攻擊者使用引誘攻擊。

          系統(tǒng)和用戶數(shù)據(jù)

          可能會(huì)危及系統(tǒng)和用戶數(shù)據(jù)的安全。

          惡意程序集調(diào)用受信任的程序集來(lái)代表它執(zhí)行操作。

          使用 StrongNameIdentityPermissionSecurityAction.FullDemand 來(lái)確保調(diào)用堆棧中的所有程序集都來(lái)自簽名方。

          返回頁(yè)首返回頁(yè)首

          小結(jié)

          要部署 Offline Application Block,請(qǐng)配置您的提供程序并確定您要實(shí)施的安全措施。使用 App.config 文件來(lái)配置連接檢測(cè)提供程序、隊(duì)列管理器提供程序、加密設(shè)置以及緩存設(shè)置。檢查本章中概述的安全注意事項(xiàng),并確定適用于您環(huán)境的對(duì)策。最后,測(cè)試應(yīng)用程序的部署,以確保它符合您環(huán)境的安全和性能要求。

          轉(zhuǎn)到原英文頁(yè)面

          posted on 2006-02-10 15:05 TrampEagle 閱讀(536) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 技術(shù)文摘
          主站蜘蛛池模板: 苏尼特左旗| 大悟县| 老河口市| 利津县| 沅江市| 五华县| 平罗县| 绥中县| 徐汇区| 高清| 泽州县| 晋州市| 特克斯县| 汉寿县| 盘锦市| 汉中市| 平顶山市| 凯里市| 松溪县| 靖边县| 连云港市| 六盘水市| 惠安县| 贵溪市| 西林县| 陇南市| 南投县| 罗田县| 正宁县| 三原县| 榆中县| 梨树县| 保靖县| 镇远县| 石屏县| 黄冈市| 林州市| 南漳县| 鄂尔多斯市| 江孜县| 长兴县|