Citrix ADC

HTML跨站脚本检查

HTML跨站脚本(Cross-Site Scripting)检查检查用户请求的头部和POST主体,以防止可能的跨站脚本攻击。如果它发现一个跨站点脚本,它要么修改(转换)将攻击变为无害的请求,或阻止该请求。

注意:

HTML跨站点脚本(Cross-Site Scripting)检查只适用于内容类型、内容长度等。它对cookie不起作用。还要确保在Web应用程序防火墙配置文件中启用了' checkRequestHeaders '选项。

您可以通过使用HTML跨站点脚本来防止受保护网站上的脚本被滥用同源规则该规则规定脚本不能访问或修改任何服务器上的内容,只能访问它们所在的服务器。任何违反同源规则的脚本都称为跨站脚本,使用脚本访问或修改另一台服务器上的内容的实践称为跨站脚本。跨站脚本之所以是一个安全问题,是因为允许跨站脚本的web服务器可能会被不在该web服务器上的脚本攻击,而被攻击者所拥有和控制的另一个web服务器攻击。

不幸的是,许多公司都安装了大量javascript增强的web内容,这违反了同源规则。如果在这样的站点上启用HTML跨站点脚本检查,则必须生成适当的异常,以便检查不会阻止合法活动。

Web应用程序防火墙为实现HTML跨站点脚本保护提供了各种操作选项。除了日志统计数据而且学习动作,你也可以选择改变跨站点脚本通过对提交请求中的脚本标记进行实体编码,使攻击变得无害。如果不只是检查查询参数,还要检查整个URL以检测跨站脚本攻击,则可以配置“检查跨站脚本攻击的完整URL”参数。您可以配置InspectQueryContentTypes参数检查请求查询部分,以防止针对特定内容类型的跨站点脚本攻击。

您可以部署松弛来避免误报。Web App Firewall学习引擎可以提供配置放松规则的建议。

要为应用程序配置优化的HTML跨站点脚本保护,请配置其中一个操作:

  • -如果启用block,如果在请求中检测到跨站点脚本标记,则会触发block动作。
  • 日志-如果你启用了日志功能,HTML跨站脚本检查会生成日志消息,表明它所采取的操作。如果禁用了block,则会为检测到跨站点脚本违规的每个报头或表单字段生成单独的日志消息。但是,当请求被阻止时,只生成一条消息。类似地,为转换操作生成每个请求1条日志消息,即使跨站点脚本标记在多个字段中进行转换也是如此。您可以监视日志,以确定对合法请求的响应是否被阻止。日志消息数量的大量增加可能表明试图发起攻击。
  • 统计数据-如果启用,stats特性将收集有关违规和日志的统计信息。统计计数器的意外激增可能表明您的应用程序受到了攻击。如果合法的请求被阻止,您可能必须重新查看配置,以确定是否必须配置新的放松规则或修改现有的规则。
  • 学习-如果你不确定哪些放松规则可能最适合你的应用程序,你可以使用学习功能生成HTML跨站点脚本规则建议基于学习的数据。Web App Firewall学习引擎对流量进行监控,并根据流量观察值提供学习建议。为了在不影响性能的情况下获得最佳收益,您可能希望在短时间内启用学习选项,以获得规则的代表性样本,然后部署规则并禁用学习。
  • 改变跨站点脚本-如果启用,Web应用防火墙会对匹配HTML跨站脚本检查的请求进行以下更改:
    • 左尖括号(<)相当于HTML字符实体(<)
    • 右尖括号(>)相当于HTML字符实体(>)

这确保浏览器不会解释不安全的html标记,例如< >脚本,从而运行恶意代码。如果您同时启用了请求头检查和转换,那么在请求头中发现的任何特殊字符也将被修改。如果您受保护网站上的脚本包含跨站点脚本功能,但您的网站不依赖这些脚本正确运行,您可以安全地禁用阻塞并启用转换。此配置确保没有合法的网络流量被阻止,同时阻止任何潜在的跨站点脚本攻击。

  • 检查跨站点脚本的完整url.如果启用了对完整url的检查,Web App Firewall将检查整个url以防止HTML跨站脚本攻击,而不是只检查url的查询部分。
  • 检查请求头.如果启用了请求报头检查,Web应用防火墙将检查HTML请求的报头是否存在跨站点脚本攻击,而不仅仅是url。如果您使用GUI,您可以在Web App Firewall配置文件的Settings选项卡中启用此参数。
  • InspectQueryContentTypes.如果配置了请求查询检查,则应用防火墙针对特定内容类型的请求查询进行跨站脚本攻击检查。如果使用图形界面,可以在App Firewall配置文件的“设置”页签中配置该参数。

重要的是:

作为流更改的一部分,Web App Firewall对跨站点脚本标记的处理也发生了更改。此更改适用于11.0版本以后的版本。此更改也适用于10.5的增强版本。E支持请求端流。在早期版本中,出现左括号(<)或右括号(>),或同时出现左括号和右括号(<>)都被标记为跨站点脚本违规。在包含对请求端流支持的构建中,行为发生了变化。只有右括号字符(>)不再被认为是攻击。即使出现了开括号字符(<),请求也会被阻止,并被视为攻击。标记跨站点脚本攻击。

跨站点脚本细粒度松弛

Web App Firewall提供了一个选项,可以让特定的表单字段、报头或Cookie免于跨站点脚本检查。通过配置放松规则,可以完全绕过对其中一个或多个字段的检查。

Web App Firewall允许您通过微调放松规则来实现更严格的安全性。应用程序可能需要允许特定模式的灵活性,但是配置放松规则以绕过安全检查可能会使应用程序容易受到攻击,因为目标字段不受任何跨站点脚本攻击模式的检查。跨站点脚本细粒度放松提供了允许特定属性、标记和模式的选项。其余的属性、标记和模式被阻塞。例如,Web应用防火墙目前有一个默认的超过125个拒绝模式集合。因为黑客可以在跨站点脚本攻击中使用这些模式,Web应用程序防火墙将它们标记为潜在威胁。您可以放松一个或多个被认为对特定位置安全的模式。其余的潜在危险的跨站点脚本模式仍然被检查目标位置,并继续触发安全检查违规。你现在有了更严格的控制。

用于松弛的命令有可选参数值类型而且值表达式.值类型可以为空,也可以选择一个选项标签属性模式.取值类型为空,表示该URL的配置字段不受跨站点脚本检查检查。如果选择值类型,则必须提供值表达式。可以指定值表达式是正则表达式还是文本字符串。当输入与允许和拒绝列表匹配时,只有在松弛规则中配置的指定表达式被豁免。

Web App Firewall有以下跨站点脚本内置列表:

  1. 允许的属性:有52个默认允许的属性,例如,简写的accesskey对齐alt告诉我们边境细胞填充单元格间距字符charoff字符集等等
  2. 允许标记跨站点脚本:有47个默认允许的标记,例如,地址basefont后面引用bgbr标题中心引用dd等等
  3. 被拒绝的跨站点脚本模式:有129种默认被拒绝的模式,例如,FSCommandjavascript:onAbortonActivate等等

警告

Web App Firewall动作url是正则表达式。配置HTML跨站脚本放松规则时,可以指定的名字,值表达式是字面的或正则表达式。正则表达式功能强大。特别是如果您不完全熟悉pcre格式的正则表达式,请仔细检查您编写的任何正则表达式。确保它们确切地定义了您想要添加为异常的规则,而不是其他的。不小心使用通配符,特别是使用点-星号(.*)元字符/通配符组合,可能会产生您不想要的结果,例如阻止访问您不想阻止的web内容,或者允许HTML跨站点脚本检查本应阻止的攻击。

点考虑:

  • 值表达式是一个可选参数。字段名可能没有任何值表达式。
  • 一个字段名可以绑定到多个值表达式。
  • 值表达式必须分配值类型。跨站点脚本值类型可以是:1)Tag, 2) Attribute,或3)Pattern。
  • 每个字段名/URL组合可以有多个放松规则
  • 表单字段名和动作url不区分大小写。

通过命令行配置HTML跨站脚本检查

使用命令行配置HTML跨站点脚本检查动作和其他参数

