microsoft mobile 移動應用開發寶典----讀書筆記(10)

保密信息硬編碼有安全問題
解決方案
Microsoft patterns & practices的Mobile Client Software Factory中的Mobile Configuratuin與Mobile PassWord Authentication程序構建塊
對稱算法和非對稱算法
生成“散列權標(hash token)”
實現良好安全機制的技術“深度防禦(defense in depth)”,
涉及安全設計、程序開發和設備管理與配置等
邊界安全----一些安全策略配置

1良好安全性的實現
1)執行安全審查
審查代碼的信息:未驗證的用戶輸入;
                對Web服務器資源訪問的弱用戶驗證與授權;
                硬編碼的用戶名、密碼和其他保密信息
                可能被外界訪問的未加密敏感數據;
                不必要長時間在設備(內存或永久性存儲體)中存儲敏感數據
威脅模型分析(threat modeling)過程將安全審查過程分爲6個步驟:
(1)確定解決方案中必須進行保護的重要信息
(2)建立整體架構
(3)細化第(2)步建立的架構,確定信賴邊界(既安全需求發生變化的區域),並確定其間的數據流
(4)確定可能影響程序安全的威脅,時刻牢記攻擊者的目標
(5)將這些威脅記入文檔
(6)考慮攻擊者攻破每道防線,危及程序安全的後果,對這些潛在威脅進行評估,並按級別高低進行排序。
書:The Security Development Lifecycle(Michael Howard和Steve Lipner合著,Microsoft Press,2006)

2)爲何不能對保密信息進行硬編碼
原因:由於Microsoft .NET Framework的編譯器不會將代碼編譯成依賴系統架構的機器代碼,而是編譯成Microsoft中間語言(Microsoft Intermediate Language,MSIL),後者是一組與CPU無關的指令,可以輕鬆由實時(Just-In-Time,JIT)編譯器翻譯爲本地代碼。JIT編譯器對MSIL編譯進行了優化,但對於代碼的保護與其意圖的掩飾並沒有起多大作用。
工具:Lutz Roeder的Reflector(www.aisto.com/roeder/dotnet)這樣的工具,可以對任何.NET動態鏈接庫(Dynamic-Link Libtrary,DLL)或可執行文件進行反編譯,還原源代碼(雖然這不會與原來編寫的格式完全一致,但功能是等效的,正面用途可以對“基類庫”的代碼進行反編譯,學習類庫的編寫)
託管代碼易被發現,本地代碼也易被發現,發現在字符串表(String Table),全局唯一標識(GUID)或二進制數據則通過“熵搜索(entropy search)”工具找到。

3)保密信息隱藏技術的優與劣
對保密信息硬編碼,且將代碼模糊化:Dotfuscator社區版本,缺點不會更改常量的值
將保密信息藏在其他代碼塊中  缺點嚴重
將其存儲在註冊表中 嚴重
將其加密並存住在註冊表或配置文件中 缺點:加密算法都確定了
每次都向用戶詢問密碼 例如第7章的SqlClient示例訪問Microsoft SQL Server

用戶輸入密碼----密鑰----對存儲的加密的信息解密,結合加密技術==形成安全解決方案基礎
需要考慮的問題:多久詢問一次用戶密碼
                忘記密碼,如何處理
                是否強制用戶定期進行再驗證
不能把原始密碼存儲於內存中,使用密碼儘快生成加密密鑰或散列(hash),然後刪除密碼,並覆蓋包含原始密碼的內存區域

4)良好安全性的實現需要用戶的輸入

2.憑據與其他保密信息的安全存儲
威脅:設備、公共網絡、後端系統
安全需求:加密數據庫中的數據
          用戶名和密碼都要已加密方式存儲在配置文件中
          一套機制,安全存儲解密用的密鑰
          每一個用戶有特有的用戶名和密碼
實現:Microsoft patterns & practices小組的Mobile Software Factory(MCSF)Mobile Application Blocks(附帶的源代碼Mobile Authentication Application Block)

1)保護SQL Server CE數據庫中的數據
設置SQL Server CE密碼,它使用的是MD5散列算法及RC4加密算法

2)使用Microsoft patterns & practices應用程序構建塊進行安全方案編程
MCSF包含10種不同的應用程序構建塊,使用其中三種:
Mobile Configuration Block 用於讀取程序配置文件
Mobile Authentication Block 包含用於驗證用戶名和密碼的方法
Endpoint Catalog API,用於暴露配置文件中存儲的URL和用戶憑據
使用這些,必須分別添加到Mobile.Configuration,Mobile.Authentication和Mobile.EndpointCatalog程序集的引用,或將所有所需的程序塊複製到自己的解決方案中。本章示例ApplicationBlocksSecure
(1)配置文件的定義
使用移動Authentication Block

(2)配置文件的加密
ConfigSectionEncrypt工具(Base64編碼)
Rijndael對稱加密算法----高級加密標準(Advanced Encryption Standard,AES):intelligrid.info/IntelliGrid_Architecture/New_Technologies/Tech_Confidentiality.htm

(3)用戶特有加密密鑰的創建
指派用戶名和密碼,根據此用戶名和密碼生成另一個加密密鑰,來加密主密鑰
“加密服務提供程序”(Cryptographic Service Provider,CSP)
Rijndael對稱加密算法----加密密鑰,初始向量(initialization vector,IV,種子)
用戶名和加密的密鑰存儲在XML(Entensible Markup Language)文件中,

