查看标准算法模型与添加自定义算法模型为高级功能,如需开通请联系我们
为了高效识别多种威胁,ATD的实时引擎提供了9种标准算法模型,分别为:漏洞攻击,爬虫,CC攻击,账号类攻击,慢速攻击,异常流量包攻击,刷单类,路径扫描,危险UA。为了支持识别更多类型的威胁,支持创建自定义算法模型,同时也支持根据实际业务需求来自行添加算法模型。
实时引擎主要分为两大部分:1、特征计算。 2、分类器分类。
简单的说就是实时引擎获取用户输入的日志,通过特征计算得到用户的特征向量,之后分类器根据用户的特征向量对用户进行分类,选出异常用户。最后调用接口输出异常用户信息。
所谓特征计算就是将业务日志转化为特征的过程。输入是一条一条的日志,输出是特征向量。总体上特征可以分为两类: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请求平均时长
其中每一条是一个特征向量。
现在假定我们已经有了上面这些特征了,如何根据这些特征来判断一个用户是不是攻击呢?当前的做法是基于规则,下面写给出一条规则样例:
clientIP.pv>50 and clientIP.requestPath.most>0.99
上面这条是一个逻辑表达式,分类器是由多条上述规则组成的。
如:异常流量包攻击
描述:攻击者构造大量的异常大小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(下线)三种状态。
注意:标准算法模型中的内容只能查看不支持修改,可以根据业务实际需求创建自定义算法模型。
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(下线)三种状态。
一条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>
其中可添加的特征向量最多由三部分组成: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。