嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)
0x00 前言
随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在了该选何种工具上. 因此汪汪将会在系列文章中分享一些实战案例和相应的工具使用. 希望能对嵌入式安全研究起到抛砖引玉作用.
在WINKHUB这个案例中我们将使用几款简单的入门工具如万用表; UART 转接头和导线等. 同时将介绍一种通过芯片阻断的方式, 获取系统ROOT权限的攻击方法. 这种方法是俗称边信道攻击中最容易上手的一种. 汪汪希望可以借此小文让大家体验下, 并不是所有的边信道攻击都那么的高不可攀.
0x01 必备神器UART转接头
正所谓工欲善其事必先利其器, 拥有得心应手的辅助工具, 对我们研究嵌入式设备安全将起到事半功倍的作用. 而说起嵌入式设备不管是开发调试还是安全研究, 都会用到UART转接头 这个神器.
UART接口简称通用异步收发传输器, 是一种通用串行数据总线.我们可以通过它来调试目标设备. UART 口在PCB上通常分为: Vcc; GND; TX; RX 这4口. 而UART转接头则在电脑USB 口之间取到转接的作用.
UART转接头在配置上非常简单. 只需在目标PCB板上找到正确的UART 端口, 并设置好如baud rate 这类参数便可以使用诸如Minicom这类程序跟目标进行通讯了. 凡是有配置过CISCO 路由器的朋友对此操作界面一定不会陌生.
但是通常PCB板上会将用于调试的UART 端口隐藏 or 存在多个UART端口. 如何在目标PCB板上找到正确的UART 端口, 也是个可以探讨的话题. 不过因为我们今天的目标WINKHUB已经明确的标识出UART端口位置, 所以暂且不表.
还有个值得注意的地方便是正确的baud rate 参数. 比如常见的9600 or 115200. 如果此参数设置不对, 我们便无法看到正确的调试信息. 这时我们可以使用专门用来确定未知串行行设备波特率程序baudrate来发现正确的参数.而其工作原理是试图把所有的baudrate都过一遍,直到屏幕上显示清晰的调试信息.
0x02 WINKHUB 物联网关
终于到今天的主角上场了, 本次的攻击目标是这款名为WINKHUB 的物联网关. 你是否好奇为何需要此类网关设备呢? 玩过IOT设备的朋友就会发现, 现有的IOT产品仅同时支持1到2种互联方式. 比如Philips的HUE智能灯系列采用Zigbee作为联接技术. 而用户若是想把HUE跟使用Bluetooth的智能门锁互联,还需要在添加额外设备. 这从用户体验的角度上来说是非常不方便的. 而WINKHUB网关的优势就在于其同时支持WIFI; Bluetooth4.0; Zigbee; Z-Wave 和 RF 等主流的IOT 联接方式. 换句话说用户只需要买一个这样的网关, 就不用担心不同IOT产品间的兼容问题.
然而成也萧何,败也萧何. WINKHUB 在功能上的优势, 也给攻击者提供了更多的攻击向量. 作为一款智能网关以往家用路由器上常出现的安全隐患也依然存在. 譬如在早期的固件版本中就存在Command execution 漏洞 (set_dev_value.php). 而在官方修复的新版本中又被发现了SQL Injection漏洞.
图上为包含Command execution 漏洞的PHP 代码段. 通过此漏洞我们可以root 权限执行任何系统命令. 比如读取shadow 文件.
0x03 边信道 (NAND Glitch)
NAND Flash 在嵌入式系统中通常用来存储固件, Bootloader, 内核以及root files. 是整个系统中最重要的. 同时也是攻击者最想搞定的目标之一. NAND Flash 的容量大小, 接口数也跟芯片的不同而不同. 大家可以通过查datasheet 的方式来确认. 在前面提到代码漏洞爆出后. WINKHUB的厂商通过软件升级的方式迅速将其修复. 但对厂商来说, 还有一种攻击方式却没那么容易修复. 这便是用NAND 芯片作为切入点, 通过边信道攻击来得到ROOT权限. 而这也是当年成功拿下XBOX 游戏机的方法之一.
(图为XBOX 游戏机NAND Flash)
有很多朋友一提到边信道攻击,就觉得是个特别高大上. 其实边信道攻击也分好几种方式. 除了大家普遍了解的信息泄露之外, 错误注入攻击(Fault Glitch) 也是很常见的一种攻击方式. 跟信息泄露测量不同的是, 错误注入攻击的目的往往在于改变程序的运行流程, 尤其是在安全认证机制上. 或者通过阻断内核被正常读取的方式, 强制系统进入U-boot shell模式.
错误注入攻击通常使用激光; 热能; 噪音等作为而错误注入的传输源. 不过也可简单到通过一条数据线接GND的方式来完成攻击. 但是必须注意的是错误注入(Fault Glitch) 具有结果难于预测特性. 尤其是在 timing 的掌控上. 汪汪在实际测试过程中因操作不当, 曾毁坏过2台 WINKHUB.
0x04 NAND Glitch 实战
本文中的错误注入攻击便是通过阻断内核被正常读取的方式, 强制WINKHUB系统进入U-boot shell模式来得到root 权限. 通过读datasheet 我们可以发现 WINKHUB 的NAND Flash 的第29号PIN 为数据输入输出口.
我们首先通过万用表查找GND 口. 随后使用普通的数据线在系统启动, 并尝试读取NAND芯片中的内核等信息的瞬间短接以达到数据阻断(NAND Glitch) 的目的.
但大家在完成这看是简单的过程中一定要小心仔细. 原因可以看图中29号PIN的实际大小来感受下.
不过多加练习几次后, 也就运用自如啦. 再系统进入U-boot Shell 后, 我们便可以通过修改内核参数得到ROOT Shell. 整个过程大家可以观看以下视频.
0X05 总结
通过这个案例, 相信大家在嵌入式攻击方式上有了更多的了解. 有时候纯软件的步骤无法达到目的时, 可以考虑下硬件比如边信道的方式. 同时汪汪觉的开发者们在设计一款嵌入式设备的时候, 也可以多从攻击者的角度考虑. “ Think like an attacker ” 绝不仅仅是说说而已. 剑走偏锋, 逆其道行之. 攻击者往往会从你想不到的地方作为攻击点.
0x06 参考文献
http://baike.baidu.com/item/UART https://code.google.com/p/baudrate http://www.wink.com/products/wink-hub https://www.exploitee.rs/index.php/Wink_Hub http://www.devttys0.com/2012/11/reverse-engineering-serial-ports http://www.eurasia.nu/wiki/index.php/Xbox_360_Reset_Glitch_Hack
嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)的更多相关文章
- intel:spectre&Meltdown侧信道攻击(三)—— raw hammer
今天介绍raw hammer攻击的原理:这次有点“标题党”了.事实上,raw hammer是基于DRAM内存的攻击:所以理论上,只要是用了DRAM内存的设备,不论是什么cpu(intel.amd,或则 ...
- intel:spectre&Meltdown侧信道攻击(一)
只要平时对安全领域感兴趣的读者肯定都听过spectre&Meltdown侧信道攻击,今天简单介绍一下这种攻击的原理( https://www.bilibili.com/video/av1814 ...
- 第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御
第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御 原文地址:http://bristolcrypto.blogspot.com/2015/07/52-things-numbe ...
- 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...
- ORW-测信道攻击
做SCTF时碰到一个没看过的题型,比赛结束之后才知道是orw的一个玩法,测信道攻击.主要特点就是只给使用open,read,但是不给write,即无法把flag输出到终端.这里可以通过把flag读到栈 ...
- 侧信道攻击,从喊666到入门之——Unicorn的环境构建
作者:backahasten 发表于小米安全中心微信公众号 0x00 前言 Unicorn可以模拟多种指令集的代码,在很多安全研究领域有很强大的作用,但是由于需要从头自己布置栈空间,代码段等虚拟执行环 ...
- intel:spectre&Meltdown侧信道攻击(四)—— cache mapping
前面简单介绍了row hammer攻击的原理和方法,为了更好理解这种底层硬件类攻击,今天介绍一下cpu的cache mapping: 众所周知,cpu从内存读数据,最开始用的是虚拟地址,需要通过分页机 ...
- intel:spectre&Meltdown侧信道攻击(二)
上面一篇介绍了spectre&meltdown基本原理和简单的demo方案,今天继续学习一下该漏洞发现团队原始的POC:https://spectreattack.com/spectre.pd ...
- intel:spectre&Meltdown侧信道攻击(五)—— DRAM address mapping
前面介绍了row hammer,理论上很完美,实际操作的时候会面临很尴尬的问题:内存存储数据最小的单位是cell(就是个电容,充电是1,放电是0),无数个横着的cell组成row,无数个竖着的cell ...
随机推荐
- 简单的Hibernate入门简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...
- [saiku] 集成单点登录
思路: 自定义一个loginCallbackFilter用于单点登录成功后执行模拟用户认证授权登录的操作. 当授权成功后所有配置需要授权才能访问的url就再也不会被任何filter拦截,可随意访问了. ...
- Sql Server聚集索引创建
create CLUSTERED index IX_ZhuiZIDList_ZID on ZhuiZIDList (ZID)
- nyoj-----127星际之门(一)
星际之门(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门 ...
- BZOJ3238 [Ahoi2013]差异
首先把后缀数组和height数组都搞出来... 然后用两个单调栈维护$[l, r]$表示对于一个点$x$,满足$height[x] \le height[l..x] \ \&\&\ ...
- PDF 补丁丁 0.4.1 版:新增嵌入中文字库、替换文档字库的功能
PDF 补丁丁 0.4.1 版新增了嵌入中文字库.替换文档字库的功能. 嵌入汉字字库 历史上有一批黄底黑字的 PDF 文档.这批文档都具有相同的问题:没有嵌入字库.在一些设备上阅读时显示乱码.复制文本 ...
- spring中配置jdbc数据源
1.加入jdbc驱动器包,mysql-connector-java.jar 2.加入commons-dbcp.jar配置数据源 3.在classpath下新建文件jdbc.properties,配置j ...
- 老男孩linux高级架构 百度云盘下载
关于Linux的资源我了解还是比较少的,因为我最讨厌用命令行了(那是我大学时代的阴影啊!).这个资源收集很久了一直没有分享出来,因为我对Linux的了解真的很少,不知道怎么去描述,但是今天分享出来我想 ...
- UVa 11361 - Investigating Div-Sum Property
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- WebBrowers & HtmlViewers collection
WebBrowers & HtmlViewers collection 浏览: 加入我的收藏 楼主: THtmlViewerhttps://github.com/BerndGabriel/Ht ...