(4)用戶身份驗證權標的創建
提供AuthenticationToken類建立用戶驗證的過程,兩種方式
創建一個散列權標(hash token),將其傳到設備的驗證模塊
通過現有的散列權標,進行用戶名和密碼的驗證
本章示例ApplicationBlocksSecure中桌面程序UserTokens

(5)用戶的驗證與設備上配置文件的解密
清單10.2
LoginForm類
AuthenticateUser方法
DecryptSettings方法

(6)密碼更改與遺忘的處理:設置一個新的

3.數據加密
使用System.Security.Cryptography命名空間
1)使用AES對稱算法的加密
示例程序Encryption

(1)根據文本字符串生成密鑰
通過“平臺調用服務(Platform Invocation Service,PInvoke)”調用本地函數Crypto API
Mobile Password Authentication Block源代碼

(2)加密
調用RijndaelManaged.CreateEncryptor(key,iv)方法創建加密器(ICryptoTransform類型實例)
獲得ICryptoTransform對象,連同輸入流,傳到CryptoStream對象的構造函數中
將明文(以byte數組的形式)寫入CryptoStream中,通過加密器,寫入輸出流

(3)解密
按照IV的長度讀取4個字節,獲得IV,使用Rijndael.CreateDecryptor(key,iv)創建解密器(ICryptoTransform類型實例),將輸入流和解密器(包含加密信息)傳到CryptoStream的構造函數中,通過CryptoStreamMode.Read打開,通過CryptoStream讀取已加密的信息,解密流,將明文寫入輸出緩衝

2)使用RSA非對稱算法的加密
SSL(Secure Sockets Layer,訪問https://的URL時的底層協議)
非對稱(asymmetric)算法加密對稱密鑰
私鑰(private key)----公鑰(public key)
使用密鑰對進行身份驗證

(1)RSA密鑰的生成
忘記密碼解決方案:使用RSA密鑰對
示例代碼:DesktopKeyUnlocker桌面組件,EncryptionWithAdminUnclock項目
功能:生成密鑰對,以XML文本的形式將公鑰輸出
      使用私鑰
Windows組件CSP(Cryptographic Service Provider)存儲密鑰

(2)私鑰的保護
桌面系統:RSACryptoServiceProvider工具保護私鑰
.NET Framework 2.0的System.Security.Cryptography.ProtectedData類,封裝了本地API Data Protection API(DPAPI),提供保護私鑰的方法
Windows Mobile設備:使用OpenNetCF Smart Device Framework中對ProtectedData的實現

(3)使用RSA公鑰的加密
清單10.3
SavePassword方法創建一個RSACryptoServiceProvider實例,通過 ReadPublicKeyXML方法,導入已用公鑰和模量進行設置的RSAParameters實例,然後調用RSACryptoServiceProvider.Encrypt方法進行加密,保存在文件中。

(4)使用RSA私鑰的解密
DesktopKeyUnclocker程序:通過GetRSAKeyPair方法,從密鑰存儲區獲取RSA密鑰。

4.網絡連接的保護
SSL是一個支持握手(handshaking)與加密的協議
Web服務器上有X.509服務器證書,包含一個數字簽名和一個私鑰-公鑰對。
數字證書身份驗證中心Certificate Authority CA(例如“VeriSign,GTE,Thawte公司)
Microsoft Internet信息服務(IIS):Microsoft TechNet中Microsoft Windows Server 2003"IIS 6.0 Documentation"查找
www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS
工具SSLChainSaver:幫助排除SSL的問題,創建XML,用於在設備上準備必要的證書。blogs.msdn.com/windowsmobile/archive/2006/08/11/sslchainsaver.aspx

1)安裝在基於Windows Mobile的設備上的根證書(12個)
證書存儲區:ROOT;CA;MY;Privileged Execution Trust Authorities與Unprivileged Execution Trust Authorities;SPC

2)使用自簽名證書
Issuing Your Own Server Certificates:www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/f72bde43-2f6a-4424-a890-f25b6c41425f.mspx?mfr=true
會出現驗證的問題:System.Net.ICertificatePlicy類
通過.cab文件安裝證書:Step-by-Step Guide to Deploying Windows Mobile-based Devices with Microsoft Exchange Server 2003 SP2
www.microsoft.com/technet/solutionaccerators/mobile/deploy/msfp_d.mspx

5.用戶輸入的有效驗證
Never trust user input
手工編寫複雜正則表達式:Regular-Expressions www.regular-expressions.info/tutorial.html

6.邊界安全:設備訪問的防護
企業應用程序:遠程管理解決方案
使用Exchange Server 2003 SP2與MSFP進行遠程管理
Massagin and Security Feature Pack(消息安全功能包,MSFP)
AKU(Adaptation Kit Update)
遠程擦除設備 http://{servername}/mobileadmin

7.應用程序的簽名
Windows Mobile 5 Application Security:msdn.microsoft.com/smartclient/default.aspx
1)理解Windows Mobile的安全策略
特權(Privileged)、非特權(Unprivileged)與未簽名(Unsigned)的應用程序
信任(Trusted)與普通(Normal)執行模式
單層(one-tier security policy)與雙層安全策略
安全策略:24種鍵-值對,重要的4102、4122、4123、4097
安全配置
使用Security Manager PowerToy進行安全配置的查看與設置
從www.microsoft.com/downloads下載這個工具,用於遠程配置,可以更改一個非鎖定設備或仿真器的設置

2)基於Windows Mobile的設備配置
更改設置:創建一個.cab配置格式文件(.cpf),創建XML配置文件
MakeCab實用程序,在SDKTools中
需要RAPI激活“遠程性能監視器”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章