入侵检测——如何实现反弹shell检测?

这篇具有很好参考价值的文章主要介绍了入侵检测——如何实现反弹shell检测?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

反弹shell的本质:就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

反弹shell的结果:一个client上的bash进程 可以和 server上的进程通信。

而反弹shell的检测,本质上就是检测 shell进程(如bash)的输入输出是否来自于一个远程的server。

一、检测思路

1.进程 file descriptor 异常检测

1.1 检测 file descriptor 是否指向一个socket

以“重定向符”+"/dev/tcp网络通信"Bash反弹Shell这一类最经典的反弹Shell攻击方式为例,这类反弹shell的本质可以归纳为file descriptor的重定向到一个socket句柄

反弹shell检测,linux,网络,运维,网络安全,网络协议

反弹shell检测,linux,网络,运维,网络安全,网络协议

1.2 检测 file descriptor 是否指向一个管道符(pipe)

对于利用“管道符”传递指令的反弹shell攻击方式来说,这类反弹shell的本质可以归纳为file descriptor的重定向到一个pipe句柄

反弹shell检测,linux,网络,运维,网络安全,网络协议

更进一步地说,不管做了多少层的pipe,反弹shell的本质是将server的输入传递给client的bash,因此肯定存在socket连接。

我们只需要根据pid追溯pipe上游的进程,并判断其进程fd,检查是否是来自一个socket。

例如,跟踪pipe,发现pipe的进程建立了socket连接,那么就存在反弹shell的风险。

2.netlink监控+fd异常检测

  • 监听Netlink Socket,实时获取进程EXEC事件。
  • 如果为Shell进程,检查进程启动打开的FD,
    • 打开了Socket
    • 未使用/dev/tty、/dev/pts/n、/dev/ptmx等终端
    • 则确认为反弹Shell

绕过风险:仅能通过进程执行文件名判断是否为Shell进程,上传可执行文件、拷贝Bash文件到其他路径等方法会绕过这个方法

例如通过将/bin/sh重命名为其他名字进行反弹shell。

3.脚本文件 && 应用程序 && 无文件(fileless)反弹shell检测

需要注意的是,操作系统是分层的,Bash只是一个应用程序的普通应用,其内部封装了调用glibc execve的功能而已,除了bash之外,白帽子还可以基于任意的应用层技术来实现反弹shell,例如:

  • python/perl实现纯代码形式的反弹shell文件执行:文件脚本检测
  • python/perl实现纯代码形式的反弹shell命令行指令(fileless):纯命令行fileless检测
  • C/C++实现纯代码形式的反弹shell:二进制文件检测

4. 特征检测

4.1网络层反弹shell通信特征检测

反弹shell的通信会话中,会包含一些”cmdline shell特征“,例如”#root…“等,可以在网络侧进行NTA实时检测。

4.2DNS反弹shell特征检测

针对DNS流量进行分析,判断关联进程是否开启/dev/net/tun,或者/dev/net/tap隧道等等。

4.3 ICMP反弹shell特征检测

对于正常的ping命令产生的数据,有以下特点:

● 每秒发送的数据包个数比较少,通常每秒最多只会发送两个数据包;

● 请求数据包与对应的响应数据包内容一样;

● 数据包中payload的大小固定,windows下为32bytes,linux下为48bytes;

● 数据包中payload的内容固定,windows下为abcdefghijklmnopqrstuvwabcdefghi,linux下为!”#$%&’()+,-./01234567,如果指定ping发送的长度,则为不断重复的固定字符串;

● type类型只有2种,0和8。0为请求数据,8为响应数据。

对于ICMP隧道产生的数据,有以下特点:

● 每秒发送的数据包个数比较多,在同一时间会产生成百上千个 ICMP 数据包;

● 请求数据包与对应的响应数据包内容不一样;

● 数据包中 payload的大小可以是任意大小;

● 存在一些type为13/15/17的带payload的畸形数据包;

● 个别ICMP隧道工具产生的数据包内容前面会增加 ‘TUNL’ 标记以用于识别隧道。

因此,根据正常ping和ICMP隧道产生的数据包的特点,可以通过以下几点特征检测ICMP隧道:

● 检测同一来源数据包的数量。正常ping每秒只会发送2个数据包,而ICMP隧道可以每秒发送很多个;

