电报中的漏洞可能会破坏秘密聊天

电报周年刊物


电报的秘密聊天使用端到端加密,那又如何呢? 端到端加密电报弱保护用户通信。 一个简单的例子:攻击者获得了爱丽丝的私钥.pgp,当然,要解密为爱丽丝加密的消息,您需要此密钥的密码,使用现代密码保护原则无法删除该密码。 在Android上的Telegram端到端加密中-可能性为100%。 本文将绕过两因素身份验证,PIN码的恢复以及Telegram中劫持有关此漏洞的秘密聊天。

在我的工作中,我将尝试描述有关Android设备上Telegram中的漏洞的详细手册,并举例说明如何在Android,台式机Linux / Windows上还原本地Telegram代码。 我会妥协秘密电报聊天。 在与Durov团队的对抗中,我的公司将为我提供帮助:我(根); Android 7.0; Android 6.0(根目录) Android 4.4.2(根目录) 具有OS GNU / Linux / Windows(根)的PC。 乍一看,似乎力量并不相等,让我们来看看...

恕我直言 一切如何开始


就我而言,我也感受到了围绕Telegram平台进行的PR活动的全部力量。 在“购物车”的巨大轮子上,炒作每个月都在滚动,没有中心,没有边界。 斯诺登(E. Snowden)对普遍存在的用户通信加密的普及的影响。 还记得ICQ Messenger在桌面上的QIP 2005应用程序,它的所有通信都以.txt文件的形式存储在公共领域的PC上。 关于通信加密的电报“谁首先开始对私人通信进行整体加密”并没有立即生效,但后来表示他是先驱。 Telegram的历史没有特别区分:来自durov的MTProto协议安全性竞赛; 艺术家和画家的科雷马(绘画贴纸); 用于创建漫游器/应用程序的API; ICO TON,为Telegram的所有者带来了很多钱; 在伊朗,俄罗斯联邦和伊朗再次封锁信使; 以及进入电报的来龙去脉的罕见在线填充网络。 2018年7月 “车也冲了我过去。” 当“下一个电报”以其自己的口号和一个小的警告出现在即时通讯程序的大众市场上时(这是超级快速,简单和免费的)。 “ Telegram是一款注重速度和安全性的消息传递应用程序。” 杜洛夫和他的团队(由于尼古拉·杜洛夫强大的技术方面)以这样一个酷炫的口号牺牲了后者的口号,公开与信息安全专家/寻宝者进行互动,后者寻找/试图找到MTProto协议中的漏洞或Telegram平台上的错误。 专家将其材料发送到security@telegram.org-这是“赏金猎人”和Telegram开发人员进行此类互动的正式方法, 在此也有提及
实际上,我们欢迎安全专家审核我们的系统,并感谢您的任何反馈 (security@telegram.org)

一种非官方的交流形式,当电报开发人员忽略信件,然后专家通常将其推文发布到微博上时,durov就其中的一些发表评论。

用户的黑王子服务,Telegram移动平台上的隐私被呈现为Nikolai Durov对MTProto的坚定,强大,新奇的发展。 Telegram(以下简称MF)中的秘密聊天是Telegram移动平台上存在的聊天,并受到端到端加密的保护,密钥仅存储在生成它们的设备上,这也是Telegram-Dubai的骄傲(我将其称为)。 在Telegram-Dubai世界中,Telegram中档被认为是非常安全的聊天室。 杜洛夫(Durov)几次动摇,将其产品与公开战争般的竞争对手的产品进行比较,并始终获胜。

