这个是我之前做的项目,2017年左右BTC大火,所有自己也去创业,有幸参加某款数字钱包(BTC LTC DCR ETH),cobo valut 钱包从构思到产品上市的整个流程。现在想把整个当时构思发出来。因为世面上大部分钱包都是这个思路保护。
目前已不在这家公司上班,只是简短分享经验,任何人不得使用本思想用于非法破解或者盗取活动。
关于Android app 和加密芯片的通信协议我们这边使用的TLV协议,通过串口通信,使用的加密方式通信。大家如有需要可以找我索取。
首先介绍这款产品的的整体架构,这是一款基于mtk6739 Android 8.1 的 数字钱包,由Android 主板和 加密芯片组成。
整体结构如下所示,这里注释下。这里我们使用加密芯片是mcu和加密二合一的,所有单片机框图这个可以去掉了。
整个硬件钱包由三部分组成:
Android主板、 加密芯片组成。其中 Android 主板 主要由交易应用、摄像
头和显示屏组成。
模块功能介绍:
1、 Android 主板 主要用于人机交互和联网端信息交互,用户对硬件钱包操作都有
其完成。
2、 加密芯片主要对BTC、LTC、ETH 各种数字货币,存贮钱包私钥 ,签名 认证 交易信息
一款好的数字产品当然要有好的防护,指纹识别、人脸识别和密码登录当然是必须的。
仅仅是第一道防护还是不够的,如果被攻破我们还需要做更多的防护。
1、 联网端 APP 被破解
2、 联网端 APP 所在硬件设备被 root
3、 联网端 APP 所在硬件设备被恶意修改系统源码
第一种源码被别人破解,别人注入木马后替换,可导致交易地址和金额被修改
第二种
所有交易信息泄露,存在交易地址和金额被修改可能
第三种模式最危险,以小米手机
note4X 为例,采用联发科 X20 方案,这个手机方
案同时也被用于魅族手机、 OPPO 、 vivo 、联想、中兴等手机。小米手机支持大家刷
机,这样我就很容易获得 4X 源码,修改 4X 的源码使显示的地址和金额可以被任意
修改或者显示地址和金额正确但是真实交易金额和地址却被修改过。
1、 联网端 APP 和 硬件钱包 端 APP 必须混淆编译并使用加密软件加固(爱加密)
2、 所有交易信息都必须加密后传输,禁止使用明文传输
3、 硬件钱包端要是显示当前交易地址和金额是否一致,并提示用户确认
4、 所有 交易信息要和远程后台确认
攻击模式:
联网端应用被攻击发送错误交易地址
防护模式:硬件钱包显示扫描联网端交易二维码信息,硬件钱包显示交易地址并提
防护模式:硬件钱包显示扫描联网端交易二维码信息,
硬件钱包显示交易地址并提醒用户确认是否与输入一致,
防止联网端被入侵修改正确交易地址醒用户确认是否与输入一致
,防止联网端被入侵修改正确交易地址
攻击模式:
硬件钱包被攻击,交易地址和金额被改变
防护模式:
联网端扫描硬件钱包获取被签名后的交易信息, 联网端 解析并 显示交易
金额 和地址 是否与 输入一致 ,防止硬件钱包被入侵修改交易地址和金额
硬件授
权防护:
这种模式主要由硬件
硬件钱包 钱包扫描联网端要交易地址的二维码发起。
这种模式主要由硬件钱包 钱包扫描联网端要交易地址的二维码发起。
攻击模式: 联网端地址欺骗,联网显示地址和二维码发送地址不一致
防护模式: 硬件钱包 钱包显示当前交易地址,并提醒用户对比
攻击模式: 硬件钱包 被入侵,输入金额被恶意篡改
防护模式:显示当前要交易的金额,提醒用户对比输入与显示是否一致
攻击模式:攻击模式:硬件钱包硬件钱包被入侵被入侵,交易地址和金额被篡改,交易地址和金额被篡改
防护模式:联网端对比接收硬件钱包硬件钱包端签名的地址是否一致,并提醒端签名的地址是否一致,并提醒用户用户显示显示地址和金额是否一致地址和金额是否一致
首先放一张Android启动流程图
1、 开机上电后, Android 主板先进入 uboot 模式,此时会检查用户是否按下电源 键
和音量 上 键,如果检查到就会进入 fastboot 模式。
2、 检查 1 完成后接着 检查用户是否按下电源键和音量下键,若检测到就会进入recovery 模式。
3、 若按键都没有检测到,正常启动 Linux 会初始化 Android 环境,最后 启动我们的
硬件钱包 应用。
1、 USB升级系统:使用 Android 方案商提供的刷机 PC 端软件,可以升级整个硬件
钱包系统
2、 Fastboot 升级系统:使用 fastboot 可以升级硬件钱包的 system 、 kernel 等分区
3、 Recovery 升级系统:使用 recovery 模式可以升级整个系统
4、 Adb 升级应用:通过 adb 可以安装任何应用
USB攻击:
攻击模式:
Android 线刷机通常是 PC 通过 USB 数据线连接 Android 主板 ,可以替换 Android的 system 、 uboot 、 kernel 分区
防护模式:禁止USB 的数据线功能,禁止 USB 在主板有连接点。
还有一种是adb 调试模式攻击
ADB攻击:
攻击模式:
通过 USB 的连接 ADB ,然后 安装 非法 app
防护模式:
禁止 Android 开启 ADB 调试功能
攻击模式:通过fastboot 替换系统 system 和 recovery 分区,可以获取 root 权限和注入
病毒 应用 。
防护模式:禁止fastboot模式同时结合USB禁用
Recovery攻击:攻击模式:
通过recovery 可以升级整体系统,替换硬件钱包运行环境 ,可以 root 和注入病毒应用
防护模式:替换系统签名,禁止普通app调用 系统进入 recovery 模式接口
这个防护是假设 硬件钱包 已经被安装了非法应用或者系统已经被 root 情况下。硬件钱包系统如何防护攻击。系统自检服务会启动完成或者定时校验硬件钱包的工作环境
T1阶段:
攻击模式:硬件钱包已经被 root
防护模式 T1 检测当前系统是否被 root ,若 root ,禁止交易同时提示用户。
T2阶段:
攻击模式:硬件钱包安装了非法应用
防护模式:
T2获取当前系统应用包名列表,与系统预置应用做对比是否有非法应
用安装。
T3阶段:
攻击模式:硬件钱包交易应用被替换
防护模式:
校验我们 硬件钱包 应用的签名和包名是否被改变
只仅仅保护 Android 主板安全还是不够的,还需要保护加密芯片的安全和交易时候交易环境的安全。
1、 外部人员获取了整个硬件钱包的交易相关源码 并且获取了应用签名 ,并且用伪造的
应用替换了硬件钱包的交易应用。
应用替换了硬件钱包的交易应用。他们伪造交易可以将此钱包的比特币转移。他们伪造交易可以将此钱包的比特币转移。这种这种攻击模式攻击模式是很极端的情况,几乎不存在。是很极端的情况,几乎不存在。
2、 外部人员获取了单片机相关源码,他们可以修改交易地址和金额篡改交易。外部人员获取了加密芯片相关源码,他们可以修改交易地址和金额篡改交易。
校验码模式采用基于时间的动态码算法, 并且应用和加密芯片是一一对应。
T1 阶段:加密芯片启动后首先进入校验模式,等待 硬件钱包 系统发送过来的校验码,加密芯片检验成功才能进入正常工作模式。失败说明应用已经被篡改,单片机禁止交易。同时返
回校验结果给钱包应用
T2阶段:当钱包应用接收到单片机返回结果 ,成功表明钱包应用没有被篡改且单片机也没有被入侵可以正常工作失败表明单片机或者钱包已经被入侵,通知钱包禁止交易