Linux怎么检测ICMP隐蔽隧道通信流量如icmpsh工具

千明酱_1564

千明酱_1564

2026-10-22

846人浏览

原创

tcpdump可快速识别icmpsh流量:捕获大于74字节icmp包,筛出含windows路径、命令关键字等明文载荷;其固定64字节、非默认填充、高频递增序列号及无连接特性是关键特征。

linux怎么检测icmp隐蔽隧道通信流量如icmpsh工具

Linux怎么用tcpdump快速识别icmpsh流量特征

直接抓包看数据载荷是否异常,比等规则告警更早发现问题。icmpsh的ICMP数据段明显偏离系统默认填充内容,且固定64字节(不含IP/ICMP头),这是最易观察的突破口。

  • 执行 tcpdump -i any icmp and greater 74 -w icmp.pcap 捕获所有大于默认Windows ping包(74字节总长)的ICMP包,避免被正常探测淹没
  • 用 tcpdump -r icmp.pcap -A | grep -E "(Micro|C:\\|Desktop|ipconfig|whoami)" 快速筛出含Windows路径、命令关键字或典型shell提示符的载荷
  • 注意:icmpsh默认不加密,载荷里常出现明文ASCII字符串,比如 "C:UsersAdministratorDesktop>" 或 "Microsoft Windows [6.1.7601]",这类内容在正常ping中绝不会出现
  • 若发现大量连续64字节ICMP echo request(type=8),且payload十六进制呈现无规律、非默认填充(如不是 61626364... 或 08090a0b...),基本可判定为隧道行为

Suricata规则怎么写才能捕获icmpsh类ICMP隧道

靠单一 dsize 阈值容易误报,必须结合载荷内容、频率和序列号行为三重判断。官方规则库里的 sid:5621006(dsize:>100; threshold:count 50/5s)对icmpsh无效——它压根不用那么大载荷。

  • 真正有效的规则要匹配“小载荷 + 高频 + 非标准内容”,例如:
    alert icmp any any -> $HOME_NET any (msg:"ICMP tunnel likely - non-default payload"; content:"C:\\"; depth:10; fast_pattern; sid:900001; rev:1;)
  • 加一条序列号检测:icmpsh的sequence字段会持续递增(不像正常ping是随机或固定),可用 itype:8; byte_test:2,>,0,4,big; byte_jump:2,4,big; content:"|00 01|"; offset:4; 粗筛异常递增模式(需Suricata 6.0+)
  • 禁用 flowint 类状态跟踪规则——icmpsh通信无连接状态,这类规则几乎不触发
  • 别忘了排除已知合法工具:fscan的ICMP末32字节恒为零,可在规则中加 isdataat:32,relative; content:"|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00|"; distance:0; 避免误杀

怎么定位发出icmpsh流量的进程(Linux端)

icmpsh服务端是Python脚本,但实际发包的是内核ICMP socket,lsof -i icmp 或 netstat 都看不到。得从socket创建源头入手。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 先用 ss -uapn | grep :0 查UDP监听——虽然ICMP不走UDP,但很多ICMP隧道工具(如icmptunnel)会伪造UDP套接字做伪装,漏掉就白查了
  • 用 strace -f -e trace=socket,sendto,sendmsg -p $(pgrep -f "icmpsh_m.py") 2>&1 | grep -i icmp 实时跟踪目标进程的socket调用,确认是否真在构造ICMP包
  • 更彻底的方法:用 auditctl -a always,exit -F arch=b64 -S socket -F a0=10 -k icmp_socket(10=AF_INET)审计所有IPv4 socket创建,再配合 aureport -k icmp_socket --start recent 定位调用进程
  • 注意:若攻击者改用 python3 -c "import socket;..." 一行式启动,pgrep -f 可能漏掉,此时必须依赖auditd或eBPF工具(如bpftrace)捕获原始socket事件

为什么单纯禁用 net.ipv4.icmp_echo_ignore_all 不够

这个内核参数只控制是否响应echo reply,对icmpsh这类主动外发echo request的客户端完全无效——它根本不需要系统回包,自己构造并发送即可。

  • 真正该关的是ICMP raw socket权限:echo 1 > /proc/sys/net/ipv4/conf/all/secure_redirects 作用有限,但 sysctl -w net.ipv4.conf.all.rp_filter=1 可抑制部分伪造源IP的ICMP包
  • 更有效的是限制非root用户创建raw socket:echo 1 > /proc/sys/net/ipv4/ping_group_range 改为 0 0,让只有root能调用 socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
  • 如果业务确实需要普通用户ping,至少用 setcap cap_net_raw+ep /bin/ping 替代全局放开,避免Python脚本随意调用raw socket
  • 最关键的盲点:icmpsh_m.py本身不发包,它通过 socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) 创建套接字后调用 sendto()。只要Python进程有CAP_NET_RAW能力,禁用系统ping响应毫无意义

实际环境中,ICMP隧道最棘手的不是检测不到,而是它混在海量正常ping里难以分离。载荷内容指纹比包长、频率更可靠,而进程级溯源必须绕过“内核处理ICMP”的表象,盯住socket创建那一刻的调用栈。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4150

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3513

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2733

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6670

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6322

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3653

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3145

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3379

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习