绕过Android上Telegram Messenger的端到端加密,通过电子邮件将错误报告发送到上述电子邮件。 几天后,我写信给Telegram志愿者的技术支持,但我没有得到回应。 志愿者回答我,他们将把我的想法传达给电报的领导层,要求我澄清一下:我在何时何地发送我的信。 经过两周的沉默后,我再次回想起我给志愿者的信,这次的使者志愿者完全忽略了我的提醒。 一周后,我再次将信件再次发送至Telegram的官方邮件-没有答案。 还剩下什么,该怎么办? 通过微博来烦扰您的电报错误报告?围攻durov团队的非正式沟通渠道? 还是为媒体撰写并发表文章? 在Telegram的队伍中已经形成了某种网络官僚主义。 我不得不在habr.com上提到w9w ,我认为它在Telegram平台上发现了最好的漏洞:telegra.ph中的漏洞。 最重要的是-“任何”用户都可以在telegra.ph上编辑其他人的文章。 通过他的w9w漏洞报告 (他找到了其中的几个),他也无法联系到security@telegram.org。 完成官僚主义的任务后, w9w因发现的漏洞而获得了少量的经济奖励。 我不知道电报贪婪吗? 还是其他原因? 回到电报,一些评论。



很多人都有自己的家庭相册,而寻宝者也拥有自己的“发现的错误/错误/漏洞”的记录。 在我的PS中,完成本文后,我将把B30单元格涂成红色,从而使我的问题留给Telegram团队讨论。

第1部分。在OS Android Linux / Windows桌面上恢复本地代码Telegram。 基于真实事件。


2018年7月 在Github上,John The Ripper(以下简称JTR)版本的非正式分组的开发者之一发布了用Python编写的解析模块“ telegram2john.py”的源代码(基于“随机”用户的提示,该提示从411行读取了代码) 。 从程序的名称中,可以清楚看出该模块的服务对象以及服务对象。 谁不理解此类模块的含义,这些模块是扩展JTR功能的模块。 官方的JTR可以保留8种格式,而JTR的jumbo-1-bleing-263种格式(不算+很好的sha1 / 2/2 / md5 / $动态格式),其中一种是Telegram本地代码。 测试“ telegram2john.py”后,我发现其中有一个错误:三个本地代码电报解析功能之一无法正常工作,我在Github上向JTR开发人员报告了该错误。 修复了“ telegram2john.py”的问题。 这并不是发现的bug对JTR开发人员的第一个吸引力,并且每次有这样的日常建立的通信渠道时,快速响应和同样快速的错误纠正都是不错的选择。 经过秘密的几天后 ,telegram2john.py模块被批准并发送到JTR存储库。

本地代码恢复方案(桌面电报)是一个多步骤过程

Read the salt (32 bytes), encrypted data and sha1 of decrypted data from a file.
Compute a PKCS5_PBKDF2_HMAC_SHA1 on the UTF8 (passcode), using the salt, 4000 iterations, keysize of 256 bytes
Use a Telegram-specific KDF to get the AesKey and AesIV (Relatively cheap - bunch of memcpy and 4x sha1)
Perform an AES-IGE-DECRYPT on the encrypted data using the derived key and IV from step 3.
Compare sha1 of decrypted data with the sha1 read in step 1. If they match - passcode is correct.

userconfing.xml(Android)


内部/data/data/org.telegram.messenger/shared_prefs/userconfing.xml

对于JTR用户,“出血/ Android-Telegram”操作简化为两个阶段的过程:使用“ telegram2john.py”模块,来自属于Telegram应用程序的userconfing.xml文件中的John处理器的“哈希绘图”(即时操作)和蛮力这个“哈希”使用的是JTR。 通过这种操作,Android e上本地代码恢复的概率为100%成功,等待时间为几毫秒。 在Desktop Linux / Windows上恢复本地代码的概率为X%成功,等待时间未定义。 怎么了 因为首先,本地代码是四位数的电报(10 ^ 4种各种引脚组合)上的普通数字密码,或多或少,其次,Android上的本地代码电报加密算法不是加密的[SHA256 ($ s。$ p。$ s)] ,因此密码猜测的速度很高。 对于没有秘密聊天的Telegram Desktop应用程序,情况有所不同:在Desktop应用程序中,本地代码加密很强(Desktop / Telegram哈希CPU的搜索速度比Anroid / Telegram哈希搜索速度慢10,000倍),最重要的是Desktope / Telegram上的本地代码可以设置为“任意”长度,并可以使用任何字符。


本地代码Desktop Telegram的加密强度很高,暴力破解速度比Android Telegram的暴力破解慢1万倍。

我个人给人的印象是,Telegram开发人员致力于创建唯一且安全的MTProto协议,而不是基于全面的用户隐私,例如,存储在非Android根目录或非加密本地代码中的应用程序开放缓存,事实证明,以100%的概率恢复。

在撰写本文时,最新的Kali Linux和Parrot Security操作系统中的JTR自2015年以来未进行更新,它们具有不允许解析本地Telegram代码的错误(JTR jumbo-1出血总是存在一些错误,但是其功能如果您想到的是Hashcat软件,其开发速度会比您想象的要陡峭。 因此,经验丰富的Kali / Parrot用户无法破解以恢复本地代码电报;在Windows / Android中,功能被截断的JTR也不是很好。 因此,您必须在OS(对于Linux系统)上与Github一起安装JTR。 为了使JTR软件成功编译,在编译程序之前,先将软件包交付给您的操作系统“ libssl-dev”,然后

 git clone git://github.com/magnumripper/JohnTheRipper -b bleeding-jumbo john && apt-get install libssl-dev && cd john/src && ./configure && make -s clean && make -sj4 john/run/telegram2john.py userconfing.xml >  #  "telegram2john.py"   GNU/Linux ,   : python telegram2john.py userconfing.xml >  JohnTheRipper/run/john  --mask=?d?d?d?d #    –  local code Android Telegram   . 


恢复了本地代码Android Telegram。 5369针。

同样,使用Telegram本地Linux / Windows应用程序的本地代码暴力破解,而不是userconfing.xml文件,将指示Telegram目录的路径:

(Linux):〜/ telegram2john.py〜/ .local / share / TelegramDesktop;
(Windows):〜/ telegram2john.py“ C:/用户/名称/ AppData /漫游/ Telegram桌面”(用于Windows上过时的Telegram应用程序);
(Windows):〜/ telegram2john.py“ Telegram桌面”(用于Windows上更新的Telegram应用程序)。

请注意,如果您想再次解析本地电报代码,JTR将显示“无密码”。 原因是早已找到密码。 Johnny,再也不会恢复密码,而是使用“ --show hash”选项,但有时可能会发生错误,并且“ --show”选项无法正常工作(我在其他哈希中遇到了此类错误,但是JTR开发人员已经修复了所有问题)。 在这种情况下,请查看文件〜/ john / run / john.pot,所有找到的密码都存储在其中,如果清除它,则可以使用找到的密码重新生成哈希值。


约翰·开膛手(John The Ripper)不会因为本地代码Android Telegram而流血

JTR的目标userconfing.xml文件位于Android根目录下:

 /data/data/org.telegram.messenger/shared_prefs/userconfing.xml 

因此,您可以通过TWRP或使用数字取证来获得具有根权限的文件。

本文结尾处的详细视频手册,用于在Android / Linux / Windows链接上恢复本地电报代码。

第2部分。白色开始并失败。 电报中的秘密聊天被盗。 也基于真实事件。


如何基于电报进行保护:

  1. 输入电话号码;
  2. 在另一台设备上的应用程序中接收SMS或代码-可选,输入在另一台设备上的应用程序中接收到的SMS代码或代码。
  3. 通过频繁(包括成功)用户登录来阻止临时帐户。

拦截此类SMS时,您可以进入用户的帐户,但无法访问恐怖分子的秘密聊天,因为它们存在并且仅存在于ISIS犯罪分子的设备中,而这些设备正是在这些设备中生成的,这意味着您不会特别警惕那些阻止移动运营商进行检查的人。

可选的基本+增强电报保护:

  1. 输入电话号码;
  2. 在另一台设备上的应用程序中接收SMS或代码-随意输入应用程序中的SMS代码或代码;
  3. 输入云代码Telegram(存储在Telegram服务器上,您可以通过电子邮件重置/链接);
  4. 设置本地代码(在Android上,设置-隐私和安全性-密码);
  5. 检查当前/最近进入信使的会话;
  6. 退出当前会话以外的所有会话;
  7. 清除中档计时器的内容;
  8. 禁止屏幕/记录中档屏幕;
  9. 频繁(包括成功)用户登录的临时帐户阻止;
  10. 事实证明,在盗窃中档(从另一个IP登录到其他人的帐户)期间,暂时禁止了真实/受感染的帐户〜5分钟后,并在Telegram中取消了中档。 在相同的真实/遭到破坏的帐户网络中,Telegram忘记禁止劫持帐户。

在下面,我将证明中端设备容易受到攻击,我将劫持其中一个中端设备(我在Telegram中的测试帐户),并假冒用户“老板”

成功恢复Telegram的本地代码后,我决定在Android上感觉到userconfing.xml文件旁边的文件。 创建了一个秘密聊天,查看了哪些文件和其中的子目录会及时更新。 我试图将这些文件从OS Android 4.4.2复制到具有OS Android 6.0的另一个小工具(我通过rar; zip归档在小工具之间传输文件)。 与GP一起在Android 6.0上安装了最新版本的Telegram。 从Android 4.4.2> Android 6.0更新文件移动到类似目录

 /data/data/org.telegram.messenger/shared_prefs /data/data/org.telegram.messenger/files /data/data/org.telegram.messenger/no_backup 

根据被盗的测试帐户,Telegram亲自恢复了每个文件和文件夹的权限(在4.4.2上),操作不快(不同的文件具有最多样化的权限),并分配了Telegram UID GID。



启动了应用程序。 立即所有被盗文件都及时更新,“新用户”屏幕向我致意。 Telegram的行为就像我是新用户一样,建议您通过电话注册或登录(在Android上初始安装Telegram的标准过程)。 也就是说,我无法闯入他人的帐户。 从不同侧面偷偷摸摸地爬了好几次,但最后还是一个文件

我尝试了另一种方法-通过Titanium备份来备份Telegram测试帐户。
我在Android 4.4.2上备份了该应用程序,并部署了4.4.2备份。 在Android 6.0上。



不需要使用“被盗”应用程序的权限,更改UID / GID的权限-一切将由Titanium Base完成。 我在Android 6.0和Magic上启动了Telegram受损帐户! 我收到输入用户“主机”的本地代码的请求。 这种带有备份的中间游戏提供了两步验证的旁路,而没有受害者和技巧。 就电报而言,它仅从被盗帐户中请求本地代码。 发送被盗文件

 /data/data/org.telegram.messenger/shared_prefs/userconfing.xml 

在安装了Kali Linux的VDS上,JohnTheRipper不再在运行的进程中处于睡眠状态,现在该采取行动了。 下一瞬间,该死的打了本地代码! 哈希不能忍受一秒钟,破解。



红色突出显示(从上到下):

  • 使用telegram2john.py模块对JTR进行哈希处理;
  • 翻新的本地代码Android Telegram;
  • Johnny的全职工作(令人讨厌的高速蛮力密码,选项---mask =?D?D?D?D,告诉Johnny他选择了一个4位数的数字代码,没有打开它,因此JTR加速并显示其愤怒的速度);
  • 请求还原的本地代码的JTR。

酷约翰尼! 不是吗

滥用了Telegram的“部分”后,使用JTR Android恢复了本地代码Telegram,他使用ip测试帐户登录了其他人的帐户,该帐户最初位于Android 4.4.2。上,而现在它是基于Android 6.0建立的。 同时,我看到了受害者的所有秘密聊天以及他们中的所有信件。 我尝试在以前创建的中端系统中向Android 7.0的用户写入,并且消息已成功发送。 Android 7.0用户发送了响应,不仅收到了响应消息,还收到了两个小工具:Android 6.0和Android 4.4.2。 我检查了上次登录会话:真实用户显示了他的ip和他的Teclast Android 4.4.2小工具(设置-隐私和安全-活动会话); 处于“活动会话”中的一名Android 6.0攻击者显示了Teclast Android 4.4.2设备ip Virginia。 即,真实用户不会通过“活动会话”接收到有关其帐户已被盗用的信息,而是会从其设备之一和其IP中的一个接收到“在线”错误信息。



通过活动会话的真实用户看不到他受到了攻击。 最近会话的历史记录不记录攻击者的入口点。 此外,在“主机”真实帐户中,我单击了“注销除当前会话外的所有会话”。 同时,无论攻击者处于联机/脱机状态,都不会将其扔出会话。

我对一个被盗用的帐户尝试了相同的操作-结果相似:“主”没有从Telegram扔出去,会话密钥是相同的。 难以置信,是吗?

图形键可以中档安全指示吗? 秘密聊天的密钥并不是安全性的指标,在​​此实验中,它们都是彼此之间跳动的三者。


所有密钥都是相同的,包括被盗用的帐户。

Telegram声称,如果在2台设备上敲打按键,则安全无事-事实并非如此。 (离题。在Android上安装Telegram之后以及创建第一个中档用户时,您仍然需要验证键,中档用户没有键快照,并且键的图形图像在设备上有所不同。中档工作正常,我不理解,并且这是一个孤立的情况,即键之间没有跳动。

我回到了第一种“复制粘贴”方法,最初我没有成功。

我重复了之前的所有步骤,并添加了第三个中间动作。

1)与GP一起安装了最新版本的Telegram。

2)将目录从OS 4.4.2转移到具有OS 6.0的另一个小工具(仅传输敏感数据。我没有复制Telegram及其其他目录)

 /data/data/org.telegram.messenger/shared_prefs /data/data/org.telegram.messenger/files /data/data/org.telegram.messenger/no_backup 

