Citrix ADC

JSON拒绝服务保护检查

JSON拒绝服务(DoS)检查检查传入的JSON请求,并验证是否有任何数据匹配DoS攻击的特征。如果请求违反了JSON,设备将阻塞请求,记录数据,发送SNMP警报,并显示一个JSON错误页面。JSON DoS检查的目的是防止攻击者发送JSON请求,对您的JSON应用程序或网站发起DoS攻击。

当客户端向Citrix ADC设备发送请求时,JSON解析器将解析请求负载,如果观察到违反,则该设备将对JSON结构施加约束。该约束强制对JSON请求进行大小限制。因此,如果观察到任何JSON错误,设备将应用一个操作并使用JSON错误页面进行响应。

JSON DoS规则

当设备接收到一个JSON请求时,JSON DOS保护会对请求负载中的以下DOS参数施加大小限制。

  1. 最大深度:JSON文档的最大嵌套(深度)。此检查可防止层次结构深度过大的文档。
  2. 最大文档长度:JSON文档的最大文档长度。
  3. 最大数组长度:任何JSON对象中数组的最大长度。这种检查可以防止数组长度过大。
  4. 最大字符串长度:JSON中最大字符串长度。这个检查可以防止字符串长度过大。
  5. 最大对象键数:任意JSON对象中的最大键数。这种检查可以保护具有大量键的对象。
  6. 最大对象键长:任何JSON对象中的最大键长。这个检查可以保护具有大键的对象。

下面是JSON解析期间验证的JSON DoS规则列表。

  1. JSONMaxContainerDepth。可以通过配置JSONMaxContainerDepth检查启用此检查,默认情况下该选项为OFF。

  2. JSONMaxContainerDepth。这个检查可以通过可配置选项JSONMaxContainerDepthCheck启用/禁用,默认值可以通过选项JSONMaxContainerDepth更改。但是,可以将最大级别设置为1 ~ 127。默认值:5,最小值:1,最大值:127

  3. JSONMaxDocumentLength。可以通过配置JSONMaxDocumentLength检查启用此检查,默认选项为OFF。

  4. JSONMaxDocumentLength。可以通过配置JSONMaxDocumentLength检查启用此检查,并且默认长度设置为20000000字节。最小值为1,最大值为2147483647

  5. JSONMaxObjectKeyCount。该规则验证JSON最大对象键数检查是打开的还是关闭的。取值范围:ON、OFF。默认值:OFF

  6. JSONMaxObjectKeyCount。可以通过配置JSONMaxObjectKeyCount检查启用此检查。check针对键数较多的对象,默认值为1000字节。最小值:0,最大值:2147483647

  7. JSONMaxObjectKeyLength。可以通过配置JSONMaxObjectKeyLength检查启用此检查。该规则验证JSON最大对象键长检查是打开的还是关闭的。默认为OFF。

  8. JSONMaxObjectKeyLength。该检查针对的是密钥长度较大的对象。默认值:128。最小值为1,最大值为2147483647

  9. JSONMaxArrayLength。该规则验证JSON最大数组长度检查是ON还是OFF。默认情况下,它是关闭的。

  10. JSONMaxArrayLength。检查可以防止数组长度过大。缺省值为10000。最小值为1,最大值为2147483647

  11. JSONMaxStringLength。可以通过配置JSONMaxStringLength检查启用此检查。检查验证JSON最大字符串长度是ON还是OFF。默认情况下,它是关闭的。

  12. JSONMaxStringLength。检查可以防止字符串长度过大。缺省值为1000000。最小值为1,最大值为2147483647

配置JSON DoS保护检查

配置JSON DoS保护需要完成以下步骤:

  1. 为JSON添加应用防火墙配置文件。
  2. 设置JSON DoS设置的应用防火墙配置文件。
  3. 通过绑定应用防火墙配置文件来配置JSON DoS变量。

添加应用防火墙配置文件JSON DoS保护

您必须首先创建一个配置文件,指定应用程序防火墙必须如何保护您的JSON web内容免受JSON DoS攻击。在命令提示符处,输入:

添加appfw配置文件 -type (HTML | XML | JSON)

请注意

当您将配置文件类型设置为JSON时,其他检查,如HTML或XML将不适用。

例子

add appfw profile profile1 -type JSON

