C#源代码安全缺陷与提高源代码质量解决方案-WCF服务配置安全

  C#源代码安全缺陷与提高源代码质量解决方案-WCF服务配置安全

C#源代码安全缺陷与提高源代码质量解决方案-WCF服务配置安全

 
 
WCF的安全体系
 
 
WCF的安全体系主要包括三个方面:
1. 传输安全(Transfer Security)
2. 授权或者访问控制(Authorization OR Access Control)
3. 审核(Auditing)。
 
而传输安全又包括两个方面:认证(Authentication)和消息保护(Message Protection)。
 
认证帮助客户端或者服务确认对方的真实身份,而消息保护则通过签名和加密实现消息的一致性和机密性。
 
WCF采用两种不同的机制来解决这三个涉及到传输安全的问题,我们一般将它们称为不同的安全模式,即Transport安全模式和Message安全模式。
 
 

 

 
(1)  配置管理:WCF错误配置:匿名的消息客户端
 
 
匿名身份认证可能导致一系列的问题,包括信息泄露,拒绝服务和任意代码执行。
 
 

XML Code:

<binding name="basicBinding">
<security mode="Message">
<transport clientCredentialType="None" /> //不安全的配置
</security>
</binding>

//来源:C/S框架网 | www.csframework.com | QQ:23404761


 
 
如何防止:
 
 
服务应该对客户端进行身份认证,限制匿名用户访问所有功能。
 
 
 

 
 
 
(2) 配置管理:WCF错误配置:匿名的传输客户端
 
 
匿名身份认证可能导致一系列的问题,包括信息泄露,拒绝服务和任意代码执行。
 
 

XML Code:

<binding name="basicBinding">
<security mode="Transport">
<transport clientCredentialType="None" /> //不安全的配置
</security>
</binding>

//来源:C/S框架网 | www.csframework.com | QQ:23404761
 
 

如何防止:
 
 
服务应该对客户端进行身份认证,限制匿名用户访问所有功能。
 
 

 
 
(3) 配置管理:WCF错误配置:调试信息
 
 
将IncludeExceptionDetailInFaults设置为true,可以使异常信息传入客户端,以便进行调试。
攻击者可以利用从调试输出中获得的附加信息,对应用程序所用的框架、数据库或其他资源发起攻击。
 
 

XML Code:

<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>


//来源:C/S框架网 | www.csframework.com | QQ:23404761


如何防止:
 
 
程序发布或部署时应该配置为不显示调试信息,以免造成信息泄露。
设置<serviceDebug>标签的includeExceptionDetailInFaults值为False,从而避免应用程序输出调试信息可能导致的安全隐患。
 
 
 

 
 
 
(4) 配置管理:WCF错误配置:未启用安全模式
 
 
应用程序中没有对传输安全性或消息安全性进行严格控制,无法保证消息的完整性或保密性。将WCF安全绑定设为None时,将会禁用传输安全性和消息安全性。
 
 
下列配置可将安全绑定模式设为None,该做法是不安全的。
 

XML Code:

<system.serviceModel>
<bindings>
<binding name="MyBinding">
<security mode="None"/>
</binding>
</bindings>
</system.serviceModel>

//来源:C/S框架网 | www.csframework.com | QQ:23404761
 
 

如何防止:
 
 
将安全模式设置为Transport,Message或者TransportWithMessageCredential,来定义程序的传输安全性或消息安全性。
 
 

 
 
 
(5) 配置管理:WCF错误配置:启用安全传输
 
 
应用程序使用依赖传输模式传输安全的WCF终结点。传输模式是最不安全的选项,应避免使用。传输安全指定的保密性、完整性和认证由传输层机制(如HTTPS)提供。使用HTTPS之类的传输协议时,此模式具有明显优势,其性能高效。此安全模式的不足在于这种安全机制分别应用在通信路径中的每一个跃点上,导致通信容易受到中间人攻击。WCF还提供另外两种传输安全模式,可优先采用这两种模式:消息安全模式和带消息凭据的传输安全模式。消息安全模式使用WS-Security规范,可在消息级别确保保密性、完整性和认证。这实现了端到端的安全性以及传输方法的灵活性。然而,这会降低性能。最终解决方案是将传输和方法结合起来使用,这也就是带消息凭据的传输安全模式。消息安全模式用于验证客户端;传输安全模式用于验证服务器并确保保密性和完整性。其效率和纯传输安全模式相当。
 
 
 
如何防止:
 
 
应用程序使用依赖传输模式传输安全的WCF终结点。传输模式是最不安全的选项,应避免使用(避免设置模式为Transport)。
 
 

XML Code:

<!--wsHttpBindings配置 -->
<wsHttpBinding>
<binding name="WSHttpBindings" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>

<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"/>
<message clientCredentialType="Windows" establishSecurityContext="false" negotiateServiceCredential="true"/>
</security>

</binding>
</wsHttpBinding>



 
 
 
(6) 配置管理:WCF错误配置:缺少审计跟踪
 
 
 
