Forcepoint Security Labs一直在关注威胁行为者用来规避现有保护措施的方法。通过其中一项调查,我们研究了Telegram 加密消息服务作为恶意软件的命令和控制(C2)基础架构的用法。
使用Telegram作为C2通道的恶意软件通常使用Telegram Bot API进行通信。在调查一个恶意软件的过程中,我们发现Telegram处理通过其Bot API发送的消息的方式存在重大缺陷。
基于Bot API的工作原理,之前所有的bot消息都可被能够拦截和解密HTTPS流量的攻击者重放。实际上,这可以为对手提供目标bot发送或接收的所有消息的完整历史记录。通常包括常规用户之间的消息,因为bot经常与他们共享群组聊天。
一、获取Telegram C2消息的访问权限
Telegram使用其内部MTProto加密来保护常规用户之间的消息,因为它(理所当然地)认为TLS本身对于加密的消息传递应用程序来说不够安全。
不幸的是,这并不适用于使用Telegram Bot API的程序,因为以这种方式发送的消息仅受HTTPS层保护。更糟糕的是,任何能够获得在每条消息中传输一些关键信息的对手不仅可以窥探传输中的消息,还可以恢复目标bot的完整消息传递历史记录。
其中一个关键信息是bot API令牌,它嵌入所有消息(以及任何使用Telegram Bot API的二进制文件中,无论恶意或合法)。因此,对目标HTTPS连接上执行MiTM的对手来说,获取此数据轻而易举。
这个难题的另一个关键部分是随机生成的Telegram chat_id。在单个聊天的情况下,这是用户自己的唯一ID,而群组聊天在创建时生成自己的chat_id。但是,此信息也会在任一Bot API请求中发送,因为bot需要知道要向哪个用户或组聊天发送信息。
配备这些信息,可以从Telegram Bot API调用许多方法。在我们的例子中,forwardMessage()方法特别有用,因为它允许给定的bot有权将来自任何聊天的任何消息转发给任意Telegram用户。要做到这一点,我们需要API令牌和'源'chat_id(从bo t先前发送的消息中提取,或者在恶意软件中从自身提取)以及'目标'chat_id(这是我们自己的用户ID),最后是我们想要转发的消息ID。
对我们来说,幸运的是,message_id从0逐渐增长,因此一个简单的Python脚本可以转发所有已发送到bot当前所属的Telegram聊天的消息。
一个特定的恶意软件被证明是一个很好的案例研究,说明为什么这是危险的,威胁行为者显然没有在他们的测试/开发和操作环境之间进行必要的隔离。这意味着我们可以跟踪他们创建和部署恶意软件的第一步(请参阅下面的活动时间表),以及与受害者和测试机器之间当前的通信形式。
在一个非常糟糕的操作安全性显示中,这些测试机器中的一个是攻击者自己的,包括了他的IP地址和许多其他敏感的个人信息。
二、GoodSender
有问题的恶意软件是一个相当简单的.NET恶意软件,运营者称之为'GoodSender'并使用Telegram作为C2。它以相当简单的方式运行:一旦释放恶意软件,它就会创建一个新的管理员用户并启用远程桌面,并确保它不被防火墙阻止。新管理员用户的用户名是固定的,但密码是随机生成的。
所有这些信息(受害者的用户名、密码和IP地址)都通过Telegram网络发送给操作人员,从而使操作人员可以通过RDP访问受害者的计算机。
图1 – GoodSender中构建Telegram Bot URL的代码
图2 – Telegram Bot的配置文件屏幕
三、活动时间表,威胁行为者和受害者
该攻击者最初使用Telegram bot来处理他正在开发的另一个恶意软件。这个早期的恶意软件被称为“RTLBot”,并且在几个月的时间里(在放弃开发之前)添加了许多其他功能,转而支持上述恶意软件“GoodSender”。
下面的时间线和所包含的屏幕截图的详细信息是从恶意软件的历史C2通信中获取到的,并演示了使用所描述的方法从Telegram频道获取历史消息的能力。
· 2018年2月4日 – Telegram bot上线。
· 2018年2月18日 – 攻击者开始将Telegram C2功能纳入RTLBot,并将开发转移到Telegram上。
· 2018年2月20日 – 攻击者将他的基础设施从个人计算机转移到AWS(亚马逊网络服务)上。
· 2018年4月1日 – GoodSender处于活动状态并发送其第一个受害者信息。
· 2018年6月6日 – 攻击者租用另一个VPS作为Telegram 代理。
· 2018年7月5日 – GoodSender发送其最后的真实受害者信息。
· 2018年9月29日 – GoodSender发送其最后一次测试受害者信息。
2018年11月23日,攻击者将相同的bot API密钥和C2频道合并到一个工具中,该工具从Instagram帐户收集图像。鉴于元素经常命名为测试(例如下面的图3中的testbot),在将API密钥和通道更改为“生产”之前,该通道可用于测试机器人。
图3 – 显然是作者开发机器的截图,由bot上传到Telegram频道
图4 – 作者开发环境的另一个屏幕截图,其中显示了2018年6月6日首次观察到的新代理
虽然我们没有发现攻击者必须用来释放恶意软件的攻击媒介的明确答案,但是一些线索表明他使用EternalBlue漏洞将恶意软件释放在未打补丁的机器上。
· 他大量使用名为“EternalBlues”的免费EternalBlue漏洞扫描程序;
· 他有一份扫描的美国和越南的IP清单,这些IP易受EternalBlue攻击,然后用来感染一些受害者。
根据我们的遥测技术,GoodSender已经感染了至少120名受害者,主要位于美国。
图5 – 基于GeoIP信息的GoodSender受害者的红热/蓝冷热图
图6 – 基于GeoIP信息的受害者条形图
四、总结
在我们的案例研究中,这种用于重放消息的特定技术被用于发现威胁行为者,但它很可能被用于使用Telegram Bot API的合法应用程序。
尽管Telegram被宣传为“安全消息传递应用程序”并且在正常聊天期间使用比TLS更高的理论保证的加密方案,但是bot使用传统的TLS来加密传输中的数据。因此,具备解密TLS能力的攻击者,可利用MitM获得对bot令牌以及chat_id的访问,这不仅导致当前通信的完全沦陷,而且还影响bot参与的之前所有通信。
因此,Forcepoint Security Labs建议所有用户避免使用Telegram bot以及避免使用bot的频道和组。
Forcepoint已通知Telegram此漏洞。
在以下攻击阶段,我们的案例研究中的Forcepoint客户受到GoodSender恶意软件的保护:
· 第5阶段(Dropper文件) – 防止下载恶意文件。
IOCs (GoodSender)
943eceb00ea52948c30deab1d5824ffcf2fd1cec