μTorrent对等客户端的数字取证分析

案例 知识 随笔 声音 其他

编者按

针对P2P客户端的取证分析资料比较少。笔者从国外论坛上找到此篇,用蹩脚的英语翻译了一下,不知道合不合大家的胃口。

原作者:Michael Godfrey

注:此P2P,非互联网P2P金融,想一想“快播”……

μTorrent软件客户端是全球最受欢迎的BitTorrent点对点软件应用程序。诸如受版权保护的电影和音乐,儿童色情和盗版内容等违禁品文件经常通过点对点(P2P)文件共享协议BitTorrent获取。该研究将包括μTorrent客户端的数字取证分析,特别是utorrent.com上发布的免费版本(3.5.3 for Windows)。 与其他的P2P客户端有所不同,μTorrent客户端较好的保持了P2P协议原生态。它与BitTorrent(bittorrent.com)都归BitTorrent,Inc所有。

μTorrent适用于Windows,Mac,Linux,Android和iOS(仅适用于越狱设备)。运行μTorrent的计算机可以与外部设备配对进行查看(iOS和Android移动设备,USB存储设备和某些流媒体设备)。

用户可以远程安全地管理在计算机上运行的μTorrent。然后可以从另一台配备网络浏览器的计算机或移动设备访问他们的μTorrent客户端。

BitTorrent使用跟踪器允许客户端找到对等物,称为种子。 BitTorrent协议不是从单个源(节点)下载文件,而是允许用户加入一群主机来上传和下载内容。种子是拥有整个文件的节点。想要分发文件的用户必须首先创建一个只包含元数据且具有.torrent文件扩展名的小型torrent描述符文件。 .torrent文件通过一个或多个Torrent网站(称为Indexer)分发,允许用户搜索特定内容并下载适用的.torrent文件。 .torrent文件包含特定的跟踪器信息。跟踪器是一种服务器,用于跟踪哪些对等体和种子具有要分发的文件片段。为“无跟踪”种子创建分布式哈希表(DHT)方法使得跟踪器变得多余。

将.torrent文件加载到其BitTorrent客户端的用户可以通过BitTorrent的DHT通信功能在其他BitTorrent节点(对等体或种子)之间建立连接。正在分发的文件被分成段(片段),因为每个新对等体接收新片段,该对等体现在成为该片段的分发者。每个部分都受加密哈希(SHA1)保护。 BitTorrent客户端将识别需要哪些部分才能获得完整的文件。一旦对等体下载了完整的文件,它就会成为分发种子。

BitTorrent不保证其参与者的匿名性。可以通过客户端用户界面或netstat Windows命令轻松识别连接对等体的IP,该命令将显示连接的对等体和种子。 BitTorrent的标准端口(包括μTorrent客户端)是TCP / UDP端口6881-6889(跟踪器端口为6969)。

μTorrent客户端

默认安装将μTorrent客户端的所有文件放在用户的应用程序数据目录中,如下所示:C: Users <用户名> 应用程序数据漫游 uTorrent的

以下配置文件包含有关应用程序设置和历史的相关信息:

resume.dat

settings.dat

dht.dat(分布式哈希表)

rss.dat

如果客户端关闭,则备份上述DAT文件并附加.old作为新文件扩展名。以下图形是在Windows 10中进行全新安装后的μTorrent目录。安装后,但在启动之前,应用程序显示在左侧。右边是首次启动μTorrent后的应用程序文件,将TEST.torrent添加到客户端,然后将其关闭。

BEncode编辑器

DAT文件和.torrent文件是用BEncode编写的。因此,要查看内容,必须使用能够解码BEncode文件的工具,例如BEncode Editor。

在BEncode编辑器中查看这些文件时,将显示数据,其中的指示符显示每个标题旁边的数据类型:

字节串:(b)

整数:(i)(基本10个ASCII字符)

列表:(l)

字典:(d)

括号括起来的数字:[48],表示基于数据类型的数量(字节字符串,整数,列表或字典):

字节字符串:字节数或字符数

整数:位数

列表和词典:列表或词典中的项目数

