Citrix ADC

XML SQL注入检查

XML SQL注入检查检查用户请求是否存在可能的XML SQL注入攻击。如果它在XML有效负载中发现注入的SQL,它将阻塞请求。

XML SQL攻击可以将源代码注入到web应用程序中,这样就可以将其解释为有效的SQL查询并运行,以执行恶意的数据库操作。例如,可以发起XML SQL攻击,以获得对数据库内容的未经授权的访问或操作存储的数据。XML SQL注入攻击不仅常见,而且非常有害和昂贵。

对数据库用户的权限进行划分,可以在一定程度上保护数据库。必须只给所有数据库用户提供完成预期任务所需的特权,这样他们就不能运行SQL查询来执行其他任务。例如,不能允许只读用户写入或操作数据表。Web App Firewall XML SQL注入检查检查所有XML请求,为可能破坏安全性的未授权SQL代码注入提供特殊防御。如果Web应用程序防火墙在任何用户的任何XML请求中检测到未经授权的SQL代码,它就可以阻止该请求。

Citrix Web App Firewall检查SQL关键字和特殊字符的存在,以识别XML SQL注入攻击。一组默认的关键字和特殊字符提供了通常用于发起XML SQL攻击的已知关键字和特殊字符。Web App Firewall将三个字符,单引号(')、反斜杠()和分号(;)作为SQL安全检查处理的特殊字符。您可以添加新的模式,也可以编辑默认设置以自定义XML SQL检查。

Web应用程序防火墙为实现XML SQL注入保护提供了各种操作选项。你可以请求,日志ns.log文件中的一条消息,其中包含关于观察到的违规的详细信息和收集统计数据跟踪观察到的攻击数量。

除了操作之外,还可以为XML SQL注入处理配置一些参数。你可以检查SQL通配符.您可以更改XML SQL注入类型,并选择以下4个选项之一(SQLKeywordSQLSplCharSQLSplCharANDKeywordSQLSplCharORKeyword),指示在处理XML有效负载时如何计算SQL关键字和SQL特殊字符。XMLSQL注释处理参数为您提供了一个选项,可以指定在XML SQL注入检测期间需要检查或豁免的注释类型。

您可以部署松弛来避免误报。Web App Firewall XML SQL检查会对传入请求的有效负载执行,即使攻击字符串分布在多行中,也会被识别出来。的SQL注入字符串元素属性值。在特定条件下,可以通过放宽来绕过安检检查。日志和统计数据可以帮助您确定需要的放松。

行动选择

当XML SQL注入检查在请求中检测到SQL注入攻击字符串时,将应用一个操作。以下操作可用于为应用程序配置优化的XML SQL注入保护:

-如果启用了block,则只有当输入匹配XML SQL注入类型规范时才会触发block操作。例如,如果SQLSplCharANDKeyword配置为XML SQL注入类型,则如果请求不包含任何关键字,则不会阻止请求,即使在有效负载中检测到SQL特殊字符。如果XML SQL注入类型被设置为任何一种,这样的请求都会被阻塞SQLSplChar,或SQLSplCharORKeyword

日志-如果您启用日志功能,XML SQL注入检查将生成日志消息,指示它所采取的操作。如果block被禁用,则为每个位置生成单独的日志消息(元素属性),检测到XML SQL违规。但是,当请求被阻止时,只生成一条消息。您可以监视日志,以确定对合法请求的响应是否被阻止。日志消息数量的大量增加可能表明试图发起攻击。

统计数据-如果启用,stats特性将收集有关违规和日志的统计信息。统计计数器的意外激增可能表明您的应用程序受到了攻击。如果合法的请求被阻止,您可能必须重新查看配置,以确定是否需要配置新的放松规则或修改现有的规则。

XML SQL参数

除了块、日志和统计操作之外,您还可以为XML SQL注入检查配置以下参数:

检查XML SQL通配符通配符可以用来扩大结构化查询语言(SQL-SELECT)语句的选择范围。这些通配符操作符可以与就像不喜欢运算符将值与相似值进行比较。%(%)和下划线(_)字符经常用作通配符。百分比符号类似于MS-DOS中使用的星号(*)通配符,用于匹配字段中的零个、一个或多个字符。下划线类似于MS-DOS的问号(?)通配符。它匹配表达式中的单个数字或字符。

例如,可以使用以下查询执行字符串搜索,以查找名称包含D字符的所有客户。

SELECT * from customer WHERE name like "%D%"

下面的示例将操作符组合在一起,以查找以0作为第二个和第三个字符的任何工资值。

SELECT * from薪资为“_00%”的客户

不同的DBMS供应商通过添加额外的操作符扩展了通配符。Citrix Web App Firewall可以防止通过注入这些通配符发起的攻击。默认的5个通配符是百分比(%)、下划线(_)、插入符号(^)、开始方括号([)和结束方括号(])。这种保护同时适用于HTML和XML概要文件。

控件中指定的文字的列表*默认签名

- % - _ - ^ - [ - ] 

攻击中的通配符可以是PCRE,比如[^A-F]。Web App Firewall也支持PCRE通配符,但上面的文字通配符字符足以阻止大多数攻击。

请注意

XML SQL通配符check与XML SQL不同特殊字符检查。必须谨慎使用此选项,以避免误报。

检查包含SQL注入类型的请求- Web应用防火墙提供了4个选项来实现SQL注入检查所需的严格级别,基于应用程序的个人需求。根据注入类型规范检查请求,以检测SQL违规。4个SQL注入类型选项是:

  • SQL特殊字符和关键字-在被检查的位置必须同时存在SQL关键字和SQL特殊字符才能触发SQL违规。这个限制最少的设置也是默认设置。
  • SQL特殊字符-在被处理的有效载荷字符串中必须至少有一个特殊字符,才能触发SQL冲突。
  • SQL关键字-至少一个指定的SQL关键字必须出现在处理的有效载荷字符串中,以触发SQL违规。不要在没有充分考虑的情况下选择这个选项。为了避免误报,请确保输入中没有期望的关键字。
  • SQL特殊字符或关键字-关键字或特殊字符串必须在负载中存在,才能触发安全检查违规。

提示

如果您选择SQL特殊字符选项,Web App防火墙将跳过不包含任何特殊字符的字符串。由于大多数SQL服务器不处理前面没有特殊字符的SQL命令,启用此选项可以显著减少Web应用程序防火墙的负载,并加快处理速度,而不会将受保护的网站置于风险之中。

SQL注释处理-默认情况下,Web应用防火墙会解析和检查XML数据中的所有注释,以获取注入的SQL命令。许多SQL服务器会忽略注释中的任何内容,即使前面有一个SQL特殊字符。为了加快处理速度,如果XML SQL服务器忽略注释,则可以配置Web App Firewall在检查注入SQL的请求时跳过注释。XML SQL注释处理选项有:

  • ANSI-跳过ansi格式的SQL注释,它通常被基于unix的SQL数据库使用。
  • 嵌套的-跳过嵌套SQL注释,它通常被Microsoft SQL Server使用。
  • ANSI /嵌套-跳过同时遵循ANSI和嵌套SQL注释标准的注释。仅匹配ANSI标准或仅匹配嵌套标准的注释仍然会被检查是否注入SQL。
  • 检查所有注释-检查注入的SQL的整个请求,不跳过任何东西。这是默认设置。

提示

在大多数情况下,您不能选择Nested或ANSI/Nested选项,除非您的后端数据库运行在Microsoft SQL Server上。大多数其他类型的SQL server软件不识别嵌套注释。如果在指向另一种类型的SQL服务器的请求中出现嵌套注释,它们可能表明试图破坏该服务器上的安全性。

放松规则

如果应用程序要求绕过XML有效负载中特定元素或属性的XML SQL注入检查,那么可以配置一个放松规则。XML SQL注入检查松弛规则有以下参数:

  • 名称:类的名称,可以使用字面值字符串或正则表达式元素或者是属性.下面的表达式免除所有元素从字符串开始PurchaseOrder_后跟一串至少两个且不超过十个字符的数字:

    注释:“对采购订单元素豁免XML SQL检查”

XMLSQLInjection: "PurchaseOrder_[0-9A-Za-z]{2,10}" IsRegex: REGEX Location: ELEMENT State: ENABLED 

注意:名称区分大小写。不允许重复条目,但是可以使用名称的大小写和位置的差异来创建类似的条目。例如,以下松弛规则都是唯一的:

1) XMLSQLInjection: XYZ IsRegex: NOTREGEX位置:ELEMENT状态:ENABLED 2) XMLSQLInjection: XYZ IsRegex: NOTREGEX位置:ELEMENT状态:ENABLED 3) XMLSQLInjection: XYZ IsRegex: NOTREGEX位置:ATTRIBUTE状态:ENABLED 4) XMLSQLInjection: XYZ IsRegex: NOTREGEX位置:ATTRIBUTE状态:ENABLED 
  • 位置:您可以在XML有效负载中指定XML SQL Inspection异常的位置。的选项元素默认选中。你可以把它改成属性
  • 评论:可选字段。您最多可以使用255个字符的字符串来描述此放松规则的目的。