● 检测数据包中 payload 的大小。正常ping产生的数据包payload的大小为固定,而ICMP隧道数据包大小可以任意;

● 检测响应数据包中 payload 跟请求数据包是否不一致。正常ping产生的数据包请求响应内容一致,而ICMP隧道请求响应数据包可以一致,也可以不一致;

● 检测数据包中 payload 的内容。正常ping产生的payload为固定字符串,ICMP隧道的payload可以为任意;

● 检测 ICMP 数据包的type是否为0和8。正常ping产生的带payload的数据包,type只有0和8,ICMP隧道的type可以为13/15/17。

反弹shell检测,linux,网络,运维,网络安全,网络协议

具体实现可参考https://blog.riskivy.com/%E5%9F%BA%E4%BA%8E%E7%BB%9F%E8%AE%A1%E5%88%86%E6%9E%90%E7%9A%84icmp%E9%9A%A7%E9%81%93%E6%A3%80%E6%B5%8B%E6%96%B9%E6%B3%95%E4%B8%8E%E5%AE%9E%E7%8E%B0/

二、具体实现举例

1.监听Netlink Socket 并轮询处理

func (ns *NetlinkSocket) ReceiveFrom() ([]syscall.NetlinkMessage, syscall.Sockaddr, error) {
	nr, from, err := syscall.Recvfrom(ns.fd, ns.buf, 0)
	if err != nil {
		return nil, from, err
	}
	if nr < syscall.NLMSG_HDRLEN {
		return nil, from, fmt.Errorf("Got short response from netlink")
	}

	msg, err := syscall.ParseNetlinkMessage(ns.buf[:nr])
	return msg, from, err
}

2.实时处理进程EXEC事件

func (p *Probe) netLinkHandler(e *netlinkProcEvent) {
	switch e.Event {
	case netlink.PROC_EVENT_EXEC:
		p.handleProcExec(e.Pid, false) // pid
	}
}

3.根据反弹shell的基本原理,判断进程 file descriptor 是否异常

//根据反弹shell的基本原理,判断进程 file descriptor 是否异常(也就是是否相等)
func (p *Probe) checkReverseShell(pid int)  {
    //获取对应的inode
   inodeStdin, err := osutil.GetFDSocketInode(pid, 0)
   if err != nil {
      return nil
   }
   inodeStdout, err := osutil.GetFDSocketInode(pid, 1)
   if err != nil {
      return nil
   }
   if inodeStdin != inodeStdout || inodeStdin == 0 {
      return nil
   }
   return osutil.GetProcessConnection(pid, nil, utils.NewSet(inodeStdin))
}

//获取进程对应的连接
func GetProcessConnection(pid int, clientPort *share.CLUSProtoPort, inodes utils.Set) *Connection {
	var err error
	if inodes == nil {
		inodes, err = GetProcessSocketInodes(pid)
		if err != nil {
			return nil
		}
	}
	if inodes.Cardinality() == 0 {
		return nil
	}
	var sport uint16
	if clientPort != nil {
		sport = clientPort.Port
	}
	pidDir := global.SYS.ContainerProcFilePath(pid, "/")
	if clientPort == nil || clientPort.IPProto == syscall.IPPROTO_TCP {
		if conn := getConnectionByFile(pidDir+"net/tcp", inodes, true, sport); conn != nil {
			return conn
		}
		if conn := getConnectionByFile(pidDir+"net/tcp6", inodes, true, sport); conn != nil {
			return conn
		}
	}
	if clientPort == nil || clientPort.IPProto == syscall.IPPROTO_UDP {
		if conn := getConnectionByFile(pidDir+"net/udp", inodes, false, sport); conn != nil {
			return conn
		}
		if conn := getConnectionByFile(pidDir+"net/udp6", inodes, false, sport); conn != nil {
			return conn
		}
	}
	return nil
}

以上方式的缺点为:仅能通过进程执行文件名判断是否为Shell进程,上传可执行文件、拷贝Bash文件到其他路径等方法会绕过这个方法

除此以外,还可以对特定场景进行分析,进程对应的fd是否异常并且外联,开源代码可参考:https://github.com/zhanghaoyil/seesaw;

三、总结

这篇文章主要介绍了常见的反弹shell检测思路,以及实现举例,欢迎大家进行补充与分享!文章来源地址https://www.toymoban.com/news/detail-644722.html

