前段时间听了一个”机器学习在信息安全中的应用”的讲座,应该是我今年听关于机器学习在信息安全中的应用的最好的一场,研究嘉宾是kkqq大神,后来自己又做了一些思考,在此做一个总结。
在和黑客对抗的过程中,面对的威胁有3个不同的认知程度:
1.已知的威胁。
2.已知的未知的威胁。
3.未知的未知的威胁。
很多时候,在做产品、做运营和做研究的时,最大的恐惧是面对一个最未知的恐惧;因为只要知道这个情况是已知的,有很多技术手段都是可以解决的。
首先我们说一下如何定义和衡量已知和未知。从安全角度来说比较容易:
已知的已知就是我如果在做一个产品,我自己每天能看见的,能检测到的;
已知的未知就是我自己看不见,也检测不到,但是友商们都有检测;
未知的未知确实就是我不知道,除非它发生了,被通过某些机缘巧合的情况下暴露了出来,这个情况下,才会换成我们所谓的已知的未知。
做安全的,不管是甲方还是乙方,面临同样的挑战,就是一个事情只要我知道,我所有的分析,所有的IOC,所有的威胁情报都能跟上去,但如果这个事情我不知道,那真是无从下手。
其实在每一个层次上面,我们也可以横向定义到我们的产品,我们的运营上面去,我们怎么样去衡量你是不是在这个层次上做得比较好。
首先,要解决的是效果问题。这些效果包括我的检出率、召回率、误报率,就是这些不同的指标。但是更重要的是运营的,我怎么去衡量。不管你做任何的系统,你如果一天摔给我1000个报警,那我绝对不可能响应的过来的,所以运营就是事件可响应的数量不能太多。
每一个攻击来的时候,如果你不知道它背后是谁,那你这个其实还是没有解决到根本的问题。
我们用这个效果运营和知己知彼来衡量你在每个维度上到底能做到什么样的程度。
规则系统
我只需要写规则,我就能把这个问题解决掉。但是有一个坏处,严重依赖于安全专家,因为你要想把一个安全场景的检测逻辑转化到一个规则系统里面,你是需要人深入了解到清楚每一个环节。
规则系统,就是写规则嘛。它的误报率和检出率都是相对比较认可的,误报也是比较可控的,可运营的。我出了一个误报,我可以做到把这个规则删了就可以了,这样误报就没有了,不影响你整个架构。
存在的问题就是规则系统是严重依赖于你的专家的知识,天然的就限制了你的规则系统是基于被动响应的模式的,比如说杀毒软件,只有我有一个样本我才能写一套规则,而且要在过程中是严重依赖于分析师的。我们拿杀毒软件举例子,分析师说我需要确定一下这个家族有什么样的特征,为了很快的能做响应,它有很多烦琐的或者是特别重的自动化流程去做。
还是相对有一个好处,能很明确的告诉你,这是什么病毒,这个在有时候,尤其是在互联网企业做安全运营的时候是很重要的指标,因为我如果来了一个远控和我来了一个普通的刷流量的恶意软件,这个威胁程度在我们看来是不一样的。
机器学习
我有一个固定的数据集合集,我有一个模型套上去,我先做一个模型,然后我有检测结果。严重依赖与我们的安全专家,提供精确的数据标签。我需要不断的再把它的结果打上标签,再去逐步做验证,它其实是一个人工辅助的过程。
机器学习和以前的规则系统不大一样,以前的规则系统是安全研究员就能搞定的事情。但是在机器学习的场景下,是需要安全专家和数据科学家共同协作的。
其实在机器学习的场景下,你会发现安全专家起到的作用要比数据科学家要重一点,因为它里面有一个特征提取的过程,这个特征提取是很严重的依赖于你的专家先验知识的,这些特征提取是数据科学家解决不了的一个问题。
机器学习就是它在固定数据集的时候,效果特别好,输入、输出严格限定的话,效果绝对要比规则系统强很多。
数据处理要比你的规则系统要强,因为它是天然的和大数据这套东西都结合起来的。
但是第二个就有待商榷,它落地的时候这个误报率,第一步它在训练的时候那个指标特别好看,但是安全每天的形势都是在变的,今天你做的四个九、五个九的模型,明天来了一个新的东西,你会发现他以前没考虑到,有误报。这个误报就不是简单的0.001%的标准,很可能放大到一个你没有做运营的场景。
在一个规则系统里面,你如果要做误报,这个响应是相对比较容易的,我就删一条规则嘛,大不了加个强限制的的条件。机器学习的时候,你看这个模型是人一眼看上去理解不了的,需要很精确的、很深入的做关联,才能理解机器学习的模型,就意味着你不能通过一个简单的把一个分支改掉的方式解决问题,得需要把模型重新迭代一遍,迭代模型大家做过的都知道,周期是比较长的了。
最后一个是它的威胁分类比较困难。
深度学习
它在解决大局观的问题下,要比人的性能要好。那我们给它一个定位,它尝试在解决一个已知的未知的问题,它能比机器学习解决得更好。但是它也在尝试着突破未知的未知,这个可能比较难理解,我们后面也展开说一下。
它还是严重的依赖专家,给你提供一个初始的数据集用来做标签,用来做结果验证。但是你会明显感觉到,如果大家在说神经网络的时候,你会发现专家的分量降低了,算法和计算或者是模型的层次会变高了。那就变成一个数据科学家主导的过程,而不是专家主导的过程,专家更多是去辅助验证这个模型。
深度学习和机器学习都有同样的问题,但是因为它的更不可控性或者是更不理解性,所以就造成了和机器学习有同样的问题,但是会相对比更严重。
应用场景
特定场景的检测,就是固定输入输出,有固定的规则系统。在固定场景的情况下,还是有很大的潜力去发现已知的未知,甚至于去发现一些未知的未知,这些特定场景我们前面也提到了有一些问题,比如说误报的问题、漏报的问题,也是通过一个运营的方式去解决,但是运营的方和我们以前常见的不一样,我们杀毒软件来了误报了以后,我们都是分析师去处理的,但是在机器学习、人工智能这个大框架下,是通过数据密集型的逻辑去解决的。
多维度中的一个维度,因为我们前面提到的,机器学习和深度学习最大的问题可能在落地的时候是有误报的问题和时效性的问题,在泛安全的场景下,其实还有很多场景不需要这么强的对误报的容忍度或者是漏报的容忍度那么低的。而且在大的体系下是只依赖于一个东西做某些程度的决策,而不是要求你做百分百的决策。
实时对抗性没那么强。这些场景大家都相对比较熟悉了,就是风控,风控包括人脸识别、用户粗向、策略模型,你会发现在某一个子方向上确实没有程度做到一个我们可以直接拿过来做单一维度的对抗手段,但是你把所有的这些东西综合在一起,因为风控讲的是可控,我们如果是搞攻防对抗的,你有一起安全事故很可能被搞了,但是风控在大的场景下,只有一个百分比的用户的损失是可以接受的,我就是相对比较成功的,所以在这种场景应用是很成功的。
威胁情报,很多人可能喜欢把威胁情报归到检测里面去,但是我觉得不是,它主要还是解决知己知彼的问题,在知己知彼的场景下,它其实是可以通过人工后期确认的方式,来达到你要的效果。所以在这个场景下它也没有那么高的实时对抗性的误报的要求。
最常见的,后台数据处理,批量数据分析包括聚类、分类这些应用,可能每家都有很成功的应用。
未知的未知
未知的未知我们到底怎么解决,是我们现在相对比较前沿的在人工智能方向上的一个,AlphaGo里面用的那套模型,就是Reinforcement Learning,里面有一个反馈机制,我觉得人工智能的路还很长,但是这些跬步都是一步步积累下来的,我们虽然看不到人工智能在信息安全或者是其他行业的终局,但是能看到的就是Reinforcement Learning在下一步的人工智能里面相对迭代效果还不错的。
如果要落地的话,你会发现数据的重要性远远大于其他所有方面。
没有数据就没有大数据,没有大数据就没有人工智能,也没有机器学习。
模型,大家有时候可能觉得模型和算法是一套东西,模型在我们的概念就是一个威胁场景,必须要定义好你要解决什么样的问题,在这种情况下用算法适配,而不是反过来。所以我们自己的概念是说数据大于模型,模型大于算法。我们自己切身的体验是,你如果按照这个走的话,你的落地的效果肯定会多一些。