入侵检测技术一般分为异常检测和特征/签名检测,这里主要讨论的是网络入侵检测系统(NIDS)。
主流的入侵检测系统通常是采用异常检测+特征/签名检测。他们都存在的问题就是:
完整的数据流应该包括输入和输出两个部分,而大部分NIDS却只考虑了输入数据,没有使用输出数据。通常情况下,存在异常/恶意输入数据,并不意味着有成功的入侵行为。比如一个任意文件读取的HTTP请求,只有当它的响应体中包含那个文件的内容,才算是一个成功的入侵行为。所以降低误报率的一个方法就是对输入和输出数据进行关联分析。而输出的异常检测,就是另一种方法。
输出数据有以下几个问题:
那么这种降低误报的方法就是在传统的基于输入的NIDS的基础上,增加:1、输入输出数据的关联分析。2、输出数据的异常检测。结构如下:
一次成功的攻击行为一定会引起程序/服务的异常输出(输出数据、响应时间、其他行为等等)
。当NIDS触发告警,关联引擎查看该告警对应的输出数据是否有异常,如果存在异常才认定为True positive。也可将攻击行为分类,关联分析输出数据是否符合该攻击行为的响应。当然,这也存在着许多缺点:1、每个程序/服务第一需要大量的样本训练。2、程序/服务的某些特征出现变动,需要重新训练样本。3、输出数据太多(比如我司http下行流量4GB/s),收集、训练成本太高。4、其他…
NIDS的目的就是随时发现可能的入侵行为,并进行具体分析,及时、主动地进行干预(发送告警),从而取得防患于未然的效果,也就是说降低风险。在风险管理中,Risk = (probablity of the accident occuring) x (expected loss in case of accident)
。其中(expected loss in case of accident)可以理解的攻击的类型,常见的有三类: