常见远程控制工具协议(MSRDP/VNC/TEAMVIEWER/PCANYWHERE/TELNET)检测

  • Post author:
  • Post category:其他

前言:

最近因项目需求,简单研究了一下常见远程工具协议,编写了简单的suricata检测规则,在此做个小结,记录一下。🐟

MSRDP:

微软的专有协议,它允许系统用户通过图形界面连接到远程系统,主要分为服务端和客户端。

本次测试数据来源:win11-ubuntu22.04

request:

response:

 可以发现RDP协议里有固定的TPKT格式内容,并且有版本相对固定,再往后有|00 00 00 00 00|固定的字节。()

因此思路为:

1.先检测 |03 00 00|
2.向后跳过两个任意字节,检测 |e0|
3.向后5个字节内,全是|00|

 suricata规则:

不带凭证的请求:
alert tcp any any -> any any (msg:”RDP请求(第一次请求)-yui”; content:”|03 00 00|”;content:”|E0|”;distance:2;content:”|00 00 00 00 00|”;within:5;content:”|01 00 08 00 0B 00 00 00|”;within:8;sid:100101;)
带凭证的请求:
alert tcp any any -> any any (msg:”RDP请求(携带凭证)-yui”; content:”|03 00 00|”;content:”|E0|”;distance:2;content:”|00 00 00 00 00|”;within:5;content:”|43 6F 6F 6B 69 65 3A 20 6D 73 74 73 68 61 73 68 3D|”;within:17;sid:100102;)

 

VNC

VNC是基于RFB(Remote Frame Buffer)协议进行通信的,是一个基于平台无关的简单显示协议的超级瘦客户系统,由Cambridge的AT&T实验室设计开发的。

vnc的缺省端口是main:5900(C/S)和http:5800(B/S)端口。

RFC 6143 – The Remote Framebuffer Protocol (2011) 是针对RFB 3.x版本综合整理的正式协议规范。Real VNC之后每年都会更新RFB版本,现在已经出到RFB 6.0了,但是因为加入加密,高画质传输,聊天等功能,Real VNC对这些在市面上没有公开的协议说明。wireshark也主要是对未加密的RFB 3.x版本的通信数据做解析。

常见的vnc的工具很多,这里的测试流量是使用的win11上使用real vnc 客户端,服务端是用的Ubuntu默认的vnc服务器。

思路:

vnc在连接之前都会进行版本交换,并且流量里有比较明显的特征,以此作为检测重点。

suricata规则:

alert tcp any any -> any any (msg:”VNC连接交换版本-yui”;flow:established, from_server;content:”RFB 0″;content:”.0″;distance:2;within:2;sid:2001001)

 

TEAMVIEWER

TeamViewer是一款国外的远控工具,使用的是私有协议,并没有太多关于协议的开源资料。也是学习了前辈的一篇关于私有协议的流量分析的思路,有兴趣的朋友可以去看看。

入侵检测系列1(上):基于私有协议的加密流量分析思路(Teamviewer篇)-安全客 – 安全资讯平台 (anquanke.com)

 思路:

1.关于dns,在连接前会去请求服务器,dns协议解析里能有特定的内容:router.teamviewer

2.成功连接后会找到固定的字符&GP(03 17 24)

3.在成功连接后会短时间内传输大量数据,也可以根据前面的特定字符加上一定的阈值判断。但是因为生产环境里引用这种规则会导致suricata压力过大,所以暂不考虑。

suricata规则:

alert DNS any any -> any any (msg:”Teamviewer 请求连接-yui”;dns_query;content:”.router.teamviewer”;sid:”3001001″;)

  

alert udp any any -> any any (msg:”Teamviewer 连接成功-yui-1″;content:”|03 17 24|”;distance:10;within:3;sid:”3001002″;)

pcanywhere

pcanywhere是一款由Symantec开发的远控工具,年代比较久远了,网上资料也不多,目前也是停止更新了,使用感比较差。

分析整个连接过程,发现每次在请求连接之前都会有一段udp和tcp的交互,并且端口都是特定的。 

 思路:

1.针对特定端口检测,限制检测udp包payload大小

2.匹配明文字段”ST“

suricata规则:

alert udp any any -> any 5632 (msg:”pcanywhere 请求连接 被控端 -yui”; dsize:2; content:”ST”; sid:6001001)

 

TELNET

关于telnet,大家都比较熟悉,这里就分享一下思路;
因为该协议是明文传输的,所以可以在限定端口的前提下去检测关于登录操作的一些特定字符。

这里分享一个小趣事儿,一直以为wireshark解析telnet协议是根据一些特定结构解析的,后面自己在测试的时候,将telnet服务器的端口号改了,wireshark没有解析出来telnet,猜测是根据端口来的。

总结:

以上都是参考了网上很多前辈的思路,自己摸索实践的,目前在测试阶段,如果大家有更好的想法可以分享一下~


版权声明:本文为kawhiyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。