一个网页是如何从你的手机中盗窃数据的WebUSB
本年9月15日,Chrome61宣布,它启用了WebUSB作为其默许功效。而WebUSB是一个Javascript API,能够容许网页拜访已衔接的USB装备。这里的USB装备是指体系和产业的USB装备,以是不支撑罕见的USB装备(好比收集摄像头,HID或大容量贮存装备)。然则经由进程WebUSB API,许多其余的USB装备能够被拜访,且当用户受权给网页时,自己能够基本不懂得网页获取的拜访权限级别。
这篇文章探访WebUSB的功效,以深刻懂得其事情道理,入侵攻击办法及隐衷成绩。咱们会说明拜访装备所需的进程,和浏览器是若何处置权限的,而后咱们会评论辩论一些网安隐患,并演示一个网站若何应用WebUSB来树立ADB衔接来入侵安卓手机。
根基
当USB装备插入主机时,浏览器会读取装备发送的描写符,而后将其贮存在内部USB装备贮存器中。此进程由Chrome的浏览器内核Blink处置。日记能够在chrome://device-log(GET参数“refresh = 1”异常有效)中检查。
依据标准,装备能够在其二进制工具存储中的平台描写符中明白地申明对WebUSB的支撑。
Offset
Field
Size
Value
Description
0
bLength
1
Number
Size of this descriptor. Must be set to 24.
1
bDescriptorType
1
Constant
DEVICE CAPABILITY descriptor type.
2
bDevCapabilityType
1
Constant
PLATFORM capability type.
3
bReserved
1
Number
This field is reserved and shall be set to zero.
4
PlatformCapabilityUUID
16
UUID
Must be set to {3408b638-09a9-47a0-8bfd-a0768815b665}.
20
bcdVersion
2
BCD
Protocol version supported. Must be set to 0×0100.
22
bVendorCode
1
Number
bRequest value used for issuing WebUSB requests.
23
iLandingPage
1
Number
URL descriptor index of the device’s landing page.
浏览器将每一个USB装备存储在自己的装备存储器中。WebUSB的可拜访性由本机驱动法式支撑所决议。在Windows上,咱们能够经由进程浏览器拜访由WinUSB驱动法式处置的每一个USB装备。其余的诸如大容量存储装备,收集摄像头或HID等就无奈经由进程收集拜访了,因为它们具备处置这些装备的公用驱动法式。
依据标准(和本博客文章),一旦装备注册,浏览器就会表现一条关照。看起来像如许:
然则,这类行动不易重现。咱们在以下体系上测验考试过:
Windows 7, Chrome 61
Windows 10, Chrome 61
Debian, Chromium 60 (启用了chrome://flags/#enable-experimental-web-platform-features)
Debian, Google Chrome 61
Arch Linux, Chromium 61
Arch Linux, Google Chrome 61
Platform Descriptor中有一个风趣的元素叫做“iLandingPage”。纵然标准将协定“http://”和“https://”作为前缀,咱们也能够抉择一个空协定,在这类情况下,咱们应当能够在供给的URL自己中指定协定。
然则,Chrome已移除或基本没有实现注入随意率性URL前缀的功效。以下是源文件中名为“webusb_descriptors.cc”的代码片断。它剖析接收到的描写头,包含“iLandingPage”。将URL前缀限定为“http://”和“https://”。
// Look up the URL prefix and append the rest of the data in the descriptor.
std::string url;
switch (bytes[2]) {
case 0:
url.append("http://");
break;
case 1:
url.append("https://");
break;
default:
return false;
}
url.append(reinterpret_castconst char*>(bytes.data() + 3), length - 3);
哀求拜访装备
网页能够关上提醒哀求拜访装备,它必需指定过滤器来过滤可用的装备。假如过滤器为空,那末即容许用户从一切可用装备中抉择装备。关上的提醒以下所示:
用户能够看到一切(过滤的)可用装备。装备称号引用于本身所发送的产物称号。假如没有指定产物称号,Chrome会测验考试经由进程无关装备的已知信息来预测一个表白性的称号。而后,它会将装备命名为“来自”的未知装备。用户抉择装备并点击“衔接”后,便可付与拜访装备的权限。
权限处置
权限由Chrome的permission API处置。一旦向网页付与权限拜访装备,权限会不停连续,直到用户手动撤消。处置权限的API依据其本源辨别“网页”,即当具备婚配的协定,主机和端口时,浏览器就会觉得这个网页与另外一网页雷同。浏览器辨认独一装备的行动不是很显著,用于辨认的候选目的由装备在其描写头中发送。候选目的以下:
GUID
Vendor ID
Product ID
固然GUID是独一的ID,但它不克不及用于辨认装备。以下是屡次插入和插入测试装备的日记的截图,可见每次装备都有不同样的GUID,纵然如斯,每次插入后装备都被允许且能够拜访,不必要进一步的允许哀求。
这注解Chrome应用Vendor ID和Product ID的组合来标识装备。
拜访装备
一旦网页被付与拜访装备的权限,那末就能够拜访它了。起首其必需关上装备,关上装备的进程中就开端了与装备的会话,而后装备会被锁定,如许统一浏览器会话中的其余选项卡就无奈拜访了。然则另外一个浏览器的另外一个网页仍旧能够关上雷同装备。
本年9月15日,Chrome61宣布,它启用了WebUSB作为其默许功效。而WebUSB是一个Javascript API,能够容许网页拜访已衔接的USB装备。这里的USB装备是指体系和产业的USB装备,以是不支撑罕见的USB装备(好比收集摄像头,HID或大容量贮存装备)。然则经由进程WebUSB API,许多其余的USB装备能够被拜访,且当用户受权给网页时,自己能够基本不懂得网页获取的拜访权限级别。
这篇文章探访WebUSB的功效,以深刻懂得其事情道理,入侵攻击办法及隐衷成绩。咱们会说明拜访装备所需的进程,和浏览器是若何处置权限的,而后咱们会评论辩论一些网安隐患,并演示一个网站若何应用WebUSB来树立ADB衔接来入侵安卓手机。
根基
当USB装备插入主机时,浏览器会读取装备发送的描写符,而后将其贮存在内部USB装备贮存器中。此进程由Chrome的浏览器内核Blink处置。日记能够在chrome://device-log(GET参数“refresh = 1”异常有效)中检查。
依据标准,装备能够在其二进制工具存储中的平台描写符中明白地申明对WebUSB的支撑。
Offset
Field
Size
Value
Description
0
bLength
1
Number
内容来自无奈安全网
Size of this descriptor. Must be set to 24.
1
bDescriptorType
1
Constant
DEVICE CAPABILITY descriptor type.
2
bDevCapabilityType
1
Constant
PLATFORM capability type.
3
bReserved
1
Number
This field is reserved and shall be set to zero.
4
PlatformCapabilityUUID
16
UUID
Must be set to {3408b638-09a9-47a0-8bfd-a0768815b665}.
20
bcdVersion
2
BCD
Protocol version supported. Must be set to 0×0100.
22
bVendorCode
1
Number
bRequest value used for issuing WebUSB requests.
23
iLandingPage
1
Number
URL descriptor index of the device’s landing page.
浏览器将每一个USB装备存储在自己的装备存储器中。WebUSB的可拜访性由本机驱动法式支撑所决议。在Windows上,咱们能够经由进程浏览器拜访由WinUSB驱动法式处置的每一个USB装备。其余的诸如大容量存储装备,收集摄像头或HID等就无奈经由进程收集拜访了,因为它们具备处置这些装备的公用驱动法式。
依据标准(和本博客文章),一旦装备注册,浏览器就会表现一条关照。看起来像如许: copyright 无奈人生
然则,这类行动不易重现。咱们在以下体系上测验考试过:
Windows 7, Chrome 61
Windows 10, Chrome 61
Debian, Chromium 60 (启用了chrome://flags/#enable-experimental-web-platform-features)
Debian, Google Chrome 61
Arch Linux, Chromium 61
Arch Linux, Google Chrome 61
Platform Descriptor中有一个风趣的元素叫做“iLandingPage”。纵然标准将协定“http://”和“https://”作为前缀,咱们也能够抉择一个空协定,在这类情况下,咱们应当能够在供给的URL自己中指定协定。
然则,Chrome已移除或基本没有实现注入随意率性URL前缀的功效。以下是源文件中名为“webusb_descriptors.cc”的代码片断。它剖析接收到的描写头,包含“iLandingPage”。将URL前缀限定为“http://”和“https://”。
// Look up the URL prefix and append the rest of the data in the descriptor.
内容来自无奈安全网
std::string url;
switch (bytes[2]) {
case 0:
url.append("http://");
break;
case 1:
url.append("https://");
break;
default:
return false;
}
url.append(reinterpret_castconst char*>(bytes.data() + 3), length - 3);
哀求拜访装备
网页能够关上提醒哀求拜访装备,它必需指定过滤器来过滤可用的装备。假如过滤器为空,那末即容许用户从一切可用装备中抉择装备。关上的提醒以下所示:
用户能够看到一切(过滤的)可用装备。装备称号引用于本身所发送的产物称号。假如没有指定产物称号,Chrome会测验考试经由进程无关装备的已知信息来预测一个表白性的称号。而后,它会将装备命名为“来自”的未知装备。用户抉择装备并点击“衔接”后,便可付与拜访装备的权限。
权限处置
权限由Chrome的permission API处置。一旦向网页付与权限拜访装备,权限会不停连续,直到用户手动撤消。处置权限的API依据其本源辨别“网页”,即当具备婚配的协定,主机和端口时,浏览器就会觉得这个网页与另外一网页雷同。浏览器辨认独一装备的行动不是很显著,用于辨认的候选目的由装备在其描写头中发送。候选目的以下:
GUID
Vendor ID
Product ID
固然GUID是独一的ID,但它不克不及用于辨认装备。以下是屡次插入和插入测试装备的日记的截图,可见每次装备都有不同样的GUID,纵然如斯,每次插入后装备都被允许且能够拜访,不必要进一步的允许哀求。
这注解Chrome应用Vendor ID和Product ID的组合来标识装备。
拜访装备
一旦网页被付与拜访装备的权限,那末就能够拜访它了。起首其必需关上装备,关上装备的进程中就开端了与装备的会话,而后装备会被锁定,如许统一浏览器会话中的其余选项卡就无奈拜访了。然则另外一个浏览器的另外一个网页仍旧能够关上雷同装备。 copyright 无奈人生
无奈人生安全网
本文来自无奈人生安全网