威胁和漏洞缓解 (Reporting Services)
本主题介绍可减少 Reporting Services 部署所面临威胁的方法和策略。
概述
报表服务器属于在外部存储内容和应用程序数据的无状态服务器。报表服务器安装所面临的最大威胁之一便是未经授权访问或篡改报表服务器数据库和配置文件。虽然不太明显但却同等重要的一个威胁是创建报表的方式以及哪些人拥有将内容发布到报表服务器的权限。报表定义是在服务器计算机上以完全信任的身份运行的程序集。报表定义可以包含同样在该服务器上运行的其他自定义程序集。如果报表或自定义程序集包含恶意代码,该代码将以请求该报表的用户的凭据在报表服务器上运行。其他不明显的威胁可能是由于无意中公开了敏感数据的报表设计所造成的。例如,如果雇员运行的报表使用雇员 ID 作为参数,他(她)不应该能够通过在报表 URL 中插入一个随机的 ID 来查看有关其他雇员的信息。最后,应考虑您的组织中的报表分发方式。可以对报表服务器进行配置,最大限度地降低将报表传递到组织外部的可能性。此外,可以使用文件系统权限和报表服务器权限来确保只有得到授权的用户才能打开报表。
本主题中的以下部分介绍其他威胁以及如何尽可能减少漏洞被利用的风险。
缓解对报表服务器的攻击
下表描述会影响服务器组件和配置设置的威胁及缓解操作。
功能或操作 |
威胁 |
缓解操作 |
---|---|---|
配置设置存储在报表服务器计算机上的 Web.config 文件和应用程序配置文件中。 |
攻击者可能会获得计算机的访问权限,找到未加密或未保护的配置文件,然后篡改文件内容。 |
设置文件权限。默认情况下,已向安装过程中创建的 Reporting Services 安全组授予了权限。 |
报表服务器 Web 服务处理通过 TCP/IP 连接发送的按需请求。 |
攻击者可能会启动采用以下形式的拒绝服务攻击: 将多个未经身份验证的请求定向到目标服务器。 将未完成且永远都不会完成的请求定向到目标服务器。 过大的请求;攻击者启动一个请求,然后向服务器发送一个大型负载。 |
报表服务器会在两分钟内删除所有未经身份验证的请求,这样可将拒绝服务攻击所产生的部分影响降至最低程度。此间隔固定为两分钟;您不能缩短此间隔。 如果攻击者通过对报表服务器执行上载操作来发起攻击,则可以减小 Machine.config 文件中 maxRequestLength 元素的值。默认情况下,ASP.NET 以 MB 为单位限制可上载到服务器应用程序的项目的大小。请注意,降低 maxRequestLength 值应该是一种临时措施。如果经常需要上载大型文件(如模型),应将该值改回到其先前的值。有关在 Reporting Services 安装中设置 maxRequestLength 的详细信息,请参阅报表和快照的大小限制。 |
Reporting Services 支持可扩展的体系结构,以便部署第三方数据处理、呈现和传递扩展插件。您还可以部署自定义的查询设计器。扩展插件必须以完全信任权限运行。 |
攻击者可能在某个自定义扩展插件中包括恶意代码。 |
仅部署来自您信任的用户或组织的扩展插件。 |
缓解对报表定义和报表模型的威胁
下表描述了对报表定义和模型文件产生影响的威胁及缓解操作。
功能或操作 |
威胁 |
缓解操作 |
---|---|---|
将报表、模型和共享数据源发布到报表服务器。 报表和模型连接到外部数据源并对其进行查询。 |
在发布操作过程中截获报表、模型和共享数据源。 截获传送到外部计算机的请求。 |
使用安全的加密通道(如 SSL/TLS/IPSec)进行连接。必须使用加密技术来保护通道。 在进行发送之前告知用户该通道不安全。 |
使用身份验证令牌或凭据连接到远程计算机和数据源。 |
在处理请求时截获身份验证数据。 |
使用安全的加密通道。 如果该通道不安全,则向用户告知这一情况。 遵循最小权限原则。检索报表中所使用数据的操作需要拥有数据源的只读权限。 |
报表 URL 在浏览器窗口的地址栏中显示参数值。 |
如果报表包含机密数据,请不要添加可以在 URL 中进行篡改的参数值。例如,如果某个参数化报表包含雇员 ID,则用户可以在 URL 中插入一个随机的雇员 ID 来查看其他用户的数据。 |
在发布报表以进行最终分发之前,请检查其 URL,验证参数值是否可以用随机值进行替换。 在设计报表时,请记住不应有任何与设置参数相关联的权限。以下为几个可能的缓解操作:
|
报表和模型包含数据源信息和查询。 |
如果泄露了数据源及其结构的信息,攻击者将会获悉可以利用的内部信息。 |
在允许用户修改报表模型之前,请设置模型项的安全性,限制用户对那些不希望用户在模型设计器中看到的模型项的访问。 设置文件权限。文件包括 .rdl、.rds、.smdl、.ds、.dsv 和 .smgl 文件。 默认情况下,如果使用的操作系统是 Windows XP 或更高版本,存储在本地用户文件夹中的文件只能由本地计算机上定义的用户组或帐户访问。 |
报表定义和共享数据源包含数据源连接字符串。连接字符串中可能会包含凭据。 |
如果报表文件受到威胁,攻击者可能会访问存储在数据库连接字符串中的数据库凭据。 |
将凭据与连接字符串分开存储。可以使用数据源属性页中的存储凭据选项来加密和存储用户帐户和密码。 |
报表和模型均是按需处理。 报表可以引用或包含自定义程序集。 报表可以包含自定义报表项或第三方控件。自定义报表项控件需要完全信任权限。 |
攻击者使用户相信并运行利用了嵌入式 Visual Basic 代码或数据库查询的报表,以便能够以用户的权限执行任意代码。 运行已经被篡改的报表或模型会导致缓冲区溢出、服务器崩溃或其他更坏情况。 |
限制有权发布报表和模型的用户的数量。 确保只有通过身份验证的用户才有权上载文件。 确保创作报表的用户了解如何创建可以抵御 SQL 注入、脚本注入和 HTML 注入攻击的脚本。 仅上载或发布来自您信任的人员的报表和模型。 仅安装或使用来自您信任的人员的自定义报表项控件。 在上载文件之前对其进行审查,以确认对自定义程序集的任何引用均有效。 对程序集设置文件权限,以便恶意用户无法覆盖它们。 |
在报表设计器中的“预览”选项卡中预览报表或模型时会创建可使用作者的凭据进行检索的缓存数据。 |
在报表作者的计算机上对报表进行预览的其他用户可能可以查看他(或她)本来不应查看到的报表数据。 |
当完成报表设计后将报表部署到测试服务器或位置。 |
缓解威胁和漏洞的常规步骤
应用以下最佳实践建议可以提高任何报表服务器部署的整体安全性:
关闭不使用的功能以减少攻击面。有关详细信息,请参阅如何打开或关闭 Reporting Services 功能。
使用 SSL 进行报表服务器连接。有关详细信息,请参阅配置报表服务器用于安全套接字层 (SSL) 连接。
在受限组用户可访问的文件夹中,将敏感或机密报表放在位于文件夹层次结构的最远分支处的文件夹中,从而创建支持可靠权限策略的文件夹层次结构。通过对报表服务器站点上的文件夹和特定项创建角色分配,保护发布到报表服务器的报表、模型、共享数据源和资源。由于该文件夹层次结构完全由用户进行定义,所以由您决定如何创建将所有具有类似用户访问权限的项分组到一起的文件夹层次结构。有关详细信息,请参阅保护文件夹。
要知道,按需报表是经过编译的编译程序集,它们以完全信任权限运行在打开报表的用户的凭据下。如果报表用户使用本地或域管理员凭据登录并随后打开了包含恶意脚本的报表,将会在不知情的情况下使用管理员权限运行该脚本。鼓励用户在查看报表时使用最小特权帐户。有关详细信息,请参阅 集成安全性和提升权限。
了解数据在报表中的检索方式和用法。如果报表包含敏感数据,请考虑使用模型作为数据源,以便可以应用安全筛选器和模型项安全性。有关详细信息,请参阅教程:对报表模型项应用安全筛选器。
了解报表的分发方式。订阅和传递功能是用于自动进行报表处理和分发所生成报表的强有力方法,但是为了避免未经授权的访问,您最好监视拥有网络文件夹的共享权限的人员并评估报表服务器电子邮件配置设置以确定是否需要限制电子邮件分发。有关详细信息,请参阅控制报表分发。