Citrix ADC

JSON 命令注入保护检查

JSON 命令注入检查会检查传入的 JSON 流量中是否存在破坏系统安全或修改系统的未经授权的命令。检查流量时,如果检测到任何恶意命令,设备将阻止请求或执行配置的操作。

在命令注入攻击中,攻击者的目标是在 Citrix ADC 操作系统或后端服务器上运行未经授权的命令。为此,攻击者使用易受攻击的应用程序注入操作系统命令。如果设备只是在没有任何安全检查的情况下转发请求,则后端应用程序容易受到注入攻击。因此,配置安全检查非常重要,以便 Citrix ADC 设备可以通过阻止不安全数据来保护您的 Web 应用程序。

命令注入保护的工作原理

  1. 对于传入的 JSON 请求,WAF 会检查流量中的关键字或特殊字符。如果 JSON 请求没有与任何被拒绝的关键字或特殊字符匹配的模式,则允许该请求。否则,将根据配置的操作阻止、删除或重定向请求。
  2. 如果您希望从列表中免除关键字或特殊字符,则可以创建放宽规则以在特定条件下绕过安全检查。
  3. 您可以启用日志记录以生成日志消息。您可以监控日志,以确定对合法请求的响应是否被阻止。日志消息数量的大幅增加可能表明有人试图发起攻击。
  4. 您还可以启用统计功能来收集有关违规和日志的统计数据。统计数据计数器出现意外激增可能表明您的应用程序受到攻击。如果合法请求被阻止,您可能需要重新访问配置,以查看是否必须配置新的放宽规则或修改现有放宽规则。

用于命令注入检查的关键字和特殊字符被拒绝

为了检测和阻止 JSON 命令注入攻击,设备在默认签名文件中定义了一组模式(关键字和特殊字符)。以下是在命令注入检测期间阻止的关键字列表。

<commandinjection>
      <keyword type="LITERAL" builtin="ON">7z</keyword>
      <keyword type="LITERAL" builtin="ON">7za</keyword>
      <keyword type="LITERAL" builtin="ON">7zr</keyword>
…
</commandinjection>

<!--NeedCopy-->

签名文件中定义的特殊字符有: | ; & $ > < ' \ ! >> #

使用 CLI 配置 JSON 命令注入检查

在命令行界面中,您可以使用 set appfw profile 命令或 add an appfw profile 命令来配置 JSON 命令注入设置。 您可以启用阻止、日志和统计信息操作。您还必须设置要在有效负载中检测的命令注入类型,例如关键字和字符串字符。

在命令提示符下,键入:

set appfw profile <profile-name> –cmdInjectionAction <action-name> -CMDInjectionType <CMDInjectionType>]

注意:

默认情况下,命令注入操作设置为 “阻止日志统计信息”。此外,默认命令注入类型设置为CmdSplCharANDKeyWord。升级后,现有的 Web 应用程序 Firewall 配置文件的操作将设置为 “无”。

示例:

set appfw profile profile1 -JSONCMDInjectionAction block -JSONCMDInjectionType CmdSplChar

其中,可用的 JSON 命令注入操作是:

无-禁用命令注入保护。 日志-记录安全检查的命令注入冲突。 阻止-阻止违反命令注入安全检查的流量。 Stats-生成命令注入安全违规的统计信息。

其中,可用的 JSON 命令注入类型为:

Cmd SplChar -检查特殊字符 CmdKeyWord -检查命令注入关键字 CmdSplCharANDKeyWord -这是默认操作。该操作会检查特殊字符和命令注入。只有当关键字和方块都存在时。 CmdSplCharORKeyWord -检查特殊字符和命令注入 Keywords and blocks(如果找到其中任何一个)。

为 JSON 命令注入保护检查配置放宽规则

如果您的应用程序要求您绕过对有效负载中的特定 ELEMENT 或 ATTRIBUTE 的 JSON 命令注入检查,则可以配置放宽规则。

JSON 命令注入检查放宽规则具有以下语法。

bind appfw profile <profile name> –JSONCMDURL <expression> -comment <string> -isAutoDeployed ( AUTODEPLOYED | NOTAUTODEPLOYED ) -state ( ENABLED | DISABLED )

标题中正则表达式的放松规则示例