设置JSON DoS保护应用防火墙配置文件

您必须为应用防火墙配置文件中设置的一个或多个JSON DoS动作和JSON DoS错误对象配置文件。在命令提示符处,输入:

set appfw profile -JSONDoSAction [block] | [log] | [stats] | [none]说明

阻断-阻断违反此安全检查的连接。日志-违反安全检查的日志。Stats -生成此安全检查的统计信息。无-禁用此安全检查的所有操作。

请注意

要启用一个或多个动作,请输入“set appfw profile -JSONDoSAction”,后面跟着要启用的动作。

例子

set appfw profile profile1 -JSONDoSAction块日志stat

通过绑定应用防火墙配置文件来配置DoS变量

要提供JSON DoS保护,必须将应用程序防火墙配置文件与JSON DoS设置绑定。在命令提示符处,输入:

绑定appfw概要文件<名称> -JSONDoSURL <表达式> [-JSONMaxContainerDepthCheck (|) [-JSONMaxContainerDepth < positive_integer >]] [-JSONMaxDocumentLengthCheck (|) [-JSONMaxDocumentLength < positive_integer >]] [-JSONMaxObjectKeyCountCheck (|) [-SONMaxObjectKeyCount < positive_integer >]] [-JSONMaxObjectKeyLengthCheck |[-JSONMaxObjectKeyLength ]] [-JSONMaxArrayLengthCheck (ON | OFF) [-JSONMaxArrayLength ]] [-JSONMaxStringLengthCheck (ON | OFF) [-JSONMaxStringLength ]]

例子

绑定appfw profile profile1 -JSONDoSURL "。*“-JSONMaxContainerDepthCheck

请注意

只有当配置文件类型被选择为JSON时,JSON DoS检查才适用。此外,SQL、跨站脚本、字段格式和表单字段签名应用于JSON配置文件的Query参数。

进口JSON errorpage

如果传入的请求受到DoS攻击,当您阻止该请求时,设备将显示一条错误消息。为此,您必须导入JSON错误页面。在命令提示符处,输入:

Import appfw jsonerrorpage [-comment ] [-overwrite]

在那里,

src。用于存储导入的JSON错误对象的位置的URL(协议、主机、路径和名称)。

请注意

如果导入对象所在HTTPS服务器需要通过客户端证书认证才能访问,则导入失败。这是一个必须的论点。最大长度:2047。

的名字。要分配给Citrix ADC上的JSON错误对象的名称。这是一个必须的论点。最大长度:31。保留JSON错误对象信息的任何注释。最大长度:255覆盖任何同名的现有JSON错误对象。

示例配置

添加appfw prof profjson -type JSON绑定appfw prof profjson -JSONDoSURL "。*” -JSONMaxDocumentLengthCheck ON -JSONMaxDocumentLength 30 -JSONMaxContainerDepthCheck ON -JSONMaxContainerDepth 3 JSONMaxObjectKeyCountCheck ON -JSONMaxObjectKeyCount 4 -JSONMaxObjectKeyLengthCheck ON -JSONMaxObjectKeyLength 10 -JSONMaxArrayLengthCheck ON -JSONMaxArrayLength 5 -JSONMaxStringLengthCheck ON -JSONMaxStringLength 30 

样本有效负载,日志消息和计数器:

JSONMaxDocumentLength违反

JSONMaxDocumentLength: 30载荷:{“a”:“一”,“b”:“b”,“c”:“c”,“d”:“d”,“e”:“e”}

日志信息:

文档长度超过20000000 May 29 20:23:32  10.217.31.243 05/29/2019 19:20:23:32 GMT 0- ppe -0: default APPFW APPFW_JSON_DOS_MAX_DOCUMENT_LENGTH 136 0: 10.217.32.134 114-PPE0 - profjson http://10.217.30.120/forms/login.html文档超过最大文档长度(30)。cn1=30467 cn2=115 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked 

计数器:

1 0 6 as_viol_json_dos 2 0 3 as_viol_json_dos_max_document_length 3 0 6 as_log_json_dos 4 0 3 as_log_json_dos_max_document_length 5 0 6 as_viol_json_dos_profile appfw__ (profile1) 6 0 3 as_viol_json_dos_max_document_length_profile appfw__ (profile1) 7 0 6 as_log_json_dos_profile appfw__ (profile1) 8 0 3 as_log_json_dos_max_document_length_profileappfw__ (profile1) < !——NeedCopy >