以下是使用BEncode Editor查看的settings.dat文件的内容。

μTorrentDAT文件

settings.dat

文件包含设置和配置数据。

autostart =:0 = OFF,否则将无法进入

ct_hist [#]:此客户端创建的.torrent文件数(括号内),包括用户用来创建.torrent文件的文件/文件夹的路径和名称; 知识和意图的良好指标; 可能指向外部媒体或其他存储驱动器/目录位置

born_on = 13036184115:轻量级目录访问协议(LDAP)时间或FILETIME,自1601年1月1日起100纳秒间隔的数量 - 必须在EpochConverter中添加7个尾随零

设备:此处列出的配对设备包括设备名称,USB VID和PID以及序列号

auto_transfer =:0 = OFF / 1 = ON

usb_id:包含USB设备供应商ID(VID)和产品ID(PID),以及USB设备电子序列号和可能的设备友好名称

下图显示了连接两个设备的μTorrent设备界面:iPhone / iPod和Apple iPhone 3GS。

dir_last条目是当用户添加相关的.torrent文件并选择“选择保存目录”选项时,用户选择下载Torrent文件的目录(见下图)。 对于以这种方式添加的每个新.torrent文件,都会更新dir_last条目。

* dir_active_download:用户设置的位置,用于保存新的下载

* dir_autoload:用户设置的位置自动加载Torrent文件

* dir_completed_torrents:用户设置的位置,用于存储已完成的下载

* dir_completed_torrents:用户设置的位置,用于存档已完成的.torrent文件

* dir_torrent_files:用户设置的位置,用于存储客户端下载的torrent文件

(*)仅当用户使用“首选项”菜单更改了特定目录的默认位置时,才会显示上述设置(请参见下图),否则不会出现任何条目。

runs_since_born:自安装以来程序启动和关闭的次数

runtime_since_born_secs:程序运行的秒数

search_list:μTorrent工具栏中使用的Torrent搜索站点列表,可以由用户添加,导致用户的Web浏览器加载搜索站点,因此请查看Internet History

settings_saved_systime:上次更改客户端设置时,UNIX时间

远程访问

配置为远程访问的系统将允许用户使用Web界面控制在远程系统上运行的uTorrent客户端。 要启动远程访问,用户将导航到https://remote.utorrent.com并输入以前配置的计算机名称和密码。 在进行身份验证后,将向用户显示一个Web界面,该界面与远程系统上的uTorrent客户端状态几乎完全相同。 下图描绘了远程访问Web界面(顶部)和实际的uTorrent客户端(底部)。

以下是settings.dat中更相关的条目,如果客户端设置为通过操作,将出现

使用首选项>远程菜单设置进行远程访问连接。 必须提供唯一的名称

任何密码都将被接受。 下图显示了启用的远程访问设置:

upnp.external_ip:安装客户端的计算机的最后一个外部(可路由)IP将存储在此处; 见下图

upnp_cached_host:本地网络上IGDdevicedesc.xml文件的通用即插即用(upnp)URL; 将包括本地网络网关IP和端口; 用于促进网络连接

upnp.external_ip:安装客户端的计算机的外部(可路由)IP

webui.ssdp_uuid:通用唯一标识符(最后6个字符代表网络接口的MAC地址)

webui.ucinnect_hashword:远程访问登录密码的Salted SHA-1哈希

webui.ucinnect_username:用户在“首选项”>“远程”中分配的计算机的名称

resume.dat

在客户端关闭时存储状态信息

added_on =:Time Torrent已添加到客户端(UNIX时间)

completed_on =:完全下载或创建Time Torrent(UNIX时间)

created_torrent =:1 =客户端创建了torrent,0 =客户端没有创建torrent

download_url =:如果客户端使用“从URL添加torrent”功能

downloaded =:到目前为止下载的文件的字节数

last_seen_complete =:上次客户端正在播种整个文件(UNIX时间)

last_active =:此客户端上次播放或共享文件的时间(UNIX时间)

path [##] =:保存传入文件的路径,括号中此Torrent的文件数

runtime =:时间文件已在客户端下载(或下载后的播种时间)

seedtime =:客户端已播种文件的秒数

started =:客户端上次退出时的文件状态(0 =已停止,1 =强制启动,2 =已启动,3 =正在运行/未下载)

uploaded =:该特定文件的上传(共享)字节数

uploaded =:该特定文件的上传(共享)字节数

peers6 [##] =:在客户端退出时共享此文件的IP和端口(包括客户端的本地和外部IP,IPv4和IPv6),请参阅下面的转换数据以识别IP地址的过程。

使用以下过程查看每个对等方的IP地址:

o resume.dat文件的peers6字段包含客户端与之通信的每个对等方的IP地址,以便通过BitTorrent协议参与内容共享。

o在resume.dat文件的peers6字段中,选择“Raw BEncoded Data”和“as Binary”的显示选项。

o从十六进制转换为十进制以获取IP。

o最后4个十六进制字符代表端口(Big Endian)。

o按照以下步骤翻译数据,以便识别每个对等方的IP地址。

打开peers6条目旁边的数据字段:

将此十六进制数据复制并粘贴到Notepad ++中,然后创建一个每行36个字符的新行。 每行显示IPv6(如果不存在IPv6则全为零),后跟IPv6端口(如果没有IPv6,则为FFFF),后跟IPv4(8个字符)和IPv4端口(4个字符):

字节字符串(36个字符):00000000000000000000FFFFC0A80177B0E3

IPv4 IP和端口:FFFFC0A80177B0E3

IPv4地址(从十六进制转换为十进制):

C0A80177:E3B0

C0 = 192

A8 = 168

01 = 1

77 = 119

端口(Little Endian):E3B0 = 58,288(端口)

转换:192.168.1.119:58288

dht.dat

包含客户端在连接到分布式哈希表(DHT)网络以共享联系信息时使用的数据,因此从事下载相同文件的用户可以相互发现。此文件还存储客户端面向外的IP地址。这是一个有用的工件,因为大多数Windows工件只存储本地不可路由的IP地址。请务必查看dht.dat.old,因为这是该用户上次关闭μTorrent客户端时的文件的先前版本。

age:上次更新的时间,或客户端关闭时(UNIX十进制),将客户端的IP与日期/时间相关联的良好指示。

ip:以十六进制表示客户端的可路由IP地址(由客户端的服务提供商分配),按照以下步骤转换数据以识别面向外部的客户端IP。

双击右侧的文本数据(例如:G>#!):

选择显示选项:“Raw BEncoded Data”和“as Binary”:

将hex转换为十进制:

47= 71

3E= 62

23= 35

21 =33

转换IP:71.62.35.33

在上面的测试示例中,访问网站www.whatismyipaddress.com公开了测试Windows计算机系统的正确翻译的IP地址,而不仅仅是本地IP。

nodes:包含客户端正在与之通信的每个对等方的IP地址(IPv6和IPv4),以便通过BitTorrent协议参与内容共享。 要转换数据,请按照以下步骤操作。

26字节(52个十六进制数字):

要确定客户端正在与之通信的对等端的总数,请将括号中的数字(在下面的示例中为10036)除以26(字符串中的十六进制字节),以确定数据中包含的IP地址总数(386) 下例中的IP) - 显示类型“Binary / as Binary”,如下所示。

id(b)[20] =:包含客户端节点的唯一ID,20个十六进制字符对。 要显示数据,请选择:“Raw BEncoded Data”和“as Binary”:

Torrent文件

要使用BitTorrent协议分发文件,需要创建.torrent文件并播种。 在客户端中,可以使用以下过程创建.torrent文件。

在μTorrent中,选择FILE,创建Torrent

选择单个文件或包含将与torrent文件关联的文件的目录的内容

添加或更改种子跟踪器URL信息

根据需要添加有关torrent内容的任何评论

检查开始播种

选择创建

提供torrent文件的名称,并确保文件类型是Torrent文件:

需要BEncode查看器(BEncode Editor)才能查看.torrent文件的内容。

宣布:跟踪网站的网址

announce-list:一个新密钥,包含此torrent的所有跟踪器的URL列表

o将按顺序处理等级的通知

o在客户端进入下一层之前,必须检查每个层中的所有URL

o与跟踪器的第一次成功连接将导致它移动到层的前面

info:包含torrent中包含的每个文件的条目:

项目1(d)[n]:用数字表示哪个文件,括号中的数字是指

本节所含物品数量(2)

length(i)=:文件的字节数

path(i)[n]:文件名

name(b)[n] =:torrent的名称(不要与.torrent文件本身的名称混淆)

piece length(i)=:每个torrent文件被分割成的字节数,通过添加所有文件大小到达,并将此数字除以2,040

pieces(b)[n]:包括串在一起的所有部分的完整SHA1字符,n = SHA1连接哈希的总字节数

下图说明了torrent文件的info部分的内容。 每个文件合并为一个流,然后拆分成固定的片段长度,以便使用BitTorrent协议进行有效传输。

生成.torrent文件后,需要对其进行播种,以便其他人可以根据使用关键字的搜索来查找文件。 下图显示了TEST.torrent的Info选项卡,显示有一个swarm成员连接了一个对等体(都是测试客户端),内容包含在33个中,每个大小为1 MB。 TEST.torrent由μTorrentv3.5.3于3月2日14:15:01创建。

μTorrent统计

在μTorrent中,选择“帮助” - >“显示统计”

可以导出来自嫌疑人系统的整个μTorrent目录,并将其安装在具有相同操作系统的测试VM中,以便在上次关闭时模拟(查看)嫌疑人的μTorrent状态:

首先在目标系统上安装相同版本的μTorrent(在更新文件夹中查找已安装版本的.exe文件)。 请注意,此“仿真”会增加统计信息以包含您的测试(例如,程序启动时间+1),因此请根据需要使用VM快照并进行还原。

μTorrent搜索工具

在μTorrent中,用户可以搜索内容并显示torrent文件索引器的站点结果。 搜索活动将在网络历史记录中捕获,因为它使用默认浏览器来运行搜索。

μTorrent在Windows注册表中的信息

以下Windows注册表项与μTorrent的安装和使用相关联:

NTUSER.DAT软件微软的Windows CurrentVersion卸载 uTorrent的

NTUSER.DAT SOFTWARE BitTorrent的 uTorrent的

ntuser.dat Software Microsoft Windows CurrentVersion Explorer FileExts .torrent OpenWithList

如果安装了多个客户端(以及何时),将显示哪个BitTorrent客户端类型是首选

值=表示已分配程序顺序的字母

ntuser.dat Software Microsoft Windows CurrentVersion Explorer RecentDocs .torrent

- 显示最近访问的Torrent文件

ntuser.dat Software Microsoft Windows CurrentVersion Explorer ComDlg32 OpenSavePidlMRU torrent

- 显示通过Windows对话框shell打开或保存的Torrent文件

usrclass.dat Local Settings Software Microsoft Windows Shell MuiCache

- 执行应用程序时,Windows将检索应用程序名称并将其存储

- 显示已执行的应用程序

使用Notepad ++

Notepad ++可用于帮助翻译从存储在DAT文件或torrent文件中的编码数据中检索的原始数据。

在每个第n个字符后强制字符串进入新行:

将数据复制并粘贴到Notepad ++

删除字节字符串数据中的任何前导'x0')

选择CTRL + H进入查找和替换菜单

在'查找内容'中输入:^。{n}

在'替换为'中输入:$ 0 r n

将{n}替换为每行前面的字符数(在下面的示例中,使用了{20})

对eer6使用36(resume.dat) - IP /端口

对节点使用52(dht.dat) - 节点ID / IP /端口

使用40作为片段(.torrent文件) - SHA1字符

选择正则表达式

然后可以将结果复制到Excel

关于作者

Michael Godfrey是ManTech International的高级数字取证审查员,之前是分配给费尔法克斯VA的DHS网络犯罪中心的国土安全调查特别代理人。