基于深度神经网络的Webshell静态检测

背景

Webshell作为黑客惯用的入侵工具,是以php、asp、jsp、perl、cgi、py等网页文件形式存在的一种命令执行环境。黑客在入侵一个网站服务器后,通常会将webshell后门文件与网站服务器WEB目录下正常网页文件混在一起,通过Web访问webshell后门进行文件上传下载、访问数据库、系统命令调用等各种高危操作,达到非法控制网站服务器的目的,具备威胁程度高,隐蔽性极强等特点。

本文尝试通过一个 TextCNN + 二分类网络合成的综合深度神经网络实现对于 Webshell 的静态检测。TextCNN 用于处理向量化后的词数组,二分类网络用于处理手动提取的数字化特征(文件的大小以及熵值等等)。

2019年曾经做过一个简单的 Webshell 检测系统。源代码通过 N-Gram 分割的方式,对分割后的字符结合 TF-IDF 技术建立词袋,然后通过简单的机器学习算法如 NB、SVM 等进行二分类。现在的合成网络在利用 TextCNN 深度神经网络自动提取特征的基础上,结合手动设计提取的数字化特征,如文件大小,文件熵等信息,实现综合分类网络,对于一句话木马以及混淆木马有着更好的检测能力。

数据集

原始数据集采集自 Github,下面是详细的仓库列表.

黑样本

  1. tennc/webshell
  2. JohnTroony/php-webshells
  3. xl7dev/webshell
  4. tutorial0/webshell
  5. bartblaze/PHP-backdoors
  6. BlackArch/webshells
  7. nikicat/web-malware-collection
  8. fuzzdb-project/fuzzdb
  9. lcatro/PHP-webshell-Bypass-WAF
  10. linuxsec/indoxploit-shell
  11. b374k/b374k
  12. LuciferoO/webshell-collector
  13. tanjiti/webshell-Sample
  14. JoyChou93/webshell
  15. webshellpub/awsome-webshell
  16. xypiie/webshell
  17. leett1/Programe/
  18. lhlsec/webshell
  19. feihong-cs/JspMaster-Deprecated
  20. threedr3am/JSP-Webshells
  21. oneoneplus/webshell
  22. fr4nk404/Webshell-Collections
  23. mattiasgeniar/php-exploit-scripts

白样本:

  1. WordPress/WordPress
  2. yiisoft/yii2
  3. johnshen/PHPcms
  4. https://www.kashipara.com
  5. joomla/joomla-cms
  6. laravel/laravel
  7. learnstartup/4tweb
  8. phpmyadmin/phpmyadmin
  9. rainrocka/xinhu
  10. octobercms/october
  11. alkacon/opencms-core
  12. craftcms/cms
  13. croogo/croogo
  14. doorgets/CMS
  15. smarty-php/smarty
  16. source-trace/phpcms
  17. symfony/symfony
  18. typecho/typecho
  19. leett1/Programe/
  20. rpeterclark/aspunit
  21. dluxem/LiberumASP
  22. aspLite/aspLite
  23. coldstone/easyasp
  24. amasad/sane
  25. sextondb/ClassicASPUnit
  26. ASP-Ajaxed/asp-ajaxed
  27. https://www.codewithc.com

综合数据集

处理后的综合数据集存放在 Hugging Face.

模型结构

程序会从指定的文件夹中读取指定类型的文件,计算这些文件的大小和熵值,以及通过 nltk 进行词分割。分割好的词传入 tf.keras.layers.TextVectorization 建立词库并完成向量化,然后传入 TextCNN 网络。文件的大小和熵值通过归一化处理后,传入一个二分类网络。

其中,TextCNN 网络的结构为输入层,嵌入层,3 个卷积核大小分别为 3、4、5 的卷积层,然后将 3 个卷积层的池化结果拼接后传入全连接层,插入 Dropout 层防止过拟合,最后传入输出层。二分类网络就是简单的 MLP 网络。最后将两个网络连接,获取最终的判断结果。

网络结构如下:

结果评估

训练过程中的表现如下:

模型评估结果如下:

文章作者: ColdSnap
文章链接: https://coldwave96.github.io/2024/02/22/WebshellCNN/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ColdSnap の Blog