如果使用命令行方式,可以输入以下命令配置HTML跨站脚本检查:

  • 设置appfw概要“参数说明在页面底部。”)
  • -crossSiteScriptingAction (([block] [learn] [log] [stats]) | [**none**])
  • 设置appfw概要“参数说明在页面底部。”)
  • **-crossSiteScriptingTransformUnsafeHTML** (ON | OFF)
  • 设置appfw概要参数说明在页面底部。
  • -crossSiteScriptingCheckCompleteURLs (ON | OFF)
  • 设置appfw概要参数说明在页面底部。
  • - checkRequestHeaders (ON | OFF)参数说明在页面底部。”
  • - CheckRequestQueryNonHtml (ON | OFF)参数说明在页面底部。”

使用命令行配置HTML跨站点脚本检查放松规则

使用bind或unbind命令添加或删除绑定,具体操作如下:

  • bind appfw profile -crossSiteScripting [isRegex (REGEX | NOTREGEX)] [-location ] [-valueType (Tag|Attribute|Pattern) [] [-isValueRegex (REGEX | NOTREGEX)]]
  • unbind appfw profile -crossSiteScripting [-location ] [-valueType (Tag |Attribute|Pattern) []]

使用GUI配置HTML跨站脚本检查

在GUI中,您可以在窗格中为与您的应用程序相关联的概要文件配置HTML Cross-Site Scripting检查。

使用GUI配置或修改HTML跨站脚本检查

  1. 导航到应用防火墙>配置文件,选中目标配置文件,单击编辑
  2. 高级设置窗格中,单击安全检查

安全检查表显示所有安全检查的当前配置动作设置。您有两个配置选项:

a.如果需要启用或禁用日志统计数据,学习操作HTML跨站脚本时,可以选中或清除表中的复选框,单击好吧,然后按保存并关闭关闭安全检查窗格。

b.如果需要配置更多选项,双击HTML跨站点脚本编制,或选中该行,单击动作设置,显示以下选项:

改变跨站点脚本转换不安全的脚本标签。

检查跨站点脚本的完整url-不是只检查URL的查询部分,而是检查完整的URL是否跨站脚本违规。

更改上述任何设置后,单击好吧以保存更改并返回到安全性检查表。如果需要,您可以继续配置其他安全检查。点击好吧以保存您在“安全性检查”部分中所做的所有更改,然后单击保存并关闭关闭“安全检查”窗口。

启用或禁用检查请求头的设置,高级设置窗格中,单击配置文件设置.在常见的设置,选中或清除检查请求头复选框。点击好吧.您可以使用概要文件设置窗格右上角的X图标关闭此部分,或者,如果您已经完成了该概要文件的配置,您可以单击完成回到应用防火墙>配置文件

启用或禁用检查请求查询非HTML的设置,高级设置窗格中,单击配置文件设置.在常见的设置,选中或清除检查请求查询非HTML复选框。点击好吧.您可以使用控件右上角的X图标配置文件设置窗格以关闭此部分,或者,如果您已完成此概要文件的配置,您可以单击完成回到App Firewall >配置文件

使用GUI配置HTML跨站脚本放松规则

  1. 导航到应用防火墙>配置文件,选中目标配置文件,单击编辑
  2. 高级设置窗格中,单击放松规则
  3. 在“放松规则”表中,双击HTML跨站点脚本编制条目,或选中该条目并单击编辑
  4. HTML跨站点脚本放松规则对话框,执行添加编辑删除启用,或禁用松弛规则的运算。

请注意

添加新规则时,将值表达式字段不显示,除非您选择标签属性模式选项值类型字段。

使用可视化工具管理HTML跨站点脚本放松规则

要查看所有放松规则的综合视图,可以突出显示HTML跨站点脚本编制在“放松规则”表中,单击视觉型的人.用于部署放松的可视化工具为您提供了这样的选项添加新规则或编辑现有的一个。你也可以启用禁用通过选择一个节点并单击松弛可视化器中相应的按钮来生成一组规则。

使用GUI查看或自定义跨站点脚本模式

您可以使用GUI查看或自定义允许跨站点脚本编写的属性或允许标记的默认列表。您还可以查看或自定义被拒绝的跨站点脚本模式的默认列表。