3) 在Android 6.0上删除文件夹 ,检查

 /data/data/org.telegram.messenger/code_cache 

4)我没有亲自恢复权限;相反,我以“递归”方式将777权限(完全访问权)分配给上述所有目录。 我为“ Telegram”的组和所有者(UID / GID)分配了相同的目录(实际上,根目录中的“递归”在TC中不能很好地工作,因此我必须仔细检查权限的分配)。

5)前进! 我在另一个IP不同的网络上启动Telegram-失败,这也是来自新用户的英文问候。

6)前进! 重新启动电报,将死! Telegram发出了警告,要求输入使用Android-e 4.4.2(并以100%的概率恢复)的用户的本地代码,而Telegram没有向云代码或SMS发送请求,并且仍然完全不存在。 两因素身份验证绕过,不行! 绕过端到端加密电报成功。

结果:中型攻击者的消息也已成功代表真实用户发送,中型的所有对应关系也都可用。 在我焦虑的心跳约400次之后,人们的恐惧得到了证实:被盗的帐户被电报阻止了攻击者和真实用户的使用; MF-已取消。


临时阻止电报帐户。

再次登录Telegram之后(有时禁令一天,但我很幸运,由于某种原因当天所有铃声都分发了第二天),真正的用户拥有了所有的一切,并且攻击者无法再嗅探受感染的帐户(会话密钥已更新)。

