|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对应sql里的tableNSPredicate谓语类似select语句中的条件上面这三个类就可以用来请求数据了在上周的CanSecWest平安集会上我叙述了一种对Android4.3及其以上版本合用的蓝牙协定栈(Bluedroid)的远程打击。这篇文章复杂的形貌了这个bug。
假如读者没有耐烦的话,能够点这里间接寓目打击视频。
这个毛病存在于Bluedroid的BLE数据包剖析代码中。要测试这个毛病,打击者必要强迫一位用户毗连到歹意的BLE(蓝牙智能)设备上。毗连时,该歹意设备会公布一个格局毛病的GATT关照数据包,从而形成协定栈的溃散。
这听上往仿佛有点牵强——打击者能强迫一位用户毗连到设备上。但思索到如许一个现实:良多Android的BLE使用会合时毗连就任何告白设备下去断定其是不是是与该使用程序相干联的设备。只需有使用是出于打击的目标毗连就能够乐成。
但这个毛病没有可使用性:溃散是由一个FORTIFY_SOUCE检测毛病所酿成的。别的,该毛病已在Android4.4以上的版本中被修复。
成绩代码
成绩代码能够在stack/gatt/gatt_cl.c中的gett_process_notification(614行)处被找到。这段代码用于剖析关照包(BLE设备周期性的发送给BLE机主的动静)。在626行能够看到以下代码:
1
2
3
STREAM_TO_UINT16(value.handle,p);
value.len=len-2;
memcpy(value.value,p,value.len);
value.len是unit16_t。p和len都可由打击者把持,但我们只对len感乐趣。p暗示打击者发送的数据包内容,len则是该数据包的巨细。
这段代码输入一个最少2字节巨细的数据包。假如打击者发送了只要一个字节的格局毛病的数据包,那末value.len=len-2的盘算了局将会下溢到65534。那末memcpy将会试图从p中拷贝快要64000字节的数据。
演示
我为此做了一个演示视频。
我用经修正过的BlueZ(linux蓝牙协定栈)的版本搭建了一个打击平台,BlueZ在这里作为一个运转GATT服务的BLE设备。当一个BLE机主毗连时,它会主动发送一个只要单字节巨细的关照数据包。
在视频中,我利用一个BLE心跳监控使用演示了这个毛病。出于演示的目标,我手动毗连该使用至歹意的BlueZ设备。当音乐停止时协定溃散了。
adblogcat的输入相似于以下显现:
1
2
F/libc(19174):FORTIFY_SOURCE:memcpybufferoverflow.Callingabort().
F/libc(19174):Fatalsignal11(SIGSEGV)at0xdeadbaad(code=1),thread19956(BTU)
init指的是所有前面是init的方法比如UIView的初始化方法是-(id)initWithFrame:(CGRect)aRect在Objc里有很多这样关于函数命名的约定 |
|