blog
blog copied to clipboard
[(Webshell) | (Malware) | (Advanced Persistent Threat)] 检测相关

综述
- 实体
日志,流量,行为,文件本身
- 方法
黑名单,白名单,规则匹配,模糊hash校验, MLDL(CNN/SMV/Naive Bayes,图聚类), KG(知识图谱关联属性), 语法抽象树(AST)
Webshell 检测篇
Malware 检测篇
APT 检测篇 与 通用检测框架
聚合waf数据,web日志,交换机日志,IDS日志等等,以及一些设备信息应该是可以发现APT攻击的,APT攻击不易发现甚至不能发现,不意味着我们什么都不能做,攻击手段也不一定是高的什么都做不了。如果能够布置大规模的蜜罐网络,进行伪装,并有效的收集设备信息,聚合起来通过不同手段进行检测。或许也未可知。但是由于本身我没有这方面资源,就不扯淡了。
temp.mark
- labelimage只能通过反例来确认
- simple model,flask web api还是带着模型到客户端
- text classification的问题,字符长度导致内存溢,fit-genrator也不行,看来要降下维
- stringsfile 转换任意文件到string,模仿strings命令
- AST抽取序列会不会提高精度
- 是否可以通过聚类来确定webshell种类,然后再学习,多标签分类.
- 是否可以通过seq2seq的方式或者GAN方式生成对抗序列进行训练
怎么生成webshell by ml 看似正常的webshell
- 自动化生成webshell的想法之一,输出语句,和已知webshell的渲染截图互相比较。根据相似性得到结果。但是觉得不怎么好啊,两个生成之间的精度都会有问题。
变迁:
检测模式
- ssdeep
- yara + ssdeep
- 两种方式都配合上黑白名单
- python系统调用, 各自分别编译成standalone的文件
- 将ssdeep作为yara模块整合到一起
- 机器学习方式与以上方式
- 提供web api检测并接入其他webshell检测api
- tlsh编译standalone模块
- [ ] 近期准备把tlsh整合进yara模块
说明
-
ssdeep/tlsh的hash方式,无法对较小的文件产生有意义的值,也就意味着无法检测一句话木马,以及一些图片马。yara的依赖于规则,规则的质量好坏决定了检测效果的好坏。无法检测未知,有限的检测一些变种。
-
ssdeep/tlsh 只占用一个cpu, yara会占用所有cpu,内存暴涨。可通过外部措施限制
-
yara的输出,对命中结果是多条输出,解析终端输出合并得到一个文件的检测结果时,如果此时恰好不是顺序连续输出的,则解析结果不全。
-
yarac编译后的Yar规则文件本身也可能被Widows认为是病毒文件
-
yara本身针对有些文件会出现无法读取的问题
信息抽取
- python 库调用
- 系统命令调用生成输出解析
- 使用对应平台脚本语言输出到文件再进行解析,例如win下用powershell, linux下用shell
- osquery 获取
说明
- osquery 功能有限,Linux下非常好使,win下不行,python的一些库,例如提取注册表的,感觉并不是很好使。调用系统命令就面临着解析终端输出的问题,可以采用line by line的方式。写到文件再进行解析的方式,不应该这样占用宿主机空间。
机器学习
- CNN文本分类, tf版本
- CNN文本分类, keras版本
- 文本oneline时最开始由python 脚本处理,写到临时文件,后用shell脚本处理,命令行很方便,再到python处理
- 增加文本处理函数,直接读取文件列表,读取文件,读取文件夹,皆可
- 增加图像识别功能,套用labelimage进行识别
- 采用fasttext 进行分类尝试
- 采用word2vec进行词向量转换
- 采用glove方式进行词向量转换
说明
-
应该覆盖样本全面,单独采用某种cms作为训练样本,会导致测试有偏差。单独采用wordpress训练的结果对discuzx,phpmyadmin的检测结果并不友好。
-
build vocab的时候,可能多次的结果并不一样
-
fasttext 依赖于更多的数据,才能构建出一个很好的词向量
-
采用一句话木马进行训练的时候,实验效果很好,实际测试很差,原因因为,有效词太少。应当把所有数据一同训练生成较大的sequence, 并以此进行训练
-
图像识别处理的结果,应当在最后无法判断,时渲染webshell再进行检测得到结果
-
训练好后的模型往往很大,不适宜带到客户端。只带weights倒可以,但是客户端还要安装相应环境,不方便。
-
好的参数具有很好的效果,算法让人很头秃
-
准确度较高,未知威胁感知具有较好的准确率,对变种的检测较好, 可以检测ssdeep无法检测的一句话,yara没有的规则
- [ ] 可以通过yara对已知webshell进行检测,并根据输出标签制作训练数据集
- [ ] 准备尝试seq2seq ,lstm,sru等分类方式对webshell进行预测 ,
- [x] 聚类对已知webshell分类。
web 接口
- 单文件及文件夹常规检测(ssdeep+yara)
- 单文件综合检测(ssdeep+yara+ml)
- 单文件机器学习检测(cnn + lableiamge)
- url 截图渲染
- 黑白名单接口上传
- 采用队列方式(并未部署)
说明
- 后由于截图渲染速度比较慢,采用队列python rq redis 方式,渲染时占用资源达到稳定。不过感觉一旦出现多用户同时使用,按照rq为每个请求分配的fork模式,还是会占用满
规则收集
- 自动化黑白名单下载更新
- YarGen的方式个人感觉不太好
- Yara Editor 版本搭建,可供在线编辑规则,并下载。
- 规则编译的方式,支持单个规则,文件夹内规则编译方式
- 接入 MISP
说明
- yarrGen采用的是贝叶斯方式生成的,有时间看看有没有更好的生成方式
测试
- web的测试用的docker 搭建php环境,拷贝进去文件进行测试的。
- 规则更新后的测试,可以根据近两次的结果,或者测试批次的id进行导出为yara规则格式,以及其他方式。 可以单独测黑白名单。python
- 其他的直接本地测试,输出结果并分析。
说明
- 缺乏一键自动化测试并生成分析报告
整理下webshell的种类划分,主要来自骑着蜗牛逛世界的博客,整理了一下,并绘成了脑图。

最初是cdxy在兜哥的安全和机器学习群开始发他做的那个检测webshell的东西,再之后在会上的PPT。今日偶然在电脑里,发现,上传于此。 从数据视角探索安全威胁_cdxy.pdf