Skip to content

Latest commit

 

History

History
222 lines (172 loc) · 9.09 KB

算法模型开发文档.md

File metadata and controls

222 lines (172 loc) · 9.09 KB

算法模型开发文档


查看标准算法模型与添加自定义算法模型为高级功能,如需开通请联系我们

为了高效识别多种威胁,ATD的实时引擎提供了9种标准算法模型,分别为:漏洞攻击,爬虫,CC攻击,账号类攻击,慢速攻击,异常流量包攻击,刷单类,路径扫描,危险UA。为了支持识别更多类型的威胁,支持创建自定义算法模型,同时也支持根据实际业务需求来自行添加算法模型。

1、实时引擎是如何工作的?

实时引擎主要分为两大部分:1、特征计算。 2、分类器分类。

简单的说就是实时引擎获取用户输入的日志,通过特征计算得到用户的特征向量,之后分类器根据用户的特征向量对用户进行分类,选出异常用户。最后调用接口输出异常用户信息。

1.1、什么是特征计算?

所谓特征计算就是将业务日志转化为特征的过程。输入是一条一条的日志,输出是特征向量。总体上特征可以分为两类:1、用户特征。2、域名特征。 用户特征的主体是用户,一个用户的特征是对一段时间内这个用户的行为进行分析,得出的一个多维的特征向量。在ATD中,用户特征中clientIP、id表示。 域名特征的主体是域名,一个域名的特征是对一段时间内所有访问这个域名的用户行为进行分析,得出的一个多维的特征向量。ATD中,域名特征用domain表示。

下面给出样例:

clientIP.userAgent.most                 UserAgent最大相似占比
clientIP.userAgent.uniq                 UserAgent集合空间占比
clientIP.userAgent.mrr                  UserAgent最大重复环占比
clientIP.dangerousUserAgentCount        危险ua的数量
clientIP.2xxHttpCodeCount               2xx状态码的数量
clientIP.3xxHttpCodeCount               3xx状态码的数量
id.averageResponseBodyByteSent          HTTP响应包平均大小
domain.averageRequestTime               域名HTTP请求平均时长

其中每一条是一个特征向量。

1.2、什么是分类器?

现在假定我们已经有了上面这些特征了,如何根据这些特征来判断一个用户是不是攻击呢?当前的做法是基于规则,下面写给出一条规则样例:

clientIP.pv>50 and clientIP.requestPath.most>0.99

上面这条是一个逻辑表达式,分类器是由多条上述规则组成的。

2、举例说明标准算法模型

如:异常流量包攻击

描述:攻击者构造大量的异常大小HTTP请求,从而消耗服务端带宽

代码如下所示:

    <policy>
        <id>20501</id>
        <name>异常流量包攻击</name>
        <path>/</path>
        <rule>id.pv>4.5*userMaxPv  and  id.averageRequestLength>domain.averageRequestLength*10</rule>
        <action>online</action>
        <label>package</label>
    </policy>
    <policy>
        <id>20502</id>
        <name>异常流量包攻击</name>
        <path>/</path>
        <rule>id.pv>3.5*userMaxPv  and  id.averageRequestLength>domain.averageRequestLength*15</rule>
        <action>online</action>
        <label>package</label>
    </policy>
    <policy>
        <id>20503</id>
        <name>异常流量包攻击</name>
        <path>/</path>
        <rule>id.pv>2.5*userMaxPv  and  id.averageRequestLength>domain.averageRequestLength*20</rule>
        <action>online</action>
        <label>package</label>
    </policy>
  • id: policy的一个编号,同一个域名下的policy编号不能重复。标号越小优先级越高。
  • name: 攻击类型名称。用于标识不同类型的攻击。
  • path: 被防护的路径,默认都是根路径,如果需要对特殊路径进行防护,设置这个参数。如果path不是根路径,rule中的特征就是一个ip访问该path的特征。
  • rule: 分类器。
  • action: 可以为test(测试),online(上线),offline(下线)三种状态。

注意:标准算法模型中的内容只能查看不支持修改,可以根据业务实际需求创建自定义算法模型。

3、举例说明自定义算法模型

3.1、自定义算法模型创建过程

1、创建自定义算法模型,为了区分不同算法模型首先应该为算法模型起名。名称不超过10个字符。同时也可以为该算法模型添加详细描述。描述不超过30个字符。
2、编辑算法模型内容。

点击刚创建好的算法模型,可以看到如下内容:

