V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
helloworld01
V2EX  ›  站长

大道至简:智能语义检测的武林

  •  
  •   helloworld01 · 2016-12-19 19:02:01 +08:00 · 2461 次点击
    这是一个创建于 2710 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在宗派林立的检测技术武林中,语义化检测引擎近两年已成热门绝学。它的力量在于,让攻击检测更精确、更聪明、更人性化。

    “智能语义检测”这门武艺的江湖故事,要从它的前辈“基于规则的检测引擎”开始说起。

    十几年里,基于规则的引擎一统江湖。直到现在,江湖上大多数的 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 服务系统所面临的各种安全挑战。

    大道至简,大有可为。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:34 · PVG 03:34 · LAX 12:34 · JFK 15:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.