FreeBuf | uTorrent协议层远程漏洞的分析和利用,安全研究

文章图片
写在前面的话近期 , 世界上最流行的torrent客户端uTorrent被爆出了一个安全漏洞 , 该漏洞的CVE编号为CVE-2020-8437 。 根据研究人员透露的信息 , 远程攻击者可以利用该漏洞来入侵任何一个连接至互联网的uTorrent实例 , 并让其运行崩溃 。 作为合格的白帽黑客 , 我们在发现了该漏洞之后便立刻将其上报给了uTorrent团队 , 该漏洞也在短时间内迅速得到修复 。 现在在这篇文章中 , 我们将公开该漏洞的概况以及相应的利用方式 。
Torrent协议Torrent下载(传说中的BT下载)可以同时与多个对等节点建立连接(其他人下载同一文件) , 并创建一个分散的下载网络来使整个对等节点组共同受益 。 每个对等节点都可以上传和下载数据到任何其他的对等节点 , 这种方式可以消除任何单一故障点或宽带瓶颈 , 从而使所有对等节点的下载速度更快更稳定 。
对等节点之间使用了BitTorrent协议进行通信 , 而这种协议通信方式需要通过握手来发起 。 在接下来的分析过程中 , 我们将主要关注握手包以及随后的数据包 。
BitTorrent握手握手包是对等节点之间初始化通信所要发送的第一个数据包 , 握手包中包含了五个字段 , 每个字段都有严格的结构化格式 。
握手包格式:
【FreeBuf | uTorrent协议层远程漏洞的分析和利用,安全研究】NameLength:1字节无符号整型 , 后跟字符串长度 。
ProtocalName:可变长度的字符串 , 用于标记发起初始化的对等节点支持的协议 。 此字段将用于兼容性问题 , 不过在目前主要的协议实现中该字段都被设置为了“BitTorrentprotocol” 。
ReservedBytes:8字节比特字段 , 每一位代表了一个协议功能扩展 , 现代Torrent客户端将使用这个字段来跟高级功能进行通信以优化下载任务 。
InfoHash:20字节SHA1 , 用于识别初始化对等节点想要下载的种子文件 , 这个哈希是目标种子文件全部信息的哈希 , 其中包括种子名称、文件域哈希、文件大小、数量等等 。
PeerID:20字节缓冲区 , 一个发起方跟自己指定的随机标识 。

文章图片
当一个节点收到一个握手包之后 , 它将会用自己的握手包来回应 。 如果两个节点的ReservedBytes字段都设置为了“ExtensionProtocol” , 那么节点之间将使用一个“扩展”消息握手来交换更多关于扩展组建的信息 。
BitTorrent扩展消息握手扩展消息握手是对等节点之间用于共享额外扩展实现信息时使用的 , 跟我们之前分析的BitTorrent握手包不同的是 , BitTorrent握手包的大小是固定的 , 但扩展消息握手包是可以动态变化的 , 这将允许该数据包传输大量扩展数据 。
扩展消息握手包格式:
Length:4字节无符号整型 , 后跟整个信息的长度 。
BitTorrentMessageType:1个字节 , 即数据包的BitTorrent消息ID , 扩展消息对应的是20(0x14) 。
BitTorrentExtendedMessageType:1个字节 , 代表扩展消息的ID , 对应的值为0 。
M:动态变化的数据包大小 , 支持的补充扩展Bencoded格式字典 。

文章图片
Bencoded字典M字段是一个Bencoded格式的字典 , 这种格式跟Python字典格式类似:即字符串类型的键值对 。 但是 , 跟Python字典相比 , Bencoded字典在值前面会包含每一个字符串的长度 , “d”和“e”分别用来代表“{”和“}” 。 下面给出的是Python字典和Bencoded字典的对比图:

文章图片
除此之外 , Python字典和Bencoded字典都可以在字典内部包含一个单独的字典 , 即支持字典嵌套:
推荐阅读
- 离职|月薪8千离职赔偿100万?“宁王”竞业协议纠纷案被曝
- 微软|旧款路由注意 微软Win11不再支持WEP等Wi-Fi加密协议
- 音乐|国家版权局:非特殊情况 不得签署音乐独家版权协议
- 台积电|“小螃蟹”力保网络芯片供应!瑞昱与台积电达成长期协议
- 奔驰|合资十年终“分家”!比亚迪和戴姆勒均签署股权转让协议
- 苹果|仅有3%的用户愿意阅读!苹果用户协议长度惊人:需要半个小时才能读完
- 壳牌|蔚来、壳牌签署战略合作协议!共建换电站 开放壳牌欧洲充电网
- 建行江苏省分行|建行无锡分行与无锡市农业农村局 签署战略合作协议
- 微软|高通联合微软达成独家协议:Windows 11将不支持苹果M1芯片
- Windows操作系统|Windows为何不支持苹果M1:微软、高通秘密搞事!独家协议将到期
