如何保证智能客户端应用的安全性NameTitleMicrosoftCorporation日程满足安全性的需求深入:安全性的设计选择保护数据库的安全保护代码中的安全项加密离线的数据控制对本地资源的访问控制对Web服务的访问保护业务逻辑总结:安全性的最佳实践满足安全性的需求采用一种结构化的方法来判断,定量并定位所有可能的威胁威胁模型安全性的检查清单最佳实践:将安全性检查作为整个开发流程的一部分规划和设计的一部份就像编码和测试一样SD3设计成就安全默认巩固安全部署实现安全安全的体系结构和代码威胁分析减少漏洞减少攻击表面区域默认情况下,关闭不使用的功能使用最小权限保护:检测、防护、恢复和管理过程:Howto指南、体系结构指南人员:培训SD3安全框架安全的产品开发时间线测试计划完成设计完成概念代码完成发行发行后测试安全性漏洞评估安全性了解何时雇佣小组成员确定安全信号标准发送到外部检查分析威胁学习和完善执行安全小组检查对小组成员进行培训测试数据突变和最小权限解决安全问题,根据安全准则对代码进行验证=ongoing威胁#1(I)查看薪水数据1.1通信量不受保护1.2攻击者查看通信量1.2.1使用协议分析器简要说明通信量1.2.2侦听路由器通信量1.2.2.1路由器未安装修补程序1.2.2.2泄漏路由器1.2.2.3猜测路由器密码1.0查看薪水数据(I)1.1通信量不受保护(AND)1.2攻击者查看通信量1.2.1使用协议分析器探测通信量1.2.2侦听路由器通信量1.2.2.1路由器未安装修补程序(AND)1.2.2.2泄漏路由器1.2.2.3猜测路由器密码建立威胁模型过程使用攻击树确认威胁减轻风险过程威胁类型(STRIDE)减轻风险技术减轻风险技术技术技术技术技术欺骗身份验证NTLMX.509证书PGP密钥基本摘要KerberosSSL/TLS1.确认类别例如:欺骗2.选择技术例如:身份验证或保护机密数据3.选择技术例如:Kerberos减轻风险的技术示例客户端服务器永久性数据身份验证数据配置数据STRIDESTRIDESTRIDESTRIDESSL/TLSIPSec具有隐私的RPC/DCO防火墙限制匿名连接的资源使用强访问控制数字签名审核漏洞不安全的网络深入:安全性的设计选择保护数据库的安全保护代码中的安全项加密离线的数据控制对本地资源的访问控制对Web服务的访问保护业务逻辑保护数据库的安全用最小权限的帐号来连接数据库仅为存储过程分配访问权限如果不能用存储过程,用类型安全的参数来构造命令对象将连接字符串加密保存将从数据库查询出来的保密性数据,用可靠的对称加密算法加密用DPAPI进行加密,并且保存在权限保护的注册表里提示:不同任务应该用的帐号“sa”(或者域里面相同权限帐号)数据库服务器管理仅用于创建数据库“dbo应用中数据库的所有者仅在开发过程中使用修改表结构,创建存储过程“IVUser“Locked-downaccount中间件用于访问存储过程保护保密信息以及离线数据单向哈希(Hash)函数非常容易计算,实践证明不可逆不可能从哈希数据运算出源数据!最适合于:存储用户口令或者其他只需要比较哈希值就可以的数据强加密算法只有知道加密的密钥才能解密数据最适合于:保护存储或者传递的数据应该采用哪种技术?我希望…建议优点限制安全的保存用户口令Salt+SHA1(单向哈希算法)在哈希运算之间,向口令字符串里面加”Salt”,以防止离线的字典攻击不需要管理密钥相同的数据值运算出相同的哈希值.为保证相同的值,必须存储一个”Salt”串.应该采用哪种技术?我希望…建议优点限制安全的保存用户口令Salt+SHA1(单向哈希算法)在哈希运算之间,向口令字符串里面加”Salt”,以防止离线的字典攻击不需要管理密钥相同的数据值运算出相同的哈希值.为保证相同的值,必须存储一个”Salt”串.保护本地用户数据DPAPI(通过密钥进行加密)DPAPI代替应用程序来管理密钥.数据不能被其他用户,或者在其他机器上解密应该采用哪种技术?我希望…建议优点限制安全的保存用户口令Salt+SHA1(单向哈希算法)在哈希运算之间,向口令字符串里面加”Salt”,以防止离线的字典攻击不需要管理密钥相同的数据值运算出相同的哈希值.为保证相同的值,必须存储一个”Salt”串.保护本地用户数据DPAPI(通过密钥进行加密)DPAPI代替应用程序来管理密钥.数据不能被其他用户,或者在其他机器上解密加密一些以后需要解密的数据对称加密算法a(e.g.Rijndael)Flexible:datacanbedecryptedbyotherapps/machinesthathavethekey.Applicationmustmanagekeysandtransmitthemsecurely.加密用户口令目标:在可用情况下,保证用户口令的安全建议:哈希Hash(Salt+口令)存储口令:1.为每个用户创建一个唯一的“salt”Salt确保即使口令一样,加密后的结果也不一样2.将Salt串附加到口令字符串之前3.用SHA1算法加密:SHA1.ComputeHash()4.将Salt和密码都保存起来验证时,重新将salt和口令进行Hash运算对用户口令进行单向Hash加密DataProtectionAPI(DPAPI)对CryptoAPI的扩展加密键值从登录用户的安全信息计算出来用TripleDES加密算法支持一致性用更多的秘密信息来保证应用的数据安全最适合于:保护离线数据保护用户指定的配置数据应用DataProtection.vbCryptoAPICrypt32.dllDPAPILocalSecurityAuthority(LSA)DPAPINowisthetimeforallgood…qANQR1DBAsUHIsQEA…LocalRPCCalls纯文本数据操作系统用DPAPI保存SQL连接字符串用DPAPI保存离线数据限制对本地资源的访问什么是本地资源?本地所有的东西!文件和文件系统注册表信息用户界面的元素剪贴板网络访问(例如.Web,sockets)性能计数器,事件日志打印,等等.NET用代码访问安全(CAS)控制对本地资源的访问CodeAccessSecurity提供了应用程序对本地资源访问的权限应用程序具备“刚好足够”的权限例如:不需要进行文件IO操作的应用,就不需要文件IO的权限对资源权限的分配是基于代码的特征,而不是用户用证据来决定代码的特征用策略来评估证据,以决定哪些权限可以授予给应用程序Evidence+Policy=Permissions加载程序集收集证据HashStrongnamePublisherZoneURLEnterpriseMachineUserAppDomain分配权限集权限是否被授予?请求权限程序集执行权限保护的操作继续执行程序的操作(或者说访问资源)Yes产生安全异常No根据区域(Zone)已设定的权限Permission操作LocalIntranetInternetFileDialog通过对话框打开/保存文件YesNoFileDialog通过对话框打开文件YesYesIsolatedStorageFile根据用户和程序集将存储隔离YesNoIsolatedStorageFile根据用户,程序集和应用程序域将存储隔离YesYesPrinting通过编程打印到默认打印机YesNoPrinting只能通过指定的对话框打印YesYesReflection编译器生成程序集YesNoSecurity对一个已分配的权限断言YesNoSecurity执行YesYesSecurity调用非托管代码YesNoUI不限制YesNoUI将数据复制到剪贴板,限制从剪贴板粘贴YesYesUI显示消息和对话框YesYesUI安全的最前端窗口和子窗口YesYesWeb用https来连接原始站点YesYes证据的7种类型对程序集进行强名称签名是一种比较容易而且可靠的方法来建立代码标识证据描述应用程序目录应用程序安装的地方Hash通过加密算法获得的一组判断程序集区别的值,与版本号无关发行者发行者的名称站点初始的站点,例如区域,例如InternetZone对程序集执行强名称签名强名称对代码添加标识,并且可以防止别人对代码的篡改强名称包括:程序集的简单名称程序集的版本号程序集的区域(Culture)代码对程序集代码进行数字哈希签名为应用程序生成健值对(KeyPairs)sn-kIssueVision.snkAssembly:AssemblyKeyFile(..\..\IssueVision.snk)设置安全性的工具强名称SN.exe生成强名称公钥/密钥对文件强名称的主要工具改变安全策略设置.NET配置工具.NET向导CasPol.exe命令行工具请慎重更改各项配置!分配正常运行的最小权限部署安全策略通过SMS或则组策略部署在安装包里面同应用一起部署通过.NET配置插件创建MSISystem.Security.Policy名称空间包括可编程的方法来创建策略configurationmscorlibsecuritypolicyPolicyLevelversion=1SecurityClassesSecurityClassName=AllMembershipCondition“...Web服务安全性大多数Web服务使用认证防止对web服务的匿名使用对有些服务,也包括:授权确保用户有相应的权限来执行操作加密防止恶意的数据操作授权选择Windows授权(NTLM)内部网应用最简单的选择自定义授权方式建议采用在与非WS-Security平台交互时采用在WSE2.0出现之前的一种方法WebServicesEnhancements(WSE)2.0基于标准,跨平台用标准的SOAPheader来传递调用者安全信息保护业务逻辑层问题:.NET可以被反编译,从而暴露了业务逻辑解决方法:搅拌(Obfuscation)对.NET程序集中的符号重新命名,从而非常难以反编译工具PreEmptive开发的Dotfuscator社区版被集成在VisualStudio®.NET2003中Dotfuscator保护.NET代码被反编译总结:安全性的最佳实践采用一种结构化的方法来评估威胁,并将此作为开发流程的一部分访问数据时,采用尽可能低的权限不要经常以数据库管理员身份运行!以尽可能小的权限运行代码不要以系统管理员身份运行!将保密信息加密,并存储在安全的地方用强名称对程序集签名资源预防安全威胁msdn.microsoft.com/library/en-us/dnnetsec/html/CL_SecRevi.asp微软安全更新支持中心support.microsoft.com/default.aspx?pr=security中文安全门户资源(续)TechNet:产品与技术安全中心:安全主题解决方案msdn.microsoft.com/library/en-us/dnnetsec/html/THCMGlance.asp©2003-2004MicrosoftCorporation.Allrightsreserved.Thispresentationisforinformationalpurposesonly.Microsoftmakesnowarranties,expr