中指定了默认列表应用防火墙>签名>默认的签名.如果没有将任何签名对象绑定到配置文件,则配置文件将使用“默认签名”对象中指定的默认跨站脚本允许和拒绝列表进行跨站脚本安全检查处理。在默认签名对象中指定的标签、属性和模式是只读的。您不能编辑或修改它们。如果需要修改或更改这些签名,请复制“默认签名”对象,创建自定义签名对象。在新的自定义签名对象中的允许或拒绝列表中进行更改,并在正在处理要使用这些自定义允许和拒绝列表的流量的配置文件中使用此签名对象。

  1. 使用实例查看默认的跨站脚本模式。

一个导航。应用防火墙>签名中,选择默认的签名,然后单击编辑.然后单击管理SQL/跨站点脚本模式

管理SQL/跨站脚本路径表中显示了与跨站点脚本相关的三行:

xss /允许/属性

xss /允许/标记

xss /拒绝/模式

b.选择一行,单击管理元素显示Web应用程序防火墙使用的相应跨站点脚本元素(标签、属性、模式)跨站点脚本编制检查。

  1. 自定义跨站点脚本元素:可以编辑自定义签名对象,自定义允许的标签、允许的属性和禁止的模式。您可以添加新的条目或删除现有的条目。

一个导航。应用防火墙>签名,选中待配置的自定义签名,单击编辑.点击管理SQL/跨站点脚本模式来显示管理SQL/跨站点脚本路径表格

b.选择跨站脚本行。

我点击。管理元素,添加编辑删除对应的跨站点脚本元素。

2点击删除删除所选行。

警告:

在删除或修改任何默认的跨站点脚本元素或删除跨站点脚本路径以删除整个行之前,必须谨慎。签名规则和跨站点脚本安全检查依赖于这些元素来检测攻击,以保护您的应用程序。如果在编辑过程中删除了所需的模式,定制跨站点脚本元素会使应用程序容易受到跨站点脚本攻击。

使用学习功能与HTML跨站点脚本检查

当“学习”动作启用时,Citrix Web App Firewall学习引擎将监视流量并学习跨站点脚本URL违规行为。您可以定期检查跨站点脚本URL规则,并将其部署到假阳性场景中。

注意:

在集群配置中,所有节点必须具有相同的版本,才能部署跨站点脚本URL规则。

HTML跨站脚本学习增强.在Citrix ADC软件的11.0版本中引入了Web应用程序防火墙学习增强。为了部署细粒度的HTML跨站点脚本放松,Web App Firewall提供了细粒度的HTML跨站点脚本学习。学习引擎就观察到的值类型(标签、属性、模式)和在输入字段中观察到的相应值表达式提出建议。除了检查被阻塞的请求以确定当前规则是否过于严格,是否需要放宽之外,您还可以检查学习引擎生成的规则,以确定哪些值类型和值表达式触发了违规,需要在放宽规则中处理。

注意:

Web App Firewall的学习引擎只能区分名称的前128个字节。如果一个表单有多个字段,其名称与前128字节匹配,那么学习引擎可能无法区分它们。类似地,部署的放松规则可能会无意中放松所有这些字段,使其不受HTML跨站点脚本检查的影响。提示

超过12个字符的跨站点脚本标记不能被正确学习或记录。

如果需要更大的标记长度来进行学习,可以在AS_cross-site scripting_ALLOWED_TAGS_LIST“x”的长度。

使用命令行界面查看或使用学习到的数据

在命令提示符下,键入以下命令之一:

  • show appfw learningdata crossSiteScripting
  • rm appfw learningdata -crossSiteScripting [] [ ]
  • export appfw learningdata **crossSiteScripting* .使用实例

使用GUI查看或使用学习到的数据

  1. 导航到应用防火墙>配置文件,选中目标配置文件,单击编辑
  2. 高级设置窗格中,单击学习规则.您可以选择HTML跨站点脚本编制条目,双击它来访问学到的规则。该表显示字段名,一个引发反应的URL值类型价值,支安打列。您可以部署学习到的规则,或者在将规则作为放松规则部署之前编辑该规则。要丢弃规则,可以选中它并单击跳过按钮。您一次只能编辑一条规则,但是可以选择部署或跳过多个规则。