<policy>
    <id></id>
    <path>/</path>
    <rule></rule>
    <action>test</action>
</policy>

只需把id path rule action完善即可。

  • id: policy的一个编号,同一个域名下的policy编号不能重复。编号越小优先级越高。自定义算法模型中的id支持100,000-1,000,000之间的整数。
  • path: 被防护的路径,默认都是根路径,如果需要对特殊路径进行防护,设置这个参数。如果path不是根路径,rule中的特征就是一个ip访问该path的特征。
  • rule: 分类器,一条rule就是一个逻辑表达式。rule不可以为空值。可在rule中填写对特征计算的判断。
  • action:可以为test(测试),online(上线),offline(下线)三种状态。

3.2、 rule的详细说明

一条rule就是一个逻辑表达式(LExpression)

  • 逻辑表达式由比较表达式(CExpression)和逻辑运算符构成。
  • 比较表达式是由算术表达式(AExpression)和比较运算符构成。
  • 算术表达式由常量,变量,算术运算符构成。

详细见如下所示:

    LExpression = CExpression (and | or LExpression)?
    CExpression = AExpression >|< AExpression
    AExpression = Variable|Constant (+|-|*|/ Variable|Constant)?
    Constant = 数字常量
    Variable = clientIP[begin:end].feature | domain[begin:end].feature

    LExpression可以是一个CExpression,或者是 CExpression + 逻辑运算符 + 一个或者多个LExpression组成,这里的逻辑运算符支持 and 和 or 两种操作。
    CExpression 组成为:AExpression + 比较运算符 + AExpression,支持的比较运算符有大于(>)和小于(<)符号。
    AExpression可以是一个常量、变量,或者是Variable|Constant  + 算术运算符 + Variable|Constant,支持的算术运算符有加(+)减(-)乘(*)除(/)
    另外支持括号运算符。

示例如下:

<rule>id.pv>2.5*userMaxPv  and  id.averageRequestLength>domain.averageRequestLength*20</rule>

3.3、Rule中可添加的特征向量

其中可添加的特征向量最多由三部分组成:1、分析特征的范围。2、主要分析特征。3、实时加工计算。

示例:

domain.requestPath.most 其中domain为分析特征范围,requestPath为主要分析特征,most为实时加工计算。

如下图所示:

此处输入图片的描述

以下是分析特征的范围

变量 备注
clientIP IP分析维度的用户特征
id ID分析维度的用户特征
domain 域名特征

以下是分析特征

变量 备注 支持的计算
pv 请求数 -
userMaxPV 最低分析频率 -
requestPath 请求路径 most,mrr,uniq
userAgent userAgent most,mrr,uniq
referer referer most,mrr,uniq
urlPattern urlPattern most,mrr,uniq
requestUri requestUri most,mrr,uniq
dangerousUserAgentCount 危险UserAgent
uriHtmlCount HTML文件数量 -
uriActiveCount 动态文件数量 -
uriStaticCount 静态文件数量 -
2xxHttpCodeCount 2xx状态码数量 -
3xxHttpCodeCount 3xx状态码数量 -
4xxHttpCodeCount 4xx状态码数量 -
5xxHttpCodeCount 5xx状态码数量 -
404sHttpCodeCount 404状态码数量 -
averageResponseBodyByteSent 平均HTTP响应包大小 -
averageRequestTime 平均HTTP响应时间 -
averageResponseTime 平均HTTP请求时间 -
averageRequestLength 平均HTTP请求长度 -
getMethod get请求数量 -
postMethod post请求数量 -
headMethod head请求数量 -
otherMethod other请求数量 -
clickFarm 刷单请求数 -
accountEnum 账号类攻击请求数 -
ajaxRequest ajax请求数量 -
uriWaf Waf类攻击数量 sql,xss,command

以下是实时加工计算

变量 备注
most 最大相似占比
mrr 最大重复环占比
uniq 集合空间
hit 命中率
sql SQL注入评测
xss XSS评测
command 命令注入评测

如下所示:

clientIP.pv
clientIP.requestPath.mrr
id.pv
clientIP.requestPath.mrr
domain.referer.most
  • clientIP.pv 表示IP分析维度下,用户的请求数。
  • clientIP.requestPath.mrr 表示IP分析维度下,用户的访问路径最大重复环占比。
  • id.pv 表示ID分析维度下,用户的请求数。
  • domain.referer.most表示整个域名的referer最大相似占比。

注意:如需添加多个分类器,需要添加多个policy,每个policy中仅可添加一条rule。