我能够反驳电报的几句话


telegram.org/faq-“ MF只能位于MF起源的设备上。”
I-“如您所见,中端不仅可以在中端来源的设备上,而且可以在具有Root和中端密钥的设备上使用,而不管Android OS的版本如何。”
telegram.org/faq-“您可以将此图像(请注意:中键图像)与您的朋友所拥有的图像进行比较-如果两个图像相同,则可以确保秘密聊天是安全的”
我-“是的,安全,但仅限于Telegram-Dubai世界”; “您不能确定聊天是否安全。”
telegram.org/faq-“我们还建议您启用两步身份验证并设置强大的访问代码以阻止您的应用程序,您会在设置中找到这两个选项-隐私和安全性。”
I-“只能在Telegram Desktop Linux / Windows应用程序中设置强访问代码,而不能在Android应用程序中设置密码/“ password””
telegram.org/faq-“具有root用户访问权限的用户可以轻松绕过操作系统内置的安全功能,读取进程内存或访问内部存储等受限制的区域。 攻击者一旦拥有根权限,任何缓解措施都将变得无用。 “在任何情况下,无论加密程度如何,都无法将应用程序称为安全的。”
我-“ 营销废话 ,由于2013年缺少合格的技术人员。” “还原Android本地代码并获取/克隆帐户。 每次输入新的不正确的密码都会使Telegram增加两次输入密码之间的等待时间。 显然,Telegram对保护用户免受所有可能的引脚组合的手动蛮力10 ^ 4的攻击感到满意,但是当用户容易折衷时,用户是否感到满意? 如果Telegram开发人员想要缓解这种情况下的威胁,则可以通过错误输入本地代码,然后使用PBKDF2加密将密码上的Telegram上的“虚拟” pin功能替换为Telegram上的密码,从而将其作为临时锁实现几秒钟。将减慢蛮力攻击。 作为良好保护的示例-密码进入加密的密码数据库Keepass2Android。
telegram.org/faq“您可以从原始设备访问秘密聊天消息。 只要您的设备可以放在口袋里,它们就很安全。”
我-“这就是事实的证明!”

