基于机器学习的WebShell检测方法与实现(上)
字数 1858 2025-08-18 11:37:33
基于机器学习的WebShell检测方法与实现
一、WebShell概述
WebShell是攻击者使用的恶意脚本,目的是维护对已受攻击WEB应用程序的持久访问。WebShell本身不能直接攻击或利用远程漏洞,通常是攻击的第二步。
WebShell特点
- 功能:包括shell命令执行、代码执行、数据库枚举和文件管理
- 用途:
- 持续远程访问:包含后门,允许随时控制服务器
- 特权升级:尝试通过本地漏洞获取更高权限
WebShell检测方式
- 基于流量的方式
- 基于Agent模式
- 基于日志分析模式
二、数据采集
2.1 WebShell分类
- 一句话:通过工具(如菜刀)连接,功能包括文件操作、数据库CRUD、命令执行
- 大马:文件较大,功能强大,包括提权、内网扫描、反弹shell等
- 小马:文件小,功能单一,主要为文件上传或命令执行
2.2 数据分类标准
- 是否需要登陆:
- direct:无需登陆
- login:需要密码/账户(分为登陆前/后)
- 操作类型:
- cmd:命令执行
- file:文件操作
- sql:数据库操作
2.3 数据收集环境搭建
- 系统环境:Linux虚拟机(桥接模式)
- WebShell运行环境:
- PHP:phpstudy
- JSP:jspstudy
- ASP:Ajiu AspWebServer+Mysql
- 流量收集工具:Wireshark
2.4 流量生成方法
- direct:脚本批量访问+手工录入操作
- login:使用selenium模拟浏览器登陆
- cmd:脚本实现不同系统命令执行
- 菜刀型:脚本批量实现界面访问及登陆
三、基于流量的WebShell检测
3.1 特征工程
WebShell特征
- 存在系统调用函数(eval、system、cmd_shell等)
- 存在文件操作函数(fopen、fwrite等)
- 存在数据库操作函数
- 具有高度隐藏性和伪装性
- 变种多(使用加密、xor、字符串反转等技术)
- 访问IP少、次数少、页面孤立
- 产生payload流量
特征挖掘
-
基于关键词的特征
- 对流量进行decode后匹配特定关键词
- 关键词示例:系统调用、配置、数据库操作相关词汇
-
流量参数个数
- WebShell的get/post参数通常较少
-
信息熵特征
- 加密/编码数据的熵值明显偏大
- 示例对比:
- 正常:"pid=12673&aut=false&type=low"
- WebShell:"ac=ferf234cDV3T234jyrFR3yu4F3rtDW2R354"
-
基于cookie的特征
- WebShell的cookie通常为空或键值对少且命名无意义
- 示例:KCNLMSXUMLVECYYYBRTQ=DFCXBTJMTFLRLRAJHTQLDNOXSKXPZEIXJUFVNNTA
-
网页结构相似度
- 许多WebShell工具生成的页面结构相似
-
网页路径层数
- WebShell通常隐藏在深层路径
-
访问时间段
- 通常在正常流量稀少的时间访问
- 可细分为:小时、星期、季度、工作日/周末
-
referer特征
- 小马和一句话WebShell通常没有referer
3.2 模型构建与评估
模型选择
对比了四种算法:
- Adaboost
- SVM
- 随机森林
- 逻辑回归
评估结果
- 随机森林在运行时间和可解释性方面表现最佳,被选为产品化模型
四、实施部署
4.1 检测流程
- 从各种终端和第三方库导入数据
- 特征提取和模型训练
- 部署模型进行实时检测
- 告警生成和人工确认
- 误报数据反馈用于模型重训练
4.2 技术选型
- 数据处理:Spark
- 数据流动:Kafka
- 数据存储:HBase
- 优势:保证大流量环境下的检测性能和模型自动优化
五、总结与展望
关键点
- 特征工程是检测效果的关键
- 自动化构建WebShell数据解决样本稀缺问题
- 人工审核流程保证模型持续优化
未来改进方向
- 基于统计的特征:
- 单个网页访问频率
- User-agent差异性
- 网页图结构出入度统计
- 网页结构相似度对比
- 需要积累一定量的流量数据进行统计分析
附录:技术细节说明
特征提取细节
- 对原始流量进行decode处理
- 关键词匹配前进行标准化处理
- 信息熵计算采用标准熵公式
- 结构相似度使用树编辑距离算法
模型优化建议
- 定期更新训练数据
- 调整随机森林的树深度和数量
- 考虑特征重要性进行特征选择
- 引入在线学习机制适应新型WebShell
部署注意事项
- 考虑实时性要求设置适当的批处理大小
- 建立完善的误报反馈机制
- 监控模型性能指标(准确率、召回率等)
- 设置模型版本控制和回滚机制