四、参考链接

  1. 郑瀚Andrew的 反弹Shell原理及检测技术研究

到了这里,关于入侵检测——如何实现反弹shell检测?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用Spark/Flink等分布式计算引擎做网络入侵检测

    ⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿 个人网站:https://jerry-jy.co/ 本篇博客是我在做 基于Spark/Flink大数据环境下网络入

    2024年02月11日
    浏览(49)
  • 厚积薄发的一年---用Jetson Nano实现入侵检测的项目分享

    回顾2023,有为了一个BUG或知识熬过夜,也有为了项目连续几天三点一线,在这期间的积累的一砖一瓦中,除了直接获得专业知识,提高专业技能外,更多的是从项目中得到足以使我终生受益的其他收获。 下面就一今年收获最多的项目来总结我的2023 ————————————

    2024年01月16日
    浏览(35)
  • 区域入侵检测AI边缘计算智能分析网关V4如何通过ssh进行服务器远程运维

    智能分析网关V4是一款高性能、低功耗的AI边缘计算硬件设备,它采用了BM1684芯片,集成高性能8核ARM A53,主频高达2.3GHz,并且INT8峰值算力高达17.6Tops,FB32高精度算力达到2.2T,每个摄像头可同时配置3种算法,设备能同时对16路视频流进行处理和分析,能应用在工地、工厂、车

    2024年01月18日
    浏览(59)
  • 烟火检测/周界入侵/视频智能识别AI智能分析网关V4如何配置ONVIF摄像机接入

    AI边缘计算智能分析网关V4性能高、功耗低、检测速度快,易安装、易维护,硬件内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,上报识别结果,并能进行语音告警播放。算法可按需组合、按场景配置,平台支持前端设备管理、实时视

    2024年01月16日
    浏览(43)
  • 网络防御和入侵检测

    网络防御和入侵检测是维护网络安全的关键任务,可以帮助识别和阻止未经授权的访问和恶意行为。以下是一些基本的步骤和方法,用于进行网络防御和入侵检测。 网络防御: 防火墙设置: 部署防火墙来监控和控制网络流量,阻止未经授权的访问和恶意流量。 访问控制:

    2024年02月11日
    浏览(48)
  • 入侵检测步骤

    安全网关可以设置改密码策略,自动改密码并保存,按照周期 查看系统日志 这个一般都是查看服务的启动情况  less /var/log/secure   直接G查看最后的日志信息, 可以复制粘贴搜索登录失败的日志,如果太多了,就说明被入侵  awk $(NF-3)最后3列   sort 是排序   uniq -c是 去

    2023年04月09日
    浏览(32)
  • 溯源-入侵检测

    Windows 系统入侵排查 检查系统账号安全 服务器登录弱口令检查 服务器远程登录桌面协议端口开放检查 查看 RDP 协议端口(防止 RDP 端口被修改过,默认 3389) 检查 RDP 协议端口是否开放 服务器账号检查 lusrmgr.msc 检查是否有新增可疑账号 注册表检查是否存在隐藏账号 注册表检

    2024年02月02日
    浏览(33)
  • 设备安全——入侵检测IDS

    IDS(入侵检测系统):对系统的运行状态进行监视,发现各种攻击企图、攻击行为、攻击结果。用于保证系统资源的安全(机密性、完整性、可用性) 设备本身(IDS系统)是一个软件与硬件的组合系统。 IDS的作用:实时监测 经典检测模型 通用的入侵检测系统抽象模型 ● 主

    2024年02月08日
    浏览(42)
  • Snort入侵检测系统实验

    实验内容 搭建网络防御环境 学习使用检测工具Snort 对网络进行攻击,查看和分析网络防御工具报告 对实验结果进行分析整理,形成结论 安装入侵检测系统 Snort 安装daq依赖程序,输入如下命令: sudo apt-get install flex sudo apt-get install bison sudo apt install aptitude sudo aptitude install l

    2023年04月19日
    浏览(40)
  • 网络安全之入侵检测

    目录 网络安全之入侵检测 入侵检测经典理论  经典检测模型 入侵检测作用与原理 意义 异常检测模型(Anomaly Detection) 误用检测模型(Misuse Detection) 经典特征案例 ​编辑自定义签名  ​编辑 签名检查过程 检测生命周期 信息收集的方法 信息分析 异常检测 --- 统计分析、

    2023年04月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包