刘焱: Webshell 发现技术实战解析

向作者提问
刘焱,网络ID兜哥,资深安全专家,具有十年云安全产品经验,主要研究方向为机器学习、僵尸网络、威胁情报、沙箱技术。对企业安全建设和机器学习感兴趣同学可以添加公众号 兜哥带你学安全
查看本场Chat

2017年7月11日,周二晚上8点30分,具有十年云安全产品经验,主要研究方向为机器学习、僵尸网络、威胁情报、沙箱技术。百度安全资深安全专家刘焱带来了主题为《基于机器学习的 Webshell 发现技术探索》的交流。以下是主持人如梦初醒整理的问答实录,记录了作者和读者问答的精彩时刻。


内容提要:

  • 对于没有显示出jsp等后缀的网站如何检测?
  • 对于node javascript机器学习可以用在哪些方面?
  • 这样的检测通常是如何应用到生产环境的?
  • 在企业安全中,机器学习可以做哪些事?
  • 在镜像流量的使用场景下(以spark为例),mllib可以做哪些安全方面的工作?基于流量分析业务异常能否具体深入下?
  • 词袋模型为什么选择n-gram,n取值是尝试出来的吗?有规律或者经验吗?
  • 实际使用中,机器学习方法检测webshell效果怎么样,与传统基于特征的检测比怎么样?
  • 检测webshell的思路能够用来检测其它安全问题吗?比如SQLI?
  • 对于php有没有工具可以检测出webshell?
  • n-gram做提取的时候,有没有考虑降维,如果需要降维的话,需要怎么做?在数据预处理阶段做了哪些工作?
  • 这种训练完成后的模型如果想上线做成服务,有什么比较好的方式?是否做成http服务就行?

问:对于没有显示出jsp等后缀的网站如何检测?

答:基于文件扫描的webshell检测可以解决这个问题。文件扫描客户端会部署在web服务器上,通过该客户端解析web服务器的配置文件,获取对应的cgi脚本路径,把该路径下面的文件都当成脚本来处理就可以。如果是基于流量和日志的也可以解决这个问题。 因为本身检测就不依赖文件后缀。其中基于流量的webshell检测可以参考我在owasp 2015上发言的ppt。


问:对于node javascript机器学习可以用在哪些方面?

答:这是个很专业的问题。我了解到的类似svm knn这些分类算法js都有实现。不过主流机器学习还是基于python的tensorflow karas 以及spak mlib居多。尤其是python具有极其丰富的第三方支持使用非常广泛,使用pypy加速后性能很赞,虽然不支持scikit-learn。


问:这样的检测通常是如何应用到生产环境的?

答:这是个开放式问题,没有最好的答案。取决于你的环境。我了解的有一下三种方式。

  1. 最常见的也是在云端离线计算得到模型后,把模型放客户端运行,语音识别就是这样实现的。我见过的语音识别的训练数据几百G很正常,根本不可能放客户端,但是训练得到的模型却不大。

  2. 客户端计算文件的特征后,把特征发云端进行预测判断。

  3. 杀毒用的最多的。本地用传统技术,比如规则和沙箱,检测的疑似文件,发云端继续折腾。


问:在企业安全中,机器学习可以做哪些事?

答:我专门写了本书回答这个问题。比如使用知识图谱做风控。使用文本分类技术识别灌水、黄反贴,钓鱼网站检测。使用n-gram或者隐式马尔可夫做UBA用户行为检测。使用DNN&CNN做恶意代码检测。前段时间思科在网关设备上,使用机器学习识别加密流量中的恶意程序。不过机器学习目前在安全领域远没有传统的规则、沙箱和黑白名单成熟。生产环境需要和传统技术结合使用。我的新书预计7月底或者8月初出版,会以安全背景介绍机器学习。有兴趣同学可以关注我在freebuf上的专栏,写这个比较多。


问:在镜像流量的使用场景下(以spark为例),mllib可以做哪些安全方面的工作?基于流量分析业务异常能否具体深入下?

答:我了解到的除了深度学习,常见的svm,knn,word2vec,sparl,milb都支持。使用sparkx还可以进行知识图谱计算。基于流量分析业务异常、webshell都可以,生产环境用spark挺多的。现在使用tensorflow和paddlepadlle的也多起来了。基于流量分析,使用机器学习,沙箱检测webshell ,sql注入我做成了企业级产品。为了避免做广告,有兴趣试用的可以私信我,要部署全流量镜像。目前只适合有机房的情况,在云上还搞不定。

从解决的问题角度。比如业务流量陡增,基于逻辑回归发现异常流量增大。使用图技术发现信息孤岛,发现疑似webshell。还有比较厉害的就是思科那个。从加密流量里面识别恶意程序,而且还不用密钥,也不中间人劫持。发现蠕虫也可以。基于netflow和图技术。


问:词袋模型为什么选择n-gram,n取值是尝试出来的吗?有规律或者经验吗?

答: n-gram在文本处理尤其是nlp领域使用非常多。人的语言包括脚本语言,有明显的前后联系。n-gram和lstm特别适合表示这种联系关系。n的取值通常在2-5,可以通过自动化程序比较。n大于5时,计算空间会过大。lstm也可以使用下,实际效果n-gram还真不错。lstm样本少的话真心一般。


问:实际使用中,机器学习方法检测webshell效果怎么样,与传统基于特征的检测比怎么样?

答:在召回率上优势很明显。基于规则的召回率比较低。因为没有写规则的基本检测不到。基于沙箱的召回率比较高。通常机器学习可以有效帮助提升召回率。准确率方面,规则写到精准可以接近100%。写得不好误报也挺多。这个就没什么可比性了。

特别提下基于沙箱我们也做了,大家可以玩下: http://scanner.baidu.com,这个也是我team做的。


问:检测webshell的思路能够用来检测其它安全问题吗?比如SQLI?

答:可以进行参考使用。本质都是文本处理和检测。不过SQLI适合先使用语法解析,进行预处理 ,生成token后再进一步机器学习。单纯使用文本特征也很难效果特别好。如果基于流量,使用模型检测脱裤流量也有成功案例。


问:n-gram做提取的时候,有没有考虑降维,如果需要降维的话,需要怎么做?在数据预处理阶段做了哪些工作?

答: pca就可以,pca就是做降维的。不过一般不用pca和n-gram配合,一般n-gram和tf-idf一起就可以了。sdl安全测试是检测是否有上传漏洞,webshell检测本来就是偏事中和事后。如果有命令执行漏洞也可以导致webshell,sql注入漏洞也可以,webshell来源太多了。webshell和远程管理工具的唯一区别:一个你用,一个黑客用。


问:这种训练完成后的模型如果想上线做成服务,有什么比较好的方式?是否做成http服务就行?

答:分两种模式。

  1. 如果你客户端搜集了特征,可以通过http把特征传云端检测。

  2. 如果计算好了模型,也可以把模型下载到客户端本地运行。类似语义识别和手写字体识别。


本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。


在此感谢异步社区为本次活动提供的赠书《Python机器学习——预测分析核心算法》。

异步社区是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架。

enter image description here

微信扫描登录