# 一、编程语言的要素 天存信息的**iWall3应用防火墙**是一种创新式的类编程 WAF,它包含了编程语言的一些基本要素。 ## 1.变量 iWall3 中广义的变量包括报文变量、环境变量和用户变量:报文变量和环境变量相当于编程语言中的**常量**或传入的参数,用户变量则是真正编程语言意义上的**变量**,即用户可以自行创建、使用和维护变量。 ## 2.条件判断 iWall3 支持编程语言标准的条件判断:即可以包含**无限嵌套**的 `if` - `then` - `else` 条件,每个 `if` 条件又可以使用 `and` - `or` - `not` **逻辑运算符**连接多个子条件。  ## 3.表达式 iWall3 支持与通用编程语言一致的表达式:表达式由常量、变量、运算符和内置函数组成,以模板字符串方式内嵌书写,可在条件判断、变量赋值、模式匹配、日志输出等任意位置使用。  ## 4.语句 条件执行部分,iWall3 允许用户书写任意语句:这些语句不限于 WAF 常规的阻止访问和记录日志,它可以实现更复杂的功能,如:改变其他规则的行为,修改 HTTP 报文的特定部分,输出指定变量等。 # 二、数据方式的语言表达 天存信息的 iWall3 包含了编程语言的设计思想,但独创性地以数据方式呈现。 ## 1.JSON格式 安全产品的使用者通常是非程序员,他们习惯于面对配置文件而非一段代码。因此,iWall3 的配置依旧以规则文件的形式出现,只是这里的规则不是纯文本格式,而是可以体现出层次结构的 JSON 格式。 - 充分利用 JSON 格式的名-值对 (对象) 和序列表 (数组) 结构,将语言要素和业务逻辑用 JSON 格式表达出来,兼顾规则的人机可读性和高度灵活性。 - JSON 格式的每个元素都具有明确的名 (name),这就给了书写者一个基本的框架和自说明的参数指引,既方便了自己书写规则,也便于其他人对规则的维护。 - iWall3 规则具有明确细致的语法定义,从而能够使用成熟的 JSON schema 方式来校验 (validate) 规则的正确性,例如可以细致检查动作的必选参数、可选参数以及拼写错误。 ## 2.规则结构 一个规则即为一个 `if-then-else` 结构,在 JSON 格式中表现为一个名为 `if` 的对象和一个名为 `then` 的对象,以及可选的一个名为 `else` 的对象—— - **if** - 变量经选择和整形后,与表达式模式的运算进行匹配。支持用逻辑运算符连接多个条件。 - **then** - 匹配后执行的一般语句和裁决语句,还可以包含子 `if-then` 结构。 - **else** - 不匹配时执行的语句和可选的子 `if-then` 结构。 以下是规则的一个举例: ```json { "if": { "variable": "REQUEST_FILENAME_EXT", "operator": "inFromFile", "pattern": "restricted_file_exts.lst" }, "then": { "if": { "variable": "REMOTE_ADDR", "operator": "begin", "pattern": "192.168" }, "then": { "verdict": { "log": true, "action": "pass" }, "actions": [{ "action": "alterArgGet", "op": "set", "name": "iwall_rule_id", "value": "${RULE.id}" }], }, "else": { "verdict": { "log": true, "action": "deny" } } } } ``` **上述规则实现的功能为:** 遇到访问敏感文件类型时,记录日志,并对不同访问来源作不同响应:来自内网的,放行且将规则 id 作为参数传给后端应用;来自外网的,则拒绝。 ## 3.自动循环 一般编程语言中都有名为 `for` 的循环语句,用来对可迭代数据进行逐个元素处理。HTTP 协议中的请求参数 (args)、头 (header) 都是可迭代数据,在 iWall3 中表现为集合或者数组的数据类型。如果按照编程语言的惯例,用 `for` 循环去显式地获取数据,会让规则写得很繁琐。 iWall3 则实现了对可迭代变量类型的自动循环,只需列出变量名,即可自动进行循环迭代,简化了书写。而对于不需要参与循环的元素,也提供了成员筛选的手段,直接在变量名后列出白名单或黑名单成员即可。 ```json { "if": { "variable": "REQUEST_COOKIES:!cnzz_*", "transform": "urlDecodeUni", "operator": "detectSQLi" } } ``` 上述规则对请求 cookie 中的每个成员进行 SQL 注入检查,但排除掉 cnzz_ 开头的成员。 ## 4.动态修改 规则并非是静态孤立的,它不仅可以自身执行动作,还可以在 HTTP 会话过程中去改变其他规则的属性,称为元属性覆写。元属性覆写功能实现了运行时的检测和动作分离,通过动态调整其他规则的输入和响应,满足用户复杂的需求。 ```json { "if": [{ "variable": "REQUEST_FILENAME", "operator": "=", "pattern": "admin.php" }, { "variable": "TIME.hour", "operator": "<", "pattern": "8" }], "then": { "actions": [{ "action": "alterRuleMeta", "rules": "10001,30001-30999", "meta": { "severity": "warning", "abnormal_weight": 15 } }] } } ``` **上述规则的功能是**:在 0:00am-8:00am 这一时间段内访问 admin.php 时,部分规则的紧急度将被设为 critical,异常权值则被设为 15。 # 三、针对HTTP协议的定制 天存信息的 iWall3 的目标是实现 Web 应用防护,因此在语言设计上也有与 HTTP 协议密切相关的因素。 ## 1.数据类型 与编程语言中的变量一样,iWall3 的变量也具有多种数据类型。其中有些数据类型是专门针对 HTTP 协议而设计的,如: | 集合类型 | 结构类型 | |:-------- |:-------- | | 允许同名的成员。HTTP 协议允许出现同名的请求参数和头,用集合类型来体现名-值对而非键-值对。 | 允许使用 XPath 和 JsonPath 来指定元素,对 XML 和 JSON 类型的请求数据能够更精细地处理。 | ## 2.持久变量 iWall3 的用户变量具有自己的生命期。在语言层面,iWall3 不仅提供了 HTTP 会话期内有效的事务内变量,也提供了跨越 HTTP 会话的持久变量。 持久变量提供了跨越 HTTP 事务的保存、计算和读取数据的机制。这样,Web 应用防护的逻辑就不局限于单个 HTTP 会话,而是可以在多个 HTTP 会话间建立联系。 ## 3.状态维护 HTTP 协议本身是无状态的,这意味着没有“用户”的概念。但在防护功能上,我们又需要有一个“用户”的概念,这样才能将多个 HTTP 事务关联起来,制定针对“用户”的防护措施。 iWall3 提供了主体的概念,它是 HTTP 事务的发起端和访问者。对于每个 HTTP 事务,可以从设备、网络和报文等不同层面采集信息,得到多个类型的主体。如此,书写者能够对多个 HTTP 事务中的同一主体应用规则 (如长时间拦截) 和共享数据 (如权重计算)。 # 四、有什么用 使用类编程 WAF,安全人员不再是规则的**使用者**,而变成了**规则的生产者**。针对应用的细致和独立的安全需求,基本上都可以用编程的方式实现出来,不再受限于 WAF 产品提供的内置功能。 如本文开头所述的功能需求,即使仅仅在防范注入方面: - 某个域名或某些特定的 URL 不需要注入检查; - 对来自外网的注入访问进行拦截,来自内网的注入访问只记录,不拦截; - 对特定的请求参数名或特定特征的请求参数不进行注入检查; - 非工作时段不仅拦截还阻止该用户一段时间访问; - 对 admin 等管理账号登录后的访问不进行注入检查; - 对于只记录不拦截的请求,附加一个特别的请求头发往应用; - 对某些 URL 的注入访问,记录下 HTTP 请求的全部报文; - HTTP 响应码为 500 的注入的日志紧急度设为 alert; - 对疑似的注入企图不做一次拦截,而是进行加权计算。 无论是上述某一条还是更复杂的组合,安全人员都可以在用户现场通过高度灵活的类编程 iWall3 来实现。
微信关注我们
原文链接:https://blog.51cto.com/u_15101495/2916627
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源优质分享App
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
Apache Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。