JSONMaxContainerDepth违反

JSONMaxContainerDepth: 3载荷:{“a”:{" b ": {" c ": {" d ": {" e ": " f "}}}}}

日志信息:

5月29日19:33:59 < local0.info > 10.217.31.243 05/29/2019:19:33:59 0-PPE-1格林尼治时间:默认APPFW APPFW_JSON_DOS_MAX_CONTAINER_DEPTH 4626 0: 10.217.31.247 22-PPE1——profjson http://10.217.30.120/forms/login.html文档偏移(15)超过最大容器(3)深度。cn1 = 30466 cn2 = 113 cs1 = profjson cs2 = PPE0 cs4 =警报cs5 = 2019 =阻塞< !——NeedCopy >

计数器:

36 20999 7 1 0 as_viol_json_dos 37 0 6 1 0 as_viol_json_dos_max_container_depth 38 7 1 0 as_log_json_dos 39 0 6 0 1 0 as_log_json_dos_max_container_depth 40 0 7 1 0 as_viol_json_dos_profile appfw__ (profile1) 41 0 6 1 0 as_viol_json_dos_max_container_depth_profile appfw__ (profile1) 42 0 7 1 0 as_log_json_dos_profile appfw__ (profile1) 43 0 6 1 0as_log_json_dos_max_container_depth_profile appfw__ (profile1) < !——NeedCopy >

JSONMaxObjectKeyCount违反

JSONMaxObjectKeyCount: 4

有效载荷:{“a”:“一”,“b”:“b”,“c”:“c”,“d”:“d”,“e”:“e”}

日志信息:

5月30日19:42:41 < local0.info > 10.217.31.243 05/30/2019:19:42:41 0-PPE-1格林尼治时间:默认APPFW APPFW_JSON_DOS_MAX_OBJECT_KEY_COUNT 457 0: 10.217.32.134 219 - ppe1 profjson http://10.217.30.120/forms/login.html对象在抵消(41)超过最大关键数(4)。cn1 = 30468 cn2 = 118 cs1 = profjson cs2 = PPE0 cs4 =警报cs5 = 2019 =阻塞< !——NeedCopy >

计数器:

94 119105 15 1 0 as_viol_json_dos 95 0 4 1 0 as_viol_json_dos_max_object_key_count 96 0 15 1 0 as_log_json_dos 97 0 4 1 0 as_log_json_dos_max_object_key_count 98 0 15 1 0 as_viol_json_dos_profile appfw__ (profile1) 99 0 4 1 0 as_viol_json_dos_max_object_key_count_profile appfw__ (profile1) 100 0 15 1 0 as_log_json_dos_profile appfw__ (profile1) 101 04 1 0 as_log_json_dos_max_object_key_count_profile appfw__(profile1) 

JSONMaxObjectKeyLength违反

JSONMaxObjectKeyLength: 10载荷:{“a”:“一”,“b1234567890”:“B”,“c”:“c”,“d”:“d”,“e”:“e”}

日志信息:

May 31 20:26:10  10.217.31.243 05/31/2019 19:20:26:10 GMT 0- ppe -1: default APPFW APPFW_JSON_DOS_MAX_OBJECT_KEY_LENGTH 102 0: 10.217.32.134 89-PPE1 - profjson http://10.217.30.120/forms/login.html对象键(b1234567890) at offset(12)超过最大键长(10)。cn1=30469 cn2=118 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked 

计数器:

242172 6 1 0 as_viol_json_dos 0 1 1 0 as_viol_json_dos_max_object_key_length 10 0 5 1 0 as_log_json_dos 11 0 1 1 0 as_log_json_dos_max_object_key_length 12 0 6 0 as_viol_json_dos_profile appfw__ (profile1) 13 0 1 1 0 as_viol_json_dos_max_object_key_length_profile appfw__ (profile1) 14 0 5 1 0 as_log_json_dos_profile appfw__ (profile1) 15 0 1 1 0as_log_json_dos_max_object_key_length_profile appfw__ (profile1) < !——NeedCopy >

JSONMaxArrayLength违反

