基于机器学习的WebShell检测方法与实现(上)
字数 1858 2025-08-18 11:37:33

基于机器学习的WebShell检测方法与实现

一、WebShell概述

WebShell是攻击者使用的恶意脚本,目的是维护对已受攻击WEB应用程序的持久访问。WebShell本身不能直接攻击或利用远程漏洞,通常是攻击的第二步。

WebShell特点

  • 功能:包括shell命令执行、代码执行、数据库枚举和文件管理
  • 用途
    1. 持续远程访问:包含后门,允许随时控制服务器
    2. 特权升级:尝试通过本地漏洞获取更高权限

WebShell检测方式

  1. 基于流量的方式
  2. 基于Agent模式
  3. 基于日志分析模式

二、数据采集

2.1 WebShell分类

  1. 一句话:通过工具(如菜刀)连接,功能包括文件操作、数据库CRUD、命令执行
  2. 大马:文件较大,功能强大,包括提权、内网扫描、反弹shell等
  3. 小马:文件小,功能单一,主要为文件上传或命令执行

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特征

  1. 存在系统调用函数(eval、system、cmd_shell等)
  2. 存在文件操作函数(fopen、fwrite等)
  3. 存在数据库操作函数
  4. 具有高度隐藏性和伪装性
  5. 变种多(使用加密、xor、字符串反转等技术)
  6. 访问IP少、次数少、页面孤立
  7. 产生payload流量

特征挖掘

  1. 基于关键词的特征

    • 对流量进行decode后匹配特定关键词
    • 关键词示例:系统调用、配置、数据库操作相关词汇
  2. 流量参数个数

    • WebShell的get/post参数通常较少
  3. 信息熵特征

    • 加密/编码数据的熵值明显偏大
    • 示例对比:
      • 正常:"pid=12673&aut=false&type=low"
      • WebShell:"ac=ferf234cDV3T234jyrFR3yu4F3rtDW2R354"
  4. 基于cookie的特征

    • WebShell的cookie通常为空或键值对少且命名无意义
    • 示例:KCNLMSXUMLVECYYYBRTQ=DFCXBTJMTFLRLRAJHTQLDNOXSKXPZEIXJUFVNNTA
  5. 网页结构相似度

    • 许多WebShell工具生成的页面结构相似
  6. 网页路径层数

    • WebShell通常隐藏在深层路径
  7. 访问时间段

    • 通常在正常流量稀少的时间访问
    • 可细分为:小时、星期、季度、工作日/周末
  8. referer特征

    • 小马和一句话WebShell通常没有referer

3.2 模型构建与评估

模型选择

对比了四种算法:

  1. Adaboost
  2. SVM
  3. 随机森林
  4. 逻辑回归

评估结果

  • 随机森林在运行时间和可解释性方面表现最佳,被选为产品化模型

四、实施部署

4.1 检测流程

  1. 从各种终端和第三方库导入数据
  2. 特征提取和模型训练
  3. 部署模型进行实时检测
  4. 告警生成和人工确认
  5. 误报数据反馈用于模型重训练

4.2 技术选型

  • 数据处理:Spark
  • 数据流动:Kafka
  • 数据存储:HBase
  • 优势:保证大流量环境下的检测性能和模型自动优化

五、总结与展望

关键点

  1. 特征工程是检测效果的关键
  2. 自动化构建WebShell数据解决样本稀缺问题
  3. 人工审核流程保证模型持续优化

未来改进方向

  1. 基于统计的特征
    • 单个网页访问频率
    • User-agent差异性
    • 网页图结构出入度统计
    • 网页结构相似度对比
  2. 需要积累一定量的流量数据进行统计分析

附录:技术细节说明

特征提取细节

  • 对原始流量进行decode处理
  • 关键词匹配前进行标准化处理
  • 信息熵计算采用标准熵公式
  • 结构相似度使用树编辑距离算法

模型优化建议

  1. 定期更新训练数据
  2. 调整随机森林的树深度和数量
  3. 考虑特征重要性进行特征选择
  4. 引入在线学习机制适应新型WebShell

部署注意事项

  1. 考虑实时性要求设置适当的批处理大小
  2. 建立完善的误报反馈机制
  3. 监控模型性能指标(准确率、召回率等)
  4. 设置模型版本控制和回滚机制
基于机器学习的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 部署注意事项 考虑实时性要求设置适当的批处理大小 建立完善的误报反馈机制 监控模型性能指标(准确率、召回率等) 设置模型版本控制和回滚机制