sprewellkobe
作者sprewellkobe2017-11-03 14:13
专有云, TX

AI重新定义Web安全

字数 7356阅读 1774评论 0赞 5

AI重新定义Web安全

作者: 丛磊

云给安全带来的影响

距离2006年Amazon发布EC2服务已经过去了11年了,这11年里,发生的不仅仅是AWS收入从几十万$涨到了100多亿$,更重要的是云计算已经走进了每一家企业,根据信通院发布的“2016云计算白皮书”的数据,目前有接近90%的企业都已经开始使用云计算(包括公有云、私有云等),这说明大规模云化对于企业而言已经不仅仅是趋势,而是确凿的既成事实。

云化普及的同时也给安全带来的很多挑战,主要有:
云化导致以硬件设备为主的传统安全方式失效。我在跟企业交流时,不只一家企业都在提出了这样的担心,在上公有云的过程中,因为无法把已经购买的硬件防护搬到云上,所以非常担心业务安全性。有趣的是,他们对于上云后的流量层攻击反倒不担心,因为他们认为云上的高防IP等产品可以帮他们解决大部分问题。云化导致了业务层的安全空白,这不仅发生在公有云环境,也发生在私有云环境,以OpenStack Icehouse版本为例,至今仍然缺少能够有效横向扩展的Web安全组件。

云化导致攻击/作恶成本大大降低。云是IT领域里“共享经济”的再升级,从最早的IDC租用升级进化到了Linux kernel namespace租用,但这种“共享经济”在给企业带来成本降低、使用便利的益处时,也顺便给攻击者带来了同样的好处。按目前的市场行情,攻击者租用一个公网弹性IP的成本可以低至1RMB/天,租用一个IaaS平台的hypervisor层的计算环境,成本只有几RMB/天,而如果是container层的计算环境,则成本还要更低。如此低的成本,导致攻击者不再像过去那样需要花大力气挖掘培养肉机,而是可以在瞬间轻松拥有用于攻击的计算网络资源。以我们服务的国内某著名招聘网站为例,竞争对手最多可以在一天之内动用上万个IP以极低的频率爬取核心用户简历。
云化导致业务可控性降低,遭遇攻击的风险大大提高。云实际客观造成了业务的复杂性和不可控性,大量自身或者合作方的业务都跑在同一个云上,这里面有一个任何导致被攻击,都有可能对其他人造成影响。不可否认,现有的hypervisor隔离技术很成熟,以CPU为例,通过计算时间片分配进而在执行指令间插入各种自旋锁可以精确控制执行体的CPU分配,其他资源包括内存、IO也都可以恰当的控制。但是,在所有资源里,隔离性最脆弱的就是网络,尤其是公网上,毕竟NAT出口、域名是很难被隔离的。
所以,我们不得不面对这样的现实:“在享受云计算时代红利的同时,面临的业务层安全问题也越来越严重!”。
安全产品需要变革
很遗憾的是,很多传统安全产品并没有赶上这个时代,最明显的例子,15年前的防火墙就靠在命令行设定各种各样的policy而工作,而15年后的今天,一切的变化只是由命令行设定policy变成了界面设置policy,这不得不说是一种悲哀!

对于传统安全产品,设定policy是一种痛苦
我曾经亲身听某著名安全产商的布道师演讲,“买了我们的产品不代表你的业务就安全了,你必须学会怎么配置!”,这话听起来有道理,但是遗憾的是,大多数公司的安全人员并不是公司的业务开发者,他们不知道业务页面应该从哪个referer过来、不应该接受哪个user-agent的请求,也不知道某个接口应该接受哪些参数,甚至不知道业务对于单个用户的合理访问频率区间。更遗憾的是,这些传统安全产品价值不菲,在你花了上百万银子后,很可能压根不起作用,当然这里面最悲哀的是,“你还以为它在起作用!”
传统的安全产品因为要串接到业务中间(如果不串接,那么就无法起到作用),带来了相当的不稳定性,虽然有些先进的硬件机制可以通过技术降低这个风险,但是他们仍然不可回避的是:串接会带来性能延迟+带宽瓶颈。有些企业一开始买了个100Mbps吞吐量的硬件安全产品,但当发现业务突然增长时,硬件却无法自由横向扩容。这还不是要命的,最麻烦的是,串行的模式注定一旦分析的维度变得复杂(如策略变多的时候),就会造成业务的访问延迟,而分析维度一旦少,如退化为只做固定时间内访问频率限制,又会造成识别攻击的错误率上升,这是传统安全产品无法解决的永恒矛盾体。
不幸的是,虽然传统安全产品存在很多问题,但是很多用户已经逐渐习惯了它,甚至忍受上了天天配置策略的过程。
但这并不意味着合理,因为,在不便中,意味着存在着技术革新的机会!这时,机器学习来了!

