2018年5月16日,Talos发表了关于Telegrab的一篇文章,介绍了可以劫持Telegram会话的恶意软件。原理非常简单:如果攻击者可以复制桌面用户的会话令牌(session token),那么就能劫持会话。除了本地存储的信息外,攻击者不需要其他任何信息。无论信息是否经过加密都不重要,只要复制这个信息,攻击者就能使用该新信息创建一个影子会话(shadow session)。

实战环境

有的时候,迫于一些目的,当有目标PC机权限的时候,需要对该目标的个人通讯进行持续的监控获取更多的有利信息,那么就有了session hijacking的需求。

目录结构

Telegram用户数据一般存放在与telegram.exe同目录下的tdata文件夹内。

一个有效的telegram登录用户的目录结构如下:

image

关键几个文件如下:

settingss​文件主要存储了用户页面相关的配置,包括背景图片,颜色,语言包等配置信息。

D877F783D5D3EF8Cs​文件主要存储了用户的userId,以及与telegram云端进行数据通信时所使用到的加密密钥。

D877F783D5D3EF8C/maps文件中lskSelfSerialized​字段存储了用户的基本信息,包括用户id,头像,姓名,注册电话,上次在线时间等信息。而其他字段主要存储的是一些配置或者资源文件的文件名,并且与文章开头列举的D877F783D5D3EF8C​文件夹下的文件一一对应。

D877F783D5D3EF8C/configs

configs​文件主要存储了用户聊天,与telegram云端进行通信时的一些基础配置,包括telegram云端的ip和端口,撤回消息的时长限制等配置信息。

TG具体怎么加密保存这些信息的,能力有限也不去分析了。

session hijacking流程

众所周知,telegram默认是支持多端登录的,多端之间没有设备交叉验证来获取密钥解密,所以这种特性就造成了就变成了劫持session的最完美的前置条件,仅仅只需要你得tdata文件。

现在流传在网上的session劫持方法都是通过复制整个tdata文件夹进行session的劫持,但对于一个使用了较长时间的telegram来说,tdata的体积会变得十分庞大(MB,甚至GB的量级),这在实战的过程中会有很大的局限性。

在强隐蔽的情况下,动大动作去拖取上GB的做法是十分不理智的。

现在我们已经有解读大部分tdata文件的能力,因此可以选取最关键(保存session)的文件,减小拖取文件的体积,从而更方便于session的劫持。

能够成功进行session劫持的关键文件有:

  • tdata/key_datas
  • tdata/D877F783D5D3EF8Cs
  • tdata/D877F783D5D3EF8C

key_datas是保存密钥的,D877F783D5D3EF8Cs保存的云端拉取信息的通讯密钥,而D877F783D5D3EF8C则是保存了用户的基础信息。

image

session hijacking start

获取了上述的三个文件之后,我分别用两个不同的虚拟机来完成此次的劫持过程。

从192.168.59.129这台机器导出目标的三个资源文件,然后在192.168.59.138这台机器的TG存入这三个资源文件,然后打开138的TG。

image

复制机,第二台机。

消息记录成功同步拉取。

image

第一台机。

两台机器之间的消息记录能够同步,并且新发消息也能收到,在手机上查看当前登录设备也没有多余可疑设备,说明影子账户成功,session劫持成功。

image

passcode情况下的 劫持

注:

如果开启了本地密码认证成功,此会话劫持之后依然要输入密码。

且此本地密钥是不和云端同步的,所以只能想其他办法获得此密钥。

image

如下图所示:

image

遇到这种情况只有另想办法,比如在PC机器上做键盘记录。

参考

https://www.anquanke.com/post/id/167866 针对WhatsApp、Telegram及Signal应用的侧信道攻击技术研究

https://www.dongzt.cn/archives/514.html Windows 下Telegram Desktop的身份凭证窃取

http://www.ctfiot.com/23645.html Telegram session劫持探索