安全实践:webshell检测

2020/03/07 -

引言

最近在看webshell检测的相关文章,最初的搜索的关键词是webshell +cnn,通过找了一些论文来看看具体的检测效果,这里看了几篇文章感觉不错。

基于机器学习的 Webshell 发现技术探索[1]

这篇文章算是看到的比较早的文章了,文章中将多种webshell的检测方法都进行了说明,并将前期的代码处理方式也进行了完整的说明
前期预处理三种方法:直接使用词袋模型 &n-gram进行处理、opcode然后n-gram进行处理、opcode全部序列直接处理。
采用的算法:朴素贝叶斯、MLP、CNN三种方法进行检测。
文章中对于算法的部分没有进行太多的说明,在对数据进行处理完成之后就直接进行了算法的处理。(除了CNN那个部分模型看起来有点奇怪没见过。)

对我而言,我觉得他文章中比较重要的部分,就是前期预处理的部分,这部分是我不擅长的,或者说不懂得,因为后面得那些部分,都已经算是产业化了。


疑问

在这个方向上,已经有这么多人进行了这么多探究,是不是行业内已经非常成熟了呢?还有哪些问题没有解决呢?


文章[2]的思路并不是从源码的角度来检测,而是通过了访问webshell的流量来检测。他的特征工程很不错,我觉得很有参考意义,他cookie部分没有具体说明,因为对webshell仅仅了解部分,不知道这个部分是怎么设置的。
文章[3]是利用AST进行检测,暂时没有理解这到底是个什么东西。

参考文章

[1]基于机器学习的 Webshell 发现技术探索

[2]基于机器学习的Webshell检测方法与实现(上)
[3]基于AST的Webshell检测

2020/03/08 -

  1. 利用tf-idf这种方式实现检测
    这种方式,利用CountVectorizer直接对字符串进行处理,然后去除n-gram这种形式的词频;然后通过tf-idf的方式去除其中比较重要的词。
    这其中,比较难理解的,就是这个词袋模型,还有后面这个tf-idf的东西,毕竟不是我专业内的东西,但是现在也算是理解了。
#coding:utf-8
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

texts=["dog cat fish","dog cat cat","fish bird", 'bird'] # “dog cat fish” 为输入列表元素,即代表一个文章的字符串
cv = CountVectorizer()#创建词袋数据结构
cv_fit=cv.fit_transform(texts)
#上述代码等价于下面两行
#cv.fit(texts)
#cv_fit=cv.transform(texts)
print(cv.get_feature_names())    #['bird', 'cat', 'dog', 'fish'] 列表形式呈现文章生成的词典
print(cv.vocabulary_    )              # {‘dog’:2,'cat':1,'fish':3,'bird':0} 字典形式呈现,key:词,value:词频
print(cv_fit)
# (0,3) 1   第0个列表元素,**词典中索引为3的元素**, 词频
#(0,1)1
#(0,2)1
#(1,1)2
#(1,2)1
#(2,0)1
#(2,3)1
#(3,0)1
print(cv_fit.toarray()) #.toarray() 是将结果转化为稀疏矩阵矩阵的表示方式;
#[[0 1 1 1]
# [0 2 1 0]
# [1 0 0 1]
# [1 0 0 0]]

print(cv_fit.toarray().sum(axis=0))  #每个词在所有文档中的词频
x_tfidf = TfidfTransformer().fit_transform(cv_fit.toarray())
print x_tfidf.toarray().shape
print "----"
print x_tfidf.toarray()

他们返回的都是那种矩阵,矩阵的内容就是这个文章中某个词的一个属性值。
然后每行的属性就是这条记录(或者说这条样本),他的每个词的属性值。
然后就可以按照朴素贝叶斯的方式来进行处理了。


既然上面这个东西算是弄好了,那我就来继续弄这个php op-code的方式。
不想折腾主机的环境,就用了docker,但是下载下来的好像是ubuntu
但是这个docker环境是debian,然后使用的命令是apt-get,但是源是官方的源,根本用不了太慢了,然后就更换成中科大的
http://mirrors.ustc.edu.cn/help/debian.html

算是折腾了很久终于折腾好了。这里记录一下, 就不折腾了,今天的工作算是结束了。

  1. 直接使用docker下载的php容器,是debian系的系统,所以没有yum命令,连vi,vim都没有。
  2. 更换源的时候,使用debian.html中的方法。
  3. 下载wget,git。
  4. wget下载0.14和0.13的vld都没有办法编译通过,configure时候就过不去,使用git直接下载最新版,然后按照命令就可以了。
git clone https://github.com/derickr/vld.git
cd vld
phpize
./configure
make && makeinstall
  1. 编译完成后,并不能直接使用,还需要编辑一些配置文件,并不是非常理解他的文件组织方式,学习[1]中的方法,在conf.d文件夹下,添加了这个.so文件。(这个.so文件已经自己复制到php的扩展管理软件中。
    然后这个扩展就好使了。
    这样,对于这个op序列的使用方式就好了。
    关于使用命令的话,可以看那篇文章。
    这之间还学了一些简单的docker的命令。

2020/03/09 -

  1. docker进入容器,docker exec -it name command
  2. 安装python环境
  3. 安装ssh服务,利用docker端口转发连接进去,因为系统不允许root登录,修改后可以
    2020/03/11 -
  4. 利用之前的环境,获取了所有数据,利用np.savez
  5. 直接利用原始代码进行朴素贝叶斯分类,成功率很高
  6. 利用mlp分类,都不用非常高得层数,就已经100.。。。
  7. 利用2d-cnn进行分类,数据转换成图像形式,利用原来的一个形式进行分类,100.
    后面要继续实践得一个内容是,边长得op。
    (上面这个效果这么好,都是因为数据好,没办法)

2020/03/12 -
现在的一个关键问题,我没办法处理这个数据,有点尴尬。
处理过来都不知道是什么数据。
对于这个自然语言处理的方式不是很理解。
其实就是对于这个东西如何初始化为我能够操作的形式,我不是很理解,比如之前的时候他是通过n-gram来操作的,但是这个里面应该怎么操作呢?

参考文献

[1]https://www.cnblogs.com/lglblogadd/p/9173627.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
## 工具简介 findWebshell是一款基于python开发的webshell检查工具,可以通过配置脚本,方便得检测webshell后门。 ## 使用说明 Usage: main.py [options] Options: -h, --help show this help message and exit -p PATH, --path=PATH input web directory filepath -o OUTPUT, --output=OUTPUT create a html report -e php|asp|aspx|jsp|all, --ext=php|asp|aspx|jsp|all define what's file format to scan ## 示例 python main.py -e php -p /var/www/test -o output -e 网页格式 -p 扫描的路径 -o 生成的html文件名,默认生成report.html ## 开发文档 ### 字典添加 - directory目录下的sensitiveWord.py定义的是后门中的敏感关键字,可以手动添加,格式为{"关键字":"类型"} ``` php_sensitive_words = { "www.phpdp.org":"PHP神盾加密后门", "www.phpjm.net":"PHP加密后门" } ``` -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值