机器学习是解决安全问题的金钥匙

机器学习发展史
机器学习其实早就来了,由图中可以看出,目前大红大紫的深度学习的源头-神经网络,早在70年代就已经被提出了。在上世纪80年代到本世纪,机器学习本身经历了几次平淡期和爆发期,最近的一次爆发期也就是现在,是随着大数据的发展和一些热点事件(如AlphaGo战胜李世石)的来临而爆发的。
那么大数据和机器学习什么关系呢?这个还是要和深度学习挂钩,从理论上讲,深度学习本质上是利用多层的神经网络计算,代替了传统特征工程的特征选取,从而可以达到媲美甚至超越传统特征工程进行分类算法的效果。基于这个逻辑,当标注样本数足够多的时候(即所谓大数据),通过深度学习就可以构造出非常强大的分类器,如判断一个围棋的棋局对哪方有利。
AI随着目前深度学习的火爆看似非常强大,但不幸的是,坦白讲目前AI的发展成熟度远没有到达可以取代人甚至接近人的水平。根据图灵测试理论,AI本身要解决的问题无外乎是三个:

   A,识别
   B,理解
   C,反馈

这三个是逐步递进的过程,真正智能的机器人最终可以跟人一样的反馈,从而在图灵测试中使人类无法区分它是人还是机器。
按照目前的AI发展,识别是做的效果最好的,无论是图像、语音还是视频,目前很多厂商都可以做到很高的识别率;但是理解就差强人意了,大家都用过苹果的Siri,我想它还没有能够达到与人真正对话的程度;而反馈就更难了,这要求在理解的基础上,不断的应变,同样的问题,可能因为对方身份、心情、场合的不同以不同的语气语调做出不同的反应。所以,我们目前看应用机器学习效果非常好的领域,几乎都是某个特定领域内的识别问题,通用领域的不行,比如人脸识别,包括人机对弈,本质也是某个棋种领域的识别,因为机器通过学习成千上万的棋局之后,就可以自动识别某一个棋局在该某方走的情况下对谁有利。
非常幸运的是,安全领域里的问题大多是特定场景下的识别问题,不是通用场景,也没有涉及理解和反馈,你只需要把相关数据交给机器学习系统,让它做出识别判断即可:安全或者不安全,不安全什么原因。
正因为安全问题本质是特定领域内的识别问题,所以从理论上讲,机器学习非常适合应用在安全领域,是解决安全问题的金钥匙。

安全结合机器学习的难点

虽然机器学习早已存在,但是长时间以来并没有改变安全市场,以“土办法(设定策略)”立足的产品还是占主导地位,这是为什么呢?究其原因,我想有以下几点:
1,不同于其他通用领域,安全领域的样本标注成本大。我们大家都知道,对于机器学习来讲,拥有海量、完整、客观、准确的标注样本是异常重要的,只有标注样本越多、越全面,才可能使训练出来的分类器更加准确。对于所有行业来讲,获取样本(标注样本)都是不容易的事情,而对于安全领域尤其困难。比如对于人脸识别的标注,可以找初中生、甚至小学生就可以完成标注,但是对于一次安全的威胁事件,可能需要极具经验的安全人员才可以完成,两者的成本差距非常巨大。

某个注入攻击
如上图所示,这个注入攻击经过多次复杂编码,非专业人事很难简单的进行样本标注。所以目前在通用场景下,之所以安全领域里的深度学习落地的并不多,里面一个主要原因也是因为很难获取海量的标注数据。
2,不同于通用领域,安全领域的场景特点更加明显,判断攻击的标准会随着业务特点的不同而不同。就拿最简单的CC攻击为例,600次/ 分钟的访问可能对于某些企业已经属于破坏性攻击,但对于某些企业则只是正常访问范围维度内的。所以,哪怕有大量的标注样本,某一个企业的标注样本可能对于其他企业毫无用处,这也是导致安全领域里使用机器学习困难的一个重要原因。
3,针对传统的文本类型攻击,传统思维认为简单的特征工程,甚至直接的正则匹配更有效。我们把Web攻击分为行为型攻击和文本型攻击两类:

 - 行为型攻击指每个请求看起来都是正常的,但当其连接成请求走势图时,才可以发现问题,如爬虫、撞库、刷单、薅羊毛等。以刷粉丝行为为例:每个请求看起来都是正常的,但是攻击者可能动用大量IP短时间内注册了大量账号,并且关注了同一个用户,只有我们把这些行为连接起来一起分析时,才能发现问题。
