在宗派林立的检测技术武林中,语义化检测引擎近两年已成热门绝学。它的力量在于,让攻击检测更精确、更聪明、更人性化。
“智能语义检测”这门武艺的江湖故事,要从它的前辈“基于规则的检测引擎”开始说起。
十几年里,基于规则的引擎一统江湖。直到现在,江湖上大多数的 WAF 是基于规则的 WAF 。其原理是每一个会话都要经过一系列的安全检测,每一项检测都由一个或多个检测规则组成,匹配了检测规则,请求就会被认为非法而拒绝。
听起来很简单?其实对于运维者和企业客户来说,规则检测的软肋就在于他的“道法复杂,不变通”。
基于规则的 WAF 能有效的防范已知安全问题。但安全运维者首先必须知道攻击的全部特点,根据这些特点制定规则。所以基于规则的 WAF 需要一个强大的规则库支撑,并且规则库需要及时更新来应对最新的攻击。
这时,问题就来了。基于规则的 WAF ,因为规则的描述能力有限,有些攻击方法和攻击场景无法通过规则来描述完备。我们举一个例子,
如果“大道至简!”是一串攻击请求,当 WAF 成功防御过一次后,就会更新一个规则 ——但凡包含“至”、“简”“!”这三个特征的,就可能是攻击!—— 但如果下次接到了一个正常请求:“至繁归于至简!”, WAF 也会把它归到攻击那一类,这就产生了我们所谓的误报。
同时,攻击者会通过复杂的变形来完成攻击。这时,规则又是无法穷尽所有的攻击变形的。还是刚才那个例子,当上次的攻击者做了一个“变体”,将攻击请求变成了“大道无为”,那么 WAF 就检测不到了,也就是所谓的漏报了。
总而言之,基于规则的检测不能有效防御未知的威胁,比如攻击变体, 0day 攻击。除此之外,对于企业安全运维人员来说,正则引擎的维护压力大,成本高,各派武林人士都在 YY :“有没有一种检测引擎和算法,不需要人去维护规则,也可以应对千变万化的攻击!?”
智能引擎检测这个武林绝学,就在这样的江湖背景下,千呼万唤始出来。
攻击行为语义化 —— 离门之剑,以不变应万变
语义检测引擎的内功在于,会把自然语言中的语义、顺序和场景,纳入考虑范围;知道一个特征,在这个场景、顺序下可能是攻击,在另一个中则不是。延续刚才“大道至简”的例子:
规则引擎: 只用“至”、“简”“!”来判定一个请求是否是攻击。漏报误报率高
智能语义检测引擎:
“大道至简!”是攻击 “至繁归于至简!”因为场景和顺序不对,不是攻击 通过机器学习,能分辨出“大道无为”是“大道至简”的变体 这样一来,大家就可以一目了然看出二者的根本区别了。智能化语义检测引擎,就像手握一把离门剑,“每一招中皆能在刹那间作二十五种变化,独步剑林。”(参考萧逸《十二神拳》)。对于防范未知威胁, 0day 攻击尤其有效。
那么,智能语义化检测的武功究竟如何使出来?我们再往下探究。
第一招,归一
把同类攻击行为的同类行为特征归并起来。即,同一类的攻击行为和攻击特征聚合为一个攻击特征,这就是归一化的过程。攻击的多个行为特征组成特定的排列组合,来表示同一类攻击,这样我们就可以用自然语言的语义来理解并且描述同一类攻击。攻击特征的排列组合就是攻击的语义化。
把同类攻击行为的同类行为特征归并起来。即,同一类的攻击行为和攻击特征聚合为一个攻击特征,这就是归一化的过程。攻击的多个行为特征组成特定的排列组合,来表示同一类攻击,这样我们就可以用自然语言的语义来理解并且描述同一类攻击。攻击特征的排列组合就是攻击的语义化。
这样就能抛却各种复杂的攻击和它们的变形,把攻击行为语义化了。
以下是一个 sql 注入攻击实现语义化的例子,先对 sql 语句进行归一化的语义分析,然后在异常攻击集中查找分析结果,若找到说明是 sql 注入攻击。
比如以下这条规则:
(select|from|\band|\bor|\bxor|=|,|;)[\s+()*?(sleep[\s\+
]?(|version[\s+]*?\(|pg_sleep[\s\+
]?(|extractvalue[\s+]*?\(|updatexml[\s\+
]?(|dbms_pipe.receive_message(|st_latfromgeohash(|st_longfromgeohash[\s+]*?\(|analyse[\s\+
]?(|gtid_subset[\s+]*?\(|gtid_subtract\(|st_pointfromgeohash\(|convert[\s\+
]?(|md5[\s+]*?\(|count[\s\+
]?(|char[\s+]*?\(|benchmark[\s\+
]?(|hex[\s+]*?\(|@@version|db_name[\s\+
]?(|user[\s+]*?\(|cast[\s\+
]?(|concat[\s+]*?\(|unhex[\s\+
]?(|floor[\s+]*?\(|length[\s\+
]?(|ascii[\s+]*?\(|substring[\s\+
]?(|substr[\s+]*?\(|substring_index[\s\+
]?(|instr[\s+]*?\(|left[\s\+
]?(|right[\s+`]()
通过归一化后可以描述为: select from 敏感关键字 函数运算(),可以用“ abcde ”五个字符表示,即这类攻击用语义可描述为:具有敏感关键字和函数运算的 sql 类型表达式。复杂的规则维护,瞬间变得简单了。
第二招,攻异
仅仅防范已知的 WEB 安全问题,是被动且滞后的,基于异常的防护会更加有效。
异常防护这一招的基本观念是:根据合法应用数据检测建立统计模型,以此模型为依据判别实际通信数据是否是攻击。
理论上,此招一出,系统就能够探测出任何的异常情况。这样,就不再需要规则库, 0day 攻击的检测也不再是问题了。
例如,阿里云云盾的 WAF 智能语义异常攻击集,是基于云盾自己的运营数据,对正常的 Web 应用建模,从正常的模型里边区分出异常的情况,再从繁多的 Web 攻击中提炼出来的异常攻击模型,形成异常攻击集。
制胜之招:无影
未来,智能语义化检测引擎这门绝学,将进化成实时大数据分析引擎。招式进化的关键,就在于算法的优化,计算的能力和成本,还有数据聚类和清洗的技术,等等。
江湖风云变幻,大数据的时代已经成为主流。 WAF 防御的技术如果想要继统治武林,向智能化、语义化的方向发展则是必然。未来,可以预见大部分的 WAF 检测和防御都会通过机器学习自动来完成,再加上很少的人工确认工作,就可以确定异常攻击集 —— 从容应对现实中的安全威胁以及未来的安全威胁,从根本上解决 Web 服务系统所面临的各种安全挑战。
大道至简,大有可为。