警告

正则表达式功能强大。特别是如果您不完全熟悉pcre格式的正则表达式,请仔细检查您编写的任何正则表达式。确保它们确切地定义了您想要添加为异常的名称,而不是其他名称。不小心使用正则表达式可能会导致你不想要的结果,比如阻止访问你不打算阻止的web内容,或者允许XML SQL注入检查本来会阻止的攻击。

使用命令行配置XML SQL注入检查

使用命令行配置XML SQL注入动作和其他参数

在命令行界面中,您可以使用设置appfw profile命令或添加appfw profile命令配置XML SQL注入保护。您可以启用块、日志和统计操作。选择要在有效负载中检测的SQL攻击模式类型(关键字、通配符、特殊字符串)。使用取消设置appfw profile命令将配置的设置恢复到默认值。下面的每个命令都只设置一个参数,但您可以在一个命令中包含多个参数:

  • set appfw profile **-XMLSQLInjectionAction** (([block] [log] [stats]) | [none])
  • 设置appfw profile -XMLSQLInjectionCheckSQLWildChars (ON |OFF)
  • set appfw profile -XMLSQLInjectionType ([SQLKeyword] | [SQLSplChar] | [SQLSplCharANDKeyword] | [SQLSplCharORKeyword])
  • 设置appfw profile -XMLSQLInjectionParseComments ([checkall] | [ansi|nested] | [ansinsted])

使用命令行配置SQL注入松弛规则

使用bind或unbind命令添加或删除放松规则,具体操作如下:

- bind appfw profile  - xmlsqlinjection  [isRegex (REGEX | NOTREGEX)] [-location (ELEMENT | ATTRIBUTE)] - comment  [-state (ENABLED | DISABLED)] - unbind appfw profile  - xmlsqlinjection  

例子

> bind appfw profile test_profile -XMLSQLInjection "PurchaseOrder_[0-9A-Za-z]{2,15}" -isregex REGEX -location ATTRIBUTE > unbind appfw profile test_profile -XMLSQLInjection "PurchaseOrder_[0-9A-Za-z]{2,15}" -location ATTRIBUTE 

使用GUI配置XMLSQL注入安全检查

在GUI中,您可以在与应用程序相关联的配置文件的窗格中配置XML SQL注入安全检查。

使用GUI配置或修改XML SQL注入检查

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

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

a.如果您只想启用或禁用XML SQL注入的阻塞、日志和统计操作,您可以选中或清除表中的复选框,单击“确定”,然后单击“保存”和“关闭”关闭“安全检查”窗格。

b.如果需要配置其他选项,请双击“XML SQL注入”或选中该行,单击动作设置,显示以下选项:

检查SQL通配符—将有效负载中的SQL通配符视为攻击模式。

检查SQL注入请求包含类型(SQLKeyword、SQLSplChar、SQLSplCharANDKeyword或SQLSplCharORKeyword)是否正确。

SQL注释处理—要检查的注释类型(检查所有注释、ANSI、嵌套或ANSI/嵌套)。

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

使用GUI配置XML SQL注入放松规则

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

使用可视化工具管理XML SQL注入松弛规则

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

使用GUI查看或自定义SQL注入模式