- 文本型攻击,即传统的漏洞类攻击,如SQL注入、命令注入、XSS攻击等,即我们单纯的把一个请求看成是一段文本,通过文本的特征既可以识别是否为攻击。

当特征的维度空间较低,且有些维度的区分度很高时,通过简单的线性分类器,就可以实现不错的准确率,比如我们简单的制定一些SQL注入的正则规则,就可以在很多场景工作的很好。但是,这样的传统思维忽略了召回率的问题,实际上也很少有人知道,通过SQL注入的正则规则,可以达到多少的召回率。同时,在某些场景,假如业务的正常接口就通过JSON传递SQL语句的话,那么这种基于正则规则的分类器就会产生很大误判。
当然这些问题并没有被传统安全厂商意识到。
4,传统安全人员并不太懂机器学习。这也是一个不争的事实,大量传统安全公司的安全人员精于构造各种漏洞探测、挖掘各种的边界条件绕过,善于制定一个又一个的补丁策略,但是并不擅长AI机器学习方面的内容,这也说明了这种跨界人才的稀缺和重要。
正是因为以上原因,导致AI智能的安全产品始终没有出现,但是没人可以否认,用户其实已经厌倦了policy驱动的规则模式,用户期待有一种可以适应大多数场景的,可以针对行为、文本做深入分析的,可以不需要复杂配置就可以达到很高准确率和召回率的Web安全产品。
于是,我们要用AI重新打造Web安全,因为我们坚信异常行为和正常行为是可以被特征区分的。

用AI重新定义Web安全

那么如何解决安全领域的样本标注问题呢?机器学习里面有两大分类,监督学习和无监督学习,而监督学习要求有精准的标注样本,而无监督学习则无需标注样本,即可以针对特征空间进行聚类计算。而在标注困难的安全领域,显然无监督学习是一个利器。
应用无监督学习
无监督学习无需事先准备大量的标注样本,通过特征聚类可以将正常用户和异常用户分开,这样就避开了大量样本标注的难题。聚类的方式有很多,如距离聚类、密度聚类等,但其核心关键还是如何计算两个特征向量的距离。在Web安全领域,我们拿到的数据往往是用户的HTTP流量或者 HTTP日志,在做距离计算时,可能会遇到一个问题:每个维度的计算粒度不一样,比如两个用户的向量空间里HTTP 200返回码比例的距离是两个float值的计算,而request length的距离则是两个int值的计算,于是这里就涉及了粒度统一归一化的问题。在这方面有很多技巧,比如可以使用Mahalanobis距离来代替传统的欧式距离,Mahalanobis距离的本质是通过标准差来约束数值,当标准差大时,说明样本的随机性大,于是降低数值的权值,反之,当标准差小的时候,说明样本具有相当的规律性,于是提高数值的权值。
无监督的聚类可以利用EM计算模型进行计算,我们可以把类别、簇数或者轮廓系数(Silhouette Coefficient)看成EM计算模型中的隐变量,然后不断的迭代计算来逼近最佳结果。最终我们会发现,正常用户和异常聚成不同的簇,之后我们就可以进行后续处理了。当然,这是理想的情况,更多的时候是将正常行为聚成了很多簇,异常行为也聚成了很多簇,甚至还有一些簇混杂着正常和异常行为,那么这时候就还需要一些额外的技巧来处理了。
学习规律
无监督聚类的前提是基于用户的访问行为构建的向量空间,向量空间类似:
[key1:value1,key2:value2,key3:value3...]
这里面就涉及两个问题,如何找到key,如何确定value。
找到合适的key的问题本质就是特征选择问题,如何从众多的特征维度中,选择最具有区分度和代表性的,那么为什么不像某些DeepLearning一样,将所有特征一起计算呢,主要是考虑到计算的复杂度。这里请注意,特征选择并不等同于特征降维,我们常用的PCA主成分和SVD分解只是特征降维,本质上DeepLearning的前几层某种意义上也是一种特征降维。
特征选择的方法可以根据实际情况进行,在有正反标注样本的情况下,经过我们实验,随机森林是一个不错的选择。如果标注样本较少或者本身样本有问题,也可以使用Pearson距离来挑选特征。
最终,用户的访问行为就会变成了一组特征,那么特征的value怎么确定呢?就拿最重要的特征,访问频率来说,多高的访问频率值得我们关注呢?这需要我们对于每个业务的场景进行学习,学习其规律,才能确定这些key的value。
我们学习的规律主要包括两大类:
1,行为规律:我们可以自动的找出路径的关键点,根据状态转移概率矩阵,基于PageRank的power method计算原理,网站路径的状态转移矩阵的最大的特征值代表的就是其关键路径(关键汇聚点和关键发散点),然后顺着这些关键点,我们就可以学习到用户的路径访问规律。
2,文本规律:对于任何API来讲,我们可以学习出其输入输出规律,比如输入有几个参数,每个参数都是什么类型,字符串还是数字还是邮箱地址等等,参数的长度分布如何,任何一个维度都会被学习出其概率分布函数,然后就可以根据其概率分布函数计算其在群体里的比例。哪怕是最不确定的随机分布,利用切比雪夫理论也可以告诉我们这些值是不是异常。比如,假如GET /login.php?username=中的username参数,经过统计我们计算得出平均长度是10,标准差是2,那么假如有一个用户输入的username长度是20,那么这个用户的输入在整体里就属于占<5%群体的小众行为(1/25)
通过特征选择和行为、文本规律学习,我们就可以构建出一套完整且准确的特征空间来将用户的访问向量化,进而进行无监督学习。
让系统越来越聪明
如果一个系统没有人的参与,是不会使这个系统变得越来越聪明的,强大如AlphaGo也需要在同人类高手对弈中不断的强化自己。在安全领域,虽然完全的样本标注不可能,但是我们可以利用半监督学习的原理,挑选一些具有代表性的行为交给专业的安全人员判断,经过他们的评定校正,会使整个系统变得越发聪明。安全人员的校正可以和强化学习和集成学习进行结合来实现,对于算法判断准确的情况,可以加大参数权重,反之,对于判断错误的情况,可以适当减少参数权重。
类似的想法出现于国际人工智能顶级会议CVPR 2016的最佳论文之一,“AI2: Training a big data machine to defend”,MIT的startup团队,提出了基于半监督学习的AI2系统,可以在有限人工参与的情况下,让安全系统更加安全更加智能。
重新定义Web安全
基于上述所讲的几点,我们基本可以勾勒出基于AI的Web安全的基本要素:

