小安:(挥手)小白,发呆呢?
小白:我是在思考!……IPS到底是怎么检测到恶意攻击的呢?
小安:这个问题,要从IPS规则库说起。
小白:哦,原来IPS防护是靠它。
小安:也不全是。IPS规则库就像一本字典,收录了各种各样的攻击行为和网络威胁,IPS引擎检测到数据包后,会去这本“字典”里查找,如果找到了就立即拦截。
小白:这么厉害,这本“字典”我也想拥有!
IPS规则长啥样?
all enable http [80,8080] (msg_cn:"SQL注入攻击选择语句检测";uricontent:"select";nocase;
pcre:"/[\x00-\x20\xA0\x2B\x2F\x29\x27\x22\d](and|or|union)[\x00-\x20\xA0\x2B\x2F\x28\x23\x2D][^&]{0,50}select[\x00-\x20\xA0\x2B\x2F\x28\x23\x2D\x5B].+[\x00-\x20\xA0\x2B\x2F\x29\x5D]from[\x00-\x20\xA0\x2B\x2F\x28\x23\x2D\x5B]./isU";)
这条规则翻译成我们的语言就是:规则有效,匹配基于http协议的SQL注入攻击,如果在报文URI中检测到包含and、or或union后接select……from等SQL命令的关键字,即命中此规则,并生成相应的告警信息和日志。
所以,这条规则的作用是识别一些请求中可能存在的恶意SQL查询语句,如果匹配了这条规则,IPS引擎就会判定这次请求附带了攻击指令, 从而引擎可以执行策略预定义的动作进行防护。
这本“字典”怎么查?
图1 IPS规则匹配流程
正常操作时,用户向服务器发起一个请求,服务器收到请求后返回给客户端一个消息,包含用户需要的内容。而攻击者为了获取用户隐私信息或服务器信息,会在前后端之间进行拦截,修改用户原本要传过去的参数,变为自己想要获取的信息,进行网络攻击。以上面提到的SQL注入攻击为例。
图2
图2是一个输入姓名查询信息的平台,攻击者在姓名信息grady后面增加了字符’union select ……,这些字符包含在报文中传递给了IPS引擎,被解析为图4内容。如果没有开启这条规则,在有注入的接口上,攻击者可以通过这些字符,查询到数据库中其他的数据表,从而获取隐私信息。
图3
图4
IPS引擎从流经的报文中,解析出各种关键字段,但它并不能判断是否存在攻击指令,需要在IPS规则库里查找。如果此时开启了这条规则,这次请求就能匹配到相应规则,说明其中存在攻击指令。IPS引擎会告知设备阻断这个行为,并生成一条日志。
IPS规则的局限性
通过前面的叙述,我们可以总结出这两个定义:
IPS规则:一些符号文字组合形成的判断依据,表示某一种漏洞或针对漏洞的某一种攻击形式。
IPS规则库:一系列规则打包形成,放入设备后是不可变的数据,描述多种攻击形式。
规则是引擎判断的依据,引擎解析出数据包的流量后与规则进行匹配,能匹配到规则,说明报文中可能存在攻击;不能匹配到规则,有两种可能:
- 确实没有攻击行为。
- 攻击手法更加先进,超出了规则的覆盖范围。
安全研究团队的日常工作,就是不断与攻击者进行技术对抗,研究更多、更高级的攻击方式,让规则覆盖最大可能性。
那么,是否只要规则库足够强大,就能覆盖所有可能的攻击呢?在现实运维工作中,面对庞大的数据流量,除了基于性能要做一些功能上的取舍外,还需要解决特殊报文和绕过的问题。
1、规则匹配顺序问题
凭感觉,根据危险等级进行规则匹配,高危的优先匹配,低危的后续匹配,好像是理所应当。实际上,规则没有这么智能,先匹配哪些规则,后匹配哪些规则,完全听从引擎的调用。为了避免先匹配到低危特征,而放过了高危攻击者的情况,引擎需要支持基于优先级顺序的规则匹配。
2、规则数量问题
网络攻击层出不穷,攻击手段和系统漏洞不断更迭,规则数量也随之与日俱增。一方面,规则数量过多,会造成性能压力;另一方面,如果限制规则数量,又会放过很多攻击者。
3、逃逸技术问题
逃逸技术,是攻击者为了躲避现有检测机制,想出的绕过方式。比如编码变化,攻击者为了隐匿自己的行踪,对攻击行为层层加码,使用多次base64编码、URL编码、unicode编码等。你可能会觉得,这几种编码不复杂呀,很容易就能解码。但经过多次选择甚至混合编码后,引擎就难以破解了,绕过了规则有限的检测方式。
尽管存在以上局限,基于IPS规则的防护方式,还是目前安全产品主要使用的防护方式之一。在更高级的防护方式中,融入了基于语义、深度学习等技术的安全能力,这也是IPS未来的发展方向。