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参数施加大小限制。
- 最大深度:JSON文档的最大嵌套(深度)。此检查可防止层次结构深度过大的文档。
- 最大文档长度:JSON文档的最大文档长度。
- 最大数组长度:任何JSON对象中数组的最大长度。这种检查可以防止数组长度过大。
- 最大字符串长度:JSON中最大字符串长度。这个检查可以防止字符串长度过大。
- 最大对象键数:任意JSON对象中的最大键数。这种检查可以保护具有大量键的对象。
- 最大对象键长:任何JSON对象中的最大键长。这个检查可以保护具有大键的对象。
下面是JSON解析期间验证的JSON DoS规则列表。
JSONMaxContainerDepth。可以通过配置JSONMaxContainerDepth检查启用此检查,默认情况下该选项为OFF。
JSONMaxContainerDepth。这个检查可以通过可配置选项JSONMaxContainerDepthCheck启用/禁用,默认值可以通过选项JSONMaxContainerDepth更改。但是,可以将最大级别设置为1 ~ 127。默认值:5,最小值:1,最大值:127
JSONMaxDocumentLength。可以通过配置JSONMaxDocumentLength检查启用此检查,默认选项为OFF。
JSONMaxDocumentLength。可以通过配置JSONMaxDocumentLength检查启用此检查,并且默认长度设置为20000000字节。最小值为1,最大值为2147483647
JSONMaxObjectKeyCount。该规则验证JSON最大对象键数检查是打开的还是关闭的。取值范围:ON、OFF。默认值:OFF
JSONMaxObjectKeyCount。可以通过配置JSONMaxObjectKeyCount检查启用此检查。check针对键数较多的对象,默认值为1000字节。最小值:0,最大值:2147483647
JSONMaxObjectKeyLength。可以通过配置JSONMaxObjectKeyLength检查启用此检查。该规则验证JSON最大对象键长检查是打开的还是关闭的。默认为OFF。
JSONMaxObjectKeyLength。该检查针对的是密钥长度较大的对象。默认值:128。最小值为1,最大值为2147483647
JSONMaxArrayLength。该规则验证JSON最大数组长度检查是ON还是OFF。默认情况下,它是关闭的。
JSONMaxArrayLength。检查可以防止数组长度过大。缺省值为10000。最小值为1,最大值为2147483647
JSONMaxStringLength。可以通过配置JSONMaxStringLength检查启用此检查。检查验证JSON最大字符串长度是ON还是OFF。默认情况下,它是关闭的。
JSONMaxStringLength。检查可以防止字符串长度过大。缺省值为1000000。最小值为1,最大值为2147483647
配置JSON DoS保护检查
配置JSON DoS保护需要完成以下步骤:
- 为JSON添加应用防火墙配置文件。
- 设置JSON DoS设置的应用防火墙配置文件。
- 通过绑定应用防火墙配置文件来配置JSON DoS变量。
添加应用防火墙配置文件JSON DoS保护
您必须首先创建一个配置文件,指定应用程序防火墙必须如何保护您的JSON web内容免受JSON DoS攻击。在命令提示符处,输入:
添加appfw配置文件
请注意:
当您将配置文件类型设置为JSON时,其他检查,如HTML或XML将不适用。
例子
add appfw profile profile1 -type JSON
设置JSON DoS保护应用防火墙配置文件
您必须为应用防火墙配置文件中设置的一个或多个JSON DoS动作和JSON DoS错误对象配置文件。在命令提示符处,输入:
set appfw profile
阻断-阻断违反此安全检查的连接。日志-违反安全检查的日志。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
例子
绑定appfw profile profile1 -JSONDoSURL "。*“-JSONMaxContainerDepthCheck
请注意:
只有当配置文件类型被选择为JSON时,JSON DoS检查才适用。此外,SQL、跨站脚本、字段格式和表单字段签名应用于JSON配置文件的Query参数。
进口JSON errorpage
如果传入的请求受到DoS攻击,当您阻止该请求时,设备将显示一条错误消息。为此,您必须导入JSON错误页面。在命令提示符处,输入:
Import appfw jsonerrorpage
在那里,
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保护设置。
- 在导航窗格中,导航到安全>配置文件.
- 在配置文件页面,点击添加.
- 在Citrix Web应用防火墙配置文件页面,点击高级设置下的安全检查.
- 在安全检查部分,去JSON拒绝服务设置。
单击复选框附近的可执行图标。
- 点击动作设置访问JSON拒绝服务设置页面。
- 选择JSON DoS操作。
点击好吧.
- 在Citrix Web应用防火墙配置文件页面,点击放松规则下高级设置.
在放松规则部分中,选择JSON拒绝服务设置并点击编辑.
- 在应用防火墙JSON拒绝服务检查设置JSON DoS验证值。
点击好吧.
- 在Citrix Web应用防火墙配置文件页面,点击配置文件设置下高级设置.
在配置文件设置部分,去JSON错误设置分段设定JSON DoS错误页面。
在JSON错误页面导入对象页面,设置以下参数:
- 进口的。将错误页面导入为文本、文件或URL。
- URL。URL将用户重定向到错误页面。1文件。选择要作为JSON DoS错误文件导入的文件。
- 文本。输入JSON文件内容。
- 单击Continue。
- 文件。输入文件名。
- 文件内容。添加错误文件内容。
- 点击好吧.
- 点击好吧.
- 点击完成.