前言:
最近因项目需求,简单研究了一下常见远程工具协议,编写了简单的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,猜测是根据端口来的。
总结:
以上都是参考了网上很多前辈的思路,自己摸索实践的,目前在测试阶段,如果大家有更好的想法可以分享一下~