.Net中安全威胁和对策

安全威胁和对策

威胁 目标 风险 攻击技术 对策

攻击者获得对缓存的访问权。

缓存中的用户数据

危及敏感用户数据的安全。

攻击者直接绕过脱机块的基础结构,对缓存数据进行访问。

加密数据并保护访问该缓存所需的凭据。

攻击者获得对队列的访问权,并将消息填充在其中。

队列

消息中可能会包含能够中断甚至终止服务的恶意数据。

攻击者绕过脱机块的基础结构,直接填充队列。

确保通过适当的凭据对队列的访问权进行限制,同时也保护该凭据,最好使用数据保护应用程序接口 (DPAPI)。

攻击者获得对用于访问队列和缓存的凭据的访问权。

队列和缓存的凭据

可能会危及凭据的安全。

如果存储在配置中的数据未加密,则可用于特权用户。

使用 DPAPI 或等效 API 来存储敏感信息。

攻击者获得对用户凭据的访问权。

存储在客户端应用程序中的用户凭据

当应用程序遇到错误并将错误记录到日志中,或者当计算机受到攻击时,可能会危及用户凭据的安全。

计算机受到攻击后,用户凭据会作为错误报告的一部分存储在日志中,而特权用户可以对该日志进行访问。

使用 .NET framework 中的 CredentialCache 类来存储凭据,即使在内存中也是如此。

攻击者欺骗业务功能服务。

用户和应用程序数据

可能会危及发送到应用程序的用户和应用程序数据的安全。

网络探测

验证为服务生成的代理具有有效终结点。

攻击者在数据传输到 Web 服务的过程中获得对数据的访问权。

数据

可能会危及数据的安全。

网络探测

使用安全传输(例如 SSL 或 IPSec),并在通过网络发送数据前对其进行加密。

攻击者欺骗下载程序集或部署恶意程序集。

系统

可能会危及运行该应用程序的系统的安全。

可能的攻击包括欺骗程序集和部署服务器中的恶意程序集。

要防止欺骗程序集,请使用受信任的第三方证书服务,如 VeriSign。要防止部署服务器上的恶意程序集,请加密并数字签名存储在那里的程序集,并在客户端下载时验证程序集。

攻击者在客户端上部署恶意程序集。

系统和用户数据

可能会危及用户数据和运行该应用程序的系统的安全。

在客户端上部署恶意程序集。

公开地应用到组成应用程序的所有程序集,并使用 SecurityAction.FullDemand,这样调用堆栈中的所有程序集都将验证公钥 StrongNameIdentityPermission(SecurityAction.FullDemand, PublicKey="")。

攻击者访问非托管资源

系统

可能会危及运行该应用程序的系统的安全

如果使用非托管资源的代码具有所需的权限,则可能会受到引诱攻击。

要求 SecurityPermission 访问与非托管资源进行交互的类中的非托管资源。

攻击者使用反射来创建类实例。

系统和用户数据

特权代码可能会被恶意程序集运行,从而危及系统和用户数据的安全。

引诱攻击

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

攻击者使用重播攻击。

提供业务功能的服务

可能会危及业务功能的安全。

在传输数据的过程中对其进行探测。

使用安全传输(例如 SSL 或 IPSec),并对消息使用加密和数字签名。

攻击者获得对事件日志的访问权。

系统和用户数据

可能的风险包括:攻击者可能使用恶意日志消息终止系统;大量错误消息可能会屏蔽审核跟踪,因为日志太大而无法进行分析;根据日志的配置,可能会覆盖有效数据。

使用错误记录的基础结构,攻击者可以将大量消息记录到日志中。

可能的对策包括:在访问日志以执行读取或写入操作时要求正确的权限;对于 Windows 事件日志,请仅使用 EventLogPermission 来写入日志,除非组件同时支持读取和写入;不提供更新或删除日志的权限;将日志配置为在满载时发出错误,而不是覆盖它本身。

攻击者使用引诱攻击。

系统和用户数据

可能会危及系统和用户数据的安全。

恶意程序集调用受信任的程序集来代表它执行操作。

使用 StrongNameIdentityPermissionSecurityAction.FullDemand 来确保调用堆栈中的所有程序集都来自签名方。


你可能感兴趣的:(架构分析)