您可以使用GUI查看或自定义SQL模式。

中指定了默认的SQL模式Web应用程序防火墙>签名>*默认签名.如果没有将任何签名对象绑定到配置文件,则配置文件将使用默认签名对象中指定的默认SQL模式进行XML SQL注入安全检查处理。默认签名对象中的规则和模式是只读的。您不能编辑或修改它们。如果要修改或更改这些模式,请通过复制Default Signatures对象并更改SQL模式来创建一个用户定义签名对象。在概要文件中使用自定义签名对象,该概要文件处理要使用这些定制SQL模式的流量。

有关更多信息,请参见签名

查询默认SQL模式。

a.导航到Web应用程序防火墙>签名中,选择*默认签名,单击编辑.然后单击管理SQL/跨站点脚本模式

管理SQL/跨站脚本路径表显示了以下四行与SQL注入相关的内容:

注入(not_alphanum, SQL)/关键字注入(not_alphanum, SQL)/ specialstring注入(not_alphanum, SQL)/ transformrules/transform注入(not_alphanum, SQL)/ wildchar 

b.选择一行,单击管理元素显示Web App Firewall SQL注入检查使用的相应SQL模式(关键字、特殊字符串、转换规则或通配符)。

定制SQL模式:通过编辑自定义签名对象,可以自定义SQL关键字、特殊字符串和通配符。您可以添加新的条目或删除现有的条目。您可以修改SQL特殊字符串的转换规则。

a.导航到Web应用程序防火墙>签名,选中目标自定义签名,单击编辑.点击管理SQL/跨站点脚本模式来显示管理SQL/跨站点脚本路径表格

b.选择目标SQL行。

我点击。管理元素,添加编辑删除对应的SQL元素。

2点击删除删除所选行。

警告

在删除或修改任何默认SQL元素或删除SQL路径以删除整个行时,必须非常小心。签名规则以及XML SQL注入安全检查都依赖于这些元素来检测SQL注入攻击,以保护您的应用程序。如果在编辑期间删除了所需的模式,定制SQL模式会使您的应用程序容易受到XML SQL攻击。

使用日志特性和XML SQL注入检查

当日志操作被启用时,XML SQL注入安全检查违规记录在审计日志中APPFW_XML_SQL违规。Web应用程序防火墙同时支持Native和CEF日志格式。您也可以将日志发送到远端syslog服务器。

使用命令行访问日志消息

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

> Shell > tail -f /var/log/ns.log | grep APPFW_XML_SQL 

使用GUI访问日志消息

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

  • 导航到Web应用程序防火墙>配置文件,选择目标配置文件,单击安全检查.突出了XML SQL注入排好并单击日志.当您直接从配置文件的XML SQL注入检查访问日志时,GUI会过滤掉日志消息,只显示与这些安全检查违规相关的日志。

  • 您也可以通过导航进入“Syslog查看器”系统>审计.在审计消息部分中,单击Syslog消息“Syslog查看器”链接,显示所有日志信息,包括其他安全检查违规日志。当请求处理过程中可能触发多个安全检查违规时,这对于调试非常有用。

  • 导航到Web应用程序防火墙>政策>审计.在审计消息部分中,单击Syslog消息链接以显示Syslog查看器,显示所有日志消息,包括其他安全检查违规日志。

基于XML的Syslog Viewer提供了各种筛选选项,用于只选择您感兴趣的日志消息。选择日志消息XML SQL注入检查,筛选选择APPFW的下拉选项中模块.的事件类型列表提供了丰富的选项集,以进一步完善您的选择。例如,如果您选择APPFW_XML_SQL复选框并单击应用按钮,只记录与之相关的消息XML SQL注入安全检查违规将出现在Syslog查看器中。

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

XML SQL注入违规的统计信息

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

使用命令行显示XML SQL注入检查统计信息

在命令提示符处,输入:

> sh appfw stats . sh

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

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

使用GUI显示XML SQL注入统计信息

  1. 导航到系统>安全>Web应用程序防火墙
  2. 在右窗格中,访问统计数据链接。
  3. 使用滚动条可以查看统计信息XML SQL注入违规和日志。统计表提供实时数据,每7秒更新一次。