JSONMaxArrayLength: 5负载:{“a”:“一”,“c”:[“d”、“e”、“f”,“g”,“h”,“我”),“e”:[“e”,“e”]}

日志信息:

5月29日20:58:39 < local0.info > 10.217.31.243 05/29/2019:20:58:39 0-PPE-1格林尼治时间:默认APPFW APPFW_JSON_DOS_MAX_ARRAY_LENGTH 4650 0: 10.217.32.134 153 - ppe1 -profjson http://10.217.30.120/forms/login.html数组在抵消(37),超过最大数组长度(5)。cn1 = 30469 cn2 = 120 cs1 = profjson cs2 = PPE0 cs4 =警报cs5 = 2019 =阻塞< !——NeedCopy >

计数器:

36 182293 10 1 0 as_viol_json_dos 37 0 1 1 0 as_viol_json_dos_max_array_length 38 0 10 1 0 as_log_json_dos 39 0 1 1 0 as_log_json_dos_max_array_length 40 0 10 1 0 as_viol_json_dos_profile appfw__ (profile1) 41 0 1 1 0 as_viol_json_dos_max_array_length_profile appfw__ (profile1) 42 0 10 1 0 as_log_json_dos_profile appfw__ (profile1) 43 0 1 1 0as_log_json_dos_max_array_length_profile appfw__ (profile1)) < !——NeedCopy >

JSONMaxStringLength违反

JSONMaxStringLength: 10

有效载荷:{“a”:“一”,“c”:“CcCcCcCcCcCcCcCcCc”、“e”:[“e”,“e”]}

日志信息:

May 29 20:05:02  10.217.31.243 5/29/2019 19:20:05:02 GMT 0- ppe -0: default APPFW APPFW_JSON_DOS_MAX_STRING_LENGTH 134 0: 10.217.32.134 80-PPE0 - profjson http://10.217.30.120/forms/login.html String(CcCcCcCcCcCcCc) at offset(27)超过最大字符串长度(10)。n1=30470 cn2=122 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked 

计数器:

44 91079 3 1 0 as_viol_json_dos 45 0 1 1 0 as_viol_json_dos_max_string_length 46 0 3 1 0 as_log_json_dos 47 0 1 1 0 as_log_json_dos_max_string_length 48 0 3 1 0 as_viol_json_dos_profile appfw__ (profile1) 49 0 1 1 0 as_viol_json_dos_max_string_length_profile appfw__ (profile1) 50 0 3 1 0 as_log_json_dos_profile appfw__ (profile1) 51 0 1 1 0as_log_json_dos_max_string_length_profile appfw__ (profile1 < !——NeedCopy >

使用Citrix GUI配置JSON DoS保护

按照以下步骤设置JSON DoS保护设置。

  1. 在导航窗格中,导航到安全>配置文件
  2. 配置文件页面,点击添加
  3. Citrix Web应用防火墙配置文件页面,点击高级设置下的安全检查
  4. 安全检查部分,去JSON拒绝服务设置。
  5. 单击复选框附近的可执行图标。

    JSON DoS安全检查

  6. 点击动作设置访问JSON拒绝服务设置页面。
  7. 选择JSON DoS操作。
  8. 点击好吧

    JSON DoS动作设置

  9. Citrix Web应用防火墙配置文件页面,点击放松规则高级设置
  10. 放松规则部分中,选择JSON拒绝服务设置并点击编辑

    JSON DoS放松规则

  11. 应用防火墙JSON拒绝服务检查设置JSON DoS验证值。
  12. 点击好吧

    JSON DoS放松规则

  13. Citrix Web应用防火墙配置文件页面,点击配置文件设置高级设置
  14. 配置文件设置部分,去JSON错误设置分段设定JSON DoS错误页面。

    JSON DoS放松规则

  15. JSON错误页面导入对象页面,设置以下参数:

    1. 进口的。将错误页面导入为文本、文件或URL。
    2. URL。URL将用户重定向到错误页面。1文件。选择要作为JSON DoS错误文件导入的文件。
    3. 文本。输入JSON文件内容。
    4. 单击Continue。
    5. 文件。输入文件名。
    6. 文件内容。添加错误文件内容。
    7. 点击好吧

    JSON DoS导入错误页面

  16. 点击好吧
  17. 点击完成
JSON拒绝服务保护检查