AI Web安全技术栈

从图中可以看到,所有算法均包含在实时计算框架内,实时计算框架要求数据流的输入、计算、输出都是实时的,这样可以保证在有威胁事件发生时迅速做出反应。但是,实时计算也增加了很多挑战和难点,有一些传统离线模式下不是问题的问题,在实时计算下会突然变成难题。比如最简单的中位数计算,要设计一个在实时流输入的情况下还保证准确性的中位数算法并不容易,T-digest是一个不错的选择,可以限定在O(K)的内存使用空间。还有一些算法可以实现在O(1)内存占用的情况下计算相对准确的中位数。
综上所述,可以看出利用AI实现Web安全是一个必然的趋势,它可以颠覆传统基于policy配置模式的安全产品,实现准确全面的威胁识别。但是,构造基于AI的安全产品本身也是一个复杂的工程,它涉及到特征工程、算法设计和验证,以及稳定可靠的工程实现。

ATD深度威胁识别系统

白山也一直在基于AI的Web安全方面探索,并且于2017年2月份正式推出了ATD(Advanced Threat Detection,深度威胁识别)产品,可以准确的识别并拦截各种行为或者文本攻击,包括爬虫、恶意注册、撞库、刷单刷票、薅羊毛、各种注入攻击脚本攻击等,并且在短短半年内已经积累了30余家企业客户。通过实践证明,机器学习确实可以在Web安全方面起到非常好的效果,比如:

  • 国内某Top3招聘网站,长期以来一直被竞争对手爬取简历,这些恶意爬虫非常智能,从User-agent、referer等字段上完全模拟正常用户,并且内嵌了PhantomJS,可以执行JavaScript脚本,使得传统的JS跳转防御方式完全失效。这些爬虫动用大量弹性IP,以非常低的频率进行抓取,我们看到的现象,单个客户端最低可以低至几次/天,传统的安全产品对此完全没有防御能力。而基于机器学习的 ATD则可以通过特征向量的建模,准确的将这些低频爬虫和正常用户行为区分开,经过实际验证,准确率高达99.98%。
  • 国内某Top3直播平台,存在着大量的恶意刷分刷排名情况,这种行为破坏了平台的公平性,本质上损害了平台利益。这些作恶团伙,先期批量注册大量小号,然后在需要的时候冲排名。这些行为显然传统安全产品无法解决,有些新兴的安全产品虽然可以解决,但是需要定制化大量规则,通用性较差。而机器学习算法正好弥补了这些不足,通过行为分析可以计算出关键路径和规律,然后可以利用子图识别等算法分析出作恶团伙,最终输出作恶的ID账号,经过用户实际验证,ATD的准确率达到99%以上,并且召回率比传统安全产品提高10倍以上。
    总之,基于AI的Web安全是新兴的技术领域,虽然目前还在发展期,但最终一定会取代以policy驱动的传统安全产品,成为保证企业Web安全的基石。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广