bind appfw profile abc_json -jsoncmDURL http://1.1.1.1/hello.html

鉴于以下内容放宽了来自 1.1.1.1 上托管的所有 URL 的请求:

bind appfw profile abc_json -jsoncmDURL http://1.1.1.1/*”

要删除松弛,请使用 “取消绑定”。

unbind appfw profile abc_json -jsoncmDURL “ http://1.1.1.1/*”

使用 GUI 配置 JSON 命令注入检查

完成以下步骤以配置 JSON 命令注入检查。

  1. 导航到 安全 > Citrix Web App Firewall 和配置文件
  2. 配置文件 页面上,选择一个配置文件,然后单击 编辑
  3. Citrix Web App Firewall 配置文件 页面上,转到 高级设置 部分,然后单击 安全检查

访问安全设置的 JSON 安全检查

  1. 在 “ 安全检查 ” 部分中,选择 “ JSON 命令注入 ”,然后单击 “ 操作 设置”。
  2. JSON 命令注入设置 页面中,设置以下参数

    1. 操作。选择要对 JSON 命令注入安全性检查执行的一个或多个操作。
    2. 选中请求包含。选择命令注入模式以检查传入请求是否具有该模式。
  3. 单击确定

配置 JSON 命令注入检查设置

查看命令注入流量和违规统计信息

Citrix Web App Firewall 统计 信息页面以表格或图形格式显示安全流量和安全违规详细信息。

使用命令界面查看安全统计信息。

在命令提示符下,键入:

stat appfw profile profile1

Appfw 配置文件流量统计 速率(/秒) 总数
请求 0 0
Request Bytes(请求字节数) 0 0
回应 0 0
Response Bytes(响应字节数) 0 0
中止 0 0
重定向 0 0
长期平均响应时间(毫秒) 0
最近平均响应时间(毫秒) 0
HTML/XML/JSON 违规统计信息 速率(/秒) 总数
起始 URL 0 0
拒绝 URL 0 0
引荐人标头 0 0
缓冲区溢出 0 0
Cookie 一致性 0 0
cookie 劫持 0 0
CSRF 表单标签 0 0
HTML 跨站点脚本 0 0
HTML SQL 注入 0 0
字段格式 0 0
字段一致性 0 0
信用卡 0 0
安全对象 0 0
签名违规 0 0
内容类型 0 0
JSON 拒绝服务 0 0
JSON SQL 0 0
JSON 跨站点脚本 0 0
文件上传类型 0 0
推断内容类型 XML 有效负载 0 0
HTML 命令行注入 0 0
XML 格式 0 0
XML 拒绝服务 (XDoS) 0 0
XML 消息验证 0 0
Web 服务互操作性 0 0
XML SQL 注 0 0
XML 跨站点脚本 0 0
XML 附件 0 0
SOAP 错误违规 0 0
XML 通用违规 0 0
违规总数 0 0
HTML/XML/JSON 日志统计信息 速率(/秒) 总数
启动 URL 日志 0 0
拒绝 URL 日志 0 0
引用者标头日志 0 0
缓冲区溢出日志 0 0
Cookie 一致性日志 0 0
cookie 劫持日志 0 0
来自标签日志的 CSRF 0 0
HTML 跨站脚本日志 0 0
HTML 跨站点脚本转换日志 0 0
HTML SQL 插入日志 0 0
HTML SQL 转换日志 0 0
字段格式日志 0 0
字段一致性日志 0 0
信用卡 0 0
信用卡转换日志 0 0
安全对象日志 0 0
签名日志 0 0
内容类型日志 0 0
JSON 拒绝服务日志 0 0
JSON SQL 注入 0 0
JSON 跨站点脚本日志 0 0
文件上传类型日志 0 0
推断内容类型 XML 有效负载 L 0 0
JSON CMD 注入 0 0
HTML 命令注入日志 0 0
XML 格式化日志 0 0
XML 拒绝服务 (XDoS) 日志 0 0
XML 邮件验证日志 0 0
WSI 日志 0 0
XML SQL 注入日 0 0
XML 跨站点脚本日志 0 0
XML 附件日志 0 0
SOAP 错误日志 0 0
XML 通用日志 0 0
日志消息总数 0 0

服务器错误响应统计信息速率 (/s) | 总数 | |—|–|–| HTTP 客户端错误 (4xx 重复) | 0 | 0| HTTP 服务器错误 (5xx 重复) | 0 | 0 |

HTML/XML/JSON 日志统计信息 速率(/秒) 总数
JSON 命令注入日志 0 0
XML 格式化日志 0 0

使用 Citrix ADC GUI 查看 JSON 命令注入统计信息

完成以下步骤以查看命令注入统计信息:

  1. 导航到 安全 > Citrix Web App Firewall > 配置文件
  2. 在详细信息窗格中,选择一个 Web App Firewall 配置文件,然后单击 统计信息
  3. Citrix Web App Firewall 统计 信息页面显示 JSON 命令注入流量和违规详细信息。
  4. 您可以选择 “ 表格视图 ” 或切换到 “ 图形视图 ”,以表格或图形格式显示数据。

JSON 命令注入流量统计

JSON 命令注入流量统计 GUI 部分

JSON 命令注入违规统计信息

JSON 命令注入流量统计 GUI 部分

为 JSON 命令注入配置细粒度松弛

Web App Firewall 为您提供了从基于 JSON 的命令注入检查中放宽特定 JSON 键或值的选项。通过配置细粒度松弛规则,可以完全绕过对一个或多个场的检查。

以前,为 JSON 保护检查配置放宽的唯一方法是指定整个 URL,这将绕过对整个 URL 的验证。

基于 JSON 的命令注入安全保护为以下方面提供了放松:

  • 注册表名称
  • 注册表值

基于 JSON 的命令注入保护使您能够配置放宽以允许特定模式并阻止其余模式。例如,Web App Firewall 当前有一组默认的 SQL 关键字超过 100 个。由于黑客可以在命令注入攻击中使用这些关键字,因此 Web App Firewall 会将所有关键字标记为潜在威胁。如果您想放宽一个或多个被认为对特定位置安全的关键字,则可以配置放宽规则,以绕过安全检查并阻止其余关键字。 放宽中使用的命令具有值类型和值表达式的可选参数。您可以指定值表达式是正则表达式还是文字字符串。值类型可以留空,也可以选择关键字或特殊字符串。

注意:

正则表达式非常强大。特别是如果您不太熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要添加为例外的 URL,而不是别的。粗心使用通配符,尤其是点星号 (.*) 元字符或通配符组合,可能会产生您不希望的结果,例如阻止对您不打算阻止的 Web 内容的访问,或者允许 JSON SQL Injection 检查本来会阻止的攻击。

需要考虑的要点

  • 值表达式是可选参数。字段名称可能没有任何值表达式。
  • 一个注册表名称可以绑定到多个值表达式。
  • 必须为值表达式分配值类型。值类型可以是:1) 关键字,2) SpecialString。
  • 每个键名/URL 组合可以有多个放宽规则。

使用命令界面为命令注入攻击配置 JSON 细粒度放宽

要配置 JSON 文件颗粒放宽规则,必须将细粒度松弛实体绑定到 Web App Firewall 配置文件。

在命令提示符下,键入:

bind appfw profile <profile name> -jsoncmdURL <URL> -key <key name> -valueType <keyword/SpecialString> <value Expression>
<!--NeedCopy-->

示例:

bind appfw profile appprofile1 -jsoncmdurl www.example.com -key blg_cnt -isRegex NOTREGEX -valueType Keyword “cat” -isvalueRegex NOTREGEX

使用 GUI 为基于 JSON 的命令注入攻击配置精细松弛规则

  1. 导航到 应用程序防火墙 > 配置文件,选择一个配置文件,然后单击 编辑
  2. “高级设置” 窗格中,单击 “ 放宽规则”。
  3. 放宽规则 部分,选择一个 JSON 命令注入 记录,然后单击 编辑
  4. JSON 命令注入放宽规则 滑块中,单击 添加
  5. JSON 命令注入放宽规则 页面中,设置以下参数。

    1. 已启用
    2. 是名字正则表达式
    3. 注册表项名称
    4. URL
    5. 值类型
    6. 注意
    7. 资源 ID
  6. 单击创建

用于跨站点脚本的 JSON 细粒度放松