背景
Webshell作为黑客惯用的入侵工具,是以php、asp、jsp、perl、cgi、py等网页文件形式存在的一种命令执行环境。黑客在入侵一个网站服务器后,通常会将webshell后门文件与网站服务器WEB目录下正常网页文件混在一起,通过Web访问webshell后门进行文件上传下载、访问数据库、系统命令调用等各种高危操作,达到非法控制网站服务器的目的,具备威胁程度高,隐蔽性极强等特点。
本文尝试通过一个 TextCNN + 二分类网络合成的综合深度神经网络实现对于 Webshell 的静态检测。TextCNN 用于处理向量化后的词数组,二分类网络用于处理手动提取的数字化特征(文件的大小以及熵值等等)。
2019年曾经做过一个简单的 Webshell 检测系统。源代码通过 N-Gram 分割的方式,对分割后的字符结合 TF-IDF 技术建立词袋,然后通过简单的机器学习算法如 NB、SVM 等进行二分类。现在的合成网络在利用 TextCNN 深度神经网络自动提取特征的基础上,结合手动设计提取的数字化特征,如文件大小,文件熵等信息,实现综合分类网络,对于一句话木马以及混淆木马有着更好的检测能力。
数据集
原始数据集采集自 Github,下面是详细的仓库列表.
黑样本
- tennc/webshell
- JohnTroony/php-webshells
- xl7dev/webshell
- tutorial0/webshell
- bartblaze/PHP-backdoors
- BlackArch/webshells
- nikicat/web-malware-collection
- fuzzdb-project/fuzzdb
- lcatro/PHP-webshell-Bypass-WAF
- linuxsec/indoxploit-shell
- b374k/b374k
- LuciferoO/webshell-collector
- tanjiti/webshell-Sample
- JoyChou93/webshell
- webshellpub/awsome-webshell
- xypiie/webshell
- leett1/Programe/
- lhlsec/webshell
- feihong-cs/JspMaster-Deprecated
- threedr3am/JSP-Webshells
- oneoneplus/webshell
- fr4nk404/Webshell-Collections
- mattiasgeniar/php-exploit-scripts
白样本:
- WordPress/WordPress
- yiisoft/yii2
- johnshen/PHPcms
- https://www.kashipara.com
- joomla/joomla-cms
- laravel/laravel
- learnstartup/4tweb
- phpmyadmin/phpmyadmin
- rainrocka/xinhu
- octobercms/october
- alkacon/opencms-core
- craftcms/cms
- croogo/croogo
- doorgets/CMS
- smarty-php/smarty
- source-trace/phpcms
- symfony/symfony
- typecho/typecho
- leett1/Programe/
- rpeterclark/aspunit
- dluxem/LiberumASP
- aspLite/aspLite
- coldstone/easyasp
- amasad/sane
- sextondb/ClassicASPUnit
- ASP-Ajaxed/asp-ajaxed
- https://www.codewithc.com
综合数据集
处理后的综合数据集存放在 Hugging Face.
模型结构
程序会从指定的文件夹中读取指定类型的文件,计算这些文件的大小和熵值,以及通过 nltk 进行词分割。分割好的词传入 tf.keras.layers.TextVectorization
建立词库并完成向量化,然后传入 TextCNN 网络。文件的大小和熵值通过归一化处理后,传入一个二分类网络。
其中,TextCNN 网络的结构为输入层,嵌入层,3 个卷积核大小分别为 3、4、5 的卷积层,然后将 3 个卷积层的池化结果拼接后传入全连接层,插入 Dropout 层防止过拟合,最后传入输出层。二分类网络就是简单的 MLP 网络。最后将两个网络连接,获取最终的判断结果。
网络结构如下:
结果评估
训练过程中的表现如下:
模型评估结果如下: