第11章 WebShell检测

news/2024/11/24 13:30:15/

        WebShell就是以ASP、PHP、JSP或者CGI等网页文件形式存在的一种命令执行环境,也可以将其成为一种网页后门。黑客在入侵了一个网站后,通常会将ASP或者PHP后门文件与网站服务器Web目录下正常的网页文件混在一起,然后就可以使用浏览器来访问ASP或者PHP后门,得到一个命令执行环境,以达到控制网站服务器的目的。顾名思义,“Web”的含义是需要服务器提供Web服务,“Shell”的含义是取得对服务器某种程度的操作权限。WebShell常常被入侵者利用,通过网站服务端口对网站服务器获取某种程度的操作权限。

          在攻击链模型中,整个攻击过程分为以下几个步骤。

        (1)Reconnaissance,踩点

        (2)Weaponization,组装

        (3)Delivery,投送

        (4)Exploitation,攻击

        (5)Installation,植入

        (6)C2,控制

        (7)Actions,行动

        在针对网站的攻击中,通常是利用上传漏洞,上传WebShell,然后通过WebShell进一步控制Web服务器,对应攻击链模型的Install和C2环节。

        常见的WebShell检测方法主要有以下几种:

       (1)静态检测,通过匹配特征码、特征值、危险操作函数来查找WebShell的方法。只能查找已知的WebShell,并且误报率、漏报率会比较高,但是如果规则完善,可以减低误报率,但是漏报率必定会有所提高。

       (2)动态检测,检测执行时刻表现出来的特征,比如数据库操作、敏感文件读取等。

       (3)语法检测,根据PHP语言扫描编译的实现方式,进行剥离代码和注释,通过分析变量、函数、字符串、语言结构的方式,来实现关键危险函数的捕捉。这样可以完美解决漏报的情况。但误报上,仍存在问题。

        (4)统计学检测,通过信息熵、最长单词、重合指数、压缩比等进行检测。

        本章主要以常见的WebShell数据集为例介绍WebShell的检测技术,介绍WebShell使用的数据集以及对应的特征提取方法,介绍使用的算法以及对应的验证结果,包括朴素贝叶斯算法和深度学习算法之MLP、CNN。

11.1 数据集

        数据集包含WebShell样本2616个,开源软件PHP文件9035个。WebShell数据来自互联网上常见的WebShell样本,数据来自GitHub上相关项目,为了演示方便,全部使用了基于PHP的WebShell样本。

        白样本主要使用常见的基于PHP开发的开源软件,主要包括以下几种。

11.1.1 WordPress

11.1.2 PHPCMS

11.1.3 phpMyAdmin

11.1.4 Smarty

11.1.5 Yii

11.2 特征提取

11.2.1 词袋和TF-IDF模型

        我们使用最常见的词袋和TF-IDF模型提取文本特征。

        把一个PHP文件作为一个完整的字符串处理,定义函数load_one_file加载文件到一个字符串变量中返回,文件中的回车换行需要过滤掉:

def load_file(file_path):t = ""with open(file_path, encoding='utf-8') as f:for line in f:line = line.strip('\r')line = line.strip('\n')t += linereturn t

        由于开源软件中包含大量图片、JavaScript等文件,所以遍历目录时需要排除非PHP文件。另外开源软件的目录结构相对复杂,不像前面章节的垃圾邮件、骚扰短信等是平面目录结构,所以需要递归访问指定目录并加载指定文件类型:

def load_files_re(directory):files_list = []g = os.walk(dir)for path, d, fileList in g:for filename in fileList:if filename.endswith('.php') or filename.endswith('.txt'):filepath = os.path.join(path, filename)try:print("Load %s" % filepath)t = load_file(filepath)files_list.append(t)except:print("failed:", filepath)return files_list

        加载搜集到的WebShell样本,并统计样本个数,将WebShell样本标记为1:

 # 加载搜集到的WebShell样本webShell_files_list = load_files_re(webShell_dir)# 将WebShell样本标记为1y1 = [1] * len(webShell_files_list)# 统计样本个数black_count = len(webShell_files_list)

        CountVectorizer()函数只考虑每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。其思想是,先根据所有训练文本,不考虑其出现顺序,只将训练文本中每个出现过的词汇单独视为一列特征,构成一个词汇表(vocabulary list),该方法又称为词袋法(Bag of Words)。

11.2.2 opcode和N-Gram模型

11.2.3 opcode调用序列模型

11.3 模型训练与验证

11.3.1 朴素贝叶斯算法

11.3.2 深度学习算法之MLP

11.3.3 深度学习算法之CNN

  


http://www.ppmy.cn/news/253855.html

相关文章

NI CompactRIO9035与elmo电机驱动联合仿真系统搭建教程(二)

因本人项目需要搭建一套机器人控制仿真系统,控制器采用NI 的CompactRIO9035,电机驱动器使用的是elmo驱动器,对于驱动器可以支持多种总线通信方式,一般采用CAN和EtherCAT总线,如果采用CAN总线,则需要为控制买个CAN接口模…

单机Docker部署应用Kraft模式的Kafka集群

单机Docker部署应用Kraft模式的Kafka集群 1 Docker镜像准备1.1 下载Kafka1.2 配置容器1.3 修改kafka配置 2 部署Kafka集群2.1 启动节点容器2.2 生成一个 Cluster ID2.3 格式化存储目录2.4 启动kafka服务 3 知识3.1 控制器服务器3.2 进程角色3.3 仲裁投票者3.4 Kafka存储工具3.5…

NI Linux实时设备上升级固件

设备和对应的文件夹名称:\National Instruments\Shared\Firmware\ 设备 文件夹名称 cRIO-9030 7755 cRIO-9031 774B cRIO-9032 7841 cRIO-9033 7735 cRIO-9034 774D cRIO-9035 77dB的 带有NI-Sync的cRIO-9035 7875 cRIO-9036 77DC cRIO-9037 7840 cRIO-9038 77B9 cR…

小程序发送消息订阅报错{“errcode“:40003,“errmsg“:“invalid openid rid: 641bece8-5b5ed5f9-7c0705a8“}

检查了accessToken跟openid 都是对的 为什么就是会报错呢??? 我们做的项目有两个小程序端 一个是患者端 一个是医护端 在患者端接口给医护端发送订阅消息 结果一直拿着患者端的openid发 实际要用医护端的openId 搞了两天 。。粑粑。

No suitable device found for this connection

MobaXterm连接不上 journal -xeaudit: op"connection-activate" uuid"88e43cb2-b1e5-49a4-85bf-1e3f08f4e605" n Jan 10 04:47:03 hadoop03 network[11697]: Bringing up interface ens33: Error: Connection activation failed: uuid"88e43cb2-b1e…

TCL MS801机芯修改屏参的方法

TCL MS801机芯修改屏参的方法 一、 目的 在TV屏幕显示花屏、黑屏、倒屏等无法正常显示的情况下,可以通过串口修改屏参,使TV屏幕可正常显示。本文档介绍一些简单常见的屏参的修改方法。 二、 修改屏参的准备 串口工具; 三、 修改屏参…

Error syncing pod, skipping: failed to “StartContainer“ for “POD“ with ErrImagePull: “image pull fai

kubernetes:关于创建pod中结点始终处于creating状态的问题解决(Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/...&#…

xss漏洞复现

一.过滤了特殊符号 二、过滤了特殊符号和关键字