选项还可以显示学习到的松弛的摘要视图HTML跨站点脚本编制条目,然后单击视觉型的人对所有学到的违规行为进行综合分析。可视化工具使管理学习到的规则变得容易。它在一个屏幕上展示了数据的全面视图,并方便通过单击对一组规则执行操作。可视化工具的最大优点是,它推荐用正则表达式来合并多个规则。您可以根据分隔符和操作URL选择这些规则的一个子集。通过从下拉列表中选择数字,您可以在可视化工具中显示25、50或75条规则。学习规则的可视化工具提供了编辑规则并将其作为放松项部署的选项。或者你可以跳过这些规则,忽略它们。

使用HTML跨站点脚本检查的日志特性

当启用日志操作时,HTML跨站脚本安全检查违规记录在审计日志中APPFW_cross-site脚本违规。Web应用程序防火墙同时支持Native和CEF日志格式。您也可以将日志发送到远端syslog服务器。

使用命令行访问日志消息

切换到shell,跟踪ns。日志的/var/log/文件夹访问与HTML跨站脚本违规相关的日志消息:

壳牌tail -f /var/log/ns.log | grep APPFW_cross-site scripting . txt

CEF日志格式的跨站点脚本安全检查违规日志示例:

7月11日00:45:51  10.217.31.98 CEF:0|Citrix|Citrix ADC| |APPFW|**APPFW_cross-site scripting**|6|src=10.217.253.62 geolocation=Unknown spt=4840 method=GET request=http://aaron.stratum8.net/FFC/CreditCardMind.html?abc\=%3Cdef%3E msg=**Cross-site script check failed for field abc=\"Bad tag: def"** cn1=133 cn2=294 cs1=pr_ffc cs2=PPE1 cs3=eUljypvLa0BbabwfGVE52Sewg9U0001 cs4=ALERT cs5=2015 act=**not blocked** 

跨站点脚本安全检查违规日志消息的示例,以本机日志格式显示转换操作

7月11日01:00:28  10.217.31.98 07/11/2015:01:00:28 GMT ns 0- pe -0: default APPFW **APPFW_cross-site scripting** 132 0:10.217.253.62 392-PPE0 eUljypvLa0BbabwfGVE52Sewg9U0001 pr_ffc http://aaron.stratum8.net/FFC/login.php?login_name=%3CBOB%3E&passwd=&drinking_pref=on &text_area=&loginButton=ClickToLogin&as_sfid= aaaaaavfqmyl68igvkrcn2pzehjfikm5e6ez9fl8ylviw_41avaatukye9n7ugthspeaxbb0ibx55jyvqoznivk_xwepstmyvwhxfuwl62winwrmrksedi - fc4llf **跨站脚本特殊字符在字段中看到<转换>** 

使用GUI访问日志消息

Citrix GUI包含一个用于分析日志消息的有用工具(Syslog Viewer)。您可以通过以下方式访问Syslog查看器:

  • 导航到应用防火墙>配置文件,选择目标配置文件,单击安全检查.突出了HTML跨站点脚本编制行并单击日志.当您直接从配置文件的HTML跨站点脚本检查访问日志时,GUI会过滤掉日志消息,只显示与这些安全检查违规相关的日志。
  • 您也可以通过导航进入“Syslog查看器”Citrix ADC>系统>审计.在审计信息部分,单击Syslog消息“Syslog查看器”链接,显示所有日志信息,包括其他安全检查违规日志。当请求处理过程中可能触发多个安全检查违规时,这对于调试非常有用。
  • 导航到应用防火墙>政策>审计.在审计消息部分中,单击Syslog消息“Syslog查看器”链接,显示所有日志信息,包括其他安全检查违规日志。

基于HTML的Syslog查看器提供了各种过滤选项,用于只选择您感兴趣的日志消息。选择日志消息HTML跨站点脚本编制检查,筛选选择APPFW选项的下拉列表中模块.的事件类型列表提供了丰富的选项集,以进一步完善您的选择。例如,如果您选择APPFW_cross-site脚本复选框并单击应用按钮,只有与HTML跨站脚本安全检查违规相关的日志消息出现在Syslog查看器中。

如果将光标放在特定日志消息的行中,则有多个选项,例如模块事件类型标识符客户端IP等等出现在日志消息的下面。您可以选择这些选项中的任何一个,以突出显示日志消息中的相应信息。

