机器学习检测WebShell脚本实践
字数 1288 2025-08-15 21:32:37
WebShell脚本检测与机器学习实践教学文档
1. WebShell概述
WebShell是以PHP、ASP、JSP、Perl、CGI、PY等网页文件形式存在的一种命令执行环境,是黑客常用的入侵工具。黑客入侵网站服务器后,通常会将WebShell后门文件与正常网页文件混在一起,通过Web访问进行各种高危操作,如文件上传下载、访问数据库、系统命令调用等。
检测方法分类
- 静态检测:分析文件静态属性
- 动态检测:分析HTTP交互行为和信息
2. 传统静态检测方法
2.1 文件名检测
早期通过构建WebShell文件名黑名单进行匹配,例如:
- 渗透小组专用ASP小马
- vps提权马
- asp一句话
- 改良的小马
- 国外免杀大马
- backdoor.php
2.2 特征码匹配法
提取常见特征码、特征值、威胁函数形成正则表达式进行扫描。
示例正则规则:
rule=r'(array_map[\s\n]{0,20}\(.{1,5}(eval|assert|ass\\x65rt).{1,20}\$_(GET|POST|REQUEST).{0,15})'
rule='(call_user_func[\s\n]{0,25}\(.{0,25}\$_(GET|POST|REQUEST).{0,15})'
rule='(\$_(GET|POST|REQUEST)
$$
.{0,15}
$$
\s{0,10}\(\s{0,10}\$_(GET|POST|REQUEST).{0,15})'
优缺点:
- 优点:可解释性强,便于工程化部署
- 缺点:依赖专家知识,只能识别已知模式,对混淆加密效果有限
2.3 语义分析
对代码进行清洗,抽取函数、变量、系统关键字等字符串单元,实现危险函数捕获。
代表工具:Pecker Scanner
2.4 统计特征检测
通过统计方法检测文本/脚本文件中的混淆和加密内容。
NeoPI使用的5种特征:
- 字符级重合指数(LanguageIC):衡量代码混乱程度
- 字符级信息熵(Entropy):度量字符不确定性
- 最长单词长度(LongestWord):识别编码/混淆内容
- 恶意代码签名特征(SignatureNasty):统计恶意代码片段
- 压缩特征(Compression):计算文件压缩比
3. 机器学习检测方法实践
3.1 训练样本获取
- 黑样本:160个Github项目WebShell样本+入侵检测系统收集样本
- 白样本:
- 从Github、码云等开源平台搜索对应文件类型项目
- 业务环境中对应文件类型的正常文件
3.2 特征处理与模型训练
将WebShell检测转换为NLP文本分类问题。
关键代码:
def features_process(negativedir, postivedir, maxfeatures):
# 读取样本
countvectorizer = CountVectorizer(
ngram_range=(2, 2),
decode_error="ignore",
min_df=1,
analyzer="word",
token_pattern=r'[^\w\s]+|\b\w+\b',
max_features=maxfeatures
)
tfidftransformer = TfidfTransformer(smooth_idf=False)
cv_x = countvectorizer.fit_transform(texts).toarray()
tf_x = tfidftransformer.fit_transform(cv_x).toarray()
return tf_x, lables, countvectorizer, tfidftransformer
def train(trainset, lables, mode, seed):
x_train, x_test, y_train, y_test = train_test_split(trainset, lables, test_size=0.3, random_state=seed)
clf = model_collection(mode)
clf.fit(x_train, y_train)
使用模型:
- 多层神经网络(MLPClassifier)
- XGBoost
- 朴素贝叶斯
3.3 模型评估
- 混淆矩阵
- ROC曲线
- 准确率、召回率等指标
4. 实践建议
- 数据质量:高质量的训练样本是模型性能的基础
- 参数调优:根据样本情况调整
maxfeatures和ngram_range参数 - 模型选择:MLPClassifier在实际测试中表现较好
- 持续更新:定期更新训练样本以应对新型WebShell
5. 局限性
- 对抗性攻击:AI模型可能被专门设计的样本绕过
- 样本依赖:模型性能高度依赖训练样本的质量和多样性
- 静态检测局限:无法检测未激活的WebShell
6. 未来方向
- 混合检测:结合静态和动态检测方法
- 对抗训练:增强模型对抗性攻击的能力
- 持续学习:建立模型持续更新机制
7. 结论
机器学习方法在WebShell检测中相比传统方法具有明显优势,特别是在检出率和误报率方面。然而,安全是一个持续对抗的过程,需要不断更新检测方法和模型以适应新的威胁。