在发生安全事件后没有进行适当的审计跟踪,可能会影响合法的操作执行。WCF可以记录成功或失败的认证尝试。通过记录失败的认证尝试,可以知道非法的恶意攻击。同样,记录成功的认证事件可以在合法帐户受到侵害时提供有用的审计跟踪。
 
 
如何防止:
 
 
 
通过配置文件开启审计安全事件的服务。
 
 

XML Code:

<serviceSecurityAudit 
auditLogLocation="Application" 
suppressAuditFailure="False" 
serviceAuthorizationAuditLevel="SuccessOrFailure"
messageAuthenticationAuditLevel="SuccessOrFailure" />



 
其中,auditLogLocation确定了应该用什么事件日志来审计;可以是默认,应用或者安全。messageAuthenticationAuditLevel和serviceAuthorizationAuditLevel属性可以是None,Success,Failure或者SuccessOrFailure。最后,suppressAuditFailure属性可以设置为true来阻止当系统失败并记录一条审计消息时抛出的一个异常。使用上述ServiceSecurityAuditBehavior选项来运行一个服务将导致MessageAuthentication和ServiceAuthorization事件(失败和成功的认证/授权)被写到系统应用日志中。每个入口将包含诸如调用者身份,时间,目标服务URI和协议。任何消息失败都应该被写入事件日志中,然后抛出一个异常。
 
 
 
(7) 配置管理:WCF错误配置:服务枚举
 
 
公开泄露服务相关的信息,可让攻击者了解如何利用这些重要信息对系统发起攻击。服务的元数据可能包含不应该公开访问的敏感信息,如果<serviceMetadata>标签启用元数据发布功能,将导致相关敏感信息的泄露。
 
 
如何防止:
 
 
应设置<serviceMetadata>标签的HttpGetEnabled为false,禁用元数据发布功能,从而避免敏感信息泄露。
 
 

XML Code:

<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/>



 
(8) 配置管理:WCF错误配置:客户端验证
 
 
WCF客户端有不同的验证方式:None、UserName、Windows、Certificate、IssuedToken。如果在未经加密的通道上使用Username及明文密码,则攻击者可以通过截取SOAP消息的方式获取密码。
 
 
下列WCF服务提供程序配置使用了此UsernameToken:
 
 

XML Code:

<security mode="Message">
<message clientCredentialType="UserName" />

//来源:C/S框架网 | www.csframework.com | QQ:23404761


如何防止:
 

1. 传输数据时采取加密形式传输;
 
2. 使用X.509证书验证方式进行验证,要求客户端提供有效的证书凭证。或者使用指纹,基因等技术来代替现有的WCF客户端验证方式。
 
 
 
(9) 配置管理:未禁用MIME嗅探
 
 
Web服务器的每一个文件都有对应的MIME类型(也称为content-type),描述文件内容的属性,比如图片、文件、应用等。有些资源的Content-Type错误或者未定义时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。利用浏览器的这个特性,攻击者甚至可以让原本应该解析为图片的请求被解析为JavaScript。
 
 
如何防止:
 
 
配置X-Content-Type-Options值为nosniff。
 
 

XML Code:

<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>


//来源:C/S框架网 | www.csframework.com | QQ:23404761
 
 
 
 


C#源代码安全缺陷与提高源代码质量解决方案
 
 
 


C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:WCF:SecurityNegotiationException 调用方未由服务进行身份验证
下一篇:WCF错误“这可能是因为在HTTPS情况下使用HTTP.SYS未正确配置服务器证书”
评论列表

发表评论

评论内容
昵称:
关联文章

C#源代码安全缺陷提高源代码质量解决方案-WCF服务配置安全
C#源代码安全缺陷提高源代码质量解决方案
WCF采用Message安全模式运行出错:安全包中没有可用的凭证解决方案
C#中提高保存jpg图像的质量
使用批处理文件(.bat)安装WCF服务失败解决方案
WCF开发环境客户端调试服务端跟踪代码不能命中断点解决方案
WCF服务保持在线状态(Keep Alive),长时间闲置状态下不断线解决方案
WCF服务错误:MessageSecurityException: 从另一方收到未进行安全处理或安全处理不正确的错误
WCF:(400) Bad Request 错误解决方案
承载 Service Host 和使用 WCF 服务
CSFramework C#代码生成器生成窗体界面UI,BLL,DAL,Model,WCF接口层源代码
WCF开发框架之WSHttpBinding参数配置(C#代码配置+App.Config两种方案)
连接WCF服务错误:调用方未由服务进行身份验证,无法满足对安全令牌的请求
解决方案WCF客户端无法获取服务端抛出的异常详细信息
WCF顶级安全:HTTPS协议SSL证书+Windows认证+TransportWithMessageCredential安全模式
WCF服务是如何保证安全的,如何设置(即权限)
MES系统 - 质量管理模块
C#.NET SQL数据库备份还原解决方案
WCF快速开发框架 - IIS承载WCF服务wsHttpBindings配置详解(HTTP协议)
WCF开发框架 - NetTcpBinding配置web.configC#代码配置