结论


  • Android e上的本地代码Telegram(图钉)立即被入侵JTR,可能性为100%,这会导致后果:窃取​​秘密聊天,打开SC消息,以真实用户身份冒充攻击者。 防止此“技巧”的出现是临时禁止电报和新会话密钥的真实用户。
  • 如果您使用“复制粘贴”方法,则窃取中档的操作类似于盗窃Cookie +黑客销+“有权利的麻烦”。
  • 要在Android上恢复电报密码/密码,您需要使用位于以下位置的Messenger应用程序文件

     /data/data/org.telegram.messenger/shared_prefs/userconfing.xml 

    您可以通过TWRP或使用数字取证来获得具有root用户特权的“敏感文件”。
  • 对于攻击者而言,劫持不仅是转储通信的机会,而且还是对帐户的真实所有者造成损害的机会:例如,清除“您的”云。 在这种情况下,真实用户将不可避免地丢失“收藏夹”中的数据。 正式删除Telegram帐户,例如,如果您是社区的管理员,则将失去管理员权限。
  • 通常,用户在Telegram Desktop-e上设置的本地代码与在Android-e上的密码相同-这是一个陷阱,Windows / Linux上的4位数字本地代码Telegram持续不到1分钟,并且访问PC常常比访问小工具更容易。
  • UPD 电报开发人员应使用PBKDF2等,用密码加密(在Telegram Desktop-e或其他移动应用程序(例如Keepass ...)中实现)用“密码”替换Android-e上的“ pin”。
    并在打开新数据库时解开指纹解锁功能(在设备没有指纹的小工具上)(这是我在实验中忽略的Telegram / Android中的第三个漏洞 )。 不管在被盗帐户中安装了什么密码都可以通过本地代码(您甚至都无法破解),可以通过指纹访问受害者的帐户(攻击者小工具上安装的任何指纹都可以对Telegram起作用,但是指纹攻击不起作用) Yandex资金,Keepass2android离线,Sberbank在线)。
  • security@telegram.org, Telegram, - .
  • «» Telegram GP, Passport telegram, , , , .
  • - ( ) Telegram . .


local code Telegram Android/Linux/Windows.


Telegram.


PS: / - , Telegram , - Telegram- .

PPS: root-. root ( ), - root . , GNU/Linux « » (Android — Linux GNU ). Windows «» ? Android- , .
: gpg/pgp , keepass2android offline, rar. «» / root . Telegram Android pin, 100% .

...


local code Android-e «password» «pin». : ...

Source: https://habr.com/ru/post/zh-CN419551/


All Articles