
远程控制软件在现在办公之中已经是不可缺少的工具了,但是许多人并不知道这类软件也可能被滥用,比如未授权访问或数据窃取。
这个就是网络安全的问题了,能够使用Suricata等入侵检测系统(IDS)对这类流量进行监控和告警也是一件很有必要的事情。
1. 规则编写原则
Todesk、TeamViewer、AnyDesk以及Parsec这类远程连接软件都是加密通道(TLS/SSL)+动态协商端口,直接来检测应用层的Payload是比较困难的一件事情。
所以,我们的检测规则需要有以下前提条件:
- 已知端口:利用远程软件的官方文档或者是社区,了解常用的端口;
- 连接模式:你需要知道TCP初期握手的行为特征;
- 流量方向:能够区分主控端(outbound)与被控端(inbound)。
我这所有规则都是用alert动作举例,但是在实际部署的情况中,大家也要灵活换成drop或reject。
2. Suricata规则代码
下面我就针对四款软件,来编写一个初步检测的规则代码,可以直接放到/etc/suricata/rules/custom-remote-desktop.rules文件中。
# TeamViewer 规则
# 官方主要端口: TCP/UDP 5938, 同时会使用443/80作为备用
alert tcp any any -> any 5938 (msg:"Potential TeamViewer Connection (TCP 5938)"; flow:to_server,established; flags:S; sid:1000001; rev:1;)
alert udp any any -> any 5938 (msg:"Potential TeamViewer Connection (UDP 5938)"; sid:1000002; rev:1;)
# AnyDesk 规则
# 官方文档指出其使用TCP 7070作为默认端口,同时也会通过443进行通信
alert tcp any any -> any 7070 (msg:"Potential AnyDesk Connection (TCP 7070)"; flow:to_server,established; flags:S; sid:1000003; rev:1;)
# ToDesk 规则
# 根据社区分析和官方支持文档,ToDesk 主要依赖标准Web端口进行通信
alert tcp any any -> any 443 (msg:"Potential ToDesk Connection over HTTPS"; flow:to_server,established; flags:S; app-layer-protocol:http; content:"|16 03|"; depth:3; sid:1000004; rev:1;)
# 注意: 此规则通过检测TLS Client Hello (0x16 0x03) 来识别加密流量,需结合其他上下文以减少误报
# Parsec 规则
# Parsec 作为游戏串流软件,主要使用UDP进行低延迟传输,端口范围较广,但常使用8000-9000
alert udp any any -> any 8000:9000 (msg:"Potential Parsec Gaming Stream (UDP 8000-9000)"; sid:1000005; rev:1;)
3. 规则测试方法
做完以上步骤之后,就需要进行严格测试,来保证我们的检测规则是有效且低错误率的。
这边我推荐的步骤如下所示:
- 语法检查:利用
suricata -T -c /etc/suricata/suricata.yaml -l /var/log/suricata/命令来验证之前你写的规则文件语法是否是对的; - 生成测试流量:在自己的测试环境之中分别启动ToDesk、TeamViewer、AnyDesk和Parsec,并建立远程连接,从而生成真实的网络流量,以便后面的流程能够继续;
- 离线回放分析:使用
tcpdump或Wireshark捕获真实流量,并保存为PCAP文件。然后用Suricata离线模式分析:suricata -r test-traffic.pcap -c /etc/suricata/suricata.yaml -l ./test-output/ - 日志验证:检查
fast.log或eve.json日志文件,从而确定规则是否被正确触发,大家需要观察是否有许多的误报出现。
通过上述的详细流程,我们就能够有效验证和迭代更新自己的Suricata规则,然后实现生产环境之中对于远程软件流量的精准监控。