单击部署功能只在GUI中可用。您不仅可以使用Syslog查看器查看日志,还可以根据Web App Firewall安全检查违规的日志消息部署HTML跨站脚本放松规则。该操作的日志信息必须为CEF日志格式。单击以部署功能仅对由块(或非块)操作生成的日志消息可用。不能为关于转换操作的日志消息部署松弛规则。

如果要从Syslog查看器中部署松弛规则,请选中该日志消息。选中行的“Syslog查看器”框的右上角会出现复选框。选择复选框,然后从行动列表来部署松弛规则。编辑和部署部署,部署所有可作为行动选项。

控件部署的HTML跨站点脚本规则单击部署选项不包括细粒松弛建议。

通过图形化界面配置“单击”部署特性

  1. 在“Syslog查看器”中,选择APPFW模块选项。
  2. 选择APP_cross-site脚本随着事件类型对相应的日志消息进行过滤。
  3. 选中复选框以标识要部署的规则。
  4. 使用行动部署放松规则的选项下拉列表。
  5. 验证规则是否出现在相应的松弛规则部分中。

HTML跨站点脚本违规的统计

当启用统计操作时,当Web应用程序防火墙为该安全检查采取任何操作时,HTML跨站脚本检查的计数器将增加。包括流量、违规和日志的“速率”和“总数”。日志计数器的增量大小可以根据所配置的设置而变化。例如,如果启用了阻止操作,那么对包含3个HTML跨站点脚本违规的页面的请求将使统计计数器增加1,因为一旦检测到第一个违规,该页面就会被阻止。但是,如果禁用了块,则处理相同的请求会使违反的统计计数器和日志增加3,因为每个违反都会生成单独的日志消息。

使用命令行显示HTML跨站脚本检查统计信息

在命令提示符处,输入:

> sh appfw stats . sh

要显示特定配置文件的统计信息,使用以下命令:

> **stat appfw配置文件** <配置文件名称>

使用GUI显示HTML跨站脚本统计信息

  1. 导航到安全>应用防火墙>配置文件>统计信息
  2. 在右窗格中,访问统计数据链接。
  3. 使用滚动条可以查看HTML跨站脚本违规和日志的统计信息。统计表提供实时数据,每7秒更新一次。

突出了

  • 内置支持HTML跨站脚本攻击保护- Citrix Web App Firewall通过监控允许的属性和标签的组合,以及接收有效载荷中的拒绝模式,来防止跨站脚本攻击。跨站点脚本检查使用的所有内置默认允许标记、允许属性和拒绝模式都在/netscaler/default_custom_settings.xml文件中指定。
  • Customization -您可以更改默认的标签、属性和模式列表,以根据应用程序的特定需求自定义跨站点脚本安全检查检查。复制默认签名对象、修改现有项或添加新项。将此签名对象绑定到概要文件以使用自定义配置。
  • 混合的安全模型-签名和深度安全保护都使用与配置文件绑定的签名对象中指定的SQL/跨站脚本模式。如果没有将签名对象绑定到概要文件,则使用默认签名对象中提供的SQL/跨站点脚本模式。
  • 变换-注意以下转换操作:

转换操作独立于其他跨站点脚本操作设置工作。如果启用了transform,并且block、log、stats和learn都被禁用,那么跨站点脚本标记将被转换。

如果启用了块操作,则它优先于转换操作。

  • 细粒度放松和学习.对松弛规则进行微调,以从安全检查检查中放松跨站点脚本元素的子集,但检测其余元素。学习引擎根据观察到的数据推荐特定的值类型和值表达式。
  • 单击部署-在syslog查看器中选择一个或多个跨站点脚本违规日志消息,并将其部署为放松规则。
  • 字符集-配置文件的默认字符集必须根据应用程序的需要设置。缺省情况下,配置文件字符集设置为英文美国(ISO-8859-1)。如果接收到的请求没有指定的字符集,Web应用防火墙将按照ISO-8859-1处理该请求。如果使用其他字符集编码,则左括号字符(<)或右括号字符(>)将不会被解释为跨站点脚本标记。例如,如果请求包含UTF-8字符串"% uff1cscript % uff1e,但是在请求页面上没有指定字符集,那么跨站点脚本冲突可能不会被触发,除非配置